“Uma instalação padrão do Kurumin no HD dá poder de administrador para um usuário comum (o usuário padrão Knoppix) *é* sim uma questão de insegurança, não meramente “pode ser mudado depois”.”
O ponto da segurança local não é bem assim. Nenhum sistema operacional atual oferece um sistema de segurança local eficiente, isso simplesmente não existe.
Vou dar três exemplos:
Para virar root em qualquer distribuição Linux: Dê boot com o CD do Kurumin (ou outro live-CD), vire root, monte a partição onde o outro sistema está instalado (ex: mount /dev/hda1 /mnt/hda1)
Use o chroot para “entrar” dentro da partição da outra distribuição: chroot /mnt/hda1 (ou o que seja). A partir daí você terá um terminal root da outra distribuição. Digite “passwd” e defina uma nova senha de root.
Pronto, agora você tem a senha de root do Slackware ou Red Hat ultra seguro do micro do seu vizinho. Se a maquina não tiver CD-ROM, não faz mal, o disquete do tonsrbd também serve.
No Windows NT/2000/XP, basta apagar o arquivo de senhas (não lembro de cor o arquivo, mas basta procurar no google), isso vai deixar todas as senhas em branco, incluindo a do administrador.
Se a máquina não tiver CD nem disquete, não tem problema, use uma Memory-Key ou CD-ROM USB para dar boot. Se tiver senha no setup, não tem problema de novo, dê um curto nos dois polos da bateria e ela some.
Ou seja, a partir do momento que você tem acesso físico à maquina, bastam alguns truques simples. Segurança local é igual chifre, é uma coisa que colocam na sua cabeça.
A única forma eficiente é usar algum sistema de arquivos com encriptação. Ainda não é 100% seguro, mas pelo menos vai dar mais trabalho. Infelizmente eles também possuem desvantagens, como perda de desempenho e uma certa dificuldade para fazer a configuração inicial.
O uso do sudo no Kurumin sacrifica uma falsa segurança em troca de uma maior facilidade de uso. Isso também diminui o numero de usuários rodando o sistema como root, o que abre problemas de segurança mais sérios. Se você tentar se logar como root na tela de login do Kurumin, vai receber uma mensagem “logins de root não são permitidos”, até que altere manualmente a opção no arquivo /etc/kde3/kdm/kdmrc
A minha idéia é que o usuário leigo passa instalar programas e usar os privilégios de root quando necessário, mas sem abrir programas como root todo o tempo. Sem isso, o que costuma acontecer é o usuário simplesmente ficar usando o root o tempo todo, isso é muito comum entre novos usuários do Slackware, Conectiva, etc. Acho que dos dois maus, o uso do sudo é o menor.
No Slackware por exemplo você pode simplesmente pressionar Enter três vezes durante a instalação para deixar a senha de root em branco (!), depois usar esta conta de root (ele não lhe dá a opção de adicionar um usuário não privilegiado durante a instalação e um usuário iniciante não vai saber como fazer isso depois), permitindo que qualquer engraçadinho se conecte na sua máquina como root via Internet através do servidor SSH que fica habilitado por default ao habilitar a categoria “N” durante a instalação.
Também não existe no Slackware nenhum script de configuração de firewall fácil de usar, tudo precisa ser feito manualmente, novamente uma coisa que um iniciante não sabe fazer. No final além de continuar logado como root, ele deixa o firewall desabilitado.
Apesar disso o Slackware é considerado uma das distribuições mais seguras, simplesmente por que presume-se que o usuário saiba o que está fazendo. Este é justamente o problema, o Kurumin é desenvolvido tendo em mente justamente os usuários iniciantes, que muitas vezes não sabem o que estão fazendo, que são freqüentemente ignorados por outras distribuições. A idéia é oferecer configurações default relativamente seguras, mas sem comprometer a facilidade de uso. Em alguns pontos é preciso impor algumas coisas, como obrigar o usuário a definir senhas durante a instalação, não deixar nenhum servidor habilitado por default e não permitir que o root seja usado para fazer login no KDE.
Depois que o usuário adquirir mais conhecimento, ele tem a chance de decidir se quer continuar usando o sudo ou não. O sudo pode ser desativado caso desejado, o que pode ser feito facilmente editando o arquivo /etc/sudoers ou clicando na opção do menu. Você pode criar outros usuários, etc. como em qualquer outra distribuição.
Quando falo sobre “segurança local” falo sobre a segurança contra danos causados por alguém que possua acesso físico ao micro, ou seja, tenha liberdade para usar o seu micro quando você não estiver. Não existe como impedir que alguém que está sentado na frente do seu micro faça alguma coisa errada, é perda de tempo, afinal se ele quiser mesmo causar algum dano, nada mais prático do que simplesmente enfiar o pé na CPU. Vai dar um prejuízo muito maior que qualquer comando de terminal e não requer nenhum tipo de conhecimento prévio.
Servidores geralmente não possuem teclado nem monitor e ficam trancados em salas isoladas. Eles são acessíveis apenas via rede, um perímetro mais fácil de proteger. O administrador acessa o servidor via SSH e faz tudo que precisa remotamente, através de um canal encriptado. O servidor só é manipulado físicamente quando é preciso fazer uma reinstalação do sistema ou em caso de falha de hardware.
Para proteger o micro contra acesso remoto, temos o script de firewall que pode ser ativado através do Iniciar > Configuração do Sistema > Compartilhar conexão e firewall > Ativar Kurumin Firewall.
O script pergunta se você deseja permitir acessos vindos da rede local e de alguma porta específica e bloqueia o restante. Isto tem duas finalidades:
- Evitar que alguém acesse o seu micro através de um servidor qualquer que você instale e esqueça ativo.
- Impedir que acessem o seu micro através de algum tipo de brecha desconhecida encontrada em algum programa que você tenha instalado na sua máquina, uma espécie de segurança preemptiva.
Escrevi um artigo sobre as opções do Script outro dia, que pode ser lida aqui: https://www.hardware.com.br/artigos/firewall-kurumin/
Este é um exemplo de script de firewall que o script de configuração gera. Neste caso foi aberta apenas a porta 6881 usada pelo bittorrent, todas as demais portas estão fechadas, tanto para a internet quanto para a rede local. Existem ainda algumas regras para evitar ataques comuns:
# Abre uma porta (inclusive para a Internet) iptables -A INPUT -p tcp –destination-port 6881 -j ACCEPT
# Ignora pings echo “1” > /proc/sys/net/ipv4/icmp_echo_ignore_all
# Proteção contra ICMP Broadcasting
echo “1” > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts# Protege contra synflood
echo “1” > /proc/sys/net/ipv4/tcp_syncookies# Desabilita o suporte a source routed packets
# Esta recurso funciona como um NAT ao contrário, que em certas circunstancias pode
# permitir que alguém de fora envie pacotes para micros dentro da rede local.
echo “0” > /proc/sys/net/ipv4/conf/eth0/accept_source_route
echo “0” > /proc/sys/net/ipv4/conf/eth1/accept_source_route
echo “0” > /proc/sys/net/ipv4/conf/ppp0/accept_source_route# Proteções diversas contra portscanners, ping of death, ataques DoS, etc.
iptables -A FORWARD -p icmp –icmp-type echo-request -m limit –limit 1/s -j ACCEPT
iptables -A FORWARD -p tcp -m limit –limit 1/s -j ACCEPT
iptables -A FORWARD -m state –state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp –tcp-flags SYN,ACK,FIN,RST RST -m limit –limit 1/s -j ACCEPT
iptables -A FORWARD –protocol tcp –tcp-flags ALL SYN,ACK -j DROP
iptables -A FORWARD -m unclean -j DROP
# Algumas boas ideias retiradas do Arno’s iptables firewall
iptables -N VALID_CHECK
iptables -A VALID_CHECK -p tcp –tcp-flags ALL FIN,URG,PSH -j DROP
iptables -A VALID_CHECK -p tcp –tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
iptables -A VALID_CHECK -p tcp –tcp-flags ALL ALL -j DROP
iptables -A VALID_CHECK -p tcp –tcp-flags ALL FIN -j DROP
iptables -A VALID_CHECK -p tcp –tcp-flags SYN,RST SYN,RST -j DROP
iptables -A VALID_CHECK -p tcp –tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -A VALID_CHECK -p tcp –tcp-flags ALL NONE -j DROP# Abre para a interface de loopback.
# Esta regra é essencial para o KDE e outros programas gráficos funcionarem adequadamente.
iptables -A INPUT -i lo -j ACCEPT# Esta regra é o coração do firewall do Kurumin,
# ela bloqueia qualquer conexão que não tenha sido permitida acima, justamente por isso ela é a última da cadeia.
iptables -A INPUT -p tcp –syn -j DROP
A última regra (iptables -A INPUT -p tcp –syn -j DROP) impede que o seu micro aceite novas conexões. Entretanto esta regra não impede que sejam recebidas respostas a conexões iniciadas por você. Isto permite que você navegue normalmente, use o ICQ, etc. apesar do firewall estar ativo.
Se você usar o nmap (apt-get install nmap) a partir de outro micro da rede local para procurar vulnerabilidades, vai ter o seguinte como resultado:
root@kurumin:/home/knoppix# nmap -sS -v 192.168.0.33
Starting nmap 3.50 ( http://www.insecure.org/nmap/ ) at 2004-04-03 10:12 BRT
Host 192.168.0.33 appears to be down, skipping it.
Note: Host seems down. If it is really up, but blocking our ping probes, try -P0
Nmap run completed — 1 IP address (0 hosts up) scanned in 12.053 seconds
Ou seja, o Nmap não consegue sequer perceber que o PC com o Kurumin está realmente lá e avisa: “Se você realmente tem certeza que ele está online, experimente usar a opção -P0”, o que não vai mudar muita coisa:
root@kurumin:/home/knoppix# nmap -P0 -v 192.168.0.33
Starting nmap 3.50 ( http://www.insecure.org/nmap/ ) at 2004-04-03 10:14 BRT
Host 192.168.0.33 appears to be up … good.
Initiating SYN Stealth Scan against 192.168.0.33 at 10:14
^[[3~The SYN Stealth Scan took 1361 seconds to scan 1659 ports.
All 1659 scanned ports on 192.168.0.33 are: filteredNmap run completed — 1 IP address (1 host up) scanned in 1360.579 seconds
Como todas as portas estão em modo drop, onde o firewall simplesmente descarta os pacotes sem configurar o recebimento, o teste demora muito tempo, quase 27 minutos para escanear apenas as primeiras 1659 portas. Uma varredura completa, em todas as 65 mil portas levaria 17 horas e meia, isso executando o teste via rede local, via Internet a varredura levaria vários dias. Mesmo assim, a única por que apareceria aberta seria a porta 6881 do bittorrent que abri ao habilitar o firewall, que por si só não representa um risco significativo.
Por não ser intrusivo, simplesmente fazer o que foi pedido sem encher o saco, a resistência contra o uso do firewall é menor. Você pode ativá-lo no micro da sua irmã e provavelmente ela nem vai notar diferença. Se for preciso aceitar conexões em portas específicas, para receber arquivos através do ICQ, jogar online ou receber chamadas do net meeting por exemplo, você pode pesquisar as portas usadas por cada um e abri-las na configuração do firewall.
O firewall protege contra ataques “de fora pra dentro”, mas não protege contra vírus e trojans. No Windows esta tarefa ficaria por conta do antivírus, mas como ainda não temos estas pragas no Linux apenas o firewall já é suficiente. Caso eventualmente os vírus e trojans tornem-se um problema no Linux, com certeza surgirão várias opções de antivírus, não existe muito motivo para se preocupar com isso.
Quando precisar qualquer arquivo suspeito, faça-o usando outro login. Crie um usuário “bush”, “sadan”, “baboo”, ou qualquer outra figura pública que você não goste e use-o como cobaia para executar os programas. Abra um terminal e digite “su bush” e execute o programa a partir daí.
Em caso de problemas apenas este usuário laranja será afetado. Basta deletá-lo e criar outro.
Um terceiro ponto, também polêmico, é o uso do Kurumin como servidor. Bem, como defendido acima, o Kurumin oferece por default uma segurança satisfatória, superior às configurações default de muitas das grandes distribuições. É fácil instalar servidores no Kurumin por causa dos ícones mágicos. É possível instalar um servidor Apache com suporte a PhP, MySQL e o fórum PhPBB funcionando, um proxy transparente com o Squid ou um servidor Samba já configurado para ser mestre de domínio com poucos cliques.
Os ícones mágicos instalam os pacotes a partir dos repositórios do Debian Stable e oferecem opções de atualizar os pacotes, baixando atualizações de segurança. Neste caso não existem muitas diferenças entre usar o Debian ou usar o Kurumin, com excessão da instalação que torna-se bem mais simples.
Um usuário avançado pode usar qualquer distribuição, fazer funcionar os recursos necessários e deixá-la segura. O problema é que os usuários avançados são minoria. Como em outras áreas temos uma pirâmide, com uma pequena elite e um grande bloco de usuários que sabem pouco. Distribuições sem foco na facilidade de uso podem juntar comunidades relativamente grandes entre os usuários avançados, mas não possuem potencial para atingir as massas, estão condenadas a serem eternamente sistemas usados dentro de nichos. Por mais que alguém possa ficar horas falando sobre as maravilhas da linha de comando ou sobre a satisfação pessoal de compilar todos os programas a partir dos fontes, poucos vão dar ouvidos.
Para qualquer sistema operacional ser usado em massa é necessário em primeiro lugar que ele seja fácil de usar. O Windows conseguiu tornar-se o sistema mais usado mesmo sem ser estável nem seguro. A idéia no Kurumin é que além de ser fácil de usar ele seja também seguro, até o ponto em que isso não comprometa a usabilidade do sistema.
Deixe seu comentário