Les outils du métier : nmap

Gazette Linux n°56 — Août 2000

Wilane Ousmane

Adaptation française 

Frédéric Marchal

Correction du DocBook 

Article paru dans le n°56 de la Gazette Linux d'août 2000.

Cet article est publié selon les termes de la Open Publication License. La Linux Gazette n'est ni produite, ni sponsorisée, ni avalisée par notre hébergeur principal, SSC, Inc.


Table des matières

Introduction
Obtenir nmap
Utiliser Nmap
Les types de balayage
Détection d'OS
Plus de « fun » avec Nmap
Assemblons les pièces.
Interfaces graphiques à Nmap
Conclusion
nmap

Network MAPper — Le cartographe des réseaux

Auteur

Fyodor

Requis

flex, bison

Homepage

http://www.insecure.org/nmap

Version stable courante

2.53

Licence

GPL

Plat-formes

Linux, FreeBSD, NetBSD, OpenBSD, Solaris, IRIX, BSDI, SunOS, HP-UX, AIX, Digital UNIX, Cray UNICOS et Windows NT.

Introduction

Le but de cet article est de familiariser le lecteur au scanner réseau nmap. Comme le souligne Lamont Grandquist (un contribuant/développeur de nmap), nmap réalise trois tâches : Il va cingler (ping) un certain nombre d'hôtes et déterminer s'ils sont en ligne. Il va scanner les ports des hôtes pour déterminer les services qu'ils offrent et il tentera de déterminer le système d'exploitation de(s) hôte(s) ciblés. Nmap permet à un utilisateur de scanner aussi bien un petit réseau local à deux noeuds qu'un grand réseau local à 500 noeuds ou plus. Nmap vous permet aussi de personnaliser vos techniques d'exploration. Des fois vous avez besoin d'un simple balayage ping ICMP (Internet Control Message Protocol). Sinon voulez-vous un balayage furtif qui renvoie un rapport décrivant les ports UDP et TCP disponibles ainsi que le système d'exploitation utilisé par l'hôte ? Vous restez toujours sur votre faim ? Vous pouvez faire tout cela et enregistrer les données sous un format lisible par l'homme ou sous un format traitable par une machine. Dans cet article je vais couvrir quelques techniques de balayage de base et intermédiaires pour que vous soyez fonctionnels avec nmap. Si vous l'aimez assez, je vous suggère d'en lire le man 50 fois puis de le traduire dans une langue étrangère de votre choix ;) (NdT : Si vous êtes francophone unijambiste, vous êtes mal barré, bravo Hertz !)

Obtenir nmap

Quelques distributions Linux viennent avec nmap comme partie de l'installation. Si vous n'avez pas nmap alors commençons par nous emparer d'une copie de la dernière parution et faisons-la fonctionner. La distribution que je vais couvrir ici sera l'archive compressée du code source, vous avez le choix entre les formats binaires rpm et source rpm. La distribution Linux que j'utilise est Red Hat 6.1. Téléchargez le fichier nmap-latest.tgz dans votre répertoire personnel. Une fois le téléchargement terminé, exécutez tar -xzvf nmap-latest.tgz et ceci va décompacter le code source sous votre répertoire personnel. Rendez-vous sur le répertoire nouvellement créé nmap-latest et lisez aussi bien le fichier README que le fichier INSTALL. Si tout se passe bien, la prochaine étape va consister à exécuter configure, make et, en tant que root, make install à partir de la racine du répertoire nouvellement créé nmap-latest. Cette dernière commande installera les binaires de nmap sous /usr/loca/bin. A partir de maintenant nous sommes prêts à exécuter nmap.

Utiliser Nmap

Les types de balayage

Sans plus de cérémonies, frottons nous à nmap. Nous aurons d'abord besoin d'une adresse a scanner. Si vous travaillez sur un LAN, prenez l'adresse de l'un de vos hôtes. Supposons que votre LAN soit constitué de deux machines : Adam et Eve. Adam (192.168.0.1) est celle sur laquelle nous tournerons nmap. Eve (192.168.0.2) est celle que nous allons scanner. En ligne de commande je vais saisir ce qui suit :

nmap 192.168.0.1

Voici l'échantillon de la sortie du scan :

