Testes rápidos em sua rede: parte 3

No texto anterior eu falei do traceroute e em algum momento disse que sabia que o serviço WEB estava rodando em um servidor de teste. Mas como eu sabia disso? Eu deixei o “segredo” para este novo texto sobre uma ferramenta muito popular e poderosa chamada “nmap”, com certeza vale a leitura.

nmap

Nmap é uma ferramenta usada para varrer todas as portas TCP/UDP em um determinado servidor ou em vários ao mesmo tempo, indicando quais estão abertas para conexão e quais não.

Há algumas dezenas de parâmetros e chaves para controlar seu funcionamento, mas não será nosso propósito agora conhecer muitos deles. Se soubermos o básico isso já será bastante útil e este é o nosso propósito para o momento.

A sintaxe básica dele é nmap <endereços IP ou faixas de rede>.

Você leu certo (“endereços” e “faixas”, assim mesmo no plural). Você pode colocar vários endereços IPs seguidos a serem testados ou mesmo várias faixas de rede, se desejar, só lembre-se que o tempo de resposta pode ser demorado se a quantidade de máquinas a serem avaliadas for muito grande ou se as redes por onde estes pacotes atravessarem forem limitadas.

Vamos ver um exemplo básico onde eu preciso apenas saber quais portas de serviço estão abertas em um determinado host.

