Apprendre les bases de Nmap et les techniques d'analyse

NmapNmapBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, vous apprendrez les bases de Nmap, un puissant outil de numérisation de réseau couramment utilisé en cybersécurité pour la découverte de réseau et l'audit de sécurité. Vous explorerez comment utiliser Nmap pour scanner des réseaux, découvrir les ports ouverts et identifier les services en cours d'exécution.

En maîtrisant ces techniques, vous acquerrez des compétences essentielles pour l'administration de réseau et l'évaluation de sécurité. Cette expérience pratique vous offrira des connaissances pratiques applicables dans des scénarios réels, vous aidant à comprendre l'infrastructure réseau et les considérations de sécurité.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/installation("Installation and Setup") nmap/NmapGroup -.-> nmap/port_scanning("Port Scanning Methods") nmap/NmapGroup -.-> nmap/timing_performance("Timing and Performance") nmap/NmapGroup -.-> nmap/stealth_scanning("Stealth and Covert Scanning") subgraph Lab Skills nmap/installation -.-> lab-415937{{"Apprendre les bases de Nmap et les techniques d'analyse"}} nmap/port_scanning -.-> lab-415937{{"Apprendre les bases de Nmap et les techniques d'analyse"}} nmap/timing_performance -.-> lab-415937{{"Apprendre les bases de Nmap et les techniques d'analyse"}} nmap/stealth_scanning -.-> lab-415937{{"Apprendre les bases de Nmap et les techniques d'analyse"}} end

Comprendre les bases de Nmap

Nmap, acronyme de Network Mapper, est un outil open - source qui joue un rôle crucial dans la découverte de réseau et l'audit de sécurité. Dans le monde de la cybersécurité, c'est comme un détective qui utilise des paquets IP bruts pour recueillir des informations. Avec Nmap, vous pouvez déterminer quels hôtes sont présents sur un réseau, quels services ces hôtes fournissent, les systèmes d'exploitation qu'ils exécutent et d'autres caractéristiques importantes.

Commençons notre parcours avec les bases de Nmap. Tout d'abord, nous devons ouvrir un terminal. Le terminal est comme un centre de commandement où vous pouvez taper des commandes pour interagir avec votre système. Vous pouvez l'ouvrir en cliquant sur l'icône du terminal dans la barre des tâches ou en appuyant sur Ctrl+Alt+T.

Une fois le terminal ouvert, nous devons nous assurer que nous sommes dans le répertoire du projet. Le répertoire du projet est un dossier spécifique où toutes nos fichiers et opérations liées à cette expérience auront lieu. Pour naviguer jusqu'au répertoire du projet, utilisez la commande suivante :

cd /home/labex/project

Maintenant que nous sommes au bon endroit, vérifions la version de Nmap installée sur notre système. Connaître la version est important car différentes versions peuvent avoir des fonctionnalités et des comportements différents. Pour vérifier la version, exécutez cette commande :

nmap --version

Après avoir exécuté la commande, vous devriez voir une sortie similaire à celle - ci. Cette sortie montre la version de Nmap installée sur votre système, ainsi que quelques autres informations sur les bibliothèques avec lesquelles elle a été compilée et les moteurs nsock disponibles.

Nmap version 7.80 ( https://nmap.org )
Platform: x86_64-pc-linux-gnu
Compiled with: liblua-5.3.3 openssl-1.1.1f libpcre-8.39 libpcap-1.9.1 nmap-libdnet-1.12 ipv6
Compiled without:
Available nsock engines: epoll poll select

Maintenant, effectuons notre tout premier scan Nmap de base. Nous allons scanner notre localhost, ce qui est comme un auto - contrôle de votre propre système. Ce scan nous aidera à voir quels ports sont ouverts sur notre système. Les ports sont comme des portes dans un bâtiment ; différents services utilisent différents ports pour communiquer. Exécutez la commande suivante :

nmap localhost

Cette commande scanne les 1000 ports les plus courants sur votre localhost. Après avoir exécuté la commande, vous devriez voir une sortie similaire à celle - ci. La sortie nous indique quels ports sont ouverts sur notre système. Par exemple, le port 22 est généralement utilisé pour SSH (Secure Shell), qui est un protocole pour accéder en toute sécurité à un ordinateur distant, et le port 80 est utilisé pour HTTP (services web). Gardez à l'esprit que votre sortie peut montrer des ports ouverts différents en fonction des services exécutés sur votre système.

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-30 15:45 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).
Not shown: 998 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 0.08 seconds

