ICMP Tunneling

Started by Anonymous, 24 de December , 2006, 10:49:10 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Anonymous

Create By Sonics
mailto:sonic3m@gmail.com">sonic3m@gmail.com

O mau uso dessas informações é de total responsabilidade do utilizador, logo se a PM,
PF,CIA,FBI,NSA,NASA?, entre outras siglas aparecerem por aí, nao venha por a culpa em mim!

Atenção!Se você e mais um kiddie pensando que achou uma nova backdoor para si, nao perca
seu tempo lendo isso, pois a unica coisa que ira conseguir aqui é uma janelinha falante.

   Exemplo de implementação para um ICMP backdoor.

Chamada de ICMP tunneling(túnel icmp), essa técnica teve sua primeira aparição(até onde eu
sei) na zine phrack 49(file 06) em agosto de 1996(mas é muito eficiente até os dias de
hoje).
Na phrack 51(file 06) está o source do programa, que além de aplicar a técnica, traz outras
opçoes como criptografia, ainda nao o testei, mas o bom mesmo é você construir seu próprio
programa.

Como tem um pessoal que nao manja muito de inglês(apesar de meu inglês nao ser lá essas
coisas), venho dar um exemplo de como funciona a técnica, há entretanto outras fontes em
português, como um da "unsekurity team"(o q vi é apenas teoria), e um code na fatal
3rror(nao lembro qual).

Obs:Para o bom entendimento é preciso ter um certo conhecimento em TCP/IP e programação
em C, propriamente sockets raw.

Go!

O protocolo ICMP serve como auxílio do IP, ele carrega em si mensagens de controle e
diagnóstico, como TTL expired, entre outros.O que acontece é que ele possue um campo adicio-
nal de dados para opçoes adicionais, e com isso pode-se inserir qualquer tipo de dado nesse
campo, e como nao existe verificação alguma se os dados são do protocolo em si, eles passam
tranquilamente.

No icmp você não usa uma porta como seria com tcp/udp, pois é um protocolo de controle,sendo
assim cria-se uma conexão(na realidade nao se cria conexão alguma) mais difícil(mas não
impossível) de ser detectada, ou seja a idéia e de se usar como backdoor, e trafegar os comandos
por meio desta via, tenha em mente que alguns firewalls por ai podem estar bloqueando esse tipo
de tráfego(e outros permitindo só a vinda de tais pacotes de hosts confiaveis), e que você
precisa ser root para criar esse tipo de pacote(RAW).

Baixe o arquivo: http://dimensionx.orgfree.com/down/icmp.tar.bz2
Obs:O codigo foi feito para linux.

Abra o fonte bcl.c

Vamos usar um pacote com mensagem do tipo echo request, no caso aqui eu não usei structs
para definir o tipo de mensagem ICMP, criei na unha o tipo de mensagem no pacote, como pode
ver no fonte eu coloquei os dados(no caso de uma backdoor, os comandos) depois do 8º byte,
claro que nada o impede de escrever os dados em cima do que seria o identifier e o sequence,
number.

Agora compile: make

O teste é simples voce roda o "back" em um terminal e o "bcl" em outro, escrevendo no
"bcl" voce vera o que escreveu no outro terminal, veja com o "nmap -p 1- 127.0.0.1" ou
com o "netstat -ln" que nao foi aberta porta alguma pelo programa, no caso do netstat
aparecerá algo como:
raw      0   0 0.0.0.0:1      0.0.0.0:*      7
 
Esse "1" que aparece e o numero do protocolo que utilizamos,ICMP.

Agora vamos capturar alguns pacotes, rode o ethereal(pode ser outro também), e escreva nova-
mente no programa cliente, procure pelo pacote icmp no ethereal,  e veja que o que você
escreveu está lá no meio do icmp,logo vimos que foi possivel colocar dados no ICMP.
A implementação da backdoor agora se torna fácil, basta interpretar os comandos enviados
e coloca-los em um system().

Ok, mas e aí como me protejo disso?
O certo mesmo era nao deixar ninguém conseguir root na máquina...
Bom,os metodos de detecção são a percepção do alto tráfego de ICMP, e se nao estou enganado
o snort consegue detectar esses túneis ICMP, mas é claro que se você mandar os comandos em
intervalos de tempo será praticamente indetectavel, a solução definitiva seria bloquear o
trafego ICMP ou só permitir a vinda desse tipo de pacote de hosts confiaveis(ipspoof...).
Mas no caso de LKMs, dependendo da implementação que foi criada, é realmente muito dificil de
ser detectado.

É basicamente isso, se voce sabe programar maos a obra!(só nao vá fazer besteira...)

Dicas para aprimorar: Pode-se usar uma backdoor como essa em LKM e com ipspoof.
E aqui vai mais uma dica, se você estiver usando ipspoof(ex. no caso de uma rede que só aceita
pacotes icmp de tais hosts) mas quiser receber dados do backdoor, simplesmente crie uma rotina
que envie o seu ip dentro da área de dados do pacote, e de preferencia use criptografia,
e lembre-se, seja criativo, pense!


Tenho visto que apesar do esforço de muitos em publicar material em português, vejo que
ainda há muita coisa que só existe em inglês, o que dificulta o aprendizado de muitos.

Referencias:
Zine Phrack 49(file 06)

insanity

Tinha lido esse tutorial, alguns dias atraz na sua pagina, bem interesante -;)