Scanner les vulnérabilités avec Nmap

NmapBeginner
Pratiquer maintenant

Introduction

Dans cet atelier, vous allez acquérir les bases de l'exploration réseau à l'aide de Nmap (Network Mapper), un outil open-source incontournable pour la découverte de réseaux et l'audit de sécurité. Vous commencerez par des scans de ports élémentaires, passerez à la détection de services et de versions, puis explorerez le moteur de script Nmap (NSE) pour effectuer des vérifications de vulnérabilités. Enfin, vous apprendrez à analyser et à sauvegarder vos résultats de scan dans différents formats pour la rédaction de rapports. Cet atelier propose une introduction pratique et progressive aux fonctionnalités clés de Nmap pour une évaluation efficace de la sécurité réseau.

Effectuer un scan réseau de base

Dans cette première étape, vous allez vous familiariser avec Nmap en effectuant un scan de base. Un scan de base sert à découvrir quels ports sont ouverts sur une machine cible. Un port ouvert indique qu'un service (comme un serveur web ou SSH) est actif et en attente de connexions.

L'environnement de l'atelier a été pré-configuré avec plusieurs services s'exécutant sur localhost (votre propre machine virtuelle) pour vous permettre de vous exercer. L'outil nmap est déjà installé.

  1. Tout d'abord, vérifions que Nmap est bien installé et consultons sa version. Ouvrez le terminal et exécutez la commande suivante :

    nmap --version
    

    Vous devriez voir une sortie confirmant la version de Nmap, semblable à ceci :

    Nmap version 7.80 ( https://nmap.org )
    Platform: x86_64-pc-linux-gnu
    Compiled with: liblua-5.3.3 openssl-1.1.1f libssh2-1.8.0 libz-1.2.11 libpcre-8.39 nmap-libpcap-1.9.1
    Compiled without:
    Available nsock engines: epoll poll select
    
  2. Maintenant, effectuez votre premier scan sur localhost. Cette commande demande à Nmap de vérifier les ports ouverts les plus courants sur votre machine locale.

    nmap localhost
    
  3. Examinez le résultat. Nmap listera les ports qu'il a trouvés ouverts, ainsi que leur état et le service habituellement associé à ce port. La sortie ressemblera à ceci, affichant les services préparés pour cet atelier :

    Starting Nmap 7.80 ( https://nmap.org ) at ...
    Nmap scan report for localhost (127.0.0.1)
    Host is up (0.000092s latency).
    Not shown: 995 closed ports
    PORT     STATE SERVICE
    22/tcp   open  ssh
    2121/tcp open  ccproxy-ftp
    2222/tcp open  EtherNetIP-1
    3001/tcp open  nessus
    8080/tcp open  http-proxy
    
    Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds
    

Ce scan initial vous donne une cartographie des services en cours d'exécution, ce qui constitue la première étape de toute évaluation de la sécurité réseau.

Détecter les versions des services

Savoir quels ports sont ouverts est utile, mais connaître précisément le logiciel et la version qui tournent sur ces ports est bien plus précieux pour un analyste en sécurité. Les logiciels obsolètes sont une source majeure de vulnérabilités. Dans cette étape, vous allez utiliser Nmap pour détecter les services et leurs versions.

Nous utiliserons le drapeau -sV, qui ordonne à Nmap de sonder les ports ouverts pour déterminer des informations détaillées sur le service et sa version.

  1. Lancez un scan de détection de version sur localhost. Pour rendre le scan plus efficace, nous allons cibler les ports spécifiques découverts à l'étape 1 (22, 2121, 2222, 3001, 8080) plutôt que de scanner tous les ports.

    nmap -sV -p 22,8080 localhost
    

    Conseil d'expert : Cibler des ports spécifiques réduit considérablement le temps de scan. Un scan complet de la plage de ports avec -sV peut prendre plusieurs minutes, alors que cette approche ciblée se termine généralement en quelques secondes.

  2. Comparez le résultat avec le scan de base de l'étape 1. Vous verrez maintenant une colonne supplémentaire, VERSION, qui fournit des détails sur le logiciel s'exécutant sur chaque port.

    La sortie sera plus détaillée, semblable à celle-ci :

    Starting Nmap 7.80 ( https://nmap.org ) at ...
    Nmap scan report for localhost (127.0.0.1)
    Host is up (0.00011s latency).
    Not shown: 995 closed ports
    PORT     STATE SERVICE VERSION
    22/tcp   open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.13 (Ubuntu Linux; protocol 2.0)
    8080/tcp open  http    nginx 1.18.0 (Ubuntu)
    Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
    
    Nmap done: 1 IP address (1 host up) scanned in 2.15 seconds
    

Ces informations sont cruciales. Par exemple, si le scan révélait une ancienne version de nginx présentant une vulnérabilité critique connue, vous sauriez exactement où concentrer vos efforts de remédiation.

Utiliser le moteur de script Nmap (NSE)

Le moteur de script Nmap (NSE - Nmap Scripting Engine) est l'une des fonctionnalités les plus puissantes de Nmap. Il permet d'automatiser une grande variété de tâches réseau grâce à une bibliothèque de scripts. Ces scripts peuvent être utilisés pour une découverte avancée, la détection de vulnérabilités et même l'exploitation.

Dans cette étape, vous utiliserez le drapeau -sC, qui exécute un ensemble de scripts par défaut considérés comme sûrs et utiles pour la phase de découverte.

  1. Lancez un scan Nmap avec les scripts par défaut activés sur localhost. Le drapeau -sC est un moyen pratique d'obtenir plus d'informations sans avoir à spécifier chaque script individuellement.

    nmap -sC localhost
    
  2. Examinez le résultat. Vous verrez des informations supplémentaires indentées sous chaque port. Il s'agit de la sortie des scripts NSE. Par exemple, le script http-title peut récupérer le titre de la page web sur le port 8080, et les scripts SSL peuvent fournir des détails sur les certificats.

    La sortie sera encore plus verbeuse :

    Starting Nmap 7.80 ( https://nmap.org ) at ...
    Nmap scan report for localhost (127.0.0.1)
    Host is up (0.000099s latency).
    Other addresses for localhost (not scanned): ::1
    Not shown: 995 closed ports
    PORT     STATE SERVICE
    22/tcp   open  ssh
    2121/tcp open  ccproxy-ftp
    2222/tcp open  EtherNetIP-1
    3001/tcp open  nessus
    | ssl-cert: Subject: commonName=localhost
    | Subject Alternative Name: DNS:localhost
    | Not valid before: 2024-07-18T03:37:05
    |_Not valid after:  2034-07-16T03:37:05
    8080/tcp open  http-proxy
    |_http-open-proxy: Proxy might be redirecting requests
    |_http-title: Site doesn't have a title (text/html).
    
    Nmap done: 1 IP address (1 host up) scanned in 0.62 seconds
    

Comme vous pouvez le constater, les scripts par défaut ont découvert que la connexion FTP anonyme est autorisée sur le port 2121 et ont récupéré le titre de la page web sur le port 8080. Ce sont des renseignements précieux collectés automatiquement.

Exécuter un scan de vulnérabilités

Il est maintenant temps de traquer les vulnérabilités. Le NSE comprend une catégorie de scripts spécifiquement conçus pour vérifier les failles de sécurité connues. Vous pouvez exécuter tous les scripts de la catégorie vuln pour effectuer un scan de vulnérabilités large.

Il est recommandé de toujours sauvegarder la sortie des scans longs ou importants dans un fichier. Nous utiliserons le drapeau -oN pour enregistrer le résultat au format normal de Nmap.

  1. Tout d'abord, combinons ce que vous avez appris. Lancez un scan incluant la détection de service (-sV) et exécutant tous les scripts de vulnérabilité (--script vuln). Sauvegardez le résultat dans un fichier nommé vuln_scan.txt.

    nmap -sV --script vuln -oN vuln_scan.txt localhost
    

    Ce scan peut prendre quelques minutes car il exécute de nombreux scripts sur chaque port ouvert.

  2. Une fois le scan terminé, un fichier nommé vuln_scan.txt sera créé dans votre répertoire actuel (/home/labex/project). Vous pouvez consulter son contenu avec la commande cat :

    cat vuln_scan.txt
    
  3. Le fichier de sortie est long, il est donc plus efficace de rechercher des mots-clés. Utilisez grep pour chercher les lignes indiquant une vulnérabilité. Le terme "VULNERABLE" est un indicateur fort.

    grep "VULNERABLE" vuln_scan.txt
    

    Vous devriez voir s'afficher les vulnérabilités trouvées. Dans cet environnement d'atelier, vous verrez probablement une vulnérabilité liée au filtre byterange d'Apache :

    |   VULNERABLE:
    |     State: VULNERABLE
    

    Pour voir les détails complets de la vulnérabilité, vous pouvez rechercher le CVE spécifique ou consulter l'intégralité de la sortie du scan. Par exemple, vous pourriez trouver une vulnérabilité de déni de service (DoS) Apache (CVE-2011-3192) sur le port 8080. Notez que vous pourriez également voir des erreurs de script (comme clamav-exec: ERROR), ce qui est normal et peut être ignoré ; cela arrive lorsque certains scripts de vulnérabilité ne peuvent pas s'exécuter correctement dans l'environnement de l'atelier.

Cette étape démontre comment sonder activement les faiblesses, passant d'une simple découverte à un audit de sécurité ciblé.

Sauvegarder et formater les résultats du scan

Documenter et rapporter correctement vos découvertes est une compétence essentielle pour tout professionnel de la sécurité. Nmap prend en charge plusieurs formats de sortie adaptés à différents usages. Dans cette dernière étape, vous apprendrez à sauvegarder vos résultats dans plusieurs formats et à créer un rapport HTML convivial.

  1. Tout d'abord, créez un répertoire dédié pour organiser vos rapports.

    mkdir -p ~/project/reports
    
  2. Maintenant, relancez le scan, mais cette fois-ci, sauvegardez la sortie dans deux formats simultanément : texte normal (-oN) et XML (-oX). Le XML est un format structuré idéal pour être traité par d'autres outils.

    nmap -sV -p 8080 --script vuln -oN ~/project/reports/scan_report.txt -oX ~/project/reports/scan_report.xml localhost
    
  3. Le format XML n'est pas très lisible par l'homme. Nmap fournit un utilitaire appelé xsltproc pour convertir le fichier XML en un rapport HTML clair. Exécutez la commande suivante pour générer scan_report.html.

    xsltproc ~/project/reports/scan_report.xml -o ~/project/reports/scan_report.html
    
  4. Vérifions que tous vos fichiers de rapport ont été créés dans le répertoire ~/project/reports. Utilisez la commande ls -l pour lister les fichiers et leurs détails.

    ls -l ~/project/reports
    

    Vous devriez voir vos trois fichiers de rapport :

    total 40
    -rw-rw-r-- 1 labex labex 14276 Aug 28 15:12 scan_report.html
    -rw-rw-r-- 1 labex labex  5686 Aug 28 15:11 scan_report.txt
    -rw-rw-r-- 1 labex labex 14924 Aug 28 15:11 scan_report.xml
    

Vous disposez maintenant d'un fichier texte brut pour une consultation rapide, d'un fichier XML pour un traitement automatisé et d'un fichier HTML pour un partage et une présentation facilités.

Résumé

Dans cet atelier, vous avez acquis une expérience pratique de Nmap, un outil fondamental en cybersécurité. Vous avez commencé par effectuer des scans de ports de base pour identifier les services ouverts sur un hôte réseau. Vous avez ensuite progressé vers des techniques plus avancées, notamment la détection de version de service (-sV) pour identifier les logiciels spécifiques et leurs versions. Vous avez également exploré la puissance du moteur de script Nmap (NSE) en exécutant des scripts par défaut (-sC) et un scan de vulnérabilités complet (--script vuln). Enfin, vous avez appris la pratique professionnelle consistant à sauvegarder les résultats de scan dans plusieurs formats (-oN, -oX) et à les convertir en un rapport HTML lisible pour l'analyse et la documentation. Ces compétences constituent une base solide pour utiliser Nmap lors d'évaluations de sécurité réseau en conditions réelles.