
Um dos primeiros passos em qualquer missão de reconhecimento de
uma rede é reduzir um conjunto (às vezes enorme) de faixas de endereços
IP, em uma lista de anfitriões(hosts) activos e interessantes. Efectuar
o rastreio(scan) de cada porta de
cada endereço IP é lento e normalmente desnecessário. É claro que o
que torna um anfitrião(host) interessante depende muito do propósito do rastreio(scan).
Administradores de rede podem estar apenas interessados em hosts que
executam um determinado serviço, enquanto os auditores de segurança
podem se importar com cada dispositivo que possuir um endereço IP. Um
administrador pode se sentir à vontade em usar o ping ICMP para
localizar os anfitriões(hosts) na rede interna, enquanto um profissional externo de
análise de vulnerabilidades (penetration tester) pode utilizar um
conjunto diversificado de dezenas de sondagens numa tentativa de
enganar as restrições da firewall. As necessidades para o descobrimento de anfitrião(host) são muito diversas e,
por isso, o Nmap oferece uma ampla variedade de opções para customizar
as técnicas utilizadas. A descoberta de anfitrião(host) às vezes é chamada de
rastreo ping(ping scan), mas ela vai muito além dos simples pacotes ICMP de echo request
associados com a popular ferramenta conhecida como ping. Os usuários
podem saltar a etapa do ping inteiramente com uma lista de rastreio(scan)
(-sL ) ou desactivado o ping (-P0 ),
ou enfrentar a rede com combinações arbitrárias de sondagens
multi-portas TCP SYN/ACK, UDP, e ICMP. O objetivo dessas sondagens é
solicitar respostas que mostrem que um endereço IP está realmente activo
(é utilizado por um afitrião(host) ou dispositivo de rede). Em muitas redes,
apenas uma pequena percentagem dos endereços IP está activa em um dado
momento. Isso é particularmente comum com o espaço de endereçamento
privado ao abrigo do RFC1918 como, por exemplo, 10.0.0.0/8. Essa
rede tem 16 milhões de IPs, mas eu já a vi sendo utilizado em empresas
com menos de mil máquinas. A descoberta de anfitriões(hosts) pode encontrar essas
máquinas escassamente alocadas em um mar de endereços IP. Se nenhuma opção de descoberta de hosts for dada, o Nmap envia um
pacote TCP ACK destinado a porta 80 e uma procura ICMP Echo Request a
cada máquina-alvo. Uma exceção a isso é que um rastreio(scan) ARP é utilizado para
cada alvo localizado na rede ethernet local. Para usuários Unix sem
privilégios de shell, um pacote SYN é enviado ao invés do ack
utilizando a chamada de sistema connect() . Esses
valores default equivalem às opções -PA -PE . Esta
descoberta de anfitrião(host) frequentemente é suficiente para o rastreio(scan)
de redes locais, mas um conjunto de sondagens mais abrangentes é recomendado para
auditoria de segurança. As opções -P* (que seleccionam tipos de ping)
podem ser combinadas. Você pode aumentar as chances de penetrar numa
firewall enviando muitos tipos de sondagens, utilizando
diferentes portas/flags TCP e códigos ICMP. Note também que a descoberta
por ARP (-PR ) é feita por default contra alvos na rede
ethernet local mesmo que especifique outras opções
-P* , porque é quase sempre mais rápida e mais
eficiente. As seguintes opções controlam a descoberta de anfitriões(hosts). -sL (Listagem de rastreio(scan))A listagem de rastreio(scan) é uma forma degenerada de descoberta de
anfitriões(hosts) que simplesmente lista cada anfitrião(host) da
rede especificada, sem enviar nenhum pacote aos hosts-alvos. Por default o Nmap
fará a resolução de DNS dos anfitriões(hosts) para descobrir seus nomes.
Ainda é surpreendente a quantidade de informações úteis que
simples nomes de hosts podem dar. Por exemplo,
fw.chi.playboy.com é o firewall do escritório
de Chicago da Playboy Enterprises. Nmap também reporta o número
total de endereços IP ao final. A listagem de rastreio(scan) é um bom teste de
sanidade para assegurar que está com a lista correta de
endereços IP dos seus alvos. Se os anfitriões(hosts) mostrarem nomes de
domínios que não reconhece, vale a pena investigar melhor
para evitar o rastreio(scan) da rede da empresa errada. Uma vez que a idéia é apenas mostrar uma lista dos
hosts-alvos, as opções de funcionalidade de nível mais alto tais
como o rastreio(scan) de portas, detecção de SO, ou rastreio(scan) utilizando ping, não
podem ser combinadas com esta opção. Se deseja desactivar o
rastreio(scan) utilizando ping enquanto executa funções de nível elevado,
leia a opção -P0 . -sP (Rastreio(scan) usando Ping)Esta opção diz ao Nmap para somente
executar um rastreio(scan) usando o ping (descoberta de anfitriões(hosts)), e então
mostrar os hosts disponíveis que responderam ao scan. Nenhum teste
adicional (tais como o rastreio(scan) de portas e deteção de SO) é
executado. Isto é um pouco mais intrusivo que a listagem de rastreio(scan), e
pode ser usado para os mesmos propósitos. Permite um
reconhecimento leve de uma rede-alvo sem chamar muita atenção.
Saber quantos hosts estão ativos é mais valioso para invasores que
a lista fornecida pela listagem de rastreio(scan) com cada endereço IP e seu
nome de anfitrião(host). Administradores de sistemas frequentemente acham esta opção
valiosa. Ela pode ser facilmente utilizada para contar o número de
máquinas disponíveis em uma rede ou monitorar a disponibilidade
dos servidores. Isto é normalmente chamado de varredura com ping
(ping sweep), e é mais confiável do que fazer um ping num
endereço de broadcast, pois muitos anfitriões(rastreio(scan)hosts) não respondem a pesquisas
com broadcast. A opção -sP envia um ICMP echo request e um
pacote TCP para a porta 80 por default. Quando executada por um
usuário sem privilégios, um pacote SYN é enviado (usando uma
chamada connect() ) para a porta 80 no alvo.
Quando um usuário privilegiado tenta rastrear(scan) alvos na rede
ethernet local, requisições ARP (-PR ) são
utilizadas, a menos que --send-ip tenha sido
especificado. A opção -sP pode ser combinada com
qualquer um dos tipos de sondagens de descobrimento (as opções
-P* , excluindo -P0 ) para maior
flexibilidade. Se qualquer uma dessas opções de tipos de sondagens
e número de porta for utilizada, as sondagens default (ACK e echo
request) são sobrepostas. Quando firewalls restritivos estão
posicionados entre o host de origem que executa o Nmap e a
rede-alvo, utilizar essas técnica avançadas é recomendado. Do
contrário, hosts podem ser perdidos quando o firewall ignorar as
sondagens ou as respostas delas. -P0 (Sem ping)Esta opção salta completamente a fase
de descoberta do
Nmap. Normalmente o Nmap utiliza este estágio para determinar as
máquinas activas para o rastreio(scan) mais agressivo. Por default, o
Nmap apenas executa sondagens agressivas tais como o rastreio(scan) de
portas, detecção de versões, ou detecções do SO contra afitriões(hosts) que
foram verificados como activos. Desactivar a descoberta de anfitriões(hosts)
com -P0 faz com que o Nmap teste as funções de
rastreio(scan) solicitadas contra todos os
endereços IP alvos especificados. Portanto se um espaço de
endereçamento alvo do tamanho de uma classe B (/16) for
especificado na linha de comando, todos os 65.536 endereços IP
serão alvo do rastreio(scan). O segundo caracter da opção -P0
é um zero e não a letra O. A descoberta de anfitriões(hosts) apropriada é
desconsiderada como na listagem de rastreio(scan), mas ao invés de parar e
mostrar a lista de alvos, o Nmap continua a executar as funções
solicitadas como se cada alvo IP estivesse activo. -PS [listadeportas] (Ping usando TCP
SYN)Esta opção envia um pacote TCP vazio com a flag SYN marcada.
A porta de destino default é a 80 (configurada em tempo de
compilação pela variável DEFAULT_TCP_PROBE_PORT no
nmap.h ), mas uma porta alternativa pode ser
especificada como um parâmetro. Até uma lista de portas separadas
por vírgula pode ser especificada (p.ex.
-PS22,23,25,80,113,1050,35000 ), nesse caso as
sondagens serão tentadas contra cada porta em paralelo. A flag SYN sugere aos sistemas remotos que está
tentando estabelecer uma comunicação. Normalmente a porta de
destino estará fechada e um pacote RST (reset) será enviado de
volta. Se a porta estiver aberta, o alvo irá dar o
segundo passo do cumprimento-de-três-vias (3-way-handshake) do TCP
respondendo com um pacote TCP SYN/ACK TCP. A máquina executando o
Nmap então derruba a conexão recém-criada respondendo com um RST
ao invés de enviar um pacote ACK que iria completar o
cumprimento-de-três-vias e estabelecer uma conexão completa. O
pacote RST é enviado pelo kernel da máquina que está executando o
Nmap em resposta ao SYN/ACK inesperado, e não pelo próprio
Nmap. O Nmap não se importa se a porta está aberta ou fechada.
Tanto a resposta RST ou SYN/ACK discutidas anteriormente dizem ao
Nmap se o hosts está disponível e responsivo. Em máquinas UNIX apenas o usuário privilegiado
root é capaz, normalmente, de enviar e receber
pacotes TCP em estado bruto(raw packets). Para usuários não privilegiados um
contorno é automaticamente empregado em concordância com a chamada
de sistema connect() iniciada contra cada porta-alvo. Isso tem o
efeito de enviar um pacote SYN ao anfitrião(host) alvo em uma tentativa de
estabelecer uma conexão. Se o connect() retornar com sucesso
rápido ou com uma falha ECONNREFUSED, a pilha TCP subjacente deve
ter recebido um SYN/ACK ou RST e o anfitrião(host) é marcado como disponível.
Se a tentativa de conexão for abandonada até que um timeout
ocorra, o host é marcado como indisponível. Esse contorno também é
usado para conexões IPv6, pois o suporte a construção de pacotes
IPv6 em estado bruto(raw) ainda não está disponível no Nmap. -PA [listadeportas] (Ping usando TCP
ACK)O ping usando TCP ACK é muito similar ao recém-discutido
ping usando SYN. A diferença como poderia imaginar, é que a
flag TCP ACK é marcada ou invés da flag SYN. O pacote ACK finge
reconhecer dados de uma conexão TCP estabelecida, quando nenhuma
conexão existe de facto. Então os anfitriões(hosts) remotos deveriam sempre
responder com pacotes RST revelando sua existência no
processo. A opção -PA utiliza a mesma porta default
que a sondagem SYM (80) e pode também obter uma lista de portas
destino no mesmo formato. Se um usuário privilegiado tenta isto,
ou se um alvo IPv6 é especificado, o contorno connect() discutido
anteriormente é utilizado. Esse contorno é imperfeito pois o
connect() está realmente enviando um pacote SYN ao invés de um
ACK. O motivo para oferecer ambas as sondagens ping, que utilizam
SYN e ACK, é maximizar as chances de passar por firewalls. Muitos
administradores configuram routers e outros firewalls simples
para bloquear a entrada de pacotes SYN excepto aqueles destinados a
serviços públicos como o site web da empresa ou servidor de
correio electrónico. Isso evita as demais conexões entradas na
organização, permitindo aos usuários fazer conexões desobstruidas
à Internet. Essa aproximação não-orientada à conexão (non-stateful
ou stateless) consome poucos recursos no firewall/router e é
amplamente suportada por filtros de hardware e software. O
firewall de software Netfilter/iptables do Linux oferece a
conveniência da opção --syn para implementar essa
abordagem stateless. Quando regras stateless do firewall como
essas são implementadas, sondagens de ping usando SYN
(-PS ) muito provavelmente serão bloqueadas quando
forem enviadas à portas fechadas. Nesses casos, a sondagem ACK se
destaca pois ela simplesmente passa por essas regras. Outro tipo comum de firewall utiliza regras orientadas a
conexão que descartam pacotes inesperados. Esta característica era
encontrada inicialmente apenas em firewalls de alto-nível, embora
tenha se tornado mais comum com o passar dos anos. O sistema
Netfilter/iptables do Linux suporta esta característica através da
opção --state , que categoriza os pacotes baseados
no estado da conexão. Uma sondagem SYN tem maiores chances de
funcionar contra um sistema assim, pois pacotes ACK inesperados
são normalmente reconhecidos como falsos e descartados. Uma
solução para esse dilema é enviar ambas as sondagens SYN e ACK
especificando -PS e -PA . -PU [listadeportas] (Ping usando UDP)Outra opção de descoberta de anfitriões(hosts) é o ping usando UDP, que
envia um pacote UDP vazio (a menos que
--data-length seja especificado) para as portas
informadas. A listadeportas tem o mesmo formato que os discutidos
anteriormente nas opções -PS e
-PA . Se nenhuma porta for especificada, o default
é 31338. Esse default pode ser configurado em tempo de compilação
alterando DEFAULT_UDP_PROBE_PORT no nmap.h .
Uma porta alta não comum é utilizada como default porque enviar para
portas abertas normalmente é indesejado para este tipo particular
de rastreio(scan). Ao bater contra uma porta fechada na máquina-alvo, a
sondagem UDP deve criar um pacote ICMP de porta inalcançável como
resposta. Isso diz ao Nmap que a máquina está activa e disponível.
Muitos outros tipos de erros ICMP, tais como anfitrião(host)/rede
inalcançável ou TTL excedido são indicativos de um anfitrião(host) inactivo ou
inalcançável. A falta de resposta também é interpretada dessa
forma. Se uma porta aberta é alcançada, a maioria dos serviços
simplesmente ignoram o pacote vazio e falham em retornar qualquer
resposta. É por isso que a porta de sondagem default é 31338, que
pouco provavelmente estará em uso. Uns poucos serviços, tal como o
chargen, irá responder a um pacote UDP vazio, e com isso revelará
ao Nmap que a máquina está disponível. A principal vantagem deste tipo de scan é que ele passa por
firewalls e filtros que apenas examinam o TCP. Por exemplo, uma
vez eu tive um router broadband sem-fios Linksys BEFW11S4. A
interface externa desse dispositivo filtrava todas as portas TCP
por default, mas as sondagens UDP ainda causavam mensagens de
porta inalcançável, denunciando assim o dispositivo. -PE ; -PP ;
-PM (Tipos de Ping do ICMP)Além dos tipos incomuns de descoberta de anfitriões(hosts) TCP e UDP
discutidos anteriormente, o Nmap pode enviar os pacotes-padrão que
normalmente são enviados pelo popular programa ping. O Nmap
envia um pacote ICMP do tipo 8 (echo request) ao endereço IP alvo,
esperando como resposta um tipo 0 (Echo Reply) do anfitrião(host) disponível.
Infelizmente para muitos exploradores de rede, muitos anfitriões(hosts) e
firewalls actualmente bloqueiam esses pacotes, ao invés de
responder como é requerido pela RFC 1122.
Por essa razão, rastreios(scans) puramente ICMP são raramente confiáveis o
suficiente contra alvos desconhecidos na Internet. Mas para
administradores de sistemas monitorando uma rede interna eles
podem ser uma abordagem prática e eficiente. Utilize a opção
-PE para activar esse comportamento echo
request. Embora o echo request seja a pesquisa padrão de um ping
ICMP, o Nmap não pára aqui. A padronização do ICMP (RFC 792)
também especifica timestamp request, information request, e
pacotes address mask request como códigos 13, 15, e 17,
respectivamente. Apesar do propósito ostensivo dessas pesquisas
seja obter informações tais como a máscara do endereço e hora
corrente, eles podem ser facilmente utilizados para descoberta de
anfitriões(hosts). Um sistema que responda está activo e disponível. O Nmap não
implementa actualmente os pacotes de requisição de informações,
pois eles não são amplamente suportados. A RFC 1122 insiste que
“um anfitrião(host) NÃO DEVERIA implementar essas mensagens”.
Pesquisas de marcação de hora (Timestamp) e máscara de endereço
podem ser enviadas com as opções -PP e
-PM , respectivamente. Uma resposta timestamp
reply (código ICMP 14) ou uma resposta address mask reply (código
18) revela que o host está disponível. Essas duas pesquisas podem
ser valiosas quando os administradores bloqueiam pacotes echo
request especificamente e esquecem que outras pesquisas ICMP podem
ser usadas com o mesmo propósito. -PR (Ping usando ARP)Um dos cenários de uso mais comuns do Nmap é o rastreio(scan) da LAN
ethernet. Na maioria das LANs, especialmente aquelas que utilizam
a faixa de endereçamento privado ao abrigo do RFC1918, a vasta
maioria dos endereços IP nuca são utilizados. Quando o Nmap
tenta enviar um pacote IP em estado bruto(raw), tal como um ICMP echo
request, o sistema operativo deve determinar o endereço físico
de destino (ARP) correspondente ao IP-alvo de forma que ele possa
endereçar adequadamente o frame ethernet. Isso normalmente é lento
e problemático, pois os sistemas operativos não foram escritos
com a expectativa de que precisariam fazer milhões de requisições
ARP contra anfitriões(hosts) indisponíveis em um curto período de
tempo. O rastreio(scan) ARP encarrega o Nmap e seus algorítmos optimizados de
fazer as requisições ARP. E se ele conseguir uma resposta de
volta, o Nmap não precisa de se preocupar com os pacotes ping
baseados em IP, uma vez que ele já sabe que o anfitrião(host) está activo.
Isso torna o rastreio(sca) ARP muito mais rápido e mais confiável que os
rastreios(scans) baseados em IP. Portanto isso é feito por default quando se
faz o rastreio(scan) de anfitriões(hosts) ethernet que o Nmap detecta estarem posicionados em
uma rede ethernet local. Mesmo se tipos diferentes de ping (tais
como -PI ou -PS ) sejam
especificados, o Nmap usa o ARP em vez, para cada um dos alvos
que estiverem na mesma LAN. Se não quiser de forma alguma
fazer um ratreio(scan) ARP, especifique --send-ip . -n (Não faça resolução DNS)Diz ao Nmap para nunca fazer uma
resolução DNS nos endereços IP activos que ele encontrar.
Uma vez que o DNS é normalmente lento, isso acelera as
coisas. -R (resolução DNS para todos os alvos)Diz ao Nmap para fazer sempre uma
resolução DNS reversa nos endereços IP-alvos. Normalmente isto
apenas é executado quando uma máquina está activa.
|
|