A Quick Port Scanning Tutorial
Un de mes objectifs dans le développement de Nmap est de garder l’utilisation la plus courante simple, tout en conservant la flexibilité pour des analyses personnalisées et avancées. Ceci est accompli avec l’interface de ligne de commande en offrant des douzaines d’options, mais en choisissant des valeurs par défaut saines lorsqu’elles ne sont pas spécifiées. Un débutant peut commencer avec une commande aussi simple quenmap <target>
.Pendant ce temps, les utilisateurs avancés spécifient parfois tellement d’options que leur ligne terminale s’enroule autour.
Un équilibre similaire doit être trouvé avec la sortie de commande. Les résultats les plus importants doivent ressortir même pour l’utilisateur occasionnel qui n’a même pas lu la page de manuel. Pourtant, la sortie doit être suffisamment complète et concise pour convenir aux testeurs de pénétration professionnels qui utilisent Nmap contre des milliers de machines chaque jour. Les utilisateurs assez intelligents pour lire ce livre ou le code source de Nmap bénéficient d’un meilleur contrôle du scanner et d’une meilleure compréhension de ce que les résultats de Nmap signifient réellement.
Ce tutoriel démontre quelques scénarios communs de scannage de ports de Nmap et explique les résultats. Plutôt que de tenter d’être exhaustif, le but est simplement de familiariser les nouveaux utilisateurs suffisamment bien pour comprendre le reste de ce chapitre.
La commande Nmap la plus simple est juste nmap par elle-même. Cela imprime un aide-mémoire des options et de la syntaxe communes de Nmap.Une commande plus intéressante est nmap<target>
, qui fait ce qui suit :
-
Convertit
<target>
d’un nom d’hôte en une adresse IPv4 en utilisant le DNS. Si une adresse IP est spécifiée au lieu d’un nom d’hôte, cette recherche est ignorée. -
Panne l’hôte, par défaut avec un paquet de requête d’écho ICMP et un paquet TCP ACK sur le port 80, pour déterminer s’il est opérationnel. Si ce n’est pas le cas, Nmap signale ce fait et quitte. J’aurais pu spécifier
-Pn
pour sauter ce test. Voir le chapitre 3, Découverte des hôtes (« Scanning Ping »). -
Convertit l’adresse IP cible en retour au nom en utilisant une requête DNS inverse. En raison de la façon dont le DNS fonctionne, le nom inversé peut ne pas être le même que le
<target>
spécifié sur la ligne de commande. Cette requête peut être sautée avec l’option-n
pour améliorer la vitesse et la furtivité. -
Lance un scan de port TCP des 1000 ports les plus populaires listés dans
nmap-services
. Un scan furtif SYN est généralement utilisé, mais le scan connect est substitué à la place pour les utilisateurs Unix non root qui n’ont pas les privilèges nécessaires pour envoyer des paquets bruts. -
Imprime les résultats sur la sortie standard dans un format normal lisible par l’homme, et quitte. D’autres formats et emplacements de sortie (fichiers) peuvent être spécifiés, comme décrit au chapitre 13, Formats de sortie de Nmap. L’exemple 4.2 affiche les résultats lorsque scanme.nmap.org est utilisé comme
<target>
.
Exemple 4.2. Scan simple : nmap scanme.nmap.org
# Starting Nmap ( http://nmap.org )Nmap scan report for scanme.nmap.org (64.13.134.52)Not shown: 994 filtered portsPORT STATE SERVICE22/tcp open ssh25/tcp closed smtp53/tcp open domain70/tcp closed gopher80/tcp open http113/tcp closed authNmap done: 1 IP address (1 host up) scanned in 4.99 seconds
La première ligne de sortie dans l’exemple 4.2 donne simplement l’URL pour télécharger Nmap. L’heure de démarrage de Nmap et le numéro de version sont normalement fournis également, bien qu’ils aient été généralement supprimés dans ce livre pour des raisons de cohérence et pour éviter les retours à la ligne.
La ligne suivante fournit l’adresse IP cible (IPv4 dans ce cas), et le nom DNS inverse (également connu sous le nom d’enregistrement PTR) s’il est disponible. Nmap promet de montrer les « ports intéressants », bien que tous les ports scannés soient pris en compte. Les ports considérés comme les plus intéressants parce qu’ils sont ouverts ou dans un état rarement vu pour cet hôte sont listés individuellement. Lorsque plusieurs ports sont dans un même état non ouvert, ils sont considérés comme un état par défaut, et regroupés sur une seule ligne pour éviter de diluer les résultats avec des milliers d’entrées inintéressantes. Dans ce cas, Nmap note que 994 ports sont filtrés.
Le tableau des ports intéressants vient ensuite, et fournit les résultats du keycan. Les colonnes varient en fonction des options utilisées, mais dans ce cas, elles fournissent le numéro de port et le protocole, l’état et le protocole de service pour chaque port. Le service ici est juste une supposition faite en regardant le port dans nmap-services
. Le service serait listé comme unknown
si l’un des ports n’avait pas de nom enregistré dans ce fichier. Trois de ces ports sont ouverts et trois sont fermés.
Enfin, Nmap rapporte quelques statistiques temporelles de base avant de sortir.Ces statistiques sont le nombre de cibles spécifiées, le nombre de celles que le scan ping a trouvé en fonctionnement, et le temps total pris.
Bien que cette simple commande soit souvent tout ce qui est nécessaire, les utilisateurs avancés vont souvent beaucoup plus loin. Dans l’exemple 4.3, le scan est modifié avec quatre options. -p0-
demande à Nmap de scanner tous les portsTCP possibles, -v
demande à Nmap d’être verbeux à ce sujet,-A
active des tests agressifs tels que la détection d’OS distant, la détection de service/version, et le Nmap Scripting Engine(NSE). Enfin, -T4
active une politique de timing plus agressive pour accélérer le scan.
Exemple 4.3. Plus complexe : nmap -p0- -v -A -T4 scanme.nmap.org
# Starting Nmap ( http://nmap.org )Completed Ping Scan at 00:03, 0.01s elapsed (1 total hosts)Scanning scanme.nmap.org (64.13.134.52) Discovered open port 22/tcp on 64.13.134.52Discovered open port 53/tcp on 64.13.134.52Discovered open port 80/tcp on 64.13.134.52SYN Stealth Scan Timing: About 6.20% done; ETC: 00:11 (0:07:33 remaining)Completed SYN Stealth Scan at 00:10, 463.55s elapsed (65536 total ports)Completed Service scan at 00:10, 6.03s elapsed (3 services on 1 host)Initiating OS detection (try #1) against scanme.nmap.org (64.13.134.52)Initiating Traceroute at 00:1064.13.134.52: guessing hop distance at 9Completed SCRIPT ENGINE at 00:10, 4.04s elapsedHost scanme.nmap.org (64.13.134.52) appears to be up ... good.Nmap scan report for scanme.nmap.org (64.13.134.52)Not shown: 65530 filtered portsPORT STATE SERVICE VERSION22/tcp open ssh OpenSSH 4.3 (protocol 2.0)25/tcp closed smtp53/tcp open domain ISC BIND 9.3.470/tcp closed gopher80/tcp open http Apache httpd 2.2.2 ((Fedora))|_HTML title: Go ahead and ScanMe!113/tcp closed authDevice type: general purposeRunning: Linux 2.6.XOS details: Linux 2.6.20-1 (Fedora Core 5)Uptime guess: 2.457 days (since Thu Sep 18 13:13:24 2008)TCP Sequence Prediction: Difficulty=204 (Good luck!)IP ID Sequence Generation: All zerosTRACEROUTE (using port 80/tcp)HOP RTT ADDRESS9 10.36 metro0.sv.svcolo.com (208.185.168.173)10 10.29 scanme.nmap.org (64.13.134.52)Nmap done: 1 IP address (1 host up) scanned in 477.23 seconds Raw packets sent: 131432 (5.783MB) | Rcvd: 359 (14.964KB)
Nmap a certainement fourni la verbosité demandée dans l’exemple 4.3 ! Heureusement, la sortie supplémentaire est facile à comprendre. Les 13 premières lignes sont des informations d’exécution qui permettent à l’utilisateur de savoir ce qui se passe alors qu’il regarde le terminal en espérant de bonnes nouvelles. Ce qui constitue une bonne nouvelle dépend du fait qu’il s’agisse d’un administrateur système qui doit résoudre des problèmes, d’un pen-tester qui a besoin de problèmes à rapporter, ou d’un pirate informatique qui essaie de les exploiter. Une douzaine de lignes similaires ont été supprimées par souci de concision. Les lignes « discovered open port » (port ouvert découvert) fournissent une notification instantanée des ports ouverts afin qu’elle puisse commencer à les frapper avant même que le scan ne soit terminé. La ligne « scan timing » fournit une estimation de la durée de l’analyse, ce qui lui permet de savoir si elle doit continuer à regarder l’écran ou aller déjeuner. Comme les conditions du réseau (latence, congestion, largeur de bande, etc.) et les règles de filtrage des paquets varient beaucoup, les mêmes options d’analyse peuvent prendre 30 secondes contre un hôte et 45 minutes contre un autre. Si vous voulez l’estimation du temps actuel pendant l’analyse, appuyez simplement surenter.
Le tableau des ports ne montre aucun nouveau port. Tous les ports supplémentaires analysés sont dans l’état filtré, ce qui porte le total des ports filtrés de 994 à 65 530. Bien qu’il n’y ait pas de nouveaux ports détaillés, les entrées ont changé. Une nouvelle colonne VERSION
fournit le nom de l’application et les détails de la version pour le service d’écoute. Cela provient de la détection de service, une des caractéristiques activées par l’option -A
.une autre caractéristique de la détection de service est que tous les protocoles de service dans la colonne SERVICE
ont été réellement vérifiés. Dans le scan précédent, ils étaient basés sur l’heuristique relativement fragile d’une recherche de numéro de port nmap-services
.Cette recherche dans la table s’est avérée correcte cette fois, mais elle ne le sera pas toujours.
Une autre fonctionnalité ajoutée par -A
est le NmapScripting Engine,qui est discuté en profondeur dans leChapitre 9, Nmap Scripting Engine. Le seul script présenté ici est HTMLtitle
. Des dizaines d’autres scripts existent, mais aucun n’a trouvé de sortie utile pour cette machine. Les résultats du tracerouter ont également été ajoutés par -A
. Cette option est plus efficace et plus puissante que la plupart des programmes de traceroute puisque les sondes sont effectuées en parallèle et que Nmap utilise les résultats du scan pour déterminer un type de sonde favorable (paquets TCP vers le port 80 dans ce cas).
La plupart des nouvelles lignes restantes proviennent de la détection de l’OS (également activée par -A
), qui est discutée en profondeur dans leChapitre 8, Détection d’OS à distance. La dernière ligne montre que toute cette extrainfo a eu un prix – l’analyse a pris presque 100 fois plus de temps que l’Exemple 4.2, « Simple scan : nmap scanme.nmap.org » pour se terminer (477secondes par rapport à 5).