nmap dns.google
Starting Nmap 7.80 ( https://nmap.org ) at 2021-09-27 23:08 -03
Nmap scan report for dns.google (8.8.8.8)
Host is up (0.011s latency).
Other addresses for dns.google (not scanned): 2001:4860:4860::8844 2001:4860:4860::8888 8.8.4.4
Not shown: 998 filtered ports
PORT    STATE SERVICE
53/tcp  open  domain
443/tcp open  https

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

Há algumas coisas interessantes a mostrar aqui. Eu fiz uma requisição sobre o nome de um servidor, então houve uma resolução de DNS e percebam que me foram retornados alguns endereços IP, incluindo ai IPv6 que não foram testados. Para testá-los eu deveria fazê-lo um a um manualmente ou então repetir o teste incluindo todos eles.

Como no exemplo abaixo onde testo os dois endereços IPv4 de uma só vez:

nmap 8.8.8.8 8.8.4.4
Starting Nmap 7.80 ( https://nmap.org ) at 2021-09-27 23:14 -03
Nmap scan report for dns.google (8.8.8.8)
Host is up (0.013s latency).
Not shown: 998 filtered ports
PORT    STATE SERVICE
53/tcp  open  domain
443/tcp open  https

Nmap scan report for dns.google (8.8.4.4)
Host is up (0.012s latency).
Not shown: 998 filtered ports
PORT    STATE SERVICE
53/tcp  open  domain
443/tcp open  https

Nmap done: 2 IP addresses (2 hosts up) scanned in 6.67 seconds

Desta forma podemos testar se todos os servidores retornados pelo DNS estão corretamente respondendo com as suas portas 53 e 443. O resultado esperado é que todos respondam igualmente todas as portas.

E se não tivesse? Ai é com administrador da máquina. Se este indivíduo for você, Acesse-a pelo terminal e verifique se os serviços estão rodando, ou se alguma regra de firewall está bloqueando etc. Isso será assunto para outro momento.

Uma outra informação importante aqui é que não se pode misturar testes de endereços IPv4 com endereços IPv6. Para testes deste último você deve incluir a chave “-6” que, tal como ocorria no “nslookup” e no “traceroute”, força o tráfego apenas por IPv6.

Se lembra que eu disse em algum momento que os administradores não vão facilitar a vida dos novatos? Então… o nmap usa o protocolo ICMP (ping) para validar se a máquina que você quer testar está online, mas e se o administrador bloqueou os pacotes ICMP reply (as respostas do ping)?

Observe o resultado do teste abaixo:

nmap meustorage.meudominio
Starting Nmap 7.80 ( https://nmap.org ) at 2021-09-27 23:47 -03
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 3.06 seconds

Veja a mensagem que categoricamente sugere o uso do parâmetro “-Pn” caso você tenha certeza que a máquina está online. Basta repetir o comando adicionando o parâmetro sugerido:

nmap -Pn meustorage.meudominio
Starting Nmap 7.80 ( https://nmap.org ) at 2021-09-27 23:48 -03
Nmap scan report for meustorage.meudominio (192.168.88.250)
Host is up (0.014s latency).
Not shown: 999 filtered ports
PORT     STATE  SERVICE
80/tcp open http
MAC Address: A4:EA:44:23:44:BB (Unknown)

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

Agora sim, o nmap ignorou o teste de ping e partiu direto para o scan de portas, retornando a única porta aberta. Perceba ainda que este foi o primeiro caso que o endereço MAC foi exibido. Ele sempre será exibido para máquinas na sua rede local.

Para testar portas UDP o processo é igualmente simples, bastando adicionar o parâmetro “-sU” a linha de comandos:

sudo nmap -sU 192.168.88.1
Starting Nmap 7.80 ( https://nmap.org ) at 2021-09-27 23:59 -03
Nmap scan report for _gateway (192.168.88.1)
Host is up (0.00029s latency).
Not shown: 995 closed ports
PORT     STATE         SERVICE
53/udp   open          domain
67/udp   open|filtered dhcps
68/udp   open|filtered dhcpc
123/udp  open|filtered ntp
1900/udp open|filtered upnp
MAC Address: A4:EA:44:C3:5F:EE (Unknown)

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

Neste caso temos uma porta que está aberta e algumas filtradas (há um firewall no caminho que restringe o acesso a elas) por isso este resultado.

Um recurso bem útil também, ao usar o nmap, é limitar as portas a serem testadas. Se o objetivo do seu teste é apenas verificar se dado serviço está ativo, você não precisa testar todas as portas e perder muito tempo. Você pode especificar as portas desejadas com o parâmetro “-p” e economizar um bom tempo de testes. Veja abaixo:

sudo nmap -p T:21,20 192.168.88.1 
Starting Nmap 7.80 ( https://nmap.org ) at 2021-09-28 00:11 -03
Nmap scan report for _gateway (192.168.88.1)
Host is up (0.00018s latency).

PORT   STATE  SERVICE
20/tcp closed ftp-data
21/tcp open   ftp
MAC Address: A4:EA:44:C3:5F:EE (Unknown)

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

Se você já está atento as mensagens no nmap, compare a saída anterior com esta, ambos foram no mesmo host no entanto perceba a diferença de tempo entre elas (última linha de cada teste).

Como o neste último teste eu especifiquei apenas duas portas a serem testadas, o nmap não precisou fazer aquela varredura de 1000 portas e assim o teste que anteriormente levou mais de 100s, desta vez levou menos de 1/4s para ser concluído.

Por fim, um parâmetro legal, que na maioria das vezes serve mais como curiosidade do que realmente uma opção útil.

O Parâmetro “-A” tenta adivinhar o sistema operacional rodando na máquina testada juntamente com a sua versão e um traceroute. Este é um teste bem lento e relativamente impreciso, mas se os desenvolvedores o puseram ai, deve haver um propósito para isso:

sudo nmap -A 192.168.88.1 
Starting Nmap 7.80 ( https://nmap.org ) at 2021-09-28 00:05 -03
Nmap scan report for _gateway (192.168.88.1)
Host is up (0.00036s latency).
Not shown: 993 closed ports
PORT     STATE SERVICE        VERSION
21/tcp   open  ftp            MikroTik router ftpd 6.48.3
| ftp-syst: 
|_  SYST: UNIX MikroTik 6.48.3
22/tcp   open  ssh            MikroTik RouterOS sshd (protocol 2.0)
| ssh-hostkey: 
|   1024 02:f6:d2:ce:7e:0b:ef:a2:2e:c2:3b:94:8d:80:c2:c4 (DSA)
|_  2048 fe:b1:10:d3:09:75:73:86:c4:5d:ae:ae:de:84:b2:e6 (RSA)
23/tcp   open  telnet         Linux telnetd
53/tcp   open  domain         (generic dns response: NOTIMP)
80/tcp   open  http           MikroTik router config httpd
| http-robots.txt: 1 disallowed entry 
|_/
|_http-title: RouterOS router configuration page
2000/tcp open  bandwidth-test MikroTik bandwidth-test server
8291/tcp open  unknown
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port53-TCP:V=7.80%I=7%D=9/28%Time=61528688%P=x86_64-pc-linux-gnu%r(DNSV
SF:ersionBindReqTCP,E,"\0\x0c\0\x06\x81\x84\0\0\0\0\0\0\0\0")%r(DNSStatusR
SF:equestTCP,E,"\0\x0c\0\0\x90\x84\0\0\0\0\0\0\0\0");
MAC Address: A4:EA:44:C3:5F:EE (Unknown)
Device type: general purpose
Running: Linux 2.6.X|3.X
OS CPE: cpe:/o:linux:linux_kernel:2.6 cpe:/o:linux:linux_kernel:3
OS details: Linux 2.6.32 - 3.13
Network Distance: 1 hop
Service Info: Host: MikrotikRouter; OSs: Linux, RouterOS; Device: router; CPE: cpe:/o:mikrotik:routeros, cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.36 ms _gateway (192.168.88.1)

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 173.65 seconds

Neste caso o sistema operacional identificado foi o Mikrotik RouterOS, mas nem sempre o resultado é correto. Por exemplo em um teste usando o DNS público do Google (8.8.8.8) você veria uma mensagem como:

Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
OS fingerprint not ideal because: Missing a closed TCP port so results incomplete
No OS matches for host

Estes exemplos de uso do nmap é uma pontinha do que se pode fazer com esta ferramenta. Tal como as demais, uma leitura atenta ao manual, vai mostrar parâmetros interessantes que podem valer apena testar e deixar anotado, mas por hora ficamos por aqui.

Até a próxima!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.