Pour notre prochain exercice, nous avons besoin d'un service à scanner. Nous allons créer un simple service en utilisant netcat, qui est un utilitaire réseau polyvalent. Ce service écoutera sur le port 8888. Exécutez la commande suivante :

nc -lk 8888 &

Décortiquons cette commande. L'option -l indique à netcat d'écouter les connexions entrantes. L'option -k fait en sorte que netcat continue d'écouter même après la déconnexion d'un client. Le & à la fin exécute la commande en arrière - plan, afin que vous puissiez continuer à utiliser le terminal pour d'autres tâches.

Pour vérifier que le service est en cours d'exécution, nous pouvons utiliser la commande suivante :

netstat -tuln | grep 8888

Cette commande liste toutes les connexions réseau et filtre la sortie pour afficher uniquement les informations relatives au port 8888. Si le service est en cours d'exécution, vous devriez voir une sortie similaire à celle - ci :

tcp        0      0 0.0.0.0:8888            0.0.0.0:*               LISTEN

Cette sortie confirme que notre service fictif est en cours d'exécution et écoute sur le port 8888.

Explorer les techniques de numérisation de ports avec Nmap

Nmap est un outil puissant dans le domaine de la cybersécurité, notamment lorsqu'il s'agit de la numérisation de ports. La numérisation de ports est une méthode utilisée pour découvrir quels ports sur un système cible sont ouverts et quels services peuvent être exécutés sur ces ports. Il existe différents types de techniques de numérisation de ports, chacune ayant ses propres avantages uniques et cas d'utilisation spécifiques. Dans cette étape, nous allons explorer certaines de ces techniques en numérisant notre service fictif.

Tout d'abord, effectuons une numérisation TCP connect de base ciblant spécifiquement notre port 8888. Une numérisation TCP connect est un moyen simple de vérifier si un port est ouvert. Elle fonctionne en tentant d'établir une connexion TCP complète au port cible. Si la connexion réussit, le port est considéré comme ouvert.

nmap -p 8888 localhost

Dans cette commande, l'option -p est utilisée pour spécifier le ou les ports que nous voulons numériser. Ici, nous demandons à Nmap de numériser le port 8888 sur le localhost, qui fait référence à la machine actuelle. Après avoir exécuté cette commande, vous devriez voir une sortie similaire à celle - ci :

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-30 15:50 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).

PORT     STATE SERVICE
8888/tcp open  sun-answerbook

Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds

Cette sortie confirme que notre port 8888 est ouvert. Nmap a également identifié le nom du service associé à ce port selon sa base de données interne.

Maintenant, essayons une numérisation SYN. Une numérisation SYN est une approche plus discrète que la numérisation TCP connect. Elle n'achève pas la connexion TCP complète, ce qui la rend moins susceptible d'être détectée par les systèmes de détection d'intrusion.

sudo nmap -sS -p 8888 localhost

L'option -sS spécifie que nous voulons effectuer une numérisation SYN. Ce type de numérisation nécessite des privilèges root car il implique l'envoi de paquets réseau bruts, qui est une opération de bas niveau. C'est pourquoi nous utilisons la commande sudo. La sortie devrait être similaire à la numérisation précédente :

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-30 15:55 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).