Exemple 1. 

        Starting nmap V. 2.53 by fyodor@insecure.org (www.insecure.org/nmap) 
        Interesting ports on Eve (192.168.0.2): 
        (The 1511 ports scanned but not shown below are in state:closed) 
        Port                State            Service 
        21/tcp              open             ftp 
        23/tcp              open             telnet 
        25/tcp              open             smtp 
        79/tcp              open             finger 
        80/tcp              open             http 
        98/tcp              open             linuxconf 
        111/tcp             open             sunrpc 
        113/tcp             open             auth 
        513/tcp             open             login 
        514/tcp             open             shell 
        515/tcp             open             printer 
        6000/tcp            open             X11 

        Nmap run completed -- 1 IP address (1 host up) scanned in 1 second 

Ce qu'a fait l'exemple ci-dessus a été d'exécuter un scan TCP bateau envers l'adresse spécifiée. Comme on peut le voir à partir de l'échantillon, notre hôte est en ligne et nous fournit une liste de ports en écoute. Ceci est bien sûr la commande la plus simple et peut être exécutée sans aucun privilège. L'inconvénient de cette commande est que tout hôte exécutant un logiciel de log détecte très facilement ce type de scan. La sortie de cette commande est aussi obtenue avec l'option -sT comme dans : nmap -sT 192.168.0.2. (Notez que cet appel est permis à un utilisateur lambda).

Pas sur un LAN local ? Vous travaillez sur une machine isolée dial-up ? Pas de problème, exécutez ifconfig (ou utiliser votre éditeur de texte favori pour lire le fichier /var/log/messages, cherchez la dernière entrée contenant une adresse IP distante) pour obtenir votre adresse IP et commencez par là. Considérons que mon adresse IP est 206.212.15.23, nous pouvons l'utiliser comme base de notre scan. Ceci dit, examinons notre « voisin » :

nmap -sT 206.212.15.22

Voici l'échantillon de la sortie du scan :

Exemple 2. 

    Starting nmap V. 2.53 by fyodor@insecure.org (www.insecure.org/nmap) 
    Interesting ports on find2-cs-4.dial.ISP.net (206.212.15.22): 
    (1522 ports scanned but not shown below are in state: closed) 
    Port                State            Service 
    139/tcp             open             netbios-ssn 

    Nmap run completed -- 1 IP address (1 host up) scanned in 20 seconds 

Ces exemples ne montrent que des capacités basiques de nmap, ils ont toutefois le mérite de donner au débutant assez de raisons de chercher à en savoir plus, au delà d'un réseau local.

-sS A présent disons que vous voulez utiliser un scan plus furtif pour éviter d'être repéré, vous pourrez alors utiliser l'exemple précédent avec seulement l'option -sS (SYN), ainsi la commande va ressembler à ceci : nmap -sS 192.168.0.2. l'option -sS (SYN) est souvent décrite comme étant un scan « mi-ouvert » parce que vous n'initiez pas une connexion TCP complète. La sortie sera la même que celle de l'exemple 1 mais avec moins de chances d'être détecté à l'autre bout. Contrairement à l'option -sT, cette option requiert des privilèges root.

-sF -sX -sN Maintenant pour les vrais paranoïaques ou selon les circonstances, quand la cible tourne un filtre de paquets ou un logiciel de log qui détectent les scan SYN, nous pouvons utiliser un troisième type de scan avec -sF (FIN furtif) -sX (Xmas tree) ou -sN (Null). Note : Comme Microsoft met un point d'honneur à tout faire à sa façon, aucun des scan FIN, Xmas ou Null ne fonctionne avec les machines Windows95/98 ou NT. Ainsi si nous obtenons la liste des ports disponibles avec les options -sT ou -sS mais que « Tous les ports balayés sont : closed » avec les options -sF, -sX ou -sN, nous pouvons affirmer avec assurance que la cible est probablement une machine Windows. Cette façon de procéder n'est pour autant pas nécessaire pour identifier une machine Windows puisque nmap possède en interne la fonction de détection d'OS que nous couvrirons plus tard. Ces trois options requièrent également des privilèges root.

-sU Cette option commande à nmap de scanner les ports UDP (User Datagram Protocol) en écoute plutôt que les ports TCP sur un hôte cible. Bien que ce scan puisse être lent avec des machines Linux, il est particulièrement rapide contre des machines Windows. Avec nos exemples précédents Adam et Eve, exécutons (Encore une fois, des privilèges root sont nécessaires) un scan -sU sur Eve :

nmap -sU 192.168.0.2

Voici l'échantillon de la sortie du scan :

