NMAP(1)

NOM
nmap - Outil d'exploration réseau et analyseur de sécurité

SYNOPSIS
nmap [Type(s) de scan] [Options] <hôte ou réseau #1 ... [#N]>

DESCRIPTION
Nmap a été conçu pour que les administrateurs systèmes et les curieux puissent analyser de grands réseaux pour déterminer les hôtes actifs et les services offerts. nmap supporte un grand nombre de techniques d'analyse : UDP, TCP connect(), TCP SYN (mi ouvert), ftp proxy (attaque par rebond), Reverse-ident, ICMP (balayage de ping), FIN, balayage de ACK, Xmas Tree, balayage de SYN, Protocoles IP, et Null scan. Voir la section Types de scans pour plus de détails. Nmap offre également des caractéristiques avancées comme la détection du système d'exploitation distant via l'empreinte TCP/IP, l'analyse furtive, le délai dynamique et les calculs de retransmission, l'analyse parallèle, détection de hôtes inactifs via des pings parallèles, l'analyse avec leurres, la détection des ports filtrés, analyse directe (sans portmapper) des RCP, l'analyse avec fragmentation, et une notation puissante pour désigner les hôtes et les ports.

Des efforts significatifs ont été consacrés pour que nmap soit utilisable par des utilisateurs non-root. Malheureusement, la plupart des interfaces noyaux critiques (comme les raw sockets) requièrent les privilèges root. Nmap devrait donc être lancé en tant que root autant que possible (mais pas en setuid root, évidemment).

Le résultat de l'exécution de nmap est habituellement une liste de ports intéressants sur les machines analysées. Nmap donne pour chaque port le nom du service, le numéro, l'état et le protocole. L'état peut être « open », « filtered » ou « unfiltered ». « Open » signifie que la machine cible accepte les connexions sur ce port. « Filtered » signifie qu'un pare-feu, un filtre ou un autre obstacle réseau protège le port et empêche nmap de détecter si le port est ouvert. « Unfiltered » signifie que le port est fermé et qu'aucun pare-feu n'a interféré avec nmap. Les ports « Unfiltered » sont les plus courants et ne sont affichés que lorsque la majorité des ports analysés sont dans l'état « filtered ».

En fonction des options utilisées, nmap peut aussi rapporter les caractéristiques suivantes du système d'exploitation distant : type de système d'exploitation, séquencement TCP, noms des utilisateurs qui ont lancé les programmes qui écoutent sur chaque port, le nom DNS, et d'autres choses encore.

OPTIONS
Les options ayant du sens ensemble peuvent généralement être combinées. Certaines options sont spécifiques à certains modes d'analyses. nmap essaye de détecter et de prévenir l'utilisateur en cas de combinaisons d'options démentes ou non supportées.

Si vous êtes impatient, vous pouvez passer directement à la section des exemples à la fin, qui illustre l'usage courant. Vous pouvez aussi lancer nmap -h pour un bref rappel de toutes les options.

TYPES DE SCANS

-sS TCP SYN scan : Cette technique est souvent appelée scan « mi ouvert », parce qu'on ouvre une connexion TCP incomplète. On envoie un paquet SYN, comme pour une véritable ouverture de connexion et on attend une réponse. Un SYN ou ACK indique que le port est sous écoute, en revanche un RST signifie que personne n'écoute sur ce port. Si un SYN ou ACK est reçu, un RST est immédiatement envoyé pour interrompre la connexion. Le principal avantage de cette technique est que peu de sites l'archiveront. dans leurs logs. Malheureusement vous avez besoin des privilèges root pour construire ces paquets SYN sur mesure. C'est le scan par défaut pour les utilisateurs qui ont les privilèges root.

-sT TCP connect() scan : C'est la forme la plus simple de scan TCP. L'appel système connect() fournit par votre système d'exploitation est utilisé pour ouvrir une connexion sur tous les ports intéressants de la cible. Si le port est sur écoute, connect() réussira, sinon le port est injoignable. Le principal avantage de cette technique est qu'elle ne nécessite pas de privilèges particuliers. Presque tous les utilisateurs de toutes les machines Unix sont libres d'utiliser cet appel système.

    Ce type de scan est facilement détectable par l'hôte cible puisque les logs de la cible montreront un ensemble de connexions et de messages d'erreurs pour les services qui ont accepté la connexion qui a été immédiatement coupée. C'est le scan par défaut pour les utilisateurs normaux (non root).