PORT     STATE SERVICE
8888/tcp open  sun-answerbook

Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds

Ensuite, essayons une numérisation UDP. UDP (User Datagram Protocol) est un type de protocole réseau différent de TCP. Alors que TCP fournit un service fiable orienté connexion, UDP est un protocole sans connexion. Nous utiliserons une numérisation UDP pour vérifier si le port 8888 est ouvert pour le trafic UDP.

sudo nmap -sU -p 8888 localhost

L'option -sU spécifie une numérisation UDP. Les numérisations UDP peuvent être plus longues que les numérisations TCP car UDP n'a pas le même mécanisme d'accusé de réception intégré que TCP, donc Nmap doit attendre plus longtemps pour déterminer si un port est ouvert ou fermé. La sortie pourrait ressembler à ceci :

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-30 16:00 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).

PORT     STATE  SERVICE
8888/udp closed sun-answerbook

Nmap done: 1 IP address (1 host up) scanned in 0.15 seconds

Notez que le port UDP est indiqué comme fermé. Cela est normal car notre service netcat écoute les connexions TCP, pas UDP.

Enfin, effectuons une numérisation de détection de version de service. Ce type de numérisation nous aide à identifier quel service spécifique et quelle version sont exécutés sur un port particulier.

nmap -sV -p 8888 localhost

L'option -sV indique à Nmap d'effectuer une détection de service/version. Il essaie d'envoyer des sondes spécifiques aux ports ouverts et d'analyser les réponses pour déterminer le service et sa version. La sortie pourrait ressembler à ceci :

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-30 16:05 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).

PORT     STATE SERVICE VERSION
8888/tcp open  http    Apache httpd
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Nmap done: 1 IP address (1 host up) scanned in 6.51 seconds

La détection de version peut ne pas identifier correctement notre service netcat comme une application authentique, mais elle montre comment Nmap essaie de déterminer ce qui est exécuté sur les ports ouverts.

Sauvegardons nos résultats dans un fichier pour un usage ultérieur. Sauvegarder les résultats de la numérisation nous permet de les revoir plus tard, de les partager avec d'autres personnes ou de les utiliser pour une analyse plus approfondie.

nmap -p 8888 localhost > /home/labex/project/nmap_scan_results.txt

Dans cette commande, le symbole > est utilisé pour rediriger la sortie de la numérisation Nmap vers un fichier nommé nmap_scan_results.txt situé dans le répertoire /home/labex/project.

Vous pouvez afficher les résultats sauvegardés avec :

cat /home/labex/project/nmap_scan_results.txt

La commande cat est utilisée pour afficher le contenu d'un fichier.

Ceci conclut notre exploration des différentes techniques de numérisation de ports avec Nmap.

Comprendre les modèles de chronométrage et de performance

Lorsque vous effectuez des numérisations avec Nmap, le chronométrage joue un rôle crucial. Si vos numérisations sont trop agressives, elles risquent d'être détectées par les systèmes de détection d'intrusion (IDS - Intrusion Detection System). Un IDS est un outil de sécurité qui surveille le trafic réseau pour détecter toute activité suspecte. Les numérisations agressives peuvent également saturer le système cible, le faisant dysfonctionner ou le rendre inresponsive. D'un autre côté, si vos numérisations sont trop lentes, elles peuvent prendre un temps impractique à se terminer, ce qui n'est pas efficace, surtout lorsque vous avez un grand nombre de cibles à numériser.

Nmap propose des modèles de chronométrage qui vous permettent de contrôler la vitesse et l'agressivité de vos numérisations. Ces modèles vont de T0 (paranoïaque) à T5 (insensé). Plus le nombre est élevé, plus la numérisation sera rapide et agressive.

