O Nmap é executado mais lentamente como root que o usuário normal

1

Estou trabalhando em um script bash para ativar a detecção automática e o controle remoto dos gravadores de dados de propriedade da minha empresa. Os gravadores executam uma versão customizada do linux e são essencialmente poderosos ou arduinos.

A porta ethernet nos dispositivos é configurada para que, quando conectada à rede, receba uma concessão de dhcp. Para detectar os dispositivos, estou monitorando /var/lib/dhcp/dhcpd.leases na minha máquina local. Para cada entrada única, eu portscan para testar o status do servidor ssh usando nmap . Para ativar um lançamento automático deste script, ele está sendo chamado de /etc/rc3.d/rc.local e, portanto, é executado pelo root no tempo de inicialização. É aqui que as coisas ficam estranhas.

Para garantir que sempre possamos detectar novas conexões, o arquivo dhcpd.leases é verificado em um loop infinito. Também queremos manter uma baixa pegada de sistema, de modo a reduzir o tempo de cada iteração de loop, impomos um pequeno tempo limite em nosso nmap . Aqui está a linha exata em uso:

nmap --max-retries=1 -p 22 --host-timeout=50ms $ip_address

Quando executado como um usuário normal, essa linha funciona de maneira incrivelmente consistente, mas, como root, tenho que aumentar o tempo limite para 600 ms para obter resultados consistentemente positivos. Eu testei usando o comando time e aqui está um resultado normal (feito com um timeout de 600ms):

Starting Nmap 6.40 ( http://nmap.org ) at 2014-12-19 09:41 EST
Nmap scan report for 192.168.53.101
Host is up (0.00039s latency).
PORT    STATE SERVICE
22/tcp  open  ssh

Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds

real    0m0.059s
user    0m0.043s
sys     0m0.004s

Aqui está a saída para a mesma coisa, mas logado como root:

Starting Nmap 6.40 ( http://nmap.org ) at 2014-12-19 09:48 EST
Nmap scan report for 192.168.53.101
Host is up (0.00035s latency).
PORT    STATE SERVICE
22/tcp  open  ssh
MAC Address: 00:04:D1:0B:03:EC

Nmap done: 1 IP address (1 host up) scanned in 0.55 seconds

real    0m0.580s
user    0m0.056s
sys     0m0.008s

Alguma idéia do que poderia estar causando esse tempo extra e como evitá-lo? A partir de algumas pesquisas preliminares, posso ver que o root é executado com alguns padrões definidos pelos quais outros usuários não têm acesso. Como posso replicar as condições de nmap sendo executado por um usuário normal?

Como nota adicional, isso está sendo executado em uma máquina Ubuntu 14.04 LTS.

    
por JorganPubshire 19.12.2014 / 16:37

2 respostas

0

Depois de mais pesquisas, encontrei algo de interesse na seção MISC da página man. Existe uma opção para --unprivileged que força a operação como um usuário normal, mesmo como root. Isso executa significativamente menos operações e fornece menos informações de volta, mas se tudo o que você está fazendo é verificar o ssh na porta 22, ele faz isso o mais rápido possível.

    
por 19.12.2014 / 17:09
0

Não sei o que causaria a diferença nas duas corridas, mas tenho algumas ideias de consistência e velocidade que podem ajudar. Primeiro, aqui estão as diferenças nas operações entre as verificações raiz e não raiz com as opções selecionadas:

  • As varreduras não privilegiadas (não raiz) usarão um par de TCP connect() chamadas para determinar se o host está ativo; As varreduras raiz enviarão uma solicitação ARP e farejarão a rede para a resposta. A solicitação ARP deve ser mais rápida, pois as chamadas de conexão exigem que o sistema operacional execute:
    1. uma solicitação ARP ou pelo menos uma consulta de cache ARP
    2. pelo menos mais uma viagem de ida e volta para obter uma resposta do objetivo
  • Varreduras não raiz usarão uma chamada connect() TCP total para varrer a porta 22 e devem fechar o soquete quando concluídas; As varreduras raiz executarão um meio handshake, confiando no sistema operacional para fechar a conexão "em segundo plano".

Portanto, com essas opções, geralmente uma varredura privilegiada será mais rápida. No entanto, com uma conexão de rede de latência muito baixa, é possível que a configuração dos vários ouvintes do PCAP diminua um pouco a varredura de raiz. Mas provavelmente não é de onde vem o seu atraso.

Você pode acelerar sua verificação ignorando algumas das fases de digitalização que você não precisa. Tente adicionar o sinalizador -n para pular a pesquisa reversa de nome (, que não conta para o tempo limite do host, a propósito! ). Ou se você souber o alvo estiver presente e quiser apenas verificar a resposta da porta 22, adicione a opção -Pn para pular a fase de descoberta do host.

    
por 19.12.2014 / 23:11