Detecção de Intrusões em Sistemas UNIX

1 Introdução

Este documento aborda a detecção de intrusões em sistemas. Os procedimentos aqui descritos poderão ser úteis para que os administradores de sistemas possam perceber se o seu sistema foi ou não comprometido pela intrusão de alguém que não estivesseautorizado para esse efeito.

Serão ainda abordados os vários tipos de sistemas de detecção de intrusões existentes.

2 Checklist de detecção de Intrusões em Unix

2.1 Procurar Sinais de Compromisso do Sistema

Lembramos que qualquer acção tomada durante uma investigação deve estar em conformidade com os procedimentos e política da organização em questão.

  1. Examinar os ficheiros de log em busca de ligações não habituais ou outra actividade estranha. Por exemplo, ver o último log, o process accounting, todos os logs do syslog e outros logs de segurança. Caso a firewall ou o router contenham logs numa localização que não o sistema comprometido, é necessário consultá-los. Esta estratégia não é infalível, a menos que a ligação seja em exclusivo a um dispositivos de escrita apenas por anexação (append-only), já que muitos intrusos editam os ficheiros log para tentar esconder a sua actividade.
  2. Procurar ficheiros setuid e setgid files em todo o sistema (em particular ficheiros root setuid). Os intrusos deixam frequentemente cópias das aplicações /bin/sh ou /bin/time que lhes permitam acesso como root numa outra altura. O programa find(1) do UNIX pode ser usado para procurar esses ficheiros em todo o sistema. Os seguintes comandos procuram ficheiros setuid para root e setgid para kmem em todo o sistema:

    find / -user root -perm -4000 -print

    find / -group kmem -perm -2000 -print

    Salientamos que os exemplos acima procuram toda a árvore da directoria incluindo sistemas NFS/AFS montados no sistema. Alguns comandos do find(1) permitem a opção "-xdev" que evita pesquisar essas hierarquias. Exemplo:

    find / -user root -perm -4000 -print -xdev

    Outra forma de procurar ficheiros setuid é usar o comando ncheck(8) em cada partição do disco. Como exemplo, a utilização do comando para procurar ficheiros setuid e dispositivos especiais na partição /dev/rsd0g:

    ncheck -s /dev/rsd0g

  3. Inspeccionar os binários do sistema e certificar-se que estes não foram alterados. Alguns intrusos alteram programas no UNIX como o login, su, telnet, netstat, ifconfig, ls, find, du, df, libc, sync, qualquer binário presente no /etc/inetd.conf, e outros programas críticos da rede e sistema bem como bibliotecas de objectos partilhados. É necessário comparar as versões do sistema com cópias não corrompidas, como as da instalação inicial. É necessária especial atenção em relação aos backups pois estes nem sempre são de confiança, podem conter Trojans.

    Os Trojans são capazes de produzir a mesma checksum e data da versão original, pelo que a verificação da data e o uso do comando sum(1) em UNIX não podem garantir que o programa não tenha sido substituído. Ferramentas como cmp(1), MD5, Tripwire, e outras ferramentas criptográficas de checksum são capazes de identificar Trojans, desde que essas mesmas ferramentas estejam seguras e não á mercê de modificação pelo intruso. Recomendamos ainda uma ferramenta (ex: PGP)   ra assinar a informação produzida pelo MD5 ou o Tripwire, para referência futura.
  4. Verificar o sistema para o uso não autorizado de um programa de monitorização de rede denominado sniffer ou packet sniffer. Os intrusos podem usá-lo para roubar informações sobre a conta de utilizador ou passwords.
  5. Examinar todos os ficheiros executados através 'cron' e 'at.' Alguns intrusos deixam backdoors em ficheiros corridos a partir do 'cron' do 'at.' Estas técnicas permitem o regresso do intruso ao sistema (mesmo que o incidente inicial aparente estar resolvido). É necessário, ainda, verificar se todos os ficheiros/executáveis referenciados (directamente ou não) pelas tarefas 'cron' e 'at', bem como os próprios executáveis não estão definidos com permissões de escrita para todos os utilizadores.
  6. Verificar a existência de serviços não autorizados. Verificar se não ocorreram adições ou mudanças não autorizadas ao /etc/inetd.conf, em particular entradas que executam um programa da shell (ex, /bin/sh or /bin/csh) bem como a verificação de todos os programas especificados para assegurar que este estão correctos e não foram substituídos por Trojans.

    É importante verificar também no /etc/inetd.conf que nenhum serviço previamente desactivado foi reactivado bem como verificar se o próprio inetd não foi substituído por um Trojan.
  7. Examinar o ficheiro /etc/passwd do sistema à procura de modificações, em particular a criação não autorizada de contas novas, contas sem password ou mesmo mudanças de UID em contas preexistentes (especialmente UID 0).
  8. Verificar o sistema e ficheiros de configuração de rede para entradas não autorizadas. Em particular procurar entradas com o '+' (sinal mais) e hosts remotos inapropriados em /etc/hosts.equiv, /etc/hosts.lpd, e todos os ficheiros .rhosts no sistema (especialmente root, uucp, ftp, e outras contas do sistema). Esses ficheiros não devem ter permissões de escrita para todos os utilizadores. Finalmente, deve-se confirmar que esses ficheiros já existiam antes da intrusão e que não foram criados durante esta.
  9. Procurar, em todo o sistema, ficheiros não habituais ou escondidos (são ficheiros que começam por um espaço e não são vistos no 'ls'), uma vez que podem ser usados para esconder ferramentas e informação (programas de cracking de passwords, ficheiros de passwords de outros sistemas, etc.). Uma técnica usual em UNIX é colocar uma directoria escondida numa conta de utilizador, com um nome pouco habitual como '...' ou '.. ' (ponto ponto espaço) ou '..^G' (ponto ponto Ctrl-G). Mais uma vez, o programa find(1) pode ser usado para encontrar os ficheiros escondidos:

    find / -name ".. " -print -xdev

    find / -name ".*" -print -xdev | cat -v

    Também ficheiros com nomes como '.xx' e '.mail' já foram usados (ou seja, ficheiros que aparentam ser normais).
  10. Avalie todas as máquinas da rede local em busca de sinais de intrusão. Geralmente se uma máquina foi comprometida, outra na mesma rede também terão sido. Isto é particularmente verdade para redes com NIS ou onde os hosts confiam uns nos outros através do uso de ficheiros .rhosts e/ou /etc/hosts.equiv. Verificar ainda hosts com que os utilizadores do sistema partilhem acessos .rhosts.