-sF -sX -sN
    Stealth FIN, Xmas Tree, ou Null scan modes : Parfois même un SYN scan n'est pas suffisamment discret. Certains pare-feux et filtreurs de paquets regardent les SYNs vers les ports interdits, et des programmes comme Synlogger et Courtney peuvent détecter ces scans. En revanche, ces scans avancés devrait pourvoir passer sans problèmes.

    L'idée est qu'un port fermé est requis pour répondre au paquet de test par un RST, alors que les ports ouverts doivent ignorer les paquets en question (voir RFC 793 pp 64). Le FIN scan utilise un paquet FIN nu comme testeur, alors que le scan Xmas tree active les drapeaux URG et PUSH du paquet FIN. Le scan Null, désactive tous les drapeaux. Malheureusement Microsoft (comme d'habitude) a décidé d'ignorer complètement le standard et de faire les choses à sa façon. C'est pourquoi ce type de scan ne fonctionne pas contre les systèmes sous Windows95/NT. Le côté positif est que c'est un bon moyen de distinguer deux plates-formes. Si le scan trouve des ports ouverts, vous savez que la machine cible n'est pas sous Windows. Si un -sF,-sX, ou -sN scan montre tous les ports fermés, et qu'un scan SYN (-sS) montre tous les ports ouverts, la machine cible fonctionne probablement sous Windows. Ceci est moins utile depuis que nmap a son propre détecteur de système d'exploitation intégré. D'autres systèmes ont le même problème que Windows : Cisco, BSDI, HP/UX, MVS, et IRIX. La plupart envoient des resets depuis les ports ouverts au lieu d'ignorer le paquet.

-sP Ping scanning : Parfois vous voulez juste savoir quels sont les hôtes actifs d'un réseau. Nmap peut le faire pour vous en envoyant des paquets d'écho ICMP à chaque adresse IP du réseau spécifié. Les hôtes qui répondent sont actifs. Malheureusement, certains sites comme microsoft.com, bloquent les paquets d'écho. Toutefois nmap peut aussi envoyer un paquet TCP ack au port 80 (par défaut). Si vous recevez un RST en retour, la machine est active. Une troisième technique consiste à envoyer un paquet SYN et d'attendre un RST ou un SYN/ACK. Pour les utilisateurs non-root, la méthode connect() est utilisée.

    Par défaut (pour les utilisateurs root), nmap utilise la technique ICMP et ACK en parallèle. Vous pouvez changer l'option -P décrite plus tard.

    Remarquez que le ping est fait par défaut de toutes façons et seuls les hôtes qui répondent sont analysés. N'utilisez cette option que si vous voulez faire un balayage de ping sans faire d'analyse de ports.

-sU UDP scans : Cette méthode est utilisée pour déterminer les ports UDP (User Datagram Protocol, RFC 768) qui sont ouverts sur l'hôte Cette technique consiste à envoyer un paquet udp de 0 octet à chaque port de la machine cible. Si on reçoit un message ICMP « port unreachable », alors le port est fermé. Autrement nous supposons qu'il est ouvert.

    Certaines personne pensent que l'analyse UDP est inutile. J'ai pour habitude de leur rappeler le trou récent dans rcpbind sous Solaris. Rpcbind peut dissimuler un port UDP non documenté quelque part au dessus de 32 770. Comme découvrir un tel port sans scanner UDP ? Il y a aussi le programme cDc Back Orifice backdoor qui cache un port UDP configurable sur les machines Windows. Sans même mentionner tous les services courants qui utilisent UDP tels que snmp, tftp, NFS, etc.

    Malheureusement l'analyse UDP peut être particulièrement longue puisque la plupart des hôtes implémente une suggestion de la RFC 1812 (section 4.3.2.8) pour limiter le débit des messages d'erreurs ICMP. Par exemple, le noyau Linux (dans net/ipv4/icmp.h) limite la génération de message « destination unreachable » à 80 pour 4 secondes, avec une pénalité de 1/4 secondes si ce nombre est dépassé. Solaris a des limites encore plus strictes (à peu près 2 messages par seconde) et l'analyse nécessite encore plus de temps. Nmap détecte cette limite de débit et ralentit plutôt que d'inonder inutilement le réseau avec des paquets qui seront ignorés par la machine cible.

    Comme d'habitude, Microsoft a ignoré la suggestion RFC et n'a pas implémenté de limitation de taux dans les machines Win95 et NT. C'est pourquoi nous pouvons analyser les 65K ports d'une machine Windows très rapidement. Wahoo !

-sO IP protocol scans : Cette méthode est utilisée pour déterminer les protocoles IP supportés par l'hôte. La technique consiste à envoyer des paquets IP bruts sans entête de protocole à chaque protocole spécifié sur la machine cible. Si nous recevons un message ICMP « protocol unreachable », alors le protocole n'est pas utilisé. Autrement nous supposons qu'il est ouvert. Remarquez que certains hôtes (AIX, HP-UX, Digital UNIX) et les pare-feux peuvent ne pas renvoyer les messages « protocol unreachable », faisant apparaître ouverts tous les protocoles.

    Comme cette technique est très similaire à l'analyse des ports UDP, la limitation du débit ICMP peut aussi apparaître. Mais comme le champ protocole d'IP n'a que 8 bits, il y a au plus 256 protocoles, donc la durée restera raisonnable.

-sI <zombie host[:probeport]>
    scan paresseux : cette méthode de scan avancée autorise un scan TCP véritablement aveugle de la cible (aucun paquet ne sera envoyé à la cible depuis votre véritable adresse IP). À la place, une attaque unilatérale exploite la prédiction de la séquence d'identificateur de fragmentation IP de l'hôte zombie pour glaner des informations sur les ports ouverts de la cible. Les systèmes de détections d'intrusion indiqueront que le scan provient de la machine zombie spécifiée (qui doit être active et vérifier un certain nombre de critères). J'envisage de donner plus d'explication à http://www.insecure.org/nmap/nmap_documentation.html dans un futur proche.

En plus d'être extraordinairement furtive (grâce à sa nature aveugle), ce scan
    permet de s'affranchir des relations de confiance entre machines fondées sur l'IP. La liste de ports montre les ports ouverts tels que les voit l'hôte zombie. Aussi, vous pouvez essayer de scanner une cible en utilisant différents zombies à qui elle fait confiance (via les règles de filtrage des routeurs/paquets). Évidemment cette information est cruciale pour orienter l'attaque. Autrement votre test de pénétration va consommer des ressources considérables appartenant au système intermédiaire, pour s'apercevoir en fin de compte qu'il n'y a pas de relation de confiance entre l'hôte cible et l'IP de la machine zombie.

    Vous pouvez ajouter un deux-point suivi par le numéro de port si vous voulez tester un port particulier sur l'hôte zombie pour les changement IPID. Autrement Nmap utilisera le port qu'il utilise par défaut pour les pings TCP.

-sA ACK scan : C'est une technique avancée qui est utilisé pour découvrir les règles des pare-feux et pour savoir si on a affaire à un pare-feu ou un simple filtreur de paquets qui bloquent les paquets SYN entrant.

    Ce type d'analyse envoie un paquet ACK (avec un numéro d'acquittement/séquence aléatoire) aux ports spécifiés. Si un RST vient en retour, les ports sont classés comme non filtrés. Si rien ne revient (ou alors un message ICMP « unreachable »), les ports sont classés comme filtrés . Remarquez que nmap n'affiche pas les ports non filtrés. Aussi, si aucun port n'est affiché dans la sortie, c'est souvent un signe que tous les tests ont fonctionné (et retourné RSTs). Ce scan ne montrera évidement jamais de port ouvert.

