Como saber se seu Linux foi invadido

Dicas e Truques que os script kiddies usam para se esconder quando invadem uma máquina Linux

Resumo

A pergunta esperta de segurança que você deve se fazer é "Todo mundo é normal?" Um truque comum que os crackers usam é trocar o comando ps. Como detectar 'root kits'.

Por Joshua Drake

(LinuxWorld) -- Nas últimas duas semanas eu discuti como evitar que crackers consigam acesso ao seu computador Linux (veja 10 minutes to an iptables-based Linux firewall [*] e How stop crackers with PortSentry). Esta semana, continuamos a série com formas de você saber se alguém invadiu sua máquina.

Script kiddies são o pior tipo de crackers, primariamente por que existem tantos deles e a maioria não tem muitos conhecimentos. Uma coisa é ser invadido quando você colcou os patches corretos, possui um firewall testado, e roda programas de detecção de invasão ativamente em múltipos níveis. Outra coisa é quando você é invadido por ser muito preguiçoso e, por exemplo, não instalou a última correção do BIND.

Um root kit é um pacote de software que um cracker usa pra dar a si mesmo (geralmente é um "ele") acesso de superusuário em sua máquina. Uma vez que o cracker tem acesso de superusuário a sua máquina, está tudo acabado. O único método que é realmente efetivo é fazer backup da máquina, apagar os discos, e reinstalar o sistema operacional. Entretanto, nem sempre é fácil descobrir que alguém se apossou de sua máquina.

Você pode confiar no comando ps?

O primeiro truque para encontrar um root kit é executar o comando ps. Provavelmente tudo irá parecer normal a você. Eis um exemplo da saída do comando ps:

PID TTY      STAT     TIME COMMAND
   1 ?       S        0:05 init
   2 ?       SW       0:00 [kflushd]
   3 ?       SW       0:00 [kupdate]
   4 ?       SW       0:00 [kswap]
   5 ?       SW       0:00 [keventd]
   6 ?       SW       0:00 [mdrecoveryd]
2655 ?       S        0:01 syslogd -m 0
2664 ?       S        0:00 klogd
2678 ?       S        0:01 identd -e -o
2685 ?       S        0:02 identd -e -o
2686 ?       S        0:56 identd -e -o
2688 ?       S        0:55 identd -e -o
2690 ?       S        0:01 identd -e -o
2696 ?       S        0:00 /usr/sbin/atd
2710 ?       S        0:00 crond
2724 ?       S        0:00 inetd
[...]

A questão real é, entretanto, "Está tudo normal mesmo?" Um truque comum que os crackers usam é trocar o comando ps. A versão substituta irá mascarar programas ilícitos rodando em sua máquina. Para testar isto, cheque o tamanho de sua aplicação ps. Geralmente sua localização é /bin/ps. Em nossas máquinas Linux ela geralmente tem 60 kilobytes. Eu encontrei recentemente um root kit que substituiu o programa ps. O ps comprometido do root kit tinha somente 12 kilobytes de tamanho.

Outro truque óbvio é fazer um link do arquivo de histórico de comandos do root para /dev/null. O arquivo de histórico de comandos é usado para registrar comandos feitos pelos usuários quando eles logam em uma máquina Linux. Os crackers irão redirecionar o arquivo de histórico para /dev/null para que você não saiba que comandos eles executaram.

Você pode acessar o seu arquivo de histórico executando o comando history no prompt do seu shell. Se você usar o comando history e ele não mostrar nenhum comando prévio, dê uma olhada no arquivo ~./bash_history. Se o arquivo estiver vazio, execute um ls -l ~/.bash_history. Se você executar este comando deve ver algo parecido com o abaixo:

-rw-------    1 jd   jd   13829 Oct 10 17:06 /home/jd/.bash_history

Entretanto, você pode ver algo como isto:

-rw-------    1 jd   jd   13829 Oct 10 17:06 /home/jd/.bash_history -> /dev/null

Se você ver o que está acima, o arquivo ~/.bash_history foi redirecionado para /dev/null. Esta é uma rota sem saída. Retire sua máquina da Internet agora, faça backup de seus dados (se puder), e comece uma reinstalação.

Procure por contas de usuários desconhecidas

Enquanto você está brincando de detetive em sua máquina Linux, sempre é bom checar por contas de usuários desconhecidas. A próxima vez que você logar em sua máquina Linux, execute o seguinte comando:

grep :x:0: /etc/passwd

A única linha, repetindo, única linha que o comando grep deve retornar em uma instalação padrão do Linux é parecida com a linha abaixo:

root:x:0:0:root:/root:/bin/bash

Se seu sistema retornar mais de uma linha com o comando grep anterior, você pode ter um problema. Deve haver somente um usuário com UID 0 e se aquele comando grep retornar mais de uma linha, você tem mais de um usuário com aquele UID.

Finalmente, a maneira mais rápida de saber se você foi invadido é verificar se você está rodando o IIS.

Falando sério, apesar de todas estas formas básicas serem boas para saber a natureza do script kiddie, elas não são em si suficientes para uma boa segurança, e não tocam em profundidade o tópico da detecção de intrusos.

Minha sugestão é que, se você suspeita de um problema real, chame um profissional de segurança LInux e consiga referências. Segurança Linux não é um trabalho de 10 minutos.

Estude também os recursos abaixo. Network World Fusion, por exemplo, recentemente conduziu uma análise comparativa de 42 ferramentas de hardware e software para detecção de intruso, muitas das quais trabalham com o Linux.


Sobre o autor

Joshua Drake é o co-fundador de Command Prompt, Inc., uma compania de desenvolvimento PostgreSQL e Linux. Ele também é o autor atual do Linux Networking HOWTO, Linux PPP HOWTO, e o Linux Consultants HOWTO. Seu projeto atual que mais lhe ocupa é um novo livro sobre PostgreSQL para a O'Reilly, Practical PostgreSQL.


Recursos

Histórias Relacionadas

Sites Relacionados


* Este artigo pode ser conferido em português em iptables.html.

1