Voici une présentation détaillée des modèles de chronométrage :

  • -T0 (Paranoïaque) : C'est un modèle de chronométrage extrêmement lent. Il est principalement utilisé lorsque vous voulez échapper aux systèmes de détection d'intrusion. En envoyant les requêtes très lentement, il est moins probable de déclencher des alarmes dans l'IDS.
  • -T1 (Furtif) : Similaire au modèle paranoïaque, il est également lent et utilisé pour échapper aux IDS. Il envoie les requêtes à un rythme légèrement plus rapide que le modèle paranoïaque, mais toujours suffisamment lent pour éviter la détection.
  • -T2 (Politesse) : Ce modèle ralentit la numérisation pour utiliser moins de bande passante et de ressources sur la machine cible. C'est un bon choix lorsque vous ne voulez pas perturber le système cible.
  • -T3 (Normal) : C'est le modèle de chronométrage par défaut de Nmap. Il offre un équilibre entre vitesse et fiabilité, adapté à la plupart des numérisations générales.
  • -T4 (Agressif) : Ce modèle accélère la numérisation, en supposant que vous travaillez sur un réseau raisonnablement rapide et fiable. Il envoie les requêtes plus rapidement, ce qui peut réduire le temps total de numérisation.
  • -T5 (Insensé) : C'est un modèle de chronométrage très agressif. Il suppose que vous avez un réseau extraordinairement rapide. Il envoie les requêtes à un taux très élevé, ce qui peut réduire considérablement le temps de numérisation, mais augmente également le risque d'être détecté.

Commençons par essayer une numérisation avec le modèle de chronométrage par défaut (T3). Nous utiliserons la commande time pour mesurer le temps que prend la numérisation. La commande time est un outil utile qui vous montre combien de temps réel, de temps utilisateur et de temps système une commande prend pour s'exécuter.

time nmap -T3 -p 8888 localhost

Après avoir exécuté cette commande, vous devriez voir une sortie similaire à la suivante :

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-30 16:10 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).

PORT     STATE SERVICE
8888/tcp open  sun-answerbook

Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds

real    0m0.115s
user    0m0.033s
sys     0m0.015s

Maintenant, essayons un modèle de chronométrage plus agressif (T4). Nous utiliserons la même commande time pour mesurer le temps de numérisation.

time nmap -T4 -p 8888 localhost

Vous pourriez remarquer que la numérisation se termine légèrement plus rapidement. Voici un exemple de ce à quoi la sortie pourrait ressembler :

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-30 16:15 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).

PORT     STATE SERVICE
8888/tcp open  sun-answerbook

Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds

real    0m0.105s
user    0m0.032s
sys     0m0.014s

Pour voir une différence plus notable dans le temps de numérisation, essayons de numériser tous les ports avec les modèles T3 et T4.

time nmap -T3 -p- --max-retries 0 localhost | grep "open" > /dev/null

L'option -p- indique à Nmap de numériser tous les 65535 ports sur le système cible. L'option --max - retries 0 réduit le nombre de tentatives de reconnexion pour chaque numérisation de port, ce qui permet d'accélérer la numérisation. Nous redirigeons la sortie vers grep pour filtrer uniquement les lignes contenant le mot "open", puis nous redirigeons le résultat vers /dev/null afin de nous concentrer sur le chronométrage de la numérisation.

time nmap -T4 -p- --max-retries 0 localhost | grep "open" > /dev/null

Vous devriez remarquer une différence plus significative dans le temps de numérisation avec ces numérisations complètes.

Maintenant, comme demandé dans le laboratoire original, sauvegardons le résultat d'une numérisation furtive dans un fichier. Nous utiliserons le modèle de chronométrage T4 pour équilibrer vitesse et fiabilité.

nmap -T4 -p 8888 localhost > /home/labex/project/nmap_stealthy_scan.txt

Vous pouvez afficher les résultats sauvegardés en utilisant la commande cat :

cat /home/labex/project/nmap_stealthy_scan.txt

