Table of Contents
nmap
network mapper http://www.insecure.org/nmap/
But: recenser les services sur une machine.
Il y a 5 méthodes principales pour repérer les ports ouverts.
TCP connect
nmap 192.168.2.51
Pareil que
nmap -sT 192.168.2.51
- -s = scan
- -T = TCP
Il va essayer d'établir une connexion TCP complète (syn, syn-ack, ack) sur chaque port essayé.
Si la machine répond avec SYN-ACK, le port est ouvert. Sinon, elle répond SYN-RST (reset).
SYN stealth
Il faut être root.
nmap -sS 192.168.2.51
Envoie SYN, reçoit SYN-ACK (ou SYN-RST si le port est fermé), renvoie RST (reset = abort) → la connexion n'est pas logguée. C'est une connexion semi-ouverte (half-open connection). Le principe est le même que dans le cas de figure précédent.
TCP FIN
Le flag FIN annonce la fin normale (propre) de la connexion TCP. Si une machine envoie un paquet dans lequel seul le flag FIN est positionné à 1 et si la machine destination est compatible à la RFC 793 (définition de TCP/IP = pas les machine avec Windows), elle doit renvoyer un paquet RST si le port est ouvert.
nmap -sF 192.168.2.51
Pour s'en protéger:
iptables -A INPUT -p tcp --tcp-flags ALL FIN -j DROP
TCP NULL
Envoie un paquet TCP avec aucun flag mis à un. En principe, si le port est ouvert, la machine doit renvoyer un RST.
nmap -sN 192.168.2.51
Pour s'en protéger:
iptables-A INPUT -p tcp --tcp-flags ALL NONE -j DROP
TCP Xmas Tree
2 types:
- tous les bits positionné à un (inverse de TCP NULL)
- nmap met à un les bits: FIN (fin), PSH (push), URG (urgent) et les autres bits à zéro
nmap -sX 192.168.2.51
Pour se protéger de la première:
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
De la seconde:
iptable -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP
Comment définir des règles sur les flags des paquets TCP?
iptables -A INPUT -p tcp --tcp-flags ALL SYN,ACK -j DROP
signifie si bits SYN et ACK = 1 et le reste = 0 → jette le paquet
ALL = ceux à aller regarder SYN,ACK = doivent être à un.
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN SYN,ACK -j DROP
Si FIN=0, SYN=1 et ACK=1 → jette le paquet.
Exercice
Depuis machine A (IP 192.168.2.42), tester machine B (IP: 192.168.2.42). Puis A se protège avec une règle. Puis B réessaye
- TCP connect:
- machine A:
nmap 192.168.2.111
- machine B (règle pour se protéger de cette attaque):
iptables -A INPUT -s 192.168.2.42 -m state --state NEW -j DROP
- lorsqu'on est protégé, nmap signale que tous les ports sont fermés
- SYN stealth: pareil que pour TCP connect
- TCP FIN:
- machine A:
nmap -sF 192.168.2.51
- machine B (protection):
iptables -A INPUT -s 192.168.2.42 -p tcp --tcp-flags ALL FIN -j DROP
- lorsqu'on est protégé, nmap signale que tous les ports sont ouverts ou filtrés
- TCP NULL:
- machine A:
nmap -sN 192.168.2.51
- machine B (protection):
iptables -A INPUT -s 192.168.2.42 -p tcp --tcp-flags ALL NONE -j DROP
- lorsqu'on est protégé, nmap signale que tous les ports sont ouverts ou filtrés
- TCP Xmas Tree, type 1:
- machine A:
nmap -sX 192.168.2.51
- machine B (se protéger):
iptables -A INPUT -s 192.168.2.42 -p tcp --tcp-flags ALL ALL -j DROP
- lorsqu'on est protégé, nmap signale que tous les ports sont ouverts ou filtrés
- TCP Xmas Tree, type 2:
- machine A:
nmap -sX 192.168.2.51
- machine B (se protéger):
iptables -A INPUT -s 192.168.2.42 -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP
- lorsqu'on est protégé, nmap signale que tous les ports sont ouverts ou filtrés
Lorsqu'on a mis les 5 règles ci-dessus en place, les scans TCP nmap sont inopérants.
Quel OS tourne sur telle machine?
nmap -v -O 192.168.2.51
Où se trouve l'information? dans /usr/share/nmap/nmap-os-fingerprints
Scanner un réseau
nmap -v -O 192.168.2.0/24
Spoofing
nmap -v -D 192.168.2.10 192.168.2.111
Le scan a l'air de venir de l'IP 192.168.2.10 en plus de l'IP de la machine (il faut bien qu'il y ait des paquets sources de la machine scannant, sinon, elle ne reçoit rien).
On peut en mettre plusieurs:
nmap -v -D 192.168.2.10,192.168.12.54,125.42.98.74 192.168.2.111
Output
nmap peut sortir un fichier text, texte facile pour la commande grep, XML, …
En texte:
nmap 192.168.2.0/24 -oN fichier_log_nmap.txt
En fichier prêt pour grep:
nmap 192.168.2.0/24 -oG fichier_log_grep_nmap.txt
Ca permet par exemple de trouver les port 80 (serveurs web) ouverts sur le réseau.
En fichier XML:
nmap 192.168.2.0/24 -oX fichier_log_xml_nmap.txt
Exercice
Que fait nmap pour localiser les machines? Réponse à chercher en lançant ethereal sur la machine scannée: un paquet ICMP (ping) suivi d'un paquet TCP avec un flag ACK. Il suffit donc de 2 règles pour apparaître invisible à nmap:
iptables -A INPUT -p tcp --tcp-flags ALL ACK -j DROP iptables -A INPUT -p ICMP -j DROP