Exemple 3. 

    Starting  nmap V. 2.53 by fyodor@insecure.org (www.insecure.org/nmap) 
    Interesting ports on Eve (192.168.0.2): 
    (The 1445 ports scanned but not shown below are in state: closed) 
    Port                State                Service 
    111/udp             open                 sunrpc 
    517/udp             open                 talk 
    518/udp             open                 ntalk 

    Nmap run completed -- 1 IP address (1 host up) scanned in 4 seconds 

Comme on peut le constater, nmap scanne les 1455 ports sur Eve et nous renvoie la liste des ports UDP qu'il a trouvé à l'écoute. Des exemples 1 et 2 nous pouvons déduire que nous avons affaire à une installation Linux. Cela dit, vous vous souviendrez que j'ai mentionné en introduction que nmap fait trois choses : il ping, il balaye des ports et il détecte la cible (système d'exploitation). Maintenant que nous avons brièvement couvert les deux premiers usages, examinons la détection d'OS.

Détection d'OS

-O Ceci est l'option à utilisée pour déterminer le système d'exploitation d'une cible donnée. Il peut être utilisé avec ou sans nos options de scan mentionnées plus haut. Nmap utilise ce qu'on appelle empreinte digitale TCP/IP pour essayer de déterminer, fidèlement, l'OS de la cible donnée. Pour une lecture plus complète sur l'empreinte digitale d'un OS, veuillez jeter un coup d'oeil à l'article de Fyodor intitulé « Remote OS detection via TCP/IP fingerprinting » disponible ici. Cela dit, allons tout droit vers notre prochain exemple. En utilisant notre cible de l'exemple 1 (Eve), je vais saisir ceci : (Notez que l'option -O requiert des privilèges root)

nmap -O 192.168.0.2

Voici l'échantillon de la sortie du scan :

Exemple 4. 

    Starting nmap V. 2.53 by fyodor@insecure.org (www.insecure.org/nmap) 
    Interesting ports on Eve (192.168.0.2): 
    (The 1511 ports scanned but not shown below are in state:closed) 
    Port                State            Service 
    21/tcp              open             ftp 
    23/tcp              open             telnet 
    25/tcp              open             smtp 
    79/tcp              open             finger 
    80/tcp              open             http 
    98/tcp              open             linuxconf 
    111/tcp             open             sunrpc 
    113/tcp             open             auth 
    513/tcp             open             login 
    514/tcp             open             shell 
    515/tcp             open             printer 
    6000/tcp            open             X11 

    TCP Sequence prediction: Class=random positive increments 
                             Difficulty=1772042 (Good luck!) 
    Remote operating system guess: Linux 2.1.122 - 2.2.14 

    Nmap run completed -- 1 IP address (1 host up) scanned in 1 second 

Notez que nmap reporte les mêmes informations sur les ports disponibles que lors du premier exemple, ceci étant du à l'option -sT activée par défaut, mais aussi l'OS de la machine (dans ce cas-ci Linux) et la version du noyau... Pas mal hein ?! Nmap vient avec une base de données impressionnante d'empreintes d'OS.

Plus de « fun » avec Nmap

Au lieu de nous limiter à scanner juste une cible, élargissons notre horizon à des choses meilleures et plus grandes. Dans l'exemple 2 nous avons basé notre scan sur notre adresse IP. En utilisant cette adresse de nouveau, nous pouvons examiner bon nombre de cibles au sein de notre « communauté ». Sur la ligne de commande saisissez ce qui suit (en remplaçant l'adresse par une adresse valide de votre choix) :

nmap -sT -O 206.212.15.0-50

Ce que fait ceci est d'intimer à nmap l'ordre de scanner chaque hôte entre les adresses IP 206.212.15.0 et 206.212.15.50. Si d'aventure vous obtenez des résultats intéressants avec ce scan ou avec des scans de plus grande envergure, vous pourrez demander à nmap de rédiger ces résultats vers un fichier au format lisible par l'homme ou traitable par une machine pour des références ultérieure et cela en ajoutant l'option correspondante :

Pour créer un fichier sortie au format humainement lisible, ajouter l'option -oN <nom fichiertexte> à votre commande comme ceci :

nmap -sT -O -oN sample.txt 206.212.15.0-50

Plutôt un fichier au format traitable par une machine ? Entrer -oM <nom fichiertexte> pour diriger la sortie vers un fichier au format traitable par une machine :

nmap -sT -O -oM sample.txt 206.212.15.0-50

