
Temporização (Timing) e DesempenhoUma das minhas prioridades mais altas no desenvolvimento do Nmap
tem sido o desempenho. Um scan padrão (nmap
<hostname> ) de um host em minha rede
local leva apenas um quinto de segundo. Isso mal dá tempo de piscar o
olho, mas esse tempo aumenta conforme você está escaneando dezenas ou
centenas de milhares de hosts. Além disso, certos tipos de scan, como o
escaneamento UDP ou a detecção de versão, aumentam o tempo de
escaneamento substancialmente. Da mesma forma algumas configurações de
firewall fazem o mesmo, particularmente quando limitam a taxa de
resposta. Embora o Nmap se utilize de paralelismo e muitos outros
algoritmos avançados para acelerar esses scans, o usuário tem o controle
final sobre como o Nmap executa. Usuários avançados elaboram comandos do
Nmap cuidadosamente para obter apenas as informações que importam,
sempre se preocupando com as restrições de tempo. Técnicas para melhorar os tempos de scan incluem omitir testes
não-críticos e atualizar até a versão mais recente do Nmap (melhorias de
desempenho são feitas freqüentemente). Otimizar os parâmetros de tempo
também podem fazer uma grande diferença. Essas opções estão listadas
abaixo. Algumas opções aceitam um parâmetro de tempo . É especificado em milissegundos por
padrão, embora você possa acrescentar ‘s’, ‘m’ ou ‘h’ ao valor para
especificar segundos, minutos ou horas. Dessa forma, os argumentos
--host-timeout arguments 900000 , 900s e 15m
fazem a mesma coisa. --min-hostgroup <númerodehosts> ;
--max-hostgroup <númerodehosts> (Ajuste dos
tamanhos dos grupos de scan paralelos)O Nmap tem a habilidade de fazer um scan de portas ou de
versões em múltiplos hosts em paralelo. O Nmap faz isso dividindo
a faixa de endereços IP-alvo em grupos, e então escaneando um
grupo de cada vez. No geral, grupos maiores são mais eficientes. A
contrapartida é que os resultados dos hosts não pode ser fornecido
até que o grupo inteiro tenha terminado. Portanto, se o Nmap
começou com um tamanho de grupo igual a 50, o usuário não
receberia nenhum relatório (exceto pelas atualizações mostradas no
modo verbose) até que os primeiros 50 hosts tivessem
completado. Por padrão, o Nmap assume um compromisso para resolver esse
conflito. Ele começa com um tamanho de grupo pequeno, igual a
cinco, para que os primeiros resultados venham rápido, e então
aumenta o tamanho até que chegue em 1024. O número padrão exato
depende das opções fornecidas. Por questões de eficiência, o Nmap
usa tamanhos de grupo maiores para o UDP ou para scans TCP com
poucas portas. Quando o tamanho de grupo máximo é especificado com
--max-hostgroup , o Nmap nunca irá exceder esse
tamanho. Especifique um tamanho mínimo com
--min-hostgroup e o Nmap irá tentar manter o
tamanho dos grupos acima desse nível. O Nmap pode ter que usar
tamanhos menores do que você especificou, se não houverem
hosts-alvo suficientes restantes em uma dada interface, para
completar o mínimo especificado. Ambos podem ser configurados para
manter o tamanho do grupo dentro de uma faixa específica, embora
isso raramente seja desejado. O uso primário destas opções é especificar um tamanho de
grupo mínimo grande de forma que o scan completo rode mais
rapidamente. Uma escolha comum é 256 para escanear uma rede em
blocos de tamanho Classe C. Para um scan com muitas portas,
exceder esse número não irá ajudar muito. Para scans com poucos
números de portas, um tamanho de grupo de hosts de 2048 ou mais
pode ser útil. --min-parallelism <numprobes> ;
--max-parallelism <numprobes> (Ajuste da
paralelização das sondagens)Estas opções controlam o número total de sondagens que podem
estar pendentes para um grupo de hosts. Elas são usadas para o
escaneamento de portas e para a descoberta de hosts. Por padrão, o
Nmap calcula um paralelismo ideal e constantemente atualizado
baseado no desempenho da rede. Se os pacotes estiverem sendo
descartados, o Nmap reduz o ritmo e libera menos sondagens
pendentes. O número de sondagens ideal aumenta vagarosamente
conforme a rede se mostre mais confiável. Estas opções estabelecem
limites mínimo e máximo nessa variável. Por padrão, o paralelismo
ideal pode cair até 1 se a rede se mostrar não-confiável e subir
até diversas centenas em condições perfeitas. O uso mais comum é estabelecer
--min-parallelism em um número maior que 1 para
melhorar a velocidade dos scans de hosts ou redes com desempenho
ruim. Esta é uma opção arriscada para se ficar brincando pois
configurar um valor alto demais pode afetar a precisão. Configurar
isso também reduz a habilidade do Nmap de controlar o paralelismo
dinamicamente baseado nas condições da rede. Um valor igual a dez
pode ser razoável, embora eu só ajuste esse valor como última
alternativa. A opção --max-parallelism às vezes é
configurada para evitar que o Nmap envie aos hosts mais do que uma
sondagem por vez. Isso pode ser útil em conjunto com
--scan-delay (discutido mais tarde), embora esta
última normalmente sirva bem ao propósito por si só. --min-rtt_timeout <tempo> ,
--max-rtt-timeout <tempo> ,
--initial-rtt-timeout <tempo> (Ajuste de
tempo de expiração (timeouts) das sondagens)O Nmap mantém um valor de tempo de expiração (timeout) de
execução para determinar quanto tempo ele deve esperar por uma
resposta de uma sondagem antes de desistir ou retransmitir essa
sondagem. Isso é calculado com base nos tempos de resposta de
sondagens anteriores. Se a latência da rede se mostrar
significativa e variável, esse tempo de expiração pode subir para
diversos segundos. Ele também começa com um nível conservador
(alto) e pode ficar desse jeito por um tempo, enquanto o Nmap
escaneia hosts não-responsivos. Especificar valores --max-rtt-timeout e
--initial-rtt-timeout mais baixos que o padrão
pode reduzir o tempo de scan significativamente. Isso é
particularmente verdadeiro para scans sem ping
(-P0 ), e para aqueles contra redes bastante
filtradas. Mas não se torne muito agressivo. O scan pode acabar
levando mais tempo se você especificar um valor tão baixo que
muitas sondagens irão expirar o tempo e serem retransmitidas
enquanto a resposta ainda está em trânsito. Se todos os hosts estão em uma rede local, 100 milissegundos
é um valor de --max-rtt-timeout razoavelmente
agressivo. Se houver roteamento envolvido, faça um ping de um host
da rede primeiro com o utilitário ICMP ping, ou com um formatador
de pacotes customizados como o hping2, que pode passar por um
firewall mais facilmente. Descubra o tempo máximo de round trip em
dez pacotes, mais ou menos. Coloque o dobro desse valor em
--initial-rtt-timeout e o triplo ou quádruplo
para o --max-rtt-timeout . Normalmente eu não
configuro o rtt máximo abaixo de 100ms, não importa quais os
tempos de ping. Eu também não excedo o valor 1000ms. --min-rtt-timeout é uma opção raramente
utilizada que poderia ser útil quando uma rede é tão não-confiável
que mesmo o padrão do Nmap é muito agressivo. Considerando que o
Nmap apenas reduz o tempo de expiração para um valor mínimo quando
a rede parece ser confiável, esta necessidade não é comum e
deveria ser reportada à lista de discussão nmap-dev como um
bug.
--max-retries <númerodetentativas>
(Especifica o número máximo de retransmissões de sondagens de scan
de portas)Quando o Nmap não recebe nenhuma resposta a uma sondagem de
escaneamento de portas, isso pode significar que a porta está
filtrada. Ou talvez a sondagem ou a resposta simplesmente se
perdeu na rede. Também é possível que o host-alvo tenha habilitado
uma limitação de tráfego que tenha bloqueado temporariamente a
resposta. Então o Nmap tenta novamente retransmitindo a sondagem
inicial. Se o Nmap perceber que a confiabilidade da rede está
baixa, ele poderá tentar muitas vezes ainda, antes de desistir de
uma porta. Embora isso beneficie a exatidão, isso também aumenta o
tempo de escaneamento. Quando o desempenho é crítico, os
escaneamentos podem ser acelerados através da limitação do número
de retransmissões permitidas. Você pode até especificar
--max-retries 0 para evitar qualquer
retransmissão, embora isto seja raramente recomendado. O normal (sem nenhum padrão -T ) é permitir
dez retransmissões. Se a rede aparentar ser confiável e os
hosts-alvo não estiverem limitando o tráfego, o Nmap normalmente
fará apenas uma retransmissão. Portanto, a maioria dos
escaneamentos de alvos não serão sequer afetados com a redução do
--max-retries para um valor baixo, como por
exemplo três. Tais valores podem acelerar significativamente o
escaneamento de hosts lentos (com limitação de tráfego). Você
normalmente perde alguma informação quando o Nmap desiste das
portas rapidamente, embora isso seja preferível a permitir que o
--host-timeout expire e você perca todas as
informações sobre o alvo. --host-timeout <tempo> (Desiste de
hosts-alvo lentos)Alguns hosts simplesmente levam tempo
demais para serem escaneados. Isso pode ser
causado por um hardware ou software de rede com fraco desempenho
ou pouco confiável, limitação na taxa dos pacotes ou por um
firewall restritivo. Os poucos hosts mais lentos de todos os hosts
escaneados podem acabar sendo responsáveis pela maior parte do
tempo total gasto com o scan. Às vezes é melhor cortar fora o
prejuízo e pular esses hosts logo no início. Especifique a opção
--host-timeout com o valor máximo de tempo que
você tolera esperar. Eu normalmente especifico 30m para ter certeza de que o Nmap não
gaste mais do que meia hora em um único host. Note que o Nmap pode
estar escaneando outros hosts ao mesmo tempo em que essa meia hora
desse único host está correndo, então não é uma perda de tempo
total. Um host que expira o tempo é pulado. Nenhum resultado de
tabela de portas, detecção de SO ou detecção de versão é mostrado
para esse host. --scan-delay <tempo> ;
--max-scan-delay <tempo> (Ajusta o atraso
entre sondagens)Esta opção faz com que o Nmap aguarde um tempo determinado
entre cada sondagem enviada a um dado host. Isto é particularmente
útil no caso de limitação de taxas de transferência. Máquinas
Solaris (entre muitas outras) irão normalmente responder à pacotes
de sondagens de scans UDP com apenas uma mensagem ICMP por
segundo. Qualquer número maior que isso, enviado pelo Nmap, será
um desperdício. Um --scan-delay de 1s irá manter uma taxa de transferência
baixa. O Nmap tenta detectar a limitação de taxa e ajusta o atraso
no scan de acordo, mas não dói especificar explicitamente se você
já sabe qual a taxa que funciona melhor. Quando o Nmap ajusta o atraso no scan aumentando para tentar
igualar com a limitação na taxa de transferência, o scan fica
consideravelmente mais lento. A opção
--max-scan-delay especifica o maior atraso que o
Nmap irá permitir. Estabelecer um valor muito baixo pode levar à
uma retransmissão de pacotes inútil e à possíveis portas perdidas,
quando o alvo utiliza limitação rígida de taxa de
transferência. Outro uso do --scan-delay é para evitar os
sistemas de prevenção e detecção de intrusão (IDS/IPS) baseados em
limites. -
--defeat-rst-ratelimit
Muitos hosts usam há bastante tempo a limitação de taxa de
transferência para reduzir o número de mensagens de erro ICMP
(tais como os erros de porta-inalcançavel) enviados. Alguns
sistemas agora aplicam limitações de taxa similares aos pacotes
RST (reset) que eles geram. Isso pode tornar o Nmap
consideravelmente mais lento pois o obriga a ajustar seu tempo de
forma a refletir essas limitações de taxa. Você pode dizer ao Nmap
para ignorar essas limitações de taxa (para scans de porta como o
Scan SYN que não trata portas que não
respondem como abertas )
especificando --defeat-rst-ratelimit . Utilizar esta opção pode reduzir a precisão, pois algumas
portas irão aparecer como não-respondendo porque o Nmap não
esperou tempo suficiente para uma resposta RST com taxa limitada.
No caso de um scan SYN, o "não-respondendo" resulta na porta sendo
rotulada como filtrada ao invés
de no estado fechada que vemos
quando os pacotes RST são recebidos. Esta opção é útil quando você
se importa apenas com as portas abertas e distinguir entre
portasfechadas e filtradas não vale o tempo extra. -T
<Paranoid|Sneaky|Polite|Normal|Aggressive|Insane>
(Estabelece um padrão de temporização)Embora os controles de temporização de ajuste fino
discutidos nas seções anteriores sejam poderosos e efetivos,
algumas pessoas os consideram confusos. Ainda mais, escolher os
valores apropriados pode, às vezes, tomar mais tempo do que o
próprio scan que você está tentando otimizar. Por isso, o Nmap
oferece uma aproximação mais simples, com seis padrões de
temporização. Você pode especificá-los com a opção
-T e os números (0 - 5) ou os nomes. Os nomes de
padrões são paranóico (paranoid, 0), furtivo (sneaky, 1), educado
(polite, 2), normal (3), agressivo (agressive, 4) e insano
(insane, 5). Os dois primeiros são para evitar um IDS. O modo
educado (ou polido), diminui o ritmo de escaneamento para usar
menos banda e recursos da máquina alvo. O modo normal é o padrão
e, portanto, -T3 não faz nada. O modo agressivo
acelera os scans assumindo que você está em uma rede razoavelmente
rápida e confiável. Finalmente, o modo insano assume que você está
em uma rede extraordinariamente rápida ou está disposto a
sacrificar alguma precisão pela velocidade. Esses padrões permitem que o usuário especifique o quão
agressivo desejam ser, ao mesmo tempo que deixam o Nmap escolher
os valores de temporização exatos. Os padrões também fazem ajustes
pequenos na velocidade onde ainda não existem opções para controle
de ajuste fino. Por exemplo, -T4 proibe que o
atraso dinâmico de escaneamento exceda 10ms para portas TCP e
-T5 corta esse valor para 5 milissegundos.
Padrões podem ser utilizados em conjunto com controles de ajuste
fino e esses controles que você especificar irão ter precedência
sobre o padrão de temporização do parâmetro. Eu recomendo usar
-T4 quando escanear redes razoavelmente modernas
e confiáveis. Mantenha essa opção mesmo que você adicione
controles de ajuste fino, de forma que você possa se beneficiar
com as pequenas otimizações extras que ela habilita. Se você tiver uma conexão ethernet ou de banda-larga
decente, eu recomendaria sempre utilizar -T4 .
Algumas pessoas adoram o -T5 embora seja
agressivo demais para o meu gosto. As pessoas às vezes especificam
-T2 porque acham que diminui a probabilidade de
travar os hosts ou porque elas se consideram educadas no geral.
Normalmente elas não percebem o quão lento o -T
Polite realmente é. Esses scans podem levar dez vezes
mais tempo que um scan padrão. Travamento de máquinas e problemas
com a banda são raros com as opções de temporização padrão
(-T3 ) e, portanto, eu normalmente as recomendo
para escaneadores precavidos. Omitir a detecção de versão é bem
mais eficaz do que ficar brincando com os valores de temporização
para reduzir esses problemas. Embora o -T0 e o -T1
possam ser usados para evitar alertas no IDS, eles irão leva muito
mais tempo para escanear milhares de máquinas ou portas. Para um
scan tão amplo, prefira estabelecer os valores exatos de
temporização que você precisa ao invés de depender dos valores
"engessados" de -T0 e
-T1 . O principal efeito de T0 é serializar o
scan de forma que apenas uma porta é escaneada por vez, e então,
aguardar cinco minutos entre o envio de cada sondagem.
T1 e T2 são similares mas
aguardam apenas 15 segundos e 0,4 segundos, respectivamente, entre
as sondagens. T3 é o comportamento padrão do
Nmap, que inclui o paralelismo. T4 faz o mesmo
que --max-rtt-timeout 1250 --initial-rtt-timeout 500
--max-retries 6 e estabelece o atraso máximo de scan TCP
em 10 milissegundos. T5 faz o mesmo que
--max-rtt-timeout 300 --min-rtt-timeout 50
--initial-rtt-timeout 250 --max-retries 2 --host-timeout
15m e estabelece o atraso máximo de scan TCP em
5ms.
|
|