-sW Window scan : C'est une analyse avancée très similaire au ACK scan, sauf qu'il peut parfois détecter aussi bien des ports ouverts que filtrés/non filtrés grâce à une anomalie dans la taille de la fenêtre TCP rapportée par certains systèmes. Parmi les systèmes vulnérables se trouvent certaines versions de AIX, Amiga, BeOS, BSDI, Cray, Tru64 UNIX, DG/UX, OpenVMS, Digital UNIX, FreeBSD, HP-UX, OS/2, IRIX, MacOS, NetBSD, OpenBSD, OpenStep, QNX, Rhapsody, SunOS 4.X, Ultrix, VAX, et VxWorks. Voir les archives de la liste de diffusion nmap-hackers pour une liste exhaustive.

-sR RPC scan. Cette méthode fonctionne en combinaison avec diverses méthodes d'analyse de port de nmap. Il prend tous les ports TCP/UDP ouverts et les inonde de commandes SunRPC NULL pour déterminer ceux qui sont des ports RPC, et si c'est le cas, le programme et son numéro de version qui les servent. Vous pouvez obtenir la même information que 'rpcinfo -p' même si le portmapper cible est derrière un pare-feu (ou protégé par un wrapper TCP). Les leurres ne fonctionnent pour le moment pas avec les scans RCP, et je dois ajouter le support pour les leurres dans les scans UPD RCP.

-sL scan-liste. Cette méthode génère une liste d'IP/nom sans les pinger ou les scanner. La résolution de nom DNS sera réalisée sauf si vous utilisez -n.

-b <ftp relay host>
    attaque par rebond FTP : Une caractéristique intéressante du protocole ftp (RFC 959) est le support des connexions proxy. En d'autres termes, je dois être capable de me connecter depuis mechant.com au serveur FTP de cible.com et demander que le serveur envoie un fichier N'IMPORTE OÙ sur Internet. Ça fonctionnait bien en 1985 quand la RFC a été écrite. Mais dans l'Internet d'aujourd'hui nous ne pouvons pas nous permettre d'avoir des pirates qui détournent des serveurs ftp et envoient des données n'importe où dans Internet. J'avais écrit en 1995 que ce défaut du protocole « peut être utilisé pour envoyer des courriers et nouvelles intracables, matraquer des serveurs de sites, saturer les disques, essayer de contourner les pare-feux et généralement être difficile à repérer ». On peut aussi l'exploiter pour faire un scan des ports TCP depuis un serveur ftp « proxy ». Ainsi, vous pouvez vous connecter à un serveur ftp derrière un pare-feu et scanner les ports sans être bloqué (139 est un bon nombre). Si le serveur ftp autorise la lecture et l'écriture dans certains répertoires (tel que /incoming), vous pouvez envoyez des données arbitraires aux ports que vous avez trouvé ouvert (nmap ne le fera toutefois pas pour vous)

    L'argument passé à l'option -b est l'hôte que vous voulez utiliser comme proxy, dans la notation URL standard. Le format est : username:password@server:port. Tout sauf server est optionnel. Pour déterminer les serveurs qui sont vulnérables à cette attaque, vous pouvez voir mon article dans Phrack 51. Une version mise à jour est disponible à l'URL http://www.insecure.org/nmap.

OPTIONS GÉNÉRALES
    Aucune n'est nécessaire, mais certaines peuvent être très utiles.

-P0 Ne pas essayer de ping sur les hôtes avant de les analyser. Cela permet l'analyse des réseaux qui ne permettent pas les requêtes ou les réponses ICMP à travers leurs pare-feux. Microsoft.com en est un exemple, et vous devez toujours utiliser -P0 ou -PT80 pour faire une analyse de port sur microsoft.com.

-PT Utilise TCP "ping" pour déterminer les hôtes actifs. Au lieu d'envoyer une requête d'écho ICMP et d'attendre une réponse, nous envoyons des paquets TCP ACK dans le réseau cible (ou contre une machine) et attendons des réponses pour conclure. Les hôtes devraient répondre par un RST. Cette option préserve l'efficacité des scan des hôtes qui sont actifs mais autorise l'analyse des hôtes/réseaux qui bloquent les paquets de ping. Pour les utilisateurs non root, nous utilisons connect(). Pour spécifier le port de destination du test utilisez -PT<port number>. Le port par défaut est 80, car ce port n'est pas souvent filtré.

-PS Cette option utilise des paquets SYN (demande de connexion) à la place des paquets ACK pour les utilisateurs ROOT. Les hôtes actifs devrait répondre par un RST (ou, rarement par un SYN | ACK).