*Dans le temps, quand j'en étais à devenir zinzin avec toutes les options de nmap, j'eus à exécuter mon premier scan d'envergure à l'encontre de 250 machines consécutives en utilisant un nombre arbitraire (nmap -sX -O -oN echantillon.txt XXX.XXX.XXX.0-250). A ma grande surprise, j'avais affaire à 250 machines Linux pures en ligne. Une autre raison pour un passionné de Linux de ne JAMAIS s'ennuyer.

-I Ceci est une petite option commode qui active l'option de scan « TCP reverse ident » de nmap. Cette option divulgue des informations donnant le nom d'utilisateur du propriétaire des processus disponibles. Analysons un tout petit peu (notez que l'hôte doit faire tourner ident). En ligne de commande tapez cette commande à l'encontre de votre cible, dans notre cas il s'agit d'Eve qui tourne Linux :

-iR Utilisez cette option pour demander à nmap de scanner des hôtes aléatoires pour vous.

-p L'option de plage de ports vous permet de choisir le port ou les ports que vous voulez que nmap scanne.

-v Utilisez la verbosité pour afficher plus de données. Utilisez le deux fois (-v -v) pour une verbosité maximale.

-h Affiche une référence rapide des options de nmap.

Assemblons les pièces.

Maintenant que nous avons vu les trois usages basiques de nmap et quelques unes de ses autres options, mettons les toutes ensemble harmonieusement.

nmap -v -v -sS -O 209.212.53.50-100

Ceci ordonne a nmap d'effectuer un balayage furtif avec une détection d'OS à l'encontre de toutes les machines entre 209.212.5.50 et 209.212.53.100 et cela avec une verbosité maximale. Cette commande nécessitera des privilèges root à cause de chacune des options -sS et -O. Bien entendu ceci générera une quantité accablante de données donc archivons les dans un fichier au format lisible par l'homme afin de servir de référence ultérieure :

nmap -v -v -sS -O -oN sample.txt 209.212.53.50-100

Maintenant faisons en sorte que nmap exécute un scan furtif et enjoignons lui de ne considérer que les machines offrant les services http et ftp et dont l'adresse se situerait entre les adresses IP 209.212.53.50 et 209.212.53.100. Encore une fois, nous enverrons les résultats vers un fichier nommé ftphttpscan.txt (je suis accro aux logs) au format lisible par l'homme comme référence future

nmap -sS -p 23,80 -oN ftphttpscan.txt 209.212.53.50-100

Vous vous souvenez de l'option -iR mentionnée plus haut ? Utilisons-la pour un échantillonnage aléatoire des serveurs web de l'Internet avec un exemple textuellement tiré des pages man de nmap :

nmap -sS -iR -p 80

Enfin « last but not least », pendant que vous récoltez des informations, n'oubliez pas de vous « nmapper » vous même. Saisissez juste en ligne de commande : nmap 127.0.0.1. Ceci est particulièrement utile et conseillé si vou êtes nouveau dans l'univers Linux et connecté au réseau Internet via DSL ou cable modem.

Interfaces graphiques à Nmap

Maintenant pour ceux d'entre vous qui préferent ne pas travailler en ligne de commande (quelle honte !) il existe des frontaux graphiques à nmap.

NmapFE

NmapFE, écrit par Zach Smith, est inclus dans nmap-2.53.rpm et utilise l'interface GTK. NmapFE peut être trouvé sur http://codebox.net/nmapfe.html

Kmap

Kmap, écrit par Ian Zepp, il utilise le frontal QT/KDE pour nmap et peut être trouvé sur http://www.edotorg.org/kde/kmap

KNmap

KNmap, écrit par Alexandre Sagal, il s'agit d'un autre frontal KDE pour nmap et peut être trouvé sur http://pages.infinit.net/rewind

Conclusion

Ceci achève notre rapide et moche tour d'horizon avec nmap. J'espère que vous avez trouvé l'application aussi chouette que je l'ai trouvée moi-même. Les commentaires et les questions peuvent m'être envoyés à jafgon@bright.net ou à fyodor@insecure.org. Bon balayage.

Adaptation française de la Gazette Linux

L'adaptation française de ce document a été réalisée dans le cadre du Projet de traduction de la Gazette Linux.

Vous pourrez lire d'autres articles traduits et en apprendre plus sur ce projet en visitant notre site : http://www.traduc.org/Gazette_Linux.

Si vous souhaitez apporter votre contribution, n'hésitez pas à nous rejoindre, nous serons heureux de vous accueillir.