Comptes rendus

Tout outil de sécurité n'est vraiment utile qu'en fonction des comptes rendus qu'il génère. Des tests aussi complexes soient-ils et des algorithmes n'ont finalement qu'une faible valeur s'ils ne sont pas présentés et organisés de façon compréhensible. Étant donné que les utilisateurs emploient Nmap et d'autres Logiciels de diverses façons, il n'y a pas un format qui puisse convenir à tout le monde. Nmap propose donc plusieurs formats, y compris le mode interactif permettant d'être directement intelligible et le XML pour une meilleure portabilité entre logiciels (parsing).

Outre le fait de proposer différents formats de sortie, Nmap comporte des options permettant aussi bien de contrôler la verbosité des comptes rendus que le déboggage. Les différents types de sorties peuvent être envoyés à des comptes rendus normalisés ou à des fichiers spécifiques, dont le contenu peut s'agrémenter des scans successifs ou remplacer un contenu précédent. Ces fichiers de sortie peuvent aussi être utilisés pour reprendre un scan temporairement suspendu.

Nmap rend les résultats disponibles en 5 formats différents. Le format par défaut est appelé interactive output. Il est envoyé en sortie standard (stdout). On trouve aussi le normal output, qui est semblable à interactive à ceci près qu'il affiche moins d'informations de fonctionnement et d'alertes étant donné qu'il est plutôt destiné à être analysé à la fin des scans au lieu de façcon interactive.

La sortie au format XML est l'une des plus importante qui peut être converti en HTML. Elle est facilement traitée par des programmes tiers comme les interfaces graphiques pour Nmap, ou importée au sein de bases de données.

Les deux autres formats restants sont le simple grepable output, qui inclus la plupart des informations concernant une cible dans une seule ligne, et le sCRiPt KiDDi3 0utPUt pour les utilisateurs qui se prennent au sérieux |<-r4d.

Alors que le format interactif représente la sortie par défaut et ne nécessite pas d'option de ligne de commande particulière, les quatre autres options de format utilisent la même syntaxe. Ils prennent un argument qui représente le nom du fichier dans lequel les résultats devraient être inscrits. Des formats multiples peuvent être spécifiés mais chaque format ne devrait être spécifié qu'une seule fois. Par exemple, vous pourriez souhaiter sauvegarder une sortie de type normal (normal output) pour votre propre usage tout en sauvegardant un XML du même scan pour une analyse par un programme. Vous pouvez le faire à l'aide des options -oX myscan.xml -oN myscan.nmap. Bien que ce chapitre utilise des noms de fichier simples, notamment myscan.xml, àdes fins pratiques, des noms plus explicites sont en général recommandés. Le choix des noms relève des préférences personnelles, toutefois pour ma part, j'en utilise de longs contenant la date du scan ainsi qu'un mot ou deux décrivant le scan. Je les enregistre ensuite dans un répertoire nommé selon la compagnie pour laquelle je suis en train d'effectuer le scan.

Même si ces options sauvegardent les résultats dans des fichiers, Nmap continue à fournir la sortie interactive en stdout comme d'habitude. Par exemple, la commande nmap -oX myscan.xml target génère un fichier XML intitulé myscan.xml tout en donnant la sortie standard avec le même résultat interactif qu'il aurait donné si l'option -oX n'avait pas été spécifiée du tout. Vous pouvez changer cette procédure en entrant un tiret en argument sur l'un des types de format. Ceci force Nmap à désactiver la sortie interactive et d'inscrire à la place les résultats dans le format que vous avez spécifié pour le flux de sortie standard. Par conséquent, la commande nmap -oX - target enverra seulement une sortie XML en stdout. Les erreurs sérieuses sont susceptibles d'être inscrites dans le flux normal d'erreur, le stderr.

Contrairement à certains arguments de Nmap, l'espace entre le drapeau de l'option fichier (comme -oX) et le nom de fichier ou le tiret est obligatoire. Si vous l'omettez et entrez des arguments tels que -oG- ou -oXscan.xml, une fonction de compatibilité d'arrière-plan de Nmap forcera la création de formats de type normal format comme fichiers de sortie nommés G- et Xscan.xml, respectivement.

Nmap offre en outre l'option de contrôler la verbosité du scan et d'ajouter les résultats les uns à la suite des autres dans un même fichier plutôt que d'écraser les résultats précédants. Toutes ces options sont décrites ci-dessous.

Formats de Sortie sur Nmap
-oN <filespec> (sortie Normale)