Le modèle de chronométrage T4 est un bon choix pour la plupart des scénarios car il équilibre vitesse et fiabilité. Lors de l'exécution d'évaluations de sécurité, il est important d'ajuster le modèle de chronométrage en fonction de vos besoins et contraintes spécifiques, telles que la vitesse du réseau, la sensibilité du système cible et le risque de détection.

Formats de sortie et analyse des résultats de numérisation

Nmap propose plusieurs formats de sortie, qui sont extrêmement utiles pour diverses finalités. Par exemple, ils peuvent être utilisés pour la documentation afin d'enregistrer les résultats de vos numérisations, pour une analyse plus approfondie ou pour l'intégration avec d'autres outils de sécurité. Dans cette étape, nous allons examiner de plus près ces formats de sortie et apprendre à analyser efficacement les résultats de numérisation.

Nmap prend en charge les principaux formats de sortie suivants :

  1. Sortie normale (par défaut) : C'est un format de texte lisible par l'homme. Il présente les résultats de numérisation d'une manière facile à comprendre d'un coup d'œil, similaire à un rapport.
  2. Sortie XML (-oX) : XML est un format structuré. Il organise les données de manière hiérarchique et organisée, ce qui est très pratique pour que les programmes les analysent et les traitent.
  3. Sortie filtrée (-oG) : Ce format est conçu pour être facilement analysé à l'aide d'outils tels que grep et d'autres utilitaires de traitement de texte. Il a une structure spécifique qui permet d'extraire facilement les informations pertinentes.
  4. Tous les formats (-oA) : Lorsque vous utilisez cette option, Nmap enregistrera les résultats de numérisation simultanément au format normal, XML et filtré. Cela est utile lorsque vous souhaitez avoir tous les types de sorties pour différents besoins.

Essayons chacun de ces formats un par un :

Tout d'abord, enregistrons une numérisation au format normal. La commande suivante numérisera le port 8888 sur le localhost et enregistrera les résultats dans un fichier texte :

nmap -p 8888 localhost -oN /home/labex/project/normal_output.txt

Maintenant, enregistrons une numérisation au format XML. Cette commande effectuera la même numérisation sur le port 8888 du localhost et enregistrera les résultats dans un fichier XML :

nmap -p 8888 localhost -oX /home/labex/project/xml_output.xml

Ensuite, enregistrons une numérisation au format filtré. La commande ci - dessous numérisera le port 8888 sur le localhost et enregistrera les résultats dans un fichier facilement analysable par grep :

nmap -p 8888 localhost -oG /home/labex/project/grep_output.txt

Enfin, enregistrons une numérisation dans tous les formats. La commande suivante créera trois fichiers de différents formats pour la même numérisation sur le port 8888 du localhost :

nmap -p 8888 localhost -oA /home/labex/project/all_formats

Cela créera trois fichiers : all_formats.nmap, all_formats.xml et all_formats.gnmap.

Maintenant, examinons chacun de ces fichiers pour comprendre les différences de leurs formats.

Pour afficher la sortie normale, nous utilisons la commande cat :

cat /home/labex/project/normal_output.txt

Vous devriez voir la sortie standard de Nmap, qui est facile à lire pour les humains. Voici un exemple de ce à quoi cela pourrait ressembler :

## Nmap 7.80 scan initiated Mon Oct 30 16:45:00 2023 as: nmap -p 8888 -oN /home/labex/project/normal_output.txt localhost
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00010s latency).

PORT     STATE SERVICE
8888/tcp open  sun-answerbook

## Nmap done at Mon Oct 30 16:45:00 2023 -- 1 IP address (1 host up) scanned in 0.04 seconds

Pour afficher la sortie XML, nous utilisons également la commande cat :

cat /home/labex/project/xml_output.xml