-PI Cette option utilise un véritable paquet ping (requête d'écho ICMP). Il recherche les hôtes actifs et aussi regarde les adresses de diffusion des sous-réseaux. Il y a des adresses IP qui sont joignable de l'extérieur et qui sont traduites en une diffusion de paquet entrant dans un réseau. Ça devrait être supprimé, si découvert, car ça permet un grand nombre d'attaques de déni de service.

-PP utilise un paquet ICMP de requête d'estampille temporelle (code 13) pour déterminer les hôtes qui écoutent.

-PM Fait la même chose que -PI et -PP sauf qu'il utilise une requête de masque de sous-réseau (ICMP code 17).

-PB C'est le ping par défaut. Il utilise les balayages ACK ( -PT ) et ICMP ( -PI ) en parallèle. De cette manière, vous pouvez passer les pare-feux qui ne filtrent que l'un des deux types de paquets.

-O  Cette option active l'identification de l'hôte distant via l'empreinte TCP/IP. Autrement dit, nmap utilise un ensemble de techniques pour détecter les subtilités dans la pile réseau du système d'exploitation de l'ordinateur que vous êtes en train d'analyser. Il utilise ces informations pour créer une « empreinte » qui est comparée avec sa base de données d'empreintes connues (le fichier nmap-os-fingerprints) pour retrouver le type de système que vous êtes en train d'analyser.

    Si Nmap est incapable de deviner le système d'exploitation de la machine, et que les conditions sont bonnes (par exemple, au moins un port est ouvert) Nmap fournira une URL que vous pourrez utiliser pour soumettre si vous connaissez avec certitude le nom du système d'exploitation à qui appartient cette nouvelle empreinte. Vous contribuerez ainsi à augmenter le nombre de systèmes d'exploitations détectable par nmap et la la précision de la détection. Si vous laissez une adresse IP dans le formulaire, la machine pourra être analysée lorsque nous ajouterons l'empreinte (pour valider que ça marche).

    L'option -O active aussi plusieurs autres tests. L'un d'entre eux est la mesure de « uptime » (durée écoulée depuis le dernier redémarrage du système), qui utilise l'estampille TCP (RFC 1323) pour deviner la date du dernier redémarrage de la machine. Ceci n'est rapporté que pour les machines qui fournissent cette information.

    Un autre test activé par -O est la classification de la prédiction de la séquence TCP. C'est une mesure qui décrit approximativement la difficulté d'établir une connexion TCP forgée contre l'hôte distant. C'est utile pour exploiter les relations de confiances fondées sur l'IP source (rlogin, firewall filters, etc) ou pour cacher la source d'une attaque. La valeur réelle de la difficulté est calculée sur un échantillon et peut fluctuer. Il est généralement plus approprié d'utiliser une classification par nom tel que « worthy challenge » ou « trivial joke ». Ceci n'est rapporté dans la sortie normale qu'avec l'option -v.

    Si le mode verbeux (-v) est activé en même temps que -O, la génération de séquence IPID est aussi rapportée. La plupart des machines appartiennent à la classe incrémentale, ce qui signifie qu'elle incrémente le champ ID dans l'entête IP pour chaque paquet envoyé. Ce qui les rend vulnérables à la collecte d'information avancée et aux attaques par usurpation.

-I  Active l'analyse TCP reverse ident. Dave Goldsmith dans un message à Bugtraq en 1996, a fait remarquer que le protocole ident (rfc 1413) autorise la découverte du nom d'utilisateur qui possède un processus connecté via TCP, même si le processus n'est pas à l'instigateur de la connexion. Vous pouvez ainsi vous connecter au port http et utiliser identd pour découvrir si le serveur tourne sous root. Ceci ne peut être fait qu'avec une connexion TCP complète sur le port cible (i.e. l'option d'analyse -sT). Quand -I est utilisé, l'identd de l'hôte distant est interrogé pour chaque port ouvert trouvé. Évidemment ça ne fonctionne pas si l'hôte n'utilise pas identd.

-f  Cette option oblige les analyses FIN, XMAS, ou NULL à utiliser de petit paquets IP fragmentés. L'idée est de partager l'entête TCP en plusieurs paquets pour rendre leurs détections plus difficile par les filtres et les systèmes de détection d'intrusion, et les autres enquiquineurs qui tentent de détecter ce que vous êtes en train de faire. Faites attention avec ceci, certains programmes ont des difficultés avec ces petits paquets. Mon sniffer favori plante immédiatement lorsqu'il reçoit le premier fragment de 36 octets. Cette option est inefficace contre les filtreurs de paquets et les pare-feux qui réassemblent les fragments IP (comme l'option CONFIG_IP_ALWAYS_DEFRAG dans le noyau Linux), certains réseaux ne peuvent pas supporter cette perte de performance et ne réassemblent pas les paquets.

    Remarquez que je n'ai pas encore fait fonctionner cette option sur tous les systèmes. Ça marche parfaitement sur les machines Linux, FreeBSD et OpenBSD et certaines personnes m'ont rapporté leurs succès avec d'autres saveurs d'Unix.

-v  Mode verbeux. C'est une option hautement recommandée qui fournit beaucoup d'informations sur ce que vous êtes en train de faire. Vous pouvez l'utiliser deux fois pour un effet plus important. Utiliser -d une paire de fois si vous voulez vraiment devenir fou avec le défilement de l'écran !

-h  Cette option affiche un bref récapitulatif des options de nmap. Comme vous l'avez sans doute remarqué, cette page de manuel n'est pas vraiment un « bref récapitulatif ». :)

-oN <logfilename>
    Enregistre les résultats de vos analyses dans un format lisible par un humain dans le fichier spécifié en argument.

-oX <logfilename>
    Enregistre le résultat de vos analyses dans un format XML dans le fichier spécifié en argument. Ceci permet à des programmes d'interpréter facilement les résultats de nmap. Vous pouvez donner l'argument '-' (sans les guillemets) pour envoyer la sortie sur la sortie standard (pour les pipelines shells, etc). Dans ce cas la sortie normale sera supprimée. Regardez attentivement les messages d'erreurs si vous utilisez ceci (ils sont encore envoyés sur la sortie d'erreur standard). Notez aussi que -v peut afficher des informations supplémentaires. La définition de type de document (DTD) définissant la structure de la sortie XML est disponible à http://www.insecure.org/nmap/nmap.dtd .

