Revista Do Linux
EDIÇÃO DO MÊS
 Hardware
 Comandos Avançados
 Tecnologia

 Capa
 Entrevista
 CD
 Corporativo
 Sistema
 Evento
 Segurança
 Internet
 Programação

 

Sniffer - Farejando pacotes
Boa parte dos ataques documentados tem como centro de atuação um sniffer colocado numa máquina da rede — mas o ataque pode tornar-se ainda mais fatal se ele for posto num gateway de rede

Um sniffer (do inglês to sniff, farejar) é um software extremamente poderoso e quando conjugado com outras ferramentas, passa a ser o pivô de ataques a rede de computadores. Em geral boa parte dos ataques documentados tem como centro de atuação um sniffer colocado numa máquina da rede — mas o ataque pode tornar-se ainda mais fatal se ele for posto num gateway de rede.

Um sniffer atua em conjunto com outros programas, em geral maliciosos. Ele precisa pôr a interface da rede em modo promíscuo (promiscue mode). Quando uma interface de rede é colocada nesse "estado", é possível farejar e manipular os pacotes que trafegam num segmento de rede, porém somente o superusuário (root) pode rodar programas que fazem essa alteração na interface de rede. Dessa forma, quem ataca uma rede com um sniffer tem de ter acesso privilegiado numa máquina da rede... E um hacker usará outras tantas ferramentas para fazê-lo. O comando ifconfig mostra uma pequena, porém significativa, radiografia da(s) interface(s) presente(s) numa máquina. Eis aqui uma saída mostrando que a interface eth0 (em destaque) está em modo promíscuo (veja Quadro 1):

Quando isso ocorre, há algum programa sendo executado, pode ser simplesmente um scanner de rede ou mesmo um sniffer, de forma normal ou maliciosa. Nesse momento, o administrador deve estar atento. Pois quando a interface é colocada em modo promíscuo os pacotes que trafegam na rede podem ser "farejados", isto é, manipulados e capturados indiferentes ao destino que lhes foi atribuído originalmente. Numa rede TCP/IP sabidamente os dados são partidos em pacotes, nesses se encontram um cabeçalho e os dados propriamente ditos. Em tal cabeçalho podem ser observadas informações fundamentais, tais como o endereço IP destino e o origem, bem como as portas em uso, o protocolo, etc. Na Figura 1 o programa APS executa um scanner em pacotes de uma rede, observe as informações mostradas.

Assim, quando um sniffer está em ação ele pode fazer com que pacotes sejam capturados por máquinas para as quais originalmente esses pacotes não se destinavam... Os efeitos práticos disso podem ser bastante desagradáveis numa Internet cada vez mais voltada ao e-commerce. Pode ocorrer um tipo de ataque comumente chamado de man-in-the-middle. Segundo o relatório do CERT (Coordination Center Software Engineering Institute Carnegie Mellon University), ataques mais sofisticados como man-in-the-middle, por exemplo, que corrompem mensagens entre fornecedores, seus clientes e o sistema de transportes, podem reconduzir os recursos de transporte para lugares indesejados ou para longe de áreas onde são necessários. Um ataque mantido na Internet, que tem o efeito de alterar o conteúdo de mensagens eletrônicas, teria um grande impacto em infra-estruturas cujo bem-estar depende dessas mensagens. Consulte: www.cert.org/pres comm/cert.rpcci.body.html.

Existem sniffers em Linux: o que mais uso e aprecio para treinamento é o programa Hunt, desenvolvido pelo matemático checo Pavel Krauz (*kra@gncz.cz). Trata-se de uma ferramenta de grande maleabilidade e que pode ser usada tanto pelo administrador — como por um invasor — em diversos momentos e situações. Na página oficial do Hunt (Figura 2) podem-se encontrar binários e o código-fonte para compilação.

Esse software pode intrometer-se numa conexão, vigiá-la e até mesmo reiniciá-la através de um reset! O Hunt pode desempenhar com bastante eficácia as operações de um sniffer e ataques man-in-the-middle. Quando esse software está presente numa máquina, ele pode receber pacotes da rede, "farejá-los" como faz um sniffer, modificá-los e recolocá-los na rede. Todo tráfego de rede, por exemplo, em sessões telnet e ftp é inevitavelmente seqüestrado (hijacking) pelo Hunt, até porque as informações que aí passam circulam em texto puro, sem nenhum tipo de cifragem.

As características principais do programa são: configurar de forma flexível as conexões desejadas, seqüestrar conexões, reset ou cancelamento da conexão, "vigiar" uma conexão, um packet engine, que, por sua vez, pode vigiar o tráfego de pacotes nos protocolos TCP, UDP, ICMP e ARP, assim como juntar conexões TCP com números seqüenciais e detectar uma seqüência de pedidos de ACK, ou tempestade de ACKs (ACK storm). Para se aprofundar no assunto, o leitor deve estudar o uso do software. As operações apresentadas a seguir estão discutidas no capítulo III do Manual de Segurança em Redes Linux (editora Centro Atlântico, 2000).

Na hora de executar o Hunt numa rede de computadores tenha em mente alguns aspectos. Você só poderá rodar o programa numa máquina como super-usuário. Lembre-se de que não é ético capturar mensagens e ações dos usuários de sua rede, que devem certamente ter privacidade. Desse modo, use o programa com objetivos educativos e numa rede privada.

Vale lembrar que o Hunt tem uma singela, mas eficaz interface com o usuário (Figura 3).

