
Técnicas de Escaneamento de PortasComo um novato executando um reparo automotivo, posso brigar por
horas tentando usar minhas ferramentas rudimentares (martelo, fita
adesiva, grifo, etc.) nas tarefas. Quando eu falho miseravelmente e
reboco minha lata-velha para um mecânico de verdade ele invariavelmente
pesca aqui e ali em um enorme baú de ferramentas até pegar a coisa
perfeita que torna a tarefa uma brincadeira. A arte de escanear portas é
similar. Os experts entendem as dezenas de técnicas de escaneamento e
escolhem as que são apropriadas (ou uma combinação) para uma dada
tarefa. Usuários inexperientes e script kiddies, por outro lado, tentam
resolver todos os problemas com o scan SYN padrão. Uma vez que o Nmap é
gratuito, a única barreira para a maestria em escaneamento de portas é o
conhecimento. Isso certamente é melhor que no mundo automotivo, onde
pode ser necessário uma grande habilidade para determinar que você
precisa de um compressor de molas e então você tem que pagar milhares de
dólares por um. A maioria dos tipos de scan está disponível apenas para usuários
privilegiados. Isso acontece porque eles enviam e recebem pacotes em
estado bruto, o que requer acesso de root em sistemas Unix. Utilizar a
conta de administrador no Windows é recomendado, embora o Nmap às vezes
funcione com usuários sem privilégios nessa plataforma quando o WinPcap
foi carregado no SO. Requerer privilégio de root era uma séria limitação
quando o Nmap foi lançado em 1997, pois muitos usuários apenas tinham
acesso a contas de shell compartilhadas. Agora o mundo é diferente.
Computadores estão mais baratos, muito mais pessoas tem acesso direto e
permanente à Internet, e computadores de mesa Unix (incluindo Linux e
MAC OS X) são comuns. Uma versão para o Windows do Nmap se encontra
disponível atualmente, permitindo que se rode em muito mais computadores
de mesa. Por todas essas razões, os usuários tem menos necessidade de
executar o Nmap à partir de contas de shell compartilhadas e limitadas.
Isso é muito bom pois as opções privilegiadas tornam o Nmap muito mais
poderoso e flexível. Embora o Nmap tente produzir resultados precisos, tenha em mente
que todas as deduções são baseadas em pacotes devolvidos pelas
máquinas-alvo (ou firewalls na frente delas). Tais hosts podem ser
não-confiáveis e enviar respostas com o propósito de confundir ou
enganar o Nmap. Muito mais comum são os hosts não-de-acordo-com-a-rfc
que não respondem como deveriam às sondagens do Nmap. As sondagens FIN,
Null e Xmas são particularmente suscetíveis a esse problema. Tais
questões são específicas de determinados tipos de scan e portanto são
discutidos nas entradas individuais de cada um dos tipos. Esta seção documenta as dezenas de técnicas de escaneamento de
portas suportadas pelo Nmap. Apenas um método pode ser utilizado de cada
vez exceto que um scan UDP (-sU) pode ser combinado com
qualquer um dos tipos de scan TCP. Como uma ajuda para a memória, as
opções dos tipos de escaneamento de portas estão no formato
-s<C>, onde
<C> é um caracter proeminente no nome do scan,
normalmente o primeiro. A única exceção a essa regra é para o scan
depreciado FTP bounce (-b). Por padrão, o Nmap executa
um scan SYN, embora ele substitua por um scan connect se o usuário não
tiver os privilégios adequados para enviar pacotes em estado bruto
(requer acesso de root no UNIX) ou se alvos IPv6 forem especificados.
Dos scans listados nesta seção, os usuários não privilegiados podem
apenas executar os scans connect e ftp bounce. -sS (scan TCP SYN)O scan SYN é a opção de scan padrão e mais popular por boas
razões. Pode ser executada rapidamente, escaneando milhares de
portas por segundo em uma rede rápida, não bloqueada por firewalls
intrusivos. O scan SYN é relativamente não-obstrusivo e camuflado,
uma vez que ele nunca completa uma conexão TCP. Ele também
trabalha contra qualquer pilha TCP padronizada ao invés de
depender de idiossincrasias de plataformas específicas como os
scans Fin/Null/Xmas, Maimon e Idle fazem. Ele também permite uma
diferenciação limpa e confiável entre os estados aberto
(open), fechado (closed), e
filtrado (filtered). Esta técnica é freqüentemente chamada de escaneamento de
porta entreaberta (half-open scanning), porque você não abre uma
conexão TCP completamente. Você envia um pacote SYN, como se fosse
abrir uma conexão real e então espera uma resposta. Um SYN/ACK
indica que a porta está ouvindo (aberta), enquanto um RST (reset)
é indicativo de uma não-ouvinte. Se nenhuma resposta é recebida
após diversas retransmissões, a porta é marcada como filtrada. A
porta também é marcada como filtrada se um erro ICMP de
inalcançável é recebido (tipo 3, código 1,2, 3, 9, 10, ou
13). -sT (scan TCP connect)O scan TCP connect é o scan padrão do TCP quando o scan SYN
não é uma opção. Esse é o caso quando o usuário não tem
privilégios para criar pacotes em estado bruto ou escanear redes
IPv6. Ao invés de criar pacotes em estado bruto como a maioria dos
outros tipos de scan fazem, o Nmap pede ao sistema operacional
para estabelecer uma conexão com a máquina e porta alvos enviando
uma chamada de sistema connect(). Essa é a
mesma chamada de alto nível que os navegadores da web, clientes
P2P, e a maioria das outras aplicações para rede utilizam para
estabelecer uma conexão. É parte da interface de programação
conhecida como API de Sockets de Berkeley. Ao invés de ler as
respostas em pacotes em estado bruto diretamente dos fios, o Nmap
utiliza esta API para obter informações do estado de cada
tentativa de conexão. Quando um scan SYN está disponível é normalmente a melhor
escolha. O Nmap tem menos controle sobre a chamada de alto nível
connect() do que sobre os pacotes em estado
bruto, tornando-o menos eficiente. A chamada de sistema completa
as conexões nas portas-alvo abertas ao invés de executar o reset
de porta entreaberta que o scan SYN faz. Isso não só leva mais
tempo e requer mais pacotes para obter a mesma informação, mas
também torna mais provável que as máquinas-alvo registrem a
conexão. Um sistema IDS decente irá detectar qualquer um deles,
mas a maioria das máquinas não tem esse tipo de sistema de alarme.
Muitos serviços na maioria dos sistema Unix irão acrescentar uma
nota no syslog, e às vezes uma mensagem de erro obscura, quando o
Nmap se conecta e então fecha a conexão sem enviar nenhum dado.
Serviços verdadeiramente patéticos irão travar quando isso
acontecer, embora isso seja incomum. Um administrador que vê um
punhado de tentativas de conexão nos registros vindos de um único
sistema deveria saber que foi escaneado com connect(). -sU (scans UDP)Embora os serviços mais populares na Internet trafeguem
sobre o protocolo TCP, os serviços UDP são
amplamente difundidos. O DNS, o SNMP, e o DHCP (registrados nas
portas 53, 161/162, e 67/68) são três dos mais comuns. Pelo fato
do escaneamento UDP ser normalmente mais lento e mais difícil que
o TCP, alguns auditores de segurança ignoram essas portas. Isso é
um erro, pois serviços UDP passíveis de exploração são bastante
comuns e invasores certamente não ignoram o protocolo inteiro.
Felizmente o Nmap pode ajudar a inventariar as portas UDP. O scan UDP é ativado com a opção -sU. Ele
pode ser combinado com um tipo de escaneamento TCP como o scan SYN
(-sS) para averigüar ambos protocolos na mesma
execução. O scan UDP funciona enviando um cabeçalho UDP vazio (sem
dados) para cada porta almejada. Se um erro ICMP de porta
inalcançável (tipo 3, código 3) é retornado, a porta está
fechada. Outros erros do tipo inalcançável
(tipo 3, códigos 1, 2, 9, 10, ou 13) marcam a porta como
filtrada. Ocasionalmente um serviço irá
responder com um pacote UDP, provando que está
aberta. Se nenhuma resposta é recebida após as
retransmissões, a porta é classificada como
aberta|filtrada. Isso significa que a porta
poderia estar aberta, ou talvez que filtros de pacotes estejam
bloqueando a comunicação. Scans de versões (-sV)
podem ser utilizados para ajudar a diferenciar as portas
verdadeiramente abertas das que estão filtradas. Um grande desafio com o escaneamento UDP é fazê-lo
rapidamente. Portas abertas e filtradas raramente enviam alguma
resposta, deixando o Nmap esgotar o tempo (time out) e então
efetuar retransmissões para o caso de a sondagem ou a resposta ter
sido perdida. Portas fechadas são, normalmente, um problema ainda
maior. Elas costumam enviar de volta um erro ICMP de porta
inalcançável. Mas, ao contrário dos pacotes RST enviados pelas
portas TCP fechadas em resposta a um scan SYN ou connect, muitos
hosts limitam a taxa de mensagens ICMP de porta inalcançável por
padrão. O Linux e o Solaris são particularmente rigorosos quanto a
isso. Por exemplo, o kernel 2.4.20 do Linux limita a quantidade de
mensagens de destino inalcançável a até uma por segundo (no
net/ipv4/icmp.c). O Nmap detecta a limitação de taxa e diminui o ritmo de
acordo para evitar inundar a rede com pacotes inúteis que a
máquina-alvo irá descartar. Infelizmente, um limite como o do
Linux de um pacote por segundo faz com que um scan de 65.536
portas leve mais de 18 horas. Idéias para acelerar o escaneamento
UDP incluem escanear mais hosts em paralelo, fazer um scan rápido
apenas das portas mais comuns primeiro, escanear por detrás de um
firewall, e utilizar --host-timeout para pular os
hosts lentos. -sN; -sF;
-sX (scans TCP Null, FIN, e Xmas)Esses três tipos de scan (existem outras opções, possíveis
com a opção --scanflags descrita na próxima
seção) exploram uma brecha sutil na RFC do TCP
para diferenciarem entre portas abertas e
fechadas. A página 65 diz que “se a porta
[destino] estiver FECHADA .... um segmento entrante que não
contenha um RST irá causar o envio de um RST como
resposta.” Então a página seguinte discute os pacotes
enviados à portas abertas sem os bits SYN, RST ou ACK marcados,
afirmando que: “é pouco provável que você chegue aqui, mas
se chegar, descarte o segmento, e volte.” Quando se escaneia sistemas padronizados com o texto desta
RFC, qualquer pacote que não contenha os bits SYN, RST, ou ACK irá
resultar em um RST como resposta se a porta estiver fechada, e
nenhuma resposta se a porta estiver aberta. Contanto que nenhum
desses três bits estejam incluídos, qualquer combinação dos outros
três (FIN, PSH e URG) é válida. O Nmap explora isso com três tipos
de scan: - scan Null (
-sN) Não marca nenhum bit (o cabeçalho de flag do tcp é
0) - scan FIN (
-sF) Marca apenas o bit FIN do TCP. - scan Xmas(
-sX) Marca as flags FIN, PSH e URG, iluminando o pacote
como uma árvore de Natal.
Esses três tipos de scan são exatamente os mesmos em termos
de comportamento, exceto pelas flags TCP marcadas no pacotes de
sondagem. Se um pacote RST for recebido, a porta é considerada
fechada, e nenhuma resposta significa que está
aberta|filtrada. A porta é marcada como
filtrada se um erro ICMP do tipo inalcançável
(tipo 3, código 1, 2, 3, 9, 10, ou 13) for recebido. A vantagem principal desses tipos de scan é que eles podem
bisbilhotar através de alguns firewalls não-orientados à conexão e
de roteadores que filtram pacotes. Outra vantagem é que esses
tipos de scan são um pouco mais camuflados do que o scan SYN. Mas,
não conte com isso -- a maioria dos produtos IDS modernos podem
ser configurados para detectá-los. O maior problema é que nem
todos os sistemas seguem a RFC 793 ao pé-da-letra. Diversos
sistemas enviam respostas RST para as sondagens independentemente
do fato da porta estar aberta ou não. Isso faz com que todas as
portas sejam classificadas como fechadas. A
maioria dos sistemas operacionais que fazem isso são Microsoft
Windows, muitos dispositivos Cisco, BSDI, e o IBM OS/400. Esse
scan realmente funciona contra a maioria dos sistemas baseados em
Unix. Outro ponto negativo desses scans é que eles não conseguem
diferenciar portas abertas de alguns tipos de
portas filtradas, deixando você com a resposta
abera|filtrada. -sA (scan TCP ACK)Esse scan é diferente dos outros discutidos até agora pelo
fato de que ele nunca determina se uma porta está
aberta (ou mesmo
aberta|filtrada). Ele é utilizado para mapear
conjuntos de regras do firewall, determinando se eles são
orientados à conexão ou não e quais portas estão filtradas. O pacote de sondagem do scan ACK tem apenas a flag ACK
marcada (a menos que você use --scanflags).
Quando se escaneia sistemas não-filtrados, as portas
abertas e fechadas irão
devolver um pacote RST. O Nmap então coloca nelas o rótulo
não-filtradas (unfiltered), significando que
elas estão alcançáveis pelo pacote ACK, mas se elas estão
abertas ou fechadas é
indeterminado. Portas que não respondem, ou que devolvem certas
mensagens de erro ICMP (tipo 3, código 1, 2, 3, 9, 10, ou 13), são
rotuladas como filtradas. -sW (scan da Janela TCP)Scan da Janela é exatamente o mesmo que o scan ACK, exceto
que ele explora um detalhe da implementação de certos sistemas de
forma a diferenciar as portas abertas das fechadas, ao invés de
sempre mostrar não-filtrada quando um RST é
devolvido. Ele faz isso examinando o campo Janela TCP (TCP Window)
do pacote RST devolvido. Em alguns sistemas, as portas abertas
usam um valor positivo de tamanho de janela (mesmo para pacotes
RST), enquanto que as portas fechadas tem um valor igual a zero.
Então, ao invés de sempre mostrar uma porta como
não-filtrada quando se recebe um RST de volta,
o scan da Janela mostra a porta como aberta ou
fechada se o valor da Janela TCP no reset for
positivo ou zero, respectivamente. Este scan se baseia em um detalhe de implementação de uma
minoria de sistemas na Internet, portanto não se pode confiar
sempre nele. Sistemas que não suportam isso irão normalmente
devolver todas as portas como fechadas. É claro
que é possível que a máquina realmente não tenha nenhuma porta
aberta. Se a maioria das portas escaneadas estiver
fechada mas uns poucos números de portas comuns
(tais como 22, 25, 53) estão filtrados, o
sistema muito provavelmente está vulnerável. De vez em quando, os
sistemas irão mostrar exatamente o comportamento oposto. Se o seu
scan mostrar 1000 portas abertas e 3 fechadas ou filtradas, então
essas três podem muito bem ser as verdadeiramente abertas. -sM (scan TCP Maimon)O scan Maimon recebeu o nome de seu descobridor, Uriel
Maimon. Ele descreveu a técnica na Phrack Magazine, edição 49
(Novembro de 1996). O Nmap, que incluiu essa técnica, foi lançado
duas edições mais tarde. A técnica é exatamente a mesma que os
scans Null, FIN e Xmas, exceto que a sondagem é FIN/ACK. De acordo
com a RFC 793 (TCP), um pacote RST deveria ser gerado em resposta
a tal sondagem se a porta estiver aberta ou fechada. Entretanto,
Uriel notou que muitos sistemas derivados do BSD simplesmente
descartavam o pacote se a porta estivesse aberta. --scanflags (scan TCP Personalizado)Usuários verdadeiramente avançados do Nmap não precisam se
limitar aos tipos de scans enlatados oferecidos. A opção
--scanflags permite que você desenhe seu próprio
scan permitindo a especificação de flags TCP arbitrárias. Deixe
sua imaginação correr solta enquanto dribla sistemas de detecção
de intrusão, cujos fabricantes apenas olharam rapidamente a página
man do Nmap adicionando regras específicas! O argumento do --scanflags pode ser um
valor numérico da marca (flag) como o 9 (PSH e FIN), mas usar
nomes simbólicos é mais fácil. Apenas esprema alguma combinação de
URG, ACK,
PSH, RST,
SYN, e FIN. Por exemplo,
--scanflags URGACKPSHRSTSYNFIN marca tudo, embora
não seja muito útil para escaneamento. A ordem em que essas marcas
são especificadas é irrelevante. Além de especificar as marcas desejadas, você pode
especificar um tipo de scan TCP (como o -sA ou
-sF). Esse tipo-base diz ao Nmap como interpretar
as respostas. Por exemplo, um scan SYN considera nenhuma-resposta
como uma indicação de porta filtrada, enquanto
que um scan FIN trata a mesma como
aberta|filtrada. O Nmap irá se comportar da
mesma forma que o tipo de scan-base escolhido, exceto que ele irá
usar as marcas TCP que você especificar. Se você não escolher um
tipo-base, o scan SYN é utilizado. -sI <hostzumbi[:portadesondagem]> (scan
Idle)Este método avançado de scan permite um scan TCP realmente
cego das portas do alvo (significando que nenhum pacote é enviado
para o alvo do seu endereço IP real). Ao invés disso, um ataque
canal-lateral (side-channel) explora a previsível geração de
seqüencia de ID, conseqüencia da fragmentação do IP, no host
zumbi, para juntar informações sobre as portas abertas no alvo.
Sistemas IDS irão mostrar o scan como se viessem da máquina zumbi
que você especificou (que deve estar ativa e obedecer a alguns
critérios). Este tipo fascinante de scan é complexo demais para se
descrever completamente aqui, neste guia de referência, então eu
escrevi e postei um trabalho informal com detalhes completos em
http://nmap.org/book/idlescan.html. Além de ser extraordinariamente camuflado (devido à sua
natureza cega), este tipo de scan permite mapear relações de
confiança baseadas em IP entre máquinas. A listagem de portas
mostra as portas abertas da perspectiva do host
zumbi. Portanto você pode tentar escanear algo usando
vários zumbis que você acha que podem ser confiáveis (via regras
de roteador/filtro de pacotes). Você pode adicionar o sinal "dois-pontos", seguido do número
da porta, ao nome do host zumbi se quiser sondar uma porta em
particular no zumbi, verificando as mudanças de IPID. Do contrário
o Nmap irá utilizar a porta que ele normalmente usa por padrão
para pings tcp (80). -sO (Scans do protocolo IP)Scans do Protocolo IP permitem que você determine quais
protocolos IP (TCP, ICMP, IGMP, etc.) são suportados pelas
máquina-alvo. Isso não é, tecnicamente, um scan de portas, pois
ele varia os números do protocolo IP ao invés dos números de
portas TCP e UDP. Ainda assim, ele utiliza a opção
-p para selecionar os números de protocolos a
escanear, mostra os resultados dentro do formato normal da tabela
de portas e usa o mesmo mecanismo de escaneamento dos métodos de
descoberta de portas. Portanto ele é parecido o suficiente com um
scan de portas e por isso pertence à este lugar. Além de ser útil de seu jeito, o scan de protocolo mostra o
poder do software de código aberto. Embora a idéia fundamental
seja bastante simples, eu não havia pensado em adicioná-la e nem
havia recebido nenhuma solicitação para essa funcionalidade.
Então, no verão de 2000, Gerhard Rieger concebeu a idéia, escreveu
uma excelente alteração (patch) implementando-a, e a enviou para a
lista de discussão nmap-hackers. Eu incorporei a alteração na
árvore do Nmap e lancei uma nova versão no dia seguinte. Poucos
produtos de software comercial tem usuários entusiasmados o
suficiente para desenhar e contribuir com melhorias! O scan de protocolo funciona de uma forma similar a um scan
UDP. Ao invés de ficar repetindo alternando o campo de número de
porta de um pacote UDP, ele envia cabeçalhos de pacote IP e faz a
repetição alternando o campo de protocolo IP de 8 bits. Os
cabeçalhos normalmente estão vazios, sem conter dados, e nem mesmo
contendo o cabeçalho apropriado do suposto protocolo. As três
exceções são o TCP, o UDP e o ICMP. Um cabeçalho de protocolo
apropriado para estes é incluído, uma vez que alguns sistemas não
os enviarão caso não tenham, e porque o Nmap tem as funções para
criá-los Ao invés de observar as mensagens de erro ICMP de porta
inalcançável, o scan de protocolo fica de olho nas mensagens ICMP
de protocolo inalcançável. Se o Nmap recebe
qualquer resposta de qualquer protocolo do host-alvo, o Nmap marca
esse protocolo como aberto. Um erro ICMP de
protocolo não-alcançável (tipo 3, código 2) faz com que o
protocolo seja marcado como fechado. Outros
erros ICMP do tipo inalcançável (tipo 3, código 1, 3, 9, 10, ou
13) fazem com que o protocolo seja marcado como
filtrado (embora eles provem, ao mesmo tempo,
que o ICMP está aberto). Se nenhuma resposta
for recebida após as retransmissões, o protocolo é marcado como
aberto|filtrado. -b <host para relay de ftp> (Scan de
FTP bounce)Uma característica interessante do protocolo FTP (RFC 959) é
o suporte à conexões denominadas proxy ftp. Isso permite que um
usuário conecte-se a um servidor FTP, e então solicite que
arquivos sejam enviados a um terceiro servidor. Tal característica
é sujeita a abusos em diversos níveis, por isso a maioria dos
servidores parou de suportá-la. Um dos abusos permitidos é fazer
com que o servidor FTP escaneie as portas de outros hosts.
Simplesmente solicite que o servidor FTP envie um arquivo para
cada porta interessante do host-alvo. A mensagem de erro irá
descrever se a porta está aberta ou não. Esta é uma boa forma de
passar por cima de firewalls porque os servidores FTP de empresas
normalmente são posicionados onde tem mais acesso a outros hosts
internos que os velhos servidores da Internet teriam. O Nmap
suporta o scan de ftp bounce com a opção -b. Ela
recebe um argumento no formato
<nomedousuário>:<senha>@<servidor>:<porta>.
<Servidor> é o nome ou endereço IP de um
servidor FTP vulnerável. Assim como em uma URL normal, você pode
omitir
<nomedousuário>:<senha>,
neste caso as credenciais de login anônimo (usuário:
anonymous senha:-wwwuser@)
serão usados. O número da porta (e os dois-pontos) podem ser
omitidos, e então a porta FTP padrão (21) no
<servidor> será utilizada. Esta vulnerabilidade espalhou-se em 1997 quando o Nmap foi
lançado, mas foi corrigida amplamente. Servidores vulneráveis
ainda estão por aí, então pode valer a pena tentar se tudo o mais
falhar. Se passar por cima de um firewall é o seu objetivo,
escaneie a rede-alvo procurando por uma porta 21 aberta (ou mesmo
por qualquer serviço FTP se você escanear todas as portas com a
detecção de versão), então tente um scan bounce usando-as. O Nmap
irá dizer se o host é vulnerável ou não. Se você estiver apenas
tentando encobrir suas pegadas, você não precisa (e, na verdade,
não deveria) limitar-se a hosts na rede-alvo. Antes de sair
escaneando endereços aleatórios na Internet, procurando por
servidores FTP, considere que os administradores de sistemas podem
não apreciar o seu abuso nos servidores deles.
|
|