== IP Spoof ==
Por: Nash Leon
IP Spoof consiste basicamente em alterar o endreço origem em um cabeçalho IP. Simples programação em Sockets pode nos ensinar como fazer isso. No entanto, em cima disso existem várias técnicas, e eu enumerarei apenas algumas básicas:
- Blind Spoof;
- Non Blind Spoof;
- DNS Spoof;
- ARP Spoof;
Todas estas técnicas se utilizam das fraquezas fornecidas na suite TCP/IP(Internet). De modo que um bom conhecimento de TCP/IP se faz nencessário para entender plenamente osesquemas de exploitação.
- Blind Spoof
Em 1985, Steve Belovin tornou manifesto em um
documento conhecido como "Be Dragons" alguns problemas que o TCP/IP
possui. Robert Morris (o pai, não o criador do primeiro Worm) também
já havia descrito o problema de se "forjar"(spoofar) endereços
de origem em TCP/IP.
Mas foi somente em janeiro de 1995 que a Comunidade de Segurança abriu os olhos para este problema. Tsotumo Shimomura, um Analista de Segurança, havia cometido uma série de erros na configuração de um dos seus ervidores de Internet, dentre os quais, eles havia deixado os serviços r* (rlogind, rshd, rexecd) habilitados bem como o fingerd, algo que muitos analistas de segurança já haviam banido de seus hosts. Se aproveitando desta configuração, no Natal de 1994, Kevin David Mitnick invadiu a rede de Tsutomu Shimomura.
Tsutomu só foi tomar conhecimento dias
depois, analisando um log gerado pelo tcpdump(http://www.tcpdump.org/).
Mas que técnica Mitnick usou? A técnica
de Blind Spoof. Consiste basicamente em se
predizer os números de sequência(ISN) e utilizá-los na
exploitação de serviços r*.
Vamos avançar um pouco. No TCP/IP, sempre
que uma conexão é criada ocorre um processo semelhante ao descrito
abaixo:
I - Host A -----> Envia Pacote SYN ---> Host B
Host A envia um pacote com a flag SYN ativa dizendo que quer criar uma conexão com Host B.
II - Hosta A <---- Recebe pacote SYN+ACK + ISN ---- Host B
Host B responde para Host A enviando um pacote com as flags SYN+ACK ativas e enviando junto um número de sequência (Internet Sequencial Number)ISN responsavel depois por "gerir" a troca de mensagens. É atraves deste numero que o Host B vai saber de quem eh o pacote e etc.
III - Host A ---> Envia pacote com ACK + ISN ---> Host B
Depois do recebimento do pacote, o Host A envia então um pacote com ACK + ISN+1(Note aqui. Se ISN = 123456 entao Host A tem que enviar um ISN = 123457, deste modo o Host B saberah que Host A quer interagir).
O nome que se dá a este processo é Handshake ou TriWayHandshake (Aperto de Mãos em 3 vias).
O problema se encontra que se nós pudermos
predizer o número de sequência gerado por Host B, nós
poderemos nos
passar por algum host que tem permissão aos serviços r* e enviar
um pacote como se fosse tal host de modo que o Host B executaria. Neste caso,
não precisaríamos ter uma conta válida no sistema alvo.
Nota: Os serviços r*(rlogin, rexec, rsh) foram criado pra facilitar o envio de dados e comandos entre duas redes, sendo que estas redes deveriam "confiar" uma na outra. Qualquer informação a mais, executem em seus linux(man logind).
Então. Se a rede alvo possui os serviços
r* e hosts de confiança, nós poderíamos nos passar por
tais hosts e enviar um comando para nos abrir uma porta para acesso de qualquer
lugar.
Por exemplo: echo + + >> /root/.rhosts
Isso permitiria acesso via rsh no host alvo como
root sem necessitar de senha(Os sistemas mais atuais não
permitem que a conta root seja usada em acessos via rlogind).
Para ser efetivo, deve-se ainda derrubar o host de confiança pra que ele não reponda após o início da Conexão. Para isso, pode-se utilizar um ataque de denial of service qualquer na máquina de Confiança.
E foi isso que ocorreu em 1994. Mintinck conseguiu
com sucesso implementar este ataque. Hoje em dia existem
ferramentas que demonstram como este ataque ocorre.
http://packetstorm.linuxsecurity.com/groups/ADM/ADM-SPOOF/
Um texto descrevendo em pormenores pode ser visto em:
http://www.phrack-dont-give-a-shit-about-dmca.org/phrack/48/P48-14
Project Sp00fed - threx -
http://www.legions.org/kv/kv10.txt
Bom, atualizando as informações para os nossos dias. Hoje este
tipo de ataque é e não é tão simples. As opiniões
variam de Analista pra analista. Por quê?
A "solução" criada pelo pessoal da segurança foi fazer com que o número de sequência se tornasse "pseudo-aleatório", ou seja.
Antigamente, se fulano se conectava em rede A
e recebesse o número de sequência X, o beltrano(próximo
a se conectar) receberia um ISN, por exemplo, de número X + 1000, o
próximo X + 1000 + 1000. E assim
por diante, de modo que se nós soubessemos quanto é X, poderíamos
prever os ISN seguinte e gerar o Blind Spoof.
Mas a solução foi pseudo randomizar(tornar
"pseudo-aleatório") o ISN.
Agora, ao invés de X+1000, teríamos algo tipo X+1000+alguma
outra coisa.
Só que no mundo virtual, não existe
aleatorização, ou seja, tudo que um computador fizer, poderá
de algum modo ser predito se pudermos simular as condições e/ou
conhecermos as implementações de pseudo-randomização.
E foi o que ocorreu. Por exemplo, os sistemas operacionais Linux com kernel
2.2.X onde X eh menor que 7 possuiam
uma péssima randomização, de modo que Blind Spoof era
possível nestes casos. O grupo de hacking/security alemão TESO
criou uma ferramenta para exploitar isso:
http://teso.scene.at/advisories/teso-advisory-001.tar.gz
Atualmente, os sistemas de pseudo-randomização
são mais complexos, no entanto, não existe nenhuma solução
realmente eficaz contra a técnica de Blind Spoof. Apenas se pode dificultar
removendo serviços
como r*, colocando tais esquemas de randomização(/dev/urandom,
por exemplo)
e etc.
Existe um documento de Michal Zaliensky que aborda esquemas de randomização em muitos sistemas operacionais:
http://razor.bindview.com/publish/papers/tcpseq.html
- Non Blind Spoof
Aqui é semelhante ao processo acima, só
que não é feito "ás cegas"(Blind). Como assim?
Aqui o atacante já obteve acesso a um sistema no meio das conexões
alvos(hosts de confiança) e ele passa a
analisar o tráfego e com base na análise feita através
de um sniffer, ele é capaz de "sequestrar"
a conexão. Esta técnica também recebe nomes variados
como IP Hijacking, e também costumam se referir a ela com Man-in-the-middle,
pois ela é uma espécie de man-in-the-middle.
Maiores informações:
Uma ferramenta que executa esta técnica:
http://packetstormsecurity.org/sniffers/hunt/hunt-1.5.tgz
Soluções contra esta técnica?
Este é um dos grandes problemas que afetam
a Internet na atualidade. Já que se formos analisar, os ataques de
Man-in-the-Middle são capazes de inutilizar esquemas de PKI(Public
Key Infrastructure) usados em
serviços de e-commerce, ssh, ssl, essas coisas.
Mas na prática, também não possui solução.
- DNS Spoof
Um servidor de DNS(Domain Name Server) é
o responsável por associar um determinado IP a um determinado nome
de host. Por exemplo, quando digitamos www.infoshack.cjb.net o servidor de
DNS da cjb irá processar
a informação recebida e associar este endereço a uma
tabela de endereços previamente definida pelo administrador num arquivo
de configuração (algo como named.conf).
Um atacante pode se utilizar disso de várias
formas, desde usar técnicas de man-in-the-middle(invadindo um server
no meio do caminho) até mesmo utilizando problemas no protocolo DNS(udp/53).
Existe um campo no
cabeçalho DNS responsável pela ID que pode ser atacado como
se ataca um cache, enviando múltiplas requisições até
entupir a pilha.
Este tipo de ataque também é conhecido
como DNS Cache Spoof.
Maiores informaçoes em:
http://packetstorm.linuxsecurity.com/groups/ADM/ADM-DNS-SPOOF/
Solução contra estes problemas?
Existem "defesas" contra ID Spoof. As versões mais atuais de Nameds dificultam isso. Mas nada em definitivo, não sei bem a respeito disso. Quanto a Man-in-the-middle em DNS, não existe nada.
- ARP Spoof
O protocolo ARP(Adress Response Protocol) é
o responsável por "associar" endereço IP(notação:
192.168.0.1) a seu MAC correspondente(00:23:B5:76:44:D8) que nada mais é
que o endereço físico de uma placa de
rede em uma rede local.
Em 1998, Yuri boloye tornou a técnica
de ARP Spoof massificada. O protocolo ARP possui uma tabela que associa um
endereço MAC a um IP. Esta tabela pode ser envenenada com inúmeras
requisições capazes de
fazer com que um host alvo pense que um IP de um host Y esteja associa a um
Host Z, onde
este host Z pode ter sido previamente comprometido pelo atacante.
Este tipo de ataque é bastante útil
em redes segmentadas. Sim!! Talvez alguns de vocês tenham ouvido alguém
dizer que para se proteger contra sniffers basta compra um switch de 1000
reais, no entanto, este ataque
é capaz de fazer com que o switch seja inutilizado contra sniffers.
ARP Spoof também recebe vários nomes como ARP Cache e o famoso nome ARP Poison. Também é conhecida como ARP Poisoning.
Maiores informações em:
http://packetstormsecurity.org/papers/protocols/intro_to_arp_spoofing.pdf
Yuri Boloev - Redir games with ARP and ICMP -
http://www.legions.org/kv/kv7.txt
Ferramentas que executam este ataque:
http://teso.scene.at/releases/arpmim-0.2.tar.gz
http://teso.scene.at/releases/arpmitm-0.1.tar.gz
http://teso.scene.at/releases/arptool-0.0.1.tar.gz
http://packetstorm.linuxsecurity.com/sniffers/ettercap/ettercap-0.6.9.tar.gz
Solução contra isso?
Alguns softwares tentam detectar, mas nada 100%.
UfA!:)
Tou enferrujado, mas tá aí pessoal.
O básico sobre alguns tipos de SPOOF. Existem muitos pormenores ainda
que o tempo não me permite especificar. Os softwares de Remote Denial
of Services também utilizam IP Spoof no
cabeçalho para forjar os endereços origens (geralmente uma ferramenta
de DoS usa vários endereços
forjados).
A versão 6 do IP vem com alguns campos de segurança que irão tentar dificultar este tipo de ataque.
Em português existem bons documentos falando disso teoricamente, a tese de Suzana Strauch é bem informativa:
http://www.modulo.com.br/pdf/mo7e001p.pdf
Enfim pessoal. Por enquanto isso é tudo. Se não compreenderam, deem uma olhada nos links e busquem maiores infos a respeito disso em sites do gênero. Spoof é um problema que ainda deve vitimar muita gente.
Um Cordial Abraço a Todos,
Nash Leon /
Clube dos Mercenários.