Nmap 6

48
11
juin
2012
Sécurité

Malgré un peu de retard (la sortie était le 21 mai) sur LinuxFr.org, les développeurs du projet nmap sont heureux d'annoncer la sortie de la version 6.0 du célèbre scanner de ports et de sa suite d'outils compagnons ! La principale nouveauté est la prise en charge complète d'IPv6 : tous les types de scans sont dorénavant pris en charge. Un nouveau moteur de prise d'empreinte de pile TCP/IP a spécialement été écrit, utilisant des techniques d'apprentissage machine.

De nouveaux scripts pour l'analyse en détail des réseaux audités, des dizaines de nouvelles bibliothèques. À noter ici le travail incroyable de Patrik Karlsson qui est à lui seul l'auteur d'environ la moitié des 348 scripts du projet. De très nombreuses améliorations des scripts et bibliothèques existantes, ainsi que de l'interface du moteur de script.

Suit une description plus détaillée des principaux changements. Peut être celle-ci incitera Batman, utilisateur héroïque mais pas à jour, à mettre à jour pour la v6.0 !

NdM : merci à Nÿco, Christophe Turbout, Yves Bourguignon et Benoît pour leur participation à l'écriture de cet article.

Sommaire

IPv6, enfin !

C'est là la fin d'une critique classique. Cela aura pris du temps mais nmap est maintenant entièrement compatible avec IPv6, pour l'ensemble de ses fonctionnalités (ou du moins celles qui ont un sens avec IPv6).

Bien sûr, ces développements, s'ils répondent à un manque, apportent aussi une quantité phénoménale de nouvelles perspectives. La détection de systèmes sur un réseau sera un challenge intéressant par exemple.

Améliorations des performances

À tous les niveaux, nmap a subi de profondes modifications afin d'améliorer les performances. Cela concerne la réactivité de la GUI, les durées de scan, la consommation mémoire et CPU. Concernant la mémoire, certains tests ont montrés des réductions allant jusqu'à 90% !

Nouveau moteur de prise d'empreinte TCP/IP

La prise d'empreinte TCP/IP désigne la technique permettant d'identifier ou de caractériser à distance le système d'exploitation d'une machine en observant le comportement de sa pile TCP/IP. Nmap est un scanner actif, il envoie donc des sondes aux cibles et compare leurs réponses à une base de données. Ces sondes sont des paquets (valides ou non) spécialement conçus pour déclencher les mécanismes qui diffèrent entre les implémentations. Naturellement, les sondes IPv4 ne sont pas d'une grande utilité pour la prise d'empreinte en IPv6.

Déterminer quelles sondes envoyer, puis constituer une base de données cohérente prend du temps et requiert la participation constante de la communauté d'utilisateurs. Afin d'accélérer ces processus, le choix a été fait de développer un nouveau moteur de prise d'empreinte utilisant des techniques d'apprentissage machine.

Voir :

Nouvel outil de diagnostic réseau Nping

Bien que l'outil soit développé (et publié dans les versions de développements) depuis un certain temps, cette version 6 de nmap est la première stable à inclure nping. Il s'agit d'un "super ping", capable de générer une très vaste gamme de paquets. Il propose également d'un mode "echo server", permettant d'observer les modifications subies par un paquet entre l'émission par nping et la réception par la cible distante.

Améliorations relatives à NSE (Nmap scripting engine)

Le moteur de scan a subit de très nombreuses améliorations. L'interface utilisateur s'est normalisée et enrichie, par le nommage des paramètres passés aux scripts ou la possibilité de forcer l'exécution d'un script particulier par exemple.

Les bibliothèques, et tout particulièrement celle gérant HTTP, ont été considérablement améliorées, offrant de bien meilleures performances, ainsi que des interfaces plus complètes pour les auteurs de scripts.

Intégration des travaux des étudiants du Google Summer of Code 2011

2011 fut une nouvelle année de succès pour nmap au sein du GSoC. Sept étudiants ont travaillé sur nmap et sa suite d'outils. Ces mois furent parmi les plus actifs de toute l'histoire du projet (record du nombre de commits par exemple).

Trois étudiants ont développé des scripts lua pour NSE. Chacun avec une orientation spécifique : détection de vulnérabilités, découverte réseau et découverte web. Nmap dispose maintenant par exemple d'outils de rapport de vulnérabilités qui facilitent l'utilisation des résultats par des outils tiers, d'un "crawler" très performant pour l'analyse des sites web, de scripts de géolocalisation…

Deux étudiants ont travaillé à l'intégration d'IPv6. Le terrain avait été préparé quelques mois auparavant. Les modules de scan avaient pour la plupart été portés, mais restait l'intégration au sein du moteur de script et, surtout, le développement d'un nouveau moteur de prise d'empreinte TCP/IP. Enfin, deux autres étudiants ont développé diverses améliorations et corrigé des bugs sur l'ensemble du projet.

