
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 hosts ativos e interessantes. Escanear cada porta de
cada endereço IP é vagaroso e normalmente desnecessário. É claro que o
que torna um host interessante depende muito do propósito do 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 hosts na rede interna, enquanto um profissional externo de
análise de vulnerabilidades (penetration tester) pode utilizar um
conjunto diversificado de dezenas de sondagens em uma tentativa de
burlar as restrições do firewall. As necessidades para o descobrimento de 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 host às vezes é chamada de ping
scan, mas ela vai muito além dos simples pacotes ICMP de echo request
associados com a ferramenta onipresente conhecida como ping. Os usuários
podem pular a etapa do ping inteiramente com uma lista de scan
(-sL ) ou desabilitanto 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 ativo
(é utilizado por um host ou dispositivo de rede). Em muitas redes,
apenas uma pequena percentagem dos endereços IP está ativa em um dado
momento. Isso é particularmente comum com o espaço de endereçamento
privativo abençoado pela 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 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 scan ARP é utilizado para
cada alvo localizado na rede ethernet local. Para usuários Unix sem
privilégios, com shell, um pacote SYN é enviado ao invés do ack
utilizando a chamada de sistema connect() . Esses
valores padrão equivalem às opções -PA -PE . Esta
descoberta de host freqüentemente é suficiente para escanear redes
locais, mas um conjunto de sondagens mais abrangentes é recomendado para
auditoria de segurança. As opções -P* (que selecionam tipos de ping)
podem ser combinadas. Você pode aumentar as chances de penetrar em um
firewall rígido 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 padrão contra alvos na rede
ethernet local mesmo que você especifique outras opções
-P* , porque é quase sempre mais rápida e
eficiente. Por definição, o Nmap faz a descoberta de host e então executa um
escaneamento de portas contra cada host que ele determina que está
ativo. Isto é verdade mesmo que você especifique tipos de busca
não-padronizadas de hosts, tais como sondagens UDP
(-PU ). Leia sobre a opção -sP para
saber como executar apenas uma descoberta de hosts,
ou utilize -P0 para pular a descoberta de hosts e
escanear as portas de todos os hosts-alvo. As seguintes opções controlam
a descoberta de hosts: -sL (Scan Listagem)O scan listagem é uma forma degenerada de descoberta de
hosts que simplesmente lista cada host da rede especificada, sem
enviar nenhum pacote aos hosts-alvos. Por padrão o Nmap fará a
resolução de DNS reverso dos 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. O scan listagem é um bom teste de
sanidade para assegurar que você está com a lista correta de
endereços IP dos seus alvos. Se os hosts mostrarem nomes de
domínios que você não reconhece, vale a pena investigar melhor
para evitar scanear a 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 scan de portas, detecção de SO, ou scan utilizando ping, não
podem ser combinadas com esta opção. Se você deseja desabilitar o
scan utilizando ping enquanto executa funções de nível elevado,
leia a opção -P0 . -sP (Scan usando Ping)Esta opção diz ao Nmap para somente
executar um scan usando o ping (descoberta de
hosts), e então mostrar os hosts disponíveis que responderam ao
scan. Nenhum teste adicional (tais como escaneamento de portas e
deteção de SO) é executado. Isto é um pouco mais intrusivo que o
scan listagem, 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 pelo scan listagem com cada endereço IP e seu
nome de 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 em um
endereço de broadcast, pois muitos 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 padrão. 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 escanear 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 padrão (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écnicas 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 pula completamente o estágio de descoberta do
Nmap. Normalmente o Nmap utiliza este estágio para determinar as
máquinas ativas para escaneamento mais agressivo. Por padrão, o
Nmap apenas executa sondagens agressivas tais como escaneamento de
portas, detecção de versões, ou detecções do SO contra hosts que
foram verificados como ativos. Desabilitar a descoberta de hosts
com -P0 faz com que o Nmap teste as funções de
escaneamento 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 escaneados. O segundo caracter da opção -P0
é um zero e não a letra O. A descoberta de hosts apropriada é
desconsiderada como no scan listagem, 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 ativo. -PS [listadeportas] (Ping usando TCP
SYN)Esta opção envia um pacote TCP vazio com a flag SYN marcada.
A porta de destino padrão é 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 você está
tentando estabelecer uma comunicação. Normalmente a porta de
destino estará fechada e um pacote RST (reset) será enviado de
volta. Se acontecer de a porta estar 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-nascida 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 caixas UNIX, apenas o usuário privilegiado
root é capaz, normalmente, de enviar e receber
pacotes TCP em estado bruto. 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 host alvo, em uma tentativa de
se 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 host é marcado como disponível.
Se a tentativa de conexão for deixada largada 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 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 você poderia imaginar, é que a
flag TCP ACK é marcada ou invés da flag SYN. Tal pacote ACK finge
reconhecer dados de uma conexão TCP estabelecida, quando nenhuma
conexão existe de fato. Então os hosts remotos deveriam sempre
responder com pacotes RST, revelando sua existência no
processo. A opção -PA utiliza a mesma porta padrão
que a sondagem SYN (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 roteadores e outros firwalls simples
para bloquear pacotes SYN entrantes exceto aqueles destinados a
serviços públicos como o site web da empresa ou servidor de
correio eletrônico. Isso evita as demais conexões entrantes 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 uns poucos recursos no firewall/roteador 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 tais como
essas são implementadas, sondagens de ping usando SYN
(-PS ) muito provavelmente serão bloqueadas quando
forem enviadas à portas fechadas. Em tais 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 hosts é o ping usando UDP, que
envia um pacote UDP vazio (a menos que
--data-length seja especificado) para as portas
informadas. O argumento "listadeportas" tem o mesmo formato que os
discutidos anteriormente nas opções -PS e
-PA . Se nenhuma porta for especificada, o padrão
é 31338. Esse padrão pode ser configurado em tempo de compilação
alterando DEFAULT_UDP_PROBE_PORT no nmap.h .
Uma porta alta incomum é utilizada como padrão porque enviar para
portas abertas normalmente é indesejado para este tipo particular
de scan. Ao bater contra uma porta fechada na máquina-alvo, a
sondagem UDP deve causar um pacote ICMP de porta inalcançável como
resposta. Isso diz ao Nmap que a máquina está ativa e disponível.
Muitos outros tipos de erros ICMP, tais como host/rede
inalcançável ou TTL excedido são indicativos de um host inativo 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 padrão é 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 roteador broadband sem-fio Linksys BEFW11S4. A
interface externa desse dispositivo filtrava todas as portas TCP
por padrão, mas as sondagens UDP ainda causavam mensagens de porta
inalcançável, entregando assim o dispositivo. -PE ; -PP ;
-PM (Tipos de Ping do ICMP)Além dos tipos incomuns de descoberta de hosts TCP e UDP
discutidos anteriormente, o Nmap pode enviar os pacotes-padrão que
normalmente são enviados pelo onipresente 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 host disponível.
Infelizmente para muitos exploradores de rede, muitos hosts e
firewalls atualmente bloqueiam esses pacotes, ao invés de
responder como é requerido pela RFC 1122.
Por essa razão, 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 ativar 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
hosts. Um sistema que responda está ativo e disponível. O Nmap não
implementa atualmente os pacotes de requisição de informações,
pois eles não são amplamente suportados. A RFC 1122 insiste que
“um 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 é escanear a LAN
ethernet. Na maioria das LANs, especialmente aquelas que utilizam
a faixa de endereçamento privativo abençoado pela RFC1918, a vasta
maioria dos endereços IP não são utilizados nunca. Quando o Nmap
tenta enviar um pacote IP em estado bruto, tal como um ICMP echo
request, o sistema operacional 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 operacionais não foram escritos
com a expectativa de que precisariam fazer milhões de requisições
ARP contra hosts indisponíveis em um curto período de
tempo. O scan ARP encarrega o Nmap e seus algoritmos otimizados de
fazer as requisições ARP. E se ele conseguir uma resposta de
volta, o Nmap não precisa nem se preocupar com os pacotes ping
baseados em IP, uma vez que ele já sabe que o host está ativo.
Isso torna o scan ARP muito mais rápido e mais confiável que os
scans baseados em IP. Portanto isso é feito por padrão quando se
escaneia hosts ethernet que o Nmap detecta estarem posicionados em
uma rede ethernet local. Mesmo se tipos diferentes de ping (tais
como -PI ou -PS ) seja
especificados, o Nmap usa o ARP no lugar para cada um dos alvos
que estiverem na mesma LAN. Se você não quiser de forma nenhuma
fazer um scan ARP, especifique --send-ip . -n (Não faça resolução DNS)Diz ao Nmap para nunca fazer uma
resolução DNS reversa nos endereços IP ativos 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 sempre fazer uma
resolução DNS reversa nos endereços IP-alvos. Normalmente isto
apenas é executado quando uma máquina está ativa. --system-dns (Usa a resolução DNS do
sistema)Por padrão, o Nmap resolve o endereço IP através do envio de
pesquisas (queries) diretamente aos servidores de nome
configurados em seu host, e então escuta as respostas. Muitas das
pesquisas (dezenas) são executadas em paralalo para um melhor
desempenho. Especifique esta opção se desejar utilizar a resolução
DNS do seu sistema (um endereço IP por vez, através da chamada
getnameinfo()). Isto é mais lente e raramente útil, a não ser que
haja um bug no código de DNS do Nmap -- por favor, entre em
contato conosco se for o caso. A resolução DNS do sistema é sempre
usada em escaneamento IPv6. --dns-servers <servidor1[,servidor2],...>
(Servidores a utilizar para a pesquisa DNS reversa)Por padrão o Nmap irá tentar determinar os seus servidores
DNS (para a resolução DNS reversa) através do arquivo resolv.conf
(UNIX) ou do registry (Win32). Opcionalmente você pode usar esta
opção para especificar servidores alternativos. Esta opção não é
honrada se você estiver usando --system-dns ou um
escaneamento IPv6. Utilizar múltiplos servidores DNS é,
normalmente, mais rápido e mais furtivo do que pesquisar apenas em
um servidor. O melhor desempenho é frequentemente obtido
especificando-se todos os servidores que tem autoridade sobre a
faixa de endereços IP.
|
|