-oG <logfilename>
    Enregistre les résultats de vos analyses dans une forme adaptée pour grep. Ce format simple fournit toutes les informations sur une ligne. C'est le mécanisme préféré des programmes qui interagissent avec nmap, mais désormais nous recommandons plutôt la sortie XML (-oX). Ce format simple ne contient pas autant d'informations que les autres formats. Vous pouvez donner l'argument «-» (sans les guillemets) pour envoyer la sortie sur la sortie standard (pour les pipelines shells, etc). Dans ce cas la sortie normale sera supprimée. Regardez attentivement les messages d'erreurs si vous utilisez ceci (ils sont encore envoyés sur la sortie d'erreur standard). Notez aussi que -v peut afficher des informations supplémentaires.

-oA <logfilename>
    indique à nmap d'enregistrer dans tous les formats majeurs (normal, grep et XML). Vous fournissez le préfixe du nom de fichier et les sorties auront respectivement les suffixes .nmap, .gnmap et .xml .

-oS <logfilename>
    enregistre les résultats de vos analyses en format script kiddie (NdT : C'est un langage dans lequel certaines lettres sont remplacées par des chiffres/symboles typiquement exemple A devient 4, E devient 3, etc. Cette langue est utilisée par les « cowboyz » d'Internet. Cette population folklorique amuse beaucoup les autres internautes, au point qu'il existe une option pour eux dans nmap) V0u$ poUV3z dOnn3r l'4rgUm3nt '-' (s4ns l3$ guIll3m3ts) poUr 3nvoy3r l4 sOrti3 sUr l4 $orti3 $t4nd4rd.

--resume <logfilename>
    L'analyse d'un réseau qui a été annulée par un Ctrl-C, problème de réseau, etc. peut être reprise en utilisant cette option. logfilename doit être soit un log normal (-oN) soit un log lisible par une machine (-oM) d'une analyse avortée. Aucune autre option ne peut être donnée (ce sont obligatoirement les mêmes que celles du scan avorté). Nmap démarrera sur la machine après la dernière machine qui a été analysée avec succès dans le fichier de log.

--append_output
    indique à Nmap d'écrire à la fin des fichiers de sortie au lieu de les écraser.

-iL <inputfilename>
    Lit les spécifications de la cible depuis le fichier spécifié plutôt que depuis la ligne de commande. Le fichier doit contenir une liste d'hôtes, d'expressions de réseaux séparées par des espaces, tabulations ou retour chariots. Utilisez le tiret pour lire depuis stdin (comme la fin d'un pipe). Voyez la section spécification de cible pour plus d'information sur les expressions que vous pouvez mettre dans le fichier.

-iR Cette option indique à Nmap de générer ses propres hôtes à analyser par tirage aléatoire :). Ça ne finit jamais. Ça peut être utile pour un échantillon d'Internet pour estimer diverses choses. Si vous vous ennuyez, essayez nmap -sS -iR -p 80 pour rechercher des serveurs web à regarder.

-p <port ranges>
    Cette option spécifie les ports que vous voulez essayer. Par exemple '-p 23' n'essayera que le port 23 of de l'hôte cible. '-p 20-30,139,60000-' analysera les ports entre 20 et 30, le port 139, et tous les ports supérieurs à 60000. Le comportement par défaut est d'analyser tous les ports de 1 à 1024 ainsi que tous les ports listés dans les fichiers de services fournis avec nmap. Pour l'analyse par IP (-sO), ceci spécifie le numéro de protocole que vous voulez analyser

    Lorsque vous scannez les ports TCP et UPD vous pouvez spécifier un protocole particulier en préfixant les numéros de ports par « T »: ou « U: ». L'effet du spécificateur dure jusqu'à ce que vous en spécifiez un autre. Par exemple, l'argument « -p U:53,111,137,T:21-25,80,139,8080 » scannera les ports UDP 53, 111 et 137 ainsi que les ports TCP mentionnés. Remarquez que pour scanner UDP et TCP, vous devez spécifier -sU et au moins une analyse TCP (telle que -sS, -sF ou -sT). Si aucune spécification de protocole n'est indiquée, les numéros de ports sont ajoutés à tous les protocoles.

-F Fast scan mode.
    Spécifie que vous ne voulez analyser que les ports listés dans le fichier des services livré avec nmap (ou le fichier des protocoles pour -sO). C'est évidemment plus rapide que d'analyser les 65535 ports d'un hôte.

-D <decoy1 [,decoy2][,ME],...>
    réalise un scan avec leurres. Du point de vue de l'hôte distant, les hôtes leurres apparaîtront comme s'ils analysaient aussi le réseau cible. Ainsi, les systèmes de détection d'intrusion ne pourront pas savoir parmi l'ensemble des IP qui semblent les scanner quelle est l'IP qui effectue réellement l'analyse et quelles IP ne sont en réalité que d'innocent leurres. Bien que ceci puisse être contré par path tracing, response-dropping, et d'autres mécanismes actifs, c'est généralement une technique efficace pour dissimuler son adresse IP.

    Séparez chaque hôte-leurre par des virgules, et vous pouvez optionnellement utiliser 'ME' (Moi) comme l'un des leurres pour représenter la position que vous voulez utiliser pour votre adresse. Si vous utilisez 'ME' au delà de la 6ème position, la plupart des détecteurs de scan (même l'excellent scanlogd de Solar Designer) seront incapables de voir votre adresse IP. Si vous n'utilisez pas 'ME', nmap choisira une position aléatoire.

    Remarquez que les hôtes leurres doivent être actifs ou vous risquez accidentellement de faire une inondation SYN sur vos cibles. Il est aussi presque facile de déterminer qui est en train de scanner si seul une seule machine est active sur le réseau. Vous pouvez vouloir utiliser des adresses IP à la place des noms (ainsi les réseaux leurres ne vous verront pas dans les logs du serveurs de nom).

    Remarquez également que quelques détecteurs (stupides) de scan bloqueront les hôtes qui tentent des scans de ports. Aussi vous pouvez par inadvertance bloquer l'accès des machines leurres à la machine cible. Ceci peut provoquer de grave problèmes aux machines cibles si le leurre s'avère être sa passerelle internet ou même « localhost ». Il faut donc utiliser prudemment cette option. La vraie morale de cette histoire est que les détecteurs de scan ne doivent pas prendre de mesures contre les machines qui semblent les analyser, car il se peut que ce soit des leurres !

    Les leurres sont utilisés pour le scan initial (en utilisant ICMP, SYN, ACK, ou autre chose) et pendant la véritable phase de scan. Les leurres sont aussi utilisés pendant la détection de l'hôte distant ( -O ).

    Il ne faut pas oublier que d'utiliser un trop grand nombre de leurres peut ralentir le scan et même le rendre imprécis. De plus certains fournisseurs d'accès à Internet (FAI) filtreront vos paquets usurpés, bien que la plupart n'applique aucune restriction sur les paquets usurpés.

-S <adresse_ip>
    Dans certaines circonstances, nmap est incapable de déterminer l'adresse source. Nmap vous avertira si c'est le cas). Dans cette situation, utilisez -S avec votre adresse IP (ou l'interface depuis laquelle vous voulez envoyer les paquets).

    Une autre utilisation possible de ce drapeau est d'usurper le scan pour faire croire aux cibles que quelqu'un d'autre les scanne. Imaginez une entreprise qui se croit régulièrement scannée par un concurrent ! Ce n'est pas l'utilisation première ni le but principal de ce drapeau. Je pense que c'est juste une possibilité intéressante pour les personnes qui sont au courant avant qu'elles n'en accusent d'autres de les scanner. -e est généralement requis pour ce type d'utilisation.

-e <interface>
    indique l'interface réseau à utiliser pour envoyer et recevoir les paquets. Nmap devrait être capable de détecter ceci mais il vous préviendra s'il n'y parvient pas.

-g <portnumber>
    Spécifie le numéro de port source dans le scan. Beaucoup de pare-feux et de filtreur de paquets naïfs feront une exception dans leurs règles pour autoriser le passage des paquets DNS (53) ou FTP-DATA (20) pour établir une connexion. Évidemment ça réduit complètement les avantages de sécurité d'un pare-feu puisque les intrus n'ont qu'à se déguiser en FTP ou DNS en modifiant leur port source. Évidemment pour un scan UDP vous devriez utiliser 53 en premier et pour les scans TCP vous devriez utiliser 20 avant 53. Remarquer que ce n'est qu'une requête -- nmap ne le fera que s'il y parvient. Par exemple, vous ne pouvez pas faire des analyse en parallèle avec un seul port. Aussi nmap changera le port source même si vous utilisez -g.

    Sachez qu'il y a une petite pénalité de performance sur certains scans si vous utilisez cette option, parce que j'enregistre parfois des informations utiles dans le numéro de port source.

--data_length <nombre>
    Normalement nmap envoie des paquets minimalistes qui ne contiennent que l'en-tête. Ainsi, les paquets TCP font 40 octets et les requêtes d'écho ICMP, 28 octets. Cette option indique à Nmap d'ajouter le nombre spécifié d'octets initialisés à 0 à la plupart des paquets qu'il envoie. La détection de système d'exploitation (-O) n'est pas affectée, mais la plupart des paquets de ping et de scan de port le sont. Ça ralentit les choses, mais ça peut être un peu moins voyant.

-n  Dit à Nmap de ne JAMAIS faire de résolution DNS inverse sur une adresse IP active. Comme DNS est souvent lent, ça peut aider à accélérer les choses.

-R  Dit à Nmap de TOUJOURS faire la résolution DNS inverse des adresses IP cibles. Normalement ceci n'est fait que pour les machines vivantes.

-r  Dit à Nmap DE NE PAS changer aléatoirement l'ordre dans lequel les ports seront analysés.

--randomize_hosts
    Dit à nmap de mélanger chaque groupe comprenant jusqu'à 2048 hôtes avant de les analyser. Ceci rend les scans moins évidents à de nombreux systèmes de surveillance réseau, particulièrement quand vous le combinez avec des options pour ralentir le timing (voir ci-dessous).

-M <max sockets>
    Spécifie le nombre maximum de sockets qui seront utilisés en parallèle pour le scan TCP connect() (celui par défaut). C'est utile pour ralentir légèrement le scan et éviter de crasher les machines cibles. Une autre approche consiste à utiliser -sS, qui est généralement plus facile à gérer pour les machines.

OPTIONS TIMING
    généralement nmap parvient à s'ajuster correctement aux caractéristiques du réseau et à analyser aussi vite que possible tout en minimisant la probabilité d'être détecté. Cependant, il y a des cas où les timings par défaut de Nmap ne correspondent pas à vos objectifs. Les options suivantes permettent un contrôle fin des timings :

-T <Paranoid | Sneaky | Polite | Normal | Aggressive | Insane>
    Ce sont les différentes politiques de timing pour communiquer de manière pratique vos priorités à nmap. Paranoid analyse très lentement dans l'espoir d'éviter d'être repéré par les système de détection d'intrusion. Il sérialise tous les scans (pas de scan parallèle) et attend au moins 5 minutes entre les envois de paquets. Sneaky c'est la même chose, sauf qu'il attend 15 secondes entre les envois de paquets. Polite essaye de minimiser la charge sur le réseau et de réduire la probabilité de crasher des machines. Il sérialises les test et attend au moins 0,4 secondes entre chaque. Normal c'est le comportement par défaut de Nmap, qui essaye de s'exécuter aussi vite que possible sans surcharger le réseau ou oublier des hôtes/ports. Aggressive ajoute un décompte de 5 minutes par hôte et n'attends jamais les réponses individuelles plus de 1.25 secondes. Insane ne convient qu'aux réseaux ultra-rapides où vous ne risquez par de perdre d'informations. Il ajoute un décompte de 75 secondes et n'attend les réponses individuelles que pendant 0,3 secondes. Il permet de balayer très rapidement les réseaux. Vous pouvez aussi référencer ces modes par numéro (0-5). Par exemple, '-T 0' donne le mode Paranoid et '-T 5' le mode Insane.

    Ces modes timings NE devrait PAS être utiliser en combinaison avec les contrôles de bas niveau donnés ci-dessous.

--host_timeout <millisecondes>
    Spécifie la durée que nmap est autorisée à consacrer à l'analyse d'un hôte unique avant d'abandonner cette IP. Par défaut il n'y a pas de temps limite pour un hôte.

--max_rtt_timeout <millisecondes>
    Spécifie la durée maximale que nmap peut laisser s'écouler en attendant une réponse à ses tests avant de retransmettre ou de laisser tomber. La valeur par défaut est 9 000.

--min_rtt_timeout <millisecondes>
    Quand les hôtes cibles commencent à établir un modèle de réponse très rapidement, nmap diminuera la durée accordée par test. Ceci augmente la vitesse du scan, mais peut conduire à la perte de paquets quand une réponse prend plus de temps que d'habitude. Avec ce paramètre vous pouvez garantir que nmap attende au moins une certaine durée avant de laisser tomber un test.

--initial_rtt_timeout <millisecondes>
    Spécifie le décompte du test initial. Ce n'est généralement utile que lors de l'analyse d'hôte derrière un pare-feu avec -P0. Normalement nmap obtient de bonnes estimations à partir du ping et des premiers tests. Le mode par défaut est 6 000.

--max_parallelism <nombre>
    Spécifie le nombre maximum de scans que nmap est autorisé à mener en parallèle. Positionner ceci à 1 signifie que nmap n'essayera jamais de scanner plus d'un port à la fois. Ce nombre affecte aussi les autres scans parallèle comme le balayage de ping, RPC scan, etc.

--scan_delay <millisecondes>
    Spécifie la durée minimum que nmap doit laisser s'écouler entre ses envois. C'est utile pour réduire la charge du réseau ou pour ralentir le débit du scan afin de ne pas atteindre le seuil de déclenchement des systèmes de détection d'intrusion.

SPÉCIFICATION DE CIBLE
Tout ce qui n'est pas une option ou un argument d'option est traité par nmap comme une spécification d'hôte. Le cas le plus simple et une liste de nom d'hôtes ou d'adresse IP sur la ligne de commande. Si vous voulez analyser un sous réseau d'adresses IP vous pouvez ajouter '/mask' au nom d'hôtes mask doit être compris entre 0 (scanner tout internet) et 32 (scanner un seul hôte). Utiliser /24 pour analyser des adresses de classe 'C' et /16 pour la classe 'B'.

Nmap utilise une notation puissante pour spécifier une adresse IP en utilisant des listes/intervalles pour chaque élément. Ainsi vous pouvez analyser tout un réseau de classe B 192.168.*.* en spécifiant '192.168.*.*' ou '192.168.0-255.0-255' ou même '192.168.1-50,51-255.1,2,3,4,5-255'. Et bien sûr, vous pouvez utiliser la notation mask : '192.168.0.0/16'. Elles sont toutes équivalentes Si vous utilisez des astérisques ('*'), souvenez-vous que la plupart des shells nécessitent que vous les précédiez par des anti-slash ou que vous les protégiez par des guillemets.

Une autre chose intéressante à faire et de découper Internet : au lieu de scanner les hôtes dans une classe 'B', scanner '*.*.5.6-7' pour analyser toutes les adresses IP se terminant par .5.6 ou .5.7. Pour plus d'informations sur la spécification des hôtes à analyser, voyez la section exemples.

EXEMPLES
Voici quelques exemples d'utilisation de nmap du plus simple au plus compliqué. Remarquez que les noms et adresses sont utilisées pour rendre les choses plus concrètes. À leur place vous devriez substituer les noms et adresses de votre propre réseau. Je ne pense pas que l'analyse de ports d'autres réseaux soit illégale, ni que l'analyse de ports doit être considérée par les autres comme une attaque. J'ai analysé des centaines de milliers de machines et je n'ai reçu qu'une seule plainte. Mais je ne suis pas juriste et certaines personnes pourraient être ennuyées par les tests de nmap. Aussi demandez préalablement la permission ou utilisez nmap à vos risques et périls.

nmap -v cible.exemple.com

Cette option analyse tous les ports TCP réservés sur la machine cible.exemple.com . Le -v signifie d'activer le mode verbeux.

nmap -sS -O cible.exemple.com/24

Envoie un scan SYN furtif contre chaque machine active parmi les 255 machines de classe 'C' qui sont sur cible.exemple.com. Il essaye aussi de déterminer quel système d'exploitation fonctionne sur chaque hôte. Ceci nécessite les privilèges root en raison du scan SYN et de la détection de système d'exploitation.

nmap -sX -p 22,53,110,143,4564 198.116.*.1-127

Envoie un scan Xmas tree à la première moitié de chacun des 255 sous-réseaux de l'espace d'adresse de classe B 198.116. Nous sommes en train de tester si les systèmes font fonctionner sshd, DNS, pop3d, imapd, ou port 4564. Remarquez que les scan Xmas ne fonctionnent pas contre les machines Microsoft en raison de leur pile TCP déficiente. Le même problème se produit aussi avec les machines CISCO, IRIX, HP/UX, et BSDI.

nmap -v --randomize_hosts -p 80 '*.*.2.3-5'

Plutôt que de se concentrer sur une plage spécifique d'IP, il est parfois intéressant de découper l'ensemble d'Internet et d'analyser un petit échantillon de chaque tranche. Cette commande trouve tous les serveurs web sur des machines dont l'adresse IP se termine par .2.3, .2.4 ou .2.5 . Si vous êtes root, vous pouvez aussi ajouter -sS. Vous trouverez plus de machine intéressantes en commençant à 127, aussi vous utiliserez '127-222' à la place de la première astérisque car cette section possède une plus grande densité de machine intéressantes.

host -l company.com | cut '-d ' -f 4 | ./nmap -v -iL -

Fait un transfert DNS pour découvrir les hôtes de company.com et utiliser leurs adresses IP pour alimenter nmap. Les commandes ci-dessus sont pour mon ordinateur GNU/Linux. Vous pouvez avoir besoin d'autres commandes/options pour d'autres systèmes d'exploitations.

BOGUES
Bogues ? Quels bogues ? Envoyez-moi tout ce que vous trouverez. Les patchs sont les bienvenus. Souvenez-vous que vous pouvez aussi envoyer les empreintes de nouveaux systèmes d'exploitation pour enrichir la base de données. Si une empreinte appropriée est trouvée, Nmap affichera l'URL à laquelle vous pourrez l'envoyer.

AUTEUR

Fyodor <fyodor@insecure.org>

DISTRIBUTION
La dernière version de nmap peut être obtenu depuis http://www.insecure.org/nmap/

nmap est (C) 1995-2001 par Insecure.Com LLC

libpcap est aussi distribuée avec nmap. Il est copyrighté par Van Jacobson, Craig Leres et Steven McCanne, tous du Lawrence Berkeley National Laboratory, University of California, Berkeley, CA. La version distribuée avec nmap peut être modifiée, les sources d'origine sont disponibles à ftp://ftp.ee.lbl.gov/libpcap.tar.Z .

Ce programme est un logiciel libre, vous pouvez le redistribuer et/ou le modifier sous les termes de la GNU General Public License telle que publiée par par la Free Software Foundation ; Version 2. Ceci garantit votre droit d'utiliser, modifier et redistribuer Nmap sous certaines conditions. Si cette licence est inacceptable pour vous, Insecure.Org pourrait éventuellement vendre d'autres licences. (contacter fyodor@dhp.com).

Les sources sont fournies avec ce logiciel car nous croyons que les utilisateurs ont le droit de savoir exactement ce que fait un programme avant de le lancer. Ceci vous permet aussi d'auditer le logiciel pour rechercher des trous de sécurité (aucun n'a été trouvé jusqu'à présent).

Le code source vous permet aussi de porter Nmap vers de nouvelles plates-formes, corriger des bogues et ajouter de nouvelles caractéristiques. Vous êtes vivement encouragé à envoyer vos modifications à fyodor@insecure.org pour une éventuelle incorporation dans la distribution principale. En envoyant ces modifications à Fyodor ou à quelqu'un de la liste de diffusion de développement de insecure.org, il est supposé que vous offrez à Fyodor le droit illimité et non exclusif de réutiliser, modifier et relicencier le code. C'est important parce que l'impossibilité de relicencier le code a provoqué des problèmes dévastateurs dans d'autres projets de logiciel libre (comme KDE et NASM). Nmap sera toujours disponible en Open Source. Si vous désirez spécifier des conditions particulières de licence pour vos contributions, dites-le nous simplement quand vous nous les envoyez.

Ce programme est distribué dans l'espoir d'être utile, mais SANS AUCUNE GARANTIE même la garantie implicite relative à la QUALITÉ MARCHANDE ou D'APTITUDE À UNE UTILISATION PARTICULIÈRE. Voir la licence GPL (c'est le fichier COPYING de la distribution nmap.

Remarque : Nmap a déjà fait planter certaines applications, des piles TCP/IP et même des systèmes d'exploitations mal écrits. Par conséquent Nmap ne devrait jamais être utilisé contre des systèmes qui ont une mission critique à moins que vous ne soyez prêt à souffrir d'une éventuelle interruption de service. Nous reconnaissons ici que nmap peut crasher vos systèmes et réseaux mais nous ne sommes pas responsables des dégâts que Nmap pourrait provoquer.

En raison du léger risque de crashs et parce que quelques personnes mal intentionnées utilisent nmap pour les reconnaissances préliminaires à une attaque, certains administrateurs deviennent furieux et se plaignent quand leurs systèmes sont scannés. C'est pourquoi il est plus sage de demander la permission avant de lancer l'analyse d'un réseau.

Nmap ne devrait jamais être lancé avec des privilèges (par exemple suid root) pour des raisons de sécurité.

Toutes les versions de Nmap postérieures à la 2.0 sont compatibles an 2000. Il n'y a aucune raison de penser que les versions antérieures ont des problèmes, mais nous ne les avons pas testées.

TRADUCTION
Sébastien Blanchet, 2002 <sebastien.blanchet AT free.fr>

RELECTURE
Gérard Delafond