Fyodor, leader du projet, a annoncé un taux de succès de 100% à l'issue du programme. Cette année encore, nmap prend part au GSoC. N'hésitez pas à rejoindre nmap-dev@insecure.org pour en savoir plus et suivre le projet.

Les projets sont présentés sur le site et le wiki du projet.

Réécriture de la bibliothèque de base nsock

L'objectif de cette réécriture était de permettre la prise en charge de différents sous-systèmes de gestion des entrées/sorties. Nsock est une des bibliothèques fondamentales de nmap, chargée de la gestion en parallèle de nombreuses sockets non-bloquantes au sein d'un même processus. Elle peut être perçue comme un équivalent de la célèbre bibliothèque libevent, à ceci près qu'elle est fortement orientée client.

Initialement, nsock n'utilisait que la fonction select(2) pour manipuler les sockets. Cette fonction est extrêmement portable mais pose des problèmes de passage à l'échelle. D'une part car elle est relativement lente, d'autre part car elle ne peut prendre en compte qu'un nombre limité de sockets (FD_SETSIZE, soit habituellement 1024, et seulement 64 sous Windows).

Il se trouve que les systèmes d'exploitation offrent des mécanismes bien plus performants, mais malheureusement non-portables.

Le patch nsock-engine abstrait entièrement l'usage d'un syscall spécifique (au sein d'un "engine"). Plusieurs engines peuvent être implémentés, seuls ceux disponibles sont compilés, et le plus efficace est sélectionné à l'exécution. Cette approche a nécessité l'introduction de changements importants dans les modèles de données internes de nsock. Pour l'instant, seul un engine a été intégré (en plus de celui par défaut, basé sur select(2)). Celui-ci est basé sur epoll(7), spécifique à Linux. Epoll est extrêmement efficace, et n'impose aucun nombre maximum de sockets.

Un engine basé sur poll(2) est en train d'être testé et devrait apporter des améliorations similaires sous Windows, les BSD, Mac OS X et sans doute d'autres.

Gestion du standard CPE

De nombreux projets utilisent nmap pour la découverte réseau et traitent automatiquement les résultats obtenus. Lorsqu'il s'agit de ports ouverts et fermés, le traitement est trivial, mais l'analyse des descriptions de systèmes d'exploitation et des services réseaux découverts par nmap peut s'avérer problématique. En effet, ceux-ci ne respectent aucune convention de nommage spécifique et sont plutôt destinés aux opérateurs humains.

MITRE, auteur du standard CVE pour la gestion des vulnérabilités, développe un standard appelé CPE qui permet de répondre à ces problématiques. Il s'agit d'un format unifié de nommage des éléments informatiques (matériel, applications, systèmes d'exploitation).

Le standard est relativement simple, chaque élément se présente sous la forme :
cpe:/[part]:[vendor]:[application]:[edition]:[update]:[language]

Par exemple:
cpe:/a:nmap:nmap:6.0
cpe:/o:debian:debian_linux:5.0

En collaboration avec le projet OpenVAS (contribution upstream), cette fonctionnalité a été implémentée au cours de l'automne et nmap est maintenant capable de fournir des CPE pour la plupart des OS et services détectés !

Les utilisateurs peuvent contribuer à étoffer la base de CPE de nmap. Il suffit pour cela d'ajouter les entrées dans les fichiers nmap-os-db et nmap-service-probes, et de soumettre le patch. La nouvelle fonctionnalité ainsi que la procédure à suivre pour contribuer sont décrites plus en détails sur la liste discussion du projet.

Nouveautés sur l'autodécouverte de réseau

Vous pouvez lancer nmap et lui demander de découvrir automatiquement le réseau qui l'entoure, puis éventuellement de lancer des scans des machines découvertes. Pour cela, le moteur de scripts a été enrichi de deux types de scripts.

  • Des scripts purement passifs, qui se contentent d'écouter le trafic broadcasté et d'analyser les paquets reçus.

  • Des scripts actifs, faisant appel à divers protocoles d'autoconfiguration
    (tels ceux fournis par IPv6) pour découvrir l'environnement.

Aller plus loin

  • # traduc

    Posté par  . Évalué à 2.

    le choix a été fait de développer un nouveau moteur de prise d'empreinte utilisant des techniques d'apprentissage machine.

    Juste pour info, "machine learning" se traduit beaucoup plus souvent par "apprentissage statistique", ou alors éventuellement par "apprentissage de machines".

    • [^] # Re: traduc

      Posté par  . Évalué à 2.

      Perso je préfère:
      - auto-apprentissage
      - apprentissage automatisé

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.