2.2 Analisar outros Documentos CERT.PT

Se houver suspeita de compromisso do sistema, analisar os passos sugeridos em "Passos para recuperação de um compromisso de segurança" disponível em: Se houver suspeita de compromisso do sistema, analisar os passos sugeridos em "Passos para recuperação de um compromisso de segurança" disponível em: Passos para recuperação de um compromisso de segurança

3 Sistemas de Detecção de Intrusões (IDS)

Existem no mercado vários sistemas de Detecção de Intrusões (IDS – Intrusion Detection System) que podem ser adoptados facilitando assim o trabalho aos administradores de um sistema ou sistemas a monitorização contra ataques de intrusão. Apesar de terem o mesmo objectivo, detectar intrusões, existem vários tipos diferentes de sistemas. Estes tipos diferem essencialmente na natureza e orientação, sendo que alguns são orientados para detectar intrusões apenas numa máquina local (HIDS) ou em redes de computadores (NIDS ou WIDS).

Em seguida apresentaremos vários IDS existentes no mercado para sistemas UNIX. Os produtos referenciados não representam qualquer preferência da nossa parte e também não foram testados pela nossa equipa.

3.1 HIDS – Host Intrusion Detection System

Um HIDS (Host Intrusion Detection System) monitoriza os eventos e logs de um computador ou servidor. Os HIDS são particularmente aptos para detectar operações ilegais efectuados por utilizadores registados ou alguém que se tenha infiltrado na rede ou numa máquina específica da rede. Estes sistemas podem ser apenas programas de análise de logs e eventos mas podem também incluir análise de integridade de ficheiros e configurações através de comparação de fingerprints, etc...

Alguns exemplos de Host IDS:

3.2 NIDS – Network-based Intrusion Detection System

Um NIDS detecta actividades maliciosas numa rede tais como ataques de negação de serviço, port scans, ou tentativas de intrusão em sistemas monitorizando e controlando o tráfego na rede. Um NIDS lê todos os pacotes que entram, saem ou circulam na rede e procura por padrões que possam configurar um ataque. Esta abordagem permite detectar ataques não só a partir do exterior bem como a partir do interior da rede.

Alguns exemplos de Network IDS:

3.3 WIDS – Wireless Intrusion Detection System

Um WIDS é em tudo semelhante a um NIDS com a diferença de que este é orientado especificamente para as redes sem fios e para as suas especificidades em relação ás redes com fios.

Alguns exemplos de Wireless IDS:

 


Missão

O CERT.PT tem como missão contribuir para o esforço de cibersegurança nacional nomeadamente no tratamento e coordenação da resposta a incidentes, na produção de alertas e recomendações de segurança e na promoção de uma cultura de segurança em Portugal.

PT EN
Participe Incidente

Contactos

Av. do Brasil 101 
1700-066 Lisboa 
Portugal

Tel: +351 218440177 (9h30-12h30, 14h00-17h30; GMT)  
Fax: +351 218472167

email para comunicação de incidentes: Este endereço de email está protegido contra piratas. Necessita ativar o JavaScript para o visualizar. ; Este endereço de email está protegido contra piratas. Necessita ativar o JavaScript para o visualizar.

email para outros assuntos: Este endereço de email está protegido contra piratas. Necessita ativar o JavaScript para o visualizar. ; Este endereço de email está protegido contra piratas. Necessita ativar o JavaScript para o visualizar.

 

pgp: 342A 17BA DF71 E193 6871 0357 8BDE A247 C523 AAE7

 

Filiação

FIRST
Membro da Rede Nacional CSIRTs