Demande que le format normal output soit appliqué au fichier donné. Tel que décrit ci-dessus, cette procédure diffère légèrement d'une sortie de type interactive output.

-oX <filespec> (sortie XML)

Demande que le format XML output soit donné au fichier spécifié. Nmap contient une définition de type de document (DTD) qui permet le traitement XML des résultats de Nmap. Bien que ce soit d'abord pensé aux fins d'utilisation de programmation, cette procédure peut aussi aider à interpréter la sortie XML de Nmap. Le DTD définit les éléments légaux du format et énumère souvent les attributs et les valeurs qu'ils peuvent prendre. La dernière version est toujours disponible sur https://nmap.org/data/nmap.dtd.

Le XML offre un format stable facilement traitable au moyen d'un logiciel. Des outils de traitement XML sont offerts gratuitement dans tous les grands langages de programmation, y compris C/C++, Perl, Python et Java. Des gens ont même écrit des outils spécifiques dans ces langages destinés au support de traitement des sorties de Nmap. Notons comme exemples le Nmap::Scanner et le Nmap::Parser en Perl CPAN. Dans la plupart des cas où une application tierce doit interagir avec Nmap, le XML est le format privilégié.

Les sorties XML font référence à une feuille de style XSL qui peut être utilisée dans le but de formater les résultats au format HTML. La façon la plus simple d'utiliser ceci est de charger la sortie XML dans un navigateur Web, comme Firefox ou IE. Par défaut, cette démarche ne pourra être appliquée qu'à partir dela machine sur laquelle vous utilisez Nmap (ou une machine configurée de façon semblable) en raison du chemin système vers nmap.xsl codé en dur. Utilisez l'option --webxml ou --stylesheet pour une façon de générer un fichier XML portable qui rendra un format HTML sur toute machine connectée au Web.

-oS <filespec> (s0r713 ScRipT KIdd|3)

Le format de sortie Script kiddie est similaire à la sortie interactive, sauf qu'il est post-traité de façon à mieux coller au style l33t HaXXorZ qui s'intéresse à Nmap soit les lettres majuscules et le contenu unique de sa prononciation. Les gens dénués d'humour devraient réaliser que cette option est surtout une moquerie envers les script kiddies avant de me descendre en flammes en m'accusant de « les aider ».

-oG <filespec> (sortie Grepable)

Ce format de sortie vit ses derniers instants de support parce qu'il devient désuet. Le format XML est bien plus puissant et presque aussi pratique pour les utilisateurs expérimentés. Le XML est un standard pour lequel des douzaines d'excellents outils de traitement sont disponibles alors que le format de sortie grepable est mon propre bidouillage. Le XML est évolutif afin de supporter les fonctions ultérieures de Nmap au rythme où elles sont disponibles alors que j'omets souvent ces fonctions pour les sorties grepables par manque de place.

Toutefois, le format de sortie grepable reste toujours populaire. C'est un format simple qui liste chaque hôte sur une seule ligne et peut être facilement traité à l'aide d'outils uniformisés sous UNIX, notamment grep, awk, cut, sed, diff et Perl. Je l'utilise même souvent pour certains tests en ligne de commande. Trouver tous les hôtes ayant le port ssh ouvert ou tournant sous Solaris ne prend qu'un simple grep pour identifier l'hôte, envoyé sur un awk ou traité pour afficher le champ désiré.

