 |
SolarWinds makes easy-to-use enterprise IT management software to help IT pros solve problems every day and help to enable efficient and effective management of networks and IT environments.
Join our online community of over 100,000 IT professionals talking shop. Get involved. Gain insights. Share tips and tricks. Visit thwack today!
| |
Original English version of this paper
Há aproximadamente 4 anos, Antirez - um pesquisador
em segurança de redes - postou uma inovadora
técnica de varredura de portas TCP que se tornou conhecida
como "Idlescan" e permitiu uma varredura de portas completamente
invisível. Atacantes podem atualmente realizar uma varredura
de portas sem a necessidade de enviar sequer um único pacote
com seu próprio endereço IP ! Ao
invés, uma engenhosa técnica permite que o ataque
tenha como origem, um host "zombie". Qualquer sistema de
detecção de intrusão (IDS)
identificará o "zombie" inocente como o atacante.
Além desta extraordinária invisibilidade, esta
técnica de varredura permite mapear as
relações de confiança baseada em IP
entre duas máquinas.
Eu assumi que um problema desta magnitude geraria uma
reação imediata e correções
por parte dos vendedors de SO. Infelizmente, muitos escolheram ignorar
o problema por anos. Aparentemente, eles acreditaram que este
é apenas um problema "teórico" que não
é prático para explorar no mundo real. Para
refutar esta posição e aumentar a
pressão nos vendedores de SO para que corrijam o problema,
eu disponibilizei uma robusta implementação do
Idlescan nas versões recentes do Nmap. Este artigo descreve
a técnica em detalhes e oferece defesas que os
administradores de rede, ISPs e vendedores de SO possam usar para
mitigar a vulnerabilidade.
Note que o Idlescan é somente um
dos riscos de segurança causado pela previsível
seqüência dos números IPID. Este artigo
descreve também outros tipos de ataques para
obtenção de informações,
possibilitado por esta característica.
Embora o Idlescan seja bastante sofisticado em termos de varredura de
portas, não é necessário ser um perito
em TCP/IP para entendê-lo. Você precisa somente
conhecer alguns fatos comuns:
Combinando estas
características, é possível varrer a
rede destino forjando sua identidade de modo que ela pareça
uma máquina "zombie" inocente. Esta técnica
é fácil de descrever através de um
diagrama. Nesta figura abaixo, um atacante, A,
está varrendo
a máquina destino enquanto culpa o
Zombie, Z, da varredura.
As caixas representam as máquinas e as linhas representam os
pacotes. Uma breve descrição em inglês
dos pacotes está impressa sobre as linhas, enquanto as flags
TCP e outras informações estão
impressas embaixo delas:
Como mostrado pelo diagrama
acima, o host destino responde diferente para o Zombie dependendo o
estado da porta. Se a porta observada está aberta, o destino
envia um SYN|ACK para o Zombie. O Zombie não está
esperando por este SYN|ACK, então ele envia um RST de volta.
Enviando o RST, o Zombie causa o incremento da
seqüência numérica IPID. O atacante real
detecta isto no passo 3. Se a porta está fechada, o destino
envia um RST para o Zombie. Zombies ignoram este pacote RST
não solicitado e não
incrementam sua seqüência numérica IPID.
Técnicas de Idlescan oferecem aos atacantes muitas vantagens
em comparação à
outras populares técnicas de varredura como SYN e
FIN. É por isso que nós recomendamos defesas importantes para ajudar a
proteger sua rede contra este ataque. Aqui estão algumas das
razões em que os atacantes (ou testadores de
intrusão) podem utilizar este método de
varredura.
- Extremamente anônimo --
Existem muitas técnicas que as pessoas podem utilizar para
proteger sua identidade durante a varredura. Exemplos incluem o uso de
"decoys" (nmap -D) or varredura half-open (nmap -sS). Porém
mesmo estas técnicas, requerem que o atacante envie alguns
pacotes para o destino usando seu endereço IP real.
Idlescan, por outro lado, é completamente
invisível, nenhum pacote com o endereço real de
origem é enviado ao destino.
Uma conclusão disto é que os
sistemas de detecção de intrusão (IDS)
identificarão e acusaram em alertas que a máquina
zombie é quem disparou a varredura
contra ele.
- Transpassando roteadores/firewalls que filtram
pacotes
-- Filtros de IP de origem são um mecanismo comum para
limitar as máquinas que têm acesso à um
host delicado. Por exemplo, o servidor de banco de dados de uma
companhia pode permitir conexões somente de um servidor web
público que o acessa. Um usuário comum pode
permitir conexões ssh (login interativo) somente de suas
estações de trabalho.
Um cenário mais perturbador ocorre quando
alguma pessoa importante na companhia solicita que os administradores
de redes abram uma brecha no firewall para ele poder acessar a rede
interna de seu endereço IP. Isto pode ocorrer quando os
executivos não querem ou não podem usar
alternativas como VPNs seguras.
O Idlescan pode ser freqüêntemente
utilizado para mapear estas relações de
confiança. O fator chave é que os resultados de
um Idlescan listam portas abertas da perspectiva do host
zombie. Deste modo, um scan normal contra o servidor de banco
de dados acima mencionado poderia mostrar nenhuma porta aberta.
Entretanto, aplicando um Idlescan utilizando o IP do servidor web como
zombie, poderá expor a relação de
confiança mostrando as portas abertas relacionadas aos
serviços de banco de dados.
Mapear estas relações de
confiança pode ser muito útil para atacantes
priorizarem seus destinos. O servidor web citado acima pode parecer
comum para o atacante, até que ele note o acesso especial
que tem aos servidores de banco de dados.
O primeiro passo é
encontrar um host zombie apropriado. O host não deve ter
muito tráfego (por isso o nome Idlescan) e deve apresentar
valores IPID previsíveis.
Impressoras, máquinas Windows, hosts Linux antigos, FreeBSD
e máquinas Mac OS geralmente funcionam bem. As
últimas versões do Linux, Solaris e OpenBSD
são imunes como zombies, porém qualquer host pode
ser um desino do scan. Uma maneira de determinar a vulnerabilidade do
host é simplesmente tentar o Nmap Idlescan. O Nmap
testará o zombie e reportará se ele é
ou não confiável.
Realizar este scan é
fácil. Simplesmente deve-se prover o hostname do zombie para
a opção -sI e o Nmap
fará o resto. Aqui está um exemplo
rápido:
# nmap -P0 -p- -sI kiosk.adobe.com www.riaa.com Starting nmap V. 3.10ALPHA3 ( insecure.org/nmap/ ) Idlescan using zombie kiosk.adobe.com (192.150.13.111:80); Class: Incremental Interesting ports on 208.225.90.120: (The 65522 ports scanned but not shown below are in state: closed) Port State Service 21/tcp open ftp 25/tcp open smtp 80/tcp open http 111/tcp open sunrpc 135/tcp open loc-srv 443/tcp open https 1027/tcp open IIS 1030/tcp open iad1 2306/tcp open unknown 5631/tcp open pcanywheredata 7937/tcp open unknown 7938/tcp open unknown 36890/tcp open unknown Nmap run completed -- 1 IP address (1 host up) scanned in 2594.472 seconds
Do scan acima, nós
aprendemos que a RIAA não tem consciência da
segurança (note as portas abertas do PC Anywhere,
Portmapper, e Legato nsrexec). Desde que aparentemente eles
não tenham um firewall, tão pouco
terão um IDS. Porém se tiverem, ele
irá acusar 'kiosk.adobe.com' como o culpado do scan. A
opção -P0 previne o
Nmap de enviar um ping inicial à máquina RIAA.
Isto degrada a performance do scan (menos
informações de tempo disponíveis),
porém assegura que nenhum pacote será enviado ao
destino do seu IP real.
Este scan levou um longo tempo porque todas 65535 portas foram varridas
-- omita a opção "-p-" se você deseja
que sejam usadas apenas as portas conhecidas e as de 1-1024. Esteja
certo de encontrar seu próprio zombie -- kiosk
não é muito confiável e
poderá desaparecer ou ser monitorada de perto.
Felizmente, exsitem várias defesas que podem ser aplicadas
para preventir maioria dos ataques IPID:
Administradores de
rede:
Provedores de Internet (ISPs)
Vendedores de SO
Eu ia descutir sobre desafios da implementação em
programar Idlescanners rápidos e precisos.
Entretanto, poucos de vocês estão fazendo isso, e
os que estão fazendo, podem ler o código fonte do
Nmap e outros
scanners. Então eu irei citar alguns pontos importantes.
Esta seção também incluí
alguns desafios encontrados por usuários de ferramentas.
- Desempenho -- varrer uma porta por vez
(como no diagrama acima) é horrívelmente lento
para milhares de portas. Nmap contorna isso enviando mais de 100
checagens em paralelo. Normalmente, todas portas irão estar
fechadas se o IPID do zombie não for incrementado. Se o Nmap
encontrar que o IPID incrementa, então ele
limitar-se-á à busca de portas abertas usando uma
abordagem de pesquisa binária.
- Hosts não ociosos -- Idlescan
funciona
contando o número de pacotes enviados por um zombie e
assumindo que estes pacotes são respostas aos pacotes
originados do seu destino. Portanto, pacotes externos enviados por um
zombie não ocioso causa uma confusão
significativa. O Nmap tenta contornar este problema com
retransmissão de checagens e outras técnicas para
detectar resultados falsos. Por exemplo, Nmap conhece algo que
é errado se ele checa 6 portas e o IPID incrementa 10 ou 20.
Nmap também ajusta seu tempo de paralelismo para compensar
hosts que estão ligeiramente ativos ou que descartam pacotes
quando eles são detectados. Entretanto, o Nmap
não será confiável com zombies
altamente ativos. Uma técnica para manusear zombies
altamente ativos é enviar um grande número
(dezenas ou centenas) de checagens para cada porta. Esta
técnica de "força bruta" pode esconder uma
pequena quantidade de tráfego chamado "ruído
branco". Infelizmente, o custo de disto é a largura de banda
significante, scans lentos e a possibilidade de inundar (Syn flood) seu
destino. Thomas Olofsson demonstrou uma ferramente para fazer isso em
sua apresentação para o 2001 Black Hat Briefings.
Sua (Powerpoint) apresentação de slides
está disponível
aqui.
- Filtros de saída -- e
você não pode forjar pacotes po causa de um filtro
de saída do seu ISP, tente um novo ISP ou (para
usuários avançados), um túnel IP.
Você pode tentar também enviar de outra
máquina da sua mesma rede (menos provável de
estar filtrada).
- Zombies imunes -- Alguns hosts
não funcionarão como zombies por causa de um
tráfego substancial ou por causa de um sistema operacional
imune. Na maioria dos casos, pode-se simplesmente utilizar um zombie
diferente.
| Mais
diversão com previsão de IPID |
Enquanto este artigo
é focado na utilização de
seqüenciais IPID previsíveis para varredura de
portas, há muitos outras maneiras de explorar esta
informação. Aqui está uma breve lista:
- Análise
de Tráfego
-- IPID seqüenciais expõem o número de
pacotes enviados por um host em um dado período. Isto pode
ser usado para estimar o tráfego do site, determinar quando
pessoas efetuam logon, etc.
- Detecção
de Host Alias
-- Algumas vezes, um simples host terá múltiplos
endereços IP em interfaces ethernet. Você pode
determinar quais IPs batem com o host, procurando por
seqüências de números IP ID similares.
- Demultiplexação
de balanço de carga (load balancer) -- Esta
técnica é quase o inverso da técnica
acima. Grandes sites usam equipamentos de balanço de carga
de forma que um simples endereço é mapeado para
um pequeno farm de servidores. Levando em
consideração os valores IPID, você pode
determinar quantas máquinas estão
atrás de um balanceador de carga e à qual delas
está conectada. Por exemplo, o campo "id" na
execução seguinte do hping2 faz com que seja
óbvio que beta.search.microsoft.com é controlado
por 2 máquinas atrás de um balanceador de carga
(207.46.197.115).
# hping2 -c 10 -i 1 -p 80 -S beta.search.microsoft.com. HPING beta.search.microsoft.com. (eth0 207.46.197.115): S set, 40 headers + 0 data bytes 46 bytes from 207.46.197.115: flags=SA seq=0 ttl=56 id=57645 win=16616 rtt=21.2 ms 46 bytes from 207.46.197.115: flags=SA seq=1 ttl=56 id=57650 win=16616 rtt=21.4 ms 46 bytes from 207.46.197.115: flags=RA seq=2 ttl=56 id=18574 win=0 rtt=21.3 ms 46 bytes from 207.46.197.115: flags=RA seq=3 ttl=56 id=18587 win=0 rtt=21.1 ms 46 bytes from 207.46.197.115: flags=RA seq=4 ttl=56 id=18588 win=0 rtt=21.2 ms 46 bytes from 207.46.197.115: flags=SA seq=5 ttl=56 id=57741 win=16616 rtt=21.2 ms 46 bytes from 207.46.197.115: flags=RA seq=6 ttl=56 id=18589 win=0 rtt=21.2 ms 46 bytes from 207.46.197.115: flags=SA seq=7 ttl=56 id=57742 win=16616 rtt=21.7 ms 46 bytes from 207.46.197.115: flags=SA seq=8 ttl=56 id=57743 win=16616 rtt=21.6 ms 46 bytes from 207.46.197.115: flags=SA seq=9 ttl=56 id=57744 win=16616 rtt=21.3 ms --- beta.search.microsoft.com. hping statistic --- 10 packets tramitted, 10 packets received, 0% packet loss round-trip min/avg/max = 21.1/21.3/21.7 ms
- Detecção
de SO
-- Como já foi discutido, sistemas operacionais diferente
largamente em como eles geram os números de IP ID. Nmap usa
esta informação para ajudar a determinar qual
versão de SO um sistema remoto está rodando. Mais
detalhes nesta técnica estão
disponíveis
aqui.
- Deteção do conjunto de
regras do firewall -- O valor IPID pode ajudar a mapear as
regras de um firewall. Aqui está um simples exemplo:
- Checa se o IPID da máquina destino
está atrás de um firewall
- Envia um pacote de ping "de" um host dentro do
firewall do mesmo destino.
- Checa o IPID novamente. Se ele incrementou por 2 (um
para a resposta do ping e outro para o 2a. checagem de IPID), seu ping
forjado atravessou. Tráfego externo pode interferir, mas um
novo teste pode garantir a precisão.
Esta técnica pode ser expandida em muitas maneiras - Eu
poderia (e provavelmente) escrever um artigo inteiro descrevendo elas.
Nota que todos passos acima podem ser realizados com o Hping.
- Nmap, que agora
incluí um Idlescan, está disponível
em: http://nmap.org/
-
A técnica básica de scan por IPID foi inventada
por Antirez (Salvator Sanfilippo). Sua página
está em:
http://www.kyuzz.org/antirez/.
-
Antirez também desenvolveu sua excelente ferramenta Hping , que
é tremendamente útil para testes
baixo-nível de IPID.
-
Liquidk postou
uma PoC (prova-de-conceito) de um scaner IPID e cunhou o termo
"Idlescan" em 1999. A url para este post não mais funciona,
porém o fonte está disponível
aqui.
- Thomas Olofsson escreveu e demonstrou uma ferramenta de scan IPID
no 2001 Black Hat Briefings. Sua (powerpoint)
apresentação de slides está disponível aqui
e proporciona um bom apanhado sobre a técnica básica.
Como mecionado antes neste artigo, sua ferramenta é
preferível ao Nmap em casos onde o "Idle zombie host" não
está realmente ocioso (Idle). Infelizmente, eu não tenho
uma URL funcionando para esta ferramenta.
|