No menu principal há seis ações fundamentais: a primeira somente estará disponível se houver, evidentemente, alguma conexão presente na rede. Em caso positivo, as conexões encontradas poderão ser listadas (list) aqui, ser vigiadas (watch) ou ser abortadas (reset). O mesmo se passa com as opções "s" e "a": elas também dependem da existência de uma conexão ativa. Comece então o seqüestro, realizando as configurações necessárias no programa; para tanto escolha o item "o". Observe os seguintes itens: "l) list add conn policy" e "a/m/d) add/mod/del conn policy entry". A opção "l" está no momento vazia, pois ainda não foi acrescentada nenhuma política de conexão. Isso pode ser feito no item seguinte. Digite "a" (aqui "d" pode apagar uma política, por exemplo). Será necessário escolher um endereço IP origem, um endereço IP destino e também máscaras de rede e portas, se assim for conveniente. Observe uma possível saída na tela (veja Quadro 2).

Listados como número 1, encontram-se os IPs escolhidos e, como não foram determinadas portas específicas, todas estão em destaque (all). As outras opções em geral funcionarão bem com as opções-padrão estabelecidas pelo Hunt.

Gostaríamos de chamar a atenção do leitor para algumas opções que podem ser adaptadas dependendo do cenário encontrado. O item "p" (veja os números de linhas mostrados em sua tela) pode ser ajustado conforme o tipo de terminal a ser usado. A opção "h" força a resolução de nomes nas operações do Hunt e pode degradar o desempenho do programa se as requisições de DNS forem respondidas com excessiva lentidão. E, por fim, o item "v", se escolhido, jogará mais informações em sua tela.

Digite agora "x" para sair e retomar a tela inicial. Depois disso, numa máquina de sua rede, inicie uma simples conexão telnet. É possível dessa forma vigiá-la. Na tela de abertura do Hunt, escolha "l", com isso listam-se as conexões (Figura 4) e ao mesmo tempo confirma-se a presença da sessão telnet aberta (destaque em amarelo).

No item "0" está exatamente o endereço IP de origem com sua porta [33039] e o IP destino com o servidor telnet na porta 23, tal como assinalado. Escolha agora "w" para capturar de forma efetiva a sessão. Então escolha a opção "0" e responda a três opções: se deseja o dumping de tudo o que se passará na máquina de origem (src), ou na máquina de destino (dst), ou ainda em ambas (both). E escolha mostrar o texto ecoado com os mesmos caracteres. Depois de feita a última escolha, pode-se espiar a sessão telnet aberta. Se você simplesmente digitou um banal comando de listagem de arquivos, como o "ls", logo os verá (Figura 5).

Assim qualquer ação que o usuário remoto fizer, ele pode ser vigiado no seu servidor com o sniffer ativo. Da mesma forma, é possível cancelar essa conexão telnet ativa. Basta digitar as teclas CONTROL + C para encerrar o dumping, e retornar à tela inicial, onde se escolhe "r" e confirma-se o cancelamento da conexão... A conexão é derrubada!

O programa Hunt é um sniffer bastante flexível e eficaz para a monitoração de uma rede, debug de regras de um firewall, ou para alguma ação de emergência diante de conexões ativas suspeitas. No entanto, para farejar senhas o programa de uso mais efetivo é o Dsniff, de Dug Song, que causou alarde ao prometer, em seu atual release, até o ataque man-in-the-middle em conexões encriptadas (Secure Shell). Isso gerou uma ardente polêmica, em dezembro de 2000, entre Kurt Seifried, do SecurityPortal.com, e Richard Silverman, co-autor do livro SSH. The Secure Shell: The Definitive Guide.

Sua página para download está em www.monkey.org/~dugsong. Na tela capturada (Figura 6) pode-se ver um exemplo da atuação do Dsniff: rodando numa máquina GNU/Linux, ele captura o login de uma sessão telnet, rouba a senha e ecoa as ações do usuário.

Na tela à esquerda no alto está a sessão telnet em curso: login do usuário, uma simples ação (listagem de diretórios) e a saída com "exit". Na tela à direita o sniffer seqüestra as ações da sessão: registra o dia e a hora da conexão telnet assim como as portas e máquinas em ação, depois põe a descoberto a senha e a identificação usadas; e a execução do comando ls -a e o fechamento do telnet... Note que a autenticação em sessões telnet é convencionalmente não encriptada, assim como em FTP. Mas quando são fracamente encriptadas, com chaves pequenas ou algoritmos obsoletos, o invasor pode ainda executar um "password cracker" e roubar senhas e nomes de usuários (Figura 7).

O potencial de ferramentas como os sniffers torna-se quase óbvio. Contudo, sem os devidos cuidados, um sniffer pode ter conseqüências desastrosas nas mãos de um cracker — ou de qualquer pessoa com intenções ilícitas. Por isso o administrador deve evitar ao máximo qualquer serviço TCP/IP que envie senhas em texto puro ou sem criptografia forte.

Outro aspecto importante, e que o administrador deve levar em conta, é que, apesar do poder de ferramentas como o Hunt, ele deve usá-las para garantir a integridade dos dados dos usuários de sua rede e também de seu direito inalienável à privacidade. Para isso, construa uma política de privacidade para os usuários de sua rede e depois torne-a pública num servidor Web, ou num servidor FTP anônimo.

Para saber mais

Unix Security
www.unixsecurity.com.br

Linux Security
www.linuxsecurity.com.br

CIPSGA
www.cipsga.org.br

Linux Security HOWTO
www.linuxdoc.org/HOWTO/Security-HOWTO.html


A Revista do Linux é editada pela Conectiva S/A
Todos os Direitos Reservados.

Política de Privacidade
Anuncie na Revista do Linux