Le format Grepable consiste en une suite de commentaires (des lignes commençant par un dièze (#) et des lignes cibles. Une ligne cible inclus une combinaison de 6 champs étiquetés, séparés par des tabulations et suivis d'un séparatif. Les champs sont Host, Ports, Protocols, Ignored State, OS, Seq Index, IPID et Status.

Le plus important de ces champs est généralement Ports qui donne les détails sur chaque port considéré. C'est une liste d'entrées séparées par une virgule. Chaque entrée de port représente un port considéré et prend la forme de 7 sous-champs séparés d'une barre oblique (/) . Ces sous-champs sont les suivants : Port number, State, Protocol, Owner, Service, SunRPC info et Version info.

Comme pour le format XML, cette page-manuel ne permet pas de documenter de façon exhaustive l'ensemble de ce format. Une vision plus détaillée est disponible sur http://www.unspecific.com/nmap-oG-output.

-oA <basename> (sortie en tous formats)

À votre convenance, vous pouvez spécifier -oA <basename> pour stocker les résultats de scans en format normal, XML et grepable, et ce, en une seule fois. Ils sont stockés dans <basename>.nmap, <basename>.xml et <basename>.gnmap, respectivement. Comme pour la plupart des programmes, vous pouvez ajouter en préfixe au nom de fichier un chemin d'accès, comme ~/nmaplogs/foocorp/ sous UNIX ou c:\hacking\sco sous Windows.

options de verbosité et déboggage
-v (Augmenter le niveau de verbosité)

Augmente le niveau de verbosité, forçant Nmap à afficher plus d'informations sur le scan qu'il effectue. Les ports ouverts sont indiqués au fur et à mesure où ils sont trouvés ainsi qu'une évaluation du temps qui reste à scanner si Nmap pense que cela prendra quelques minutes. Utilisez cette option deux fois pour encore plus de verbosité. L'utiliser plus de deux fois n'a aucun effet.

La plupart des changements modifient seulement la sortie interactive et certains touchent aussi les sorties normales et les script kiddies. Les autres sorties sont conçues de façon à traiter par une machine, c'est pourquoi Nmap peut donner des détails importants par défaut dans ces formats sans pour autant fatiguer un utilisateur humain. Toutefois, il y a quelques modifications dans les autres modes pour lesquels les tailles de sorties peuvent être réduites substantiellement par omission de quelques détails. Par exemple, une ligne commentée dans le format grepable qui fournit une liste de tous les ports scannés n'est affichée que dans le mode verbeux parce que cela peut s'avérer très long.

-d [level] (Augmenter ou régler le niveau de déboggage)

Quand même le mode verbeux ne donne pas assez d'informations pour vous, le déboggage est là pour vous noyer sous encore plus de données! Comme avec l'option de verbosité (-v), le déboggage est mis en place avec un drapeau de ligne de commande (-d) et le niveau de déboggage peut être augmenté en le spécifiant plusieurs fois. Autrement, vous pouvez définir un niveau de déboggage en donnant un argument à -d. Par exemple, -d9 définit le niveau 9. C'est le plus haut niveau et fournira des milliers de lignes à moins que vous ne lanciez un scan très simple avec très peu de ports et de cibles.

La sortie de déeboggage est utile lorsqu'une procédure erronée est soupçonnée dans Nmap ou si vous désirez simplement savoir ce que fait Nmap et pourquoi. Comme cette fonctionnalité est surtout faite pour les développeurs, les lignes de déboggage ne sont pas toujours tres explicites. Vous pouvez obtenir quelque chose comme : Timeout vals: srtt: -1 rttvar: -1 to: 1000000 delta 14987 ==> srtt: 14987 rttvar: 14987 to: 100000. Si vous ne comprenez pas une ligne, vos seuls recours sont de l'ignorer, la chercher dans le code source ou obtenir de l'aide sur la liste de développement (nmap-dev). Certaines sont quand même assez explicites, mais les messages deviennent de plus en plus obscures au fur et à mesure où le niveau de déboggage est élevé.

--packet-trace (Trace les paquets et les données envoyés et reçus)

Force Nmap à afficher un résumé de chaque paquet envoyé ou reçu. C'est souvent utilisé pour le déboggage mais c'est aussi une bonne façon pour les nouveaux utilisateurs de mieux comprendre ce que Nmap fait en arrière-lan. Afin d'éviter d'afficher des milliers de lignes, vous pouvez spécifier un nombre limité de ports à scanner, notamment -p20-30. Si vous ne vous préoccupez que de ce que fait le sous-système de détection de version, utilisez plutôt --version-trace à la place.

--open (Montre seulement les ports ouverts (ou potentiellement ouverts))

Il arrive que vous ne soyez interressé que par les ports sur lesquels vous pouvez effectivment vous connecter (état open), et ne voulez pas de résultats pollués par ceux qui sont closed, filtered, et closed|filtered . La personnalisation est en général faite après le scan en utilisant des outils comme grep, awk, ou Perl, mais cette fonctionnalité a été ajoutée à cause d'un grand nombre de demandes à cet égard. Spécifiez --open pour voir seulement les ports open, open|filtered, et unfiltered. Ces trois états sont traités pour ce qu'ils sont normalement, ce qui signifie que open|filtered et unfiltered peuvent être regroupés dans le comptage si il y en a un grand nombre.

--log-errors (Journalise les erreurs/alertes dans un fichier en mode normal)

Les alertes et erreurs affichées par Nmap vont habituellement uniquement sur l'écran (sortie interactive), laissant un eventuel fichier de sortie qui aurait été spécifié en ordre. Mais quand vous souhaitez quand même voir ces messages dans le fichier de sortie que vous avez spécifié, ajoutez cette option. C'est utile quand vous ne regardez pas l'affichage interactif ou si vous essayez de debogger un probleme. Le message apparait quand même à l'écran. Ceci ne marchera pas pour la plupart des erreurs dues à une ligne de commande erronnée, étant donné que Nmap n'aura pas encore ouvert de fichier de sortie a ce stade. De plus, certains messages d'alerte/erreurs utilisent un système différent qui n'est pas encore supporté par cette option. Une alternative à cette option est de rediriger l'affichage interactif (flux d'erreurs standard inclus) vers un fichier. Tandis que la plupart des shells UNIX permettent ceci facilement, cela peut s'avérer difficile sous Windows.

--iflist (Dresse la liste des interfaces et des routes)

Affiche la liste des interfaces et des routes système telles que détectées par Nmap. C'est utile pour le déboggage lié aux problèmes de cheminement ou de détermination des interfaces (comme lorsque Nmap traite une connexion PPP en tant qu'Ethernet).

Options de sortie diverses
--append-output (Ajouter au fichier plutôt que de l'écraser)

Lorsque vous spécifiez un fichier pour un format de sortie comme -oX ou -oN, ce fichier est écrasé par défaut. Si vous préférez garder le contenu existant du fichier et rajouter les nouveaux résultats, spécifiez l'option --append-output. Tout fichier de sortie spécifié dans cette configuration de session de Nmap se verra agrémenté des nouveaux résultats plutôt qu'écrasé. Cela ne fonctionne pas très bien pour les données de scan au format XML (-oX) dont le fichier résultant ne sera pas vraiment correct et devra être rectifié à la main.

--resume <filename> (Reprendre un scan abandonné)

Certaines sessions importantes de Nmap peuvent prendre beaucoup de temps -- de l'ordre de plusieurs jours. De tels scans ne sont pas toujours menés à terme. Des restrictions peuvent empêcher Nmap d'être utilisé pendant les heures de travail, soit parce que le réseau peut s'écrouler, la machine sur laquelle Nmap tourne peut subir une réinitialisation voulue ou non ou Nmap lui même peut tomber en panne. L'administrateur qui utilise Nmap peut l'annuler pour toute autre raison de toutes façons, en appuyant sur ctrl-C. Recommencer tout le scan à partir du début peut être indésirable. Heureusement, si le format normal (-oN) ou grepable (-oG) a été conservé, l'utilisateur peut demander à Nmap de reprendre le scan sur la cible qu'il traitait au moment d'être arrêté. Spécifiez simplement l'option --resume avec le nom du fichier de sortie normal/grepable en argument. Aucun autre argument n'est autorisé puisque Nmap va chercher dans le fichier de sortie en question sa configuration précédente. Appelez donc simplement Nmap de cette façon : nmap --resume <logfilename> . Nmap ajoutera les nouveaux résultats aux données déjà présentes dans le fichier en question lors de la précédente exécution. Le redémarrage n'est pas possible à partir d'un format XML parce que combiner les deux sessions dans un même fichier XML serait difficile.

--stylesheet <path or URL> (Défini la feuille de style XSL pour transformer la sortie XML)

Nmap dispose d'une feuille de style XSL nommée nmap.xsl afin de visionner ou transcrire la sortie XML en HTML. La sortie XML comprend une directive xml-stylesheet qui pointe sur nmap.xml où il a été initialement installé par Nmap (où dans le répertoire courant sous Windows). Chargez simplement la sortie XML de Nmap dans un navigateur à jour et il devrait retrouver nmap.xsl depuis le système de fichiers puis utilisez-le pour obtenir le compte rendu des résultats. Si vous préférez utiliser une feuille de style différente, spécifiez là en argument à --stylesheet. Vous devez donner le chemin ou l'adresse URL complète. --stylesheet https://nmap.org/data/nmap.xsl est une utilisation classique qui indique au navigateur de charger la dernière version de la feuille de style de Insecure.Org. Cette procédure rend plus facile le visionnage des résultats sur une machine qui ne dispose pas de Nmap (et donc de nmap.xsl) . Par conséquent, l'adresse URL est souvent plus utile toutefois le nmap.xsl local est utilisé par défaut pour des raisons de confidentialité.

--webxml (Charge la feuille de style depuis Insecure.org)

Cette option est seulement un alias pour --stylesheet https://nmap.org/data/nmap.xsl.

--no-stylesheet (Ne pas déclarer de feuille de style XSL pour le XML)

Spécifiez cette option pour empêcher Nmap d'associer toute feuille de style XSL avec les sorties XML. La directive xml-stylesheet est omise.