Ce format est structuré pour être facilement analysé par les programmes. Voici un exemple de sortie XML :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE nmaprun>
<nmaprun scanner="nmap" args="nmap -p 8888 -oX /home/labex/project/xml_output.xml localhost" start="1698684307" startstr="Mon Oct 30 16:45:07 2023" version="7.80" xmloutputversion="1.04">
<scaninfo type="connect" protocol="tcp" numservices="1" services="8888"/>
<verbose level="0"/>
<debugging level="0"/>
<host starttime="1698684307" endtime="1698684307"><status state="up" reason="conn-refused" reason_ttl="0"/>
<address addr="127.0.0.1" addrtype="ipv4"/>
<hostnames>
<hostname name="localhost" type="user"/>
<hostname name="localhost" type="PTR"/>
</hostnames>
<ports><port protocol="tcp" portid="8888"><state state="open" reason="syn-ack" reason_ttl="0"/><service name="sun-answerbook" method="table" conf="3"/></port>
</ports>
<times srtt="100" rttvar="5000" to="100000"/>
</host>
<runstats><finished time="1698684307" timestr="Mon Oct 30 16:45:07 2023" elapsed="0.04" summary="Nmap done at Mon Oct 30 16:45:07 2023; 1 IP address (1 host up) scanned in 0.04 seconds" exit="success"/><hosts up="1" down="0" total="1"/>
</runstats>
</nmaprun>

Pour afficher la sortie filtrée, nous utilisons à nouveau la commande cat :

cat /home/labex/project/grep_output.txt

Ce format est conçu pour être facilement analysé avec des outils tels que grep. Voici un exemple de sortie filtrée :

## Nmap 7.80 scan initiated Mon Oct 30 16:45:15 2023 as: nmap -p 8888 -oG /home/labex/project/grep_output.txt localhost
Host: 127.0.0.1 (localhost)	Status: Up
Host: 127.0.0.1 (localhost)	Ports: 8888/open/tcp//sun-answerbook///
## Nmap done at Mon Oct 30 16:45:15 2023 -- 1 IP address (1 host up) scanned in 0.04 seconds

Practiquons l'utilisation de grep pour extraire des informations spécifiques de la sortie filtrée. La commande suivante affichera toutes les lignes avec des ports ouverts :

grep "open" /home/labex/project/grep_output.txt

La sortie devrait être :

Host: 127.0.0.1 (localhost)	Ports: 8888/open/tcp//sun-answerbook///

Vous pouvez également utiliser des filtres plus complexes. La commande suivante extrait uniquement le numéro de port des ports ouverts :

grep -E "Ports:.*open" /home/labex/project/grep_output.txt | cut -d':' -f3 | cut -d'/' -f1

La sortie sera :

 8888

Ces différents formats de sortie vous permettent d'intégrer les résultats de numérisation de Nmap avec d'autres outils et flux de travail, ce qui en fait un ajout polyvalent à votre boîte à outils de sécurité.

Résumé

Dans ce laboratoire, vous avez appris les bases de Nmap, un puissant outil de numérisation de réseau et d'évaluation de sécurité. Vous avez commencé par maîtriser l'utilisation de base de Nmap, comme la numérisation d'hôtes et l'identification des ports ouverts. Ensuite, vous avez exploré diverses techniques de numérisation de ports telles que les numérisations TCP connect, les numérisations SYN et les numérisations UDP, chacune ayant des avantages et des cas d'utilisation uniques.

Vous avez également pratiqué l'utilisation de modèles de chronométrage pour équilibrer la vitesse de numérisation et la discrétion. Enfin, vous avez appris à enregistrer les résultats de numérisation dans différents formats et à les analyser avec des outils de traitement de texte. Ces compétences constituent une base pour la découverte de réseau, l'évaluation de sécurité et l'identification de vulnérabilités. Nmap est essentiel pour les administrateurs de réseau, les professionnels de la sécurité et les hackers éthiques. N'oubliez pas d'utiliser ces outils de manière responsable et éthique, et toujours obtenir l'autorisation appropriée avant de numériser des réseaux ou des systèmes inconnus.