Page suivante   Page précédente   Table des matières  

4. Les outils du métier : nmap

Par Josh Flechtner jafgon@bright.net

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
Plate-formes : Linux, FreeBSD, NetBSD, OpenBSD, Solaris, IRIX, BSDI, SunOS, HP-UX, AIX, Digital UNIX, Cray UNICOS et Windows NT.

4.1 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 des hôtes 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). Mais peut-être 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 compréhensible 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 !)

4.2 Obtenir nmap

    Quelques distributions Linux vous proposent nmap dès le processus d'installation. Si vous n'avez pas nmap alors commençez par vous emparer d'une copie de la dernière parution et faites-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 la 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. Déplacez-vous dans 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/local/bin. A partir de maintenant nous sommes prêts à exécuter nmap.

4.3 Utiliser Nmap

Les types de balayage

    Sans plus de cérémonies, frottons nous à nmap. Nous aurons d'abord besoin d'une adresse à 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 faisons tourner 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 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).

    Vous n'êtes pas sur un LAN local ? Vous travaillez sur une machine connectée à un modem ? 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 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ée par 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 fait tourner 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 -- arbre de noël) 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 sur des machines Linux, il est particulièrement rapide sur 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 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.

4.4 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 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 

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

4.5 Plus de « fun » avec Nmap

    Au lieu de nous limiter à scanner juste une cible, élargissons notre horizon vers des choses meilleures et plus grandes. Dans l'exemple 2 nous avons basé notre scan sur notre adresse IP. En utilisant cette adresse à 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 rediriger ces résultats vers un fichier au format lisible par l'homme ou compréhensible par une machine, pour des références ultérieure et cela en ajoutant l'option correspondante : Pour créer un fichier de sortie avec un format humainement lisible, ajouter l'option -oN <nom de fichier texte> à votre commande comme ceci :


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

    Vous préférez un fichier au format compréhensible par une machine ? Entrer -oM <nom de fichier texte> pour diriger la sortie vers un fichier au format compréhensible pas 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'ai eu à exécuter mon premier scan d'envergure sur 250 machines consécutives en utilisant un numéro IP arbitraire (nmap -sX -O -oN echantillon.txt XXX.XXX.XXX.0-250). A ma grande surprise, j'avais affaire à 250 machines Linux vierges et 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 fait tourner 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 Utilise le mode verbeux 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.

4.6 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 sur toutes les machines comprises 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 s'en servir ultérieurement :


    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 IP se situerait entre 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 tiré directement 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 vous êtes nouveau dans l'univers Linux et connecté au réseau Internet via DSL ou un modem câble.

4.7 Interfaces graphiques à Nmap

    Maintenant, pour ceux d'entre vous qui préferent ne pas travailler en ligne de commande (quelle honte !) il existe des interfaces 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, 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/

4.8 Conclusion

    Ceci achève notre rapide tour d'horizon de 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, soit m'être envoyés en personne à jafgon@bright.net, ou bien être envoyées à fyodor@insecure.org. Bon balayage.

Copyright 1999, Josh Flechtner. Paru dans le numéro 56 de la Linux Gazette d'août 2000.

Traduction française de Wilane Ousmane.


Page suivante   Page précédente   Table des matières