NMAP! Vous êtes un passionné de cybersécurité ? Savoir énumérer les machines de votre parc fait partie de vos missions au quotidien ? Vous voudriez apprendre à vous servir d’un scanner réseau ?
Alors cet article est fait pour vous ! Nous allons découvrir ensemble LA référence du scan de ports et vulnérabilités au sein d’un système : Nmap. Je vous montrerai également comment l’utiliser, ses commandes de bases et leurs significations, afin de mener à bien votre propre audit de sécurité, et élargir votre panel de compétences.
Dernièrement, lorsque vous arriverez à l’exploitation, je vous sollicite à vouloir exécuter les commandes pour apprendre à interpréter les résultats d’un scan, et comme dit, on apprend mieux en pratiquant.
Sommaire
- Nmap: qu’est-ce que c’est ?
- Fonctionnement de nmap
- Installation de nmap
- Exploitation basique
- Exploitation avancée
- Conclusion
Qu’est-ce que Nmap ?
Nmap pour « Network Mapper », a été créé et codé par Gordon Lyon en C, C++, Python, Lua, puis distribué par Insecure.org. Cet outil est parmi les outils les plus utilisés dans le domaine du réseau, et les plus connus lorsque l’on commence à s’intéresser au domaine de la cybersécurité.
D’ailleurs, conçu à l’origine pour effectuer un scan de port, nmap fournit également d’autres services, notamment pour la découverte des hôtes disponibles et les scans de vulnérabilités.
Mais encore, si vous êtes un programmeur avisé, il intègre également la fonctionnalité d’effectuer un scan avec des scripts. Ainsi, vous avez la possibilité de transformer votre outil de scan en une grosse artillerie de guerre sur le réseau.
Par ailleurs, c’est un outil très populaire, très soutenue par sa communauté, et cela pour plusieurs raisons:
- Open-source et gratuit;
- Capable d’utiliser de nombreux protocoles réseaux: ARP, IP, ICMP, TCP, UDP;
- Permet le scan de détection d’hôte, d’OS, de ports et de vulnérabilités;
- Multiplateforme: disponible sous Windows, MacOS, Linux et les systèmes Unix comme FreeBSD ou OpenBSD
Enfin, pour plus d’informations concernant l’outil et son évolution, veuillez consulter le site officiel en cliquant ici.
Fonctionnement de Nmap
Tout d’abord, avant de plonger dans la partie technique, je vais vous expliquer le mode opératoire d’un scanner réseau. En effet, lors d’un audit de sécurité, nous n’avons forcément pas accès physiquement à nos cibles, et d’où le grand intérêt de l’utilisation d’un scanner. Sans accès physique, le seul vecteur d’accès est le réseau.
Aussi, utiliser un scanner vous permettra, en tant qu’administrateur d’un parc, de détecter les différentes failles de sécurité au sein d’un système, en vue d’apporter des correctifs et de sécuriser l’infrastructure.
Mais comment nmap fonctionne pour récupérer des informations ?
La réponse est toute simple : grâce à de l’algorithme, de la logique et de la déduction pure.
Autrement dit, d’une part, si nmap envoie une demande de connexion TCP Syn, et qu’il reçoit une réponse de connexion TCP Syn/ACK, nmap déduit que le port TCP est ouvert.
D’autre part, si nmap envoie une requête echo request ICMP, et qu’il reçoit un echo reply ICMP, nmap déduit que la cible est active.
Cependant, avant de lancer tous ses lots de tests et de scripts, nmap va vérifier l’état de connexion de l’hôte cible. Cette vérification s’effectue en respectant la hiérarchie des couches du modèle TCP/IP ou OSI. Si vous ne connaissez pas ce qu’est le modèle OSI, je vous propose d’effectuer un léger détour vers cet article: le modèle OSI pour les nuls.
D’ailleurs, si votre cible est sur le même réseau local, nmap privilégiera les requêtes ARP car c’est ce qu’il y a de plus fiable en local. Sinon, si la cible est sur un réseau externe, il privilégiera un echo ICMP, couplée avec une requête TCP/ACK sur les 1024 premiers ports, communément appelés « services communs ».
En outre, à l’absence de réponses de ces requêtes, il déduira que la cible est inactive, et ne dépensera pas donc de ressources supplémentaires, hormis l’utilisation de scripts pour des scans un peu plus avancés.
Enfin, ne vous effrayez pas sur les termes techniques. Vous n’êtes pas obligé de connaitre chaque sens des termes techniques pour pouvoir exploiter l’outil. Mais, comprendre les bases du réseau est fortement recommandé afin de mieux interpréter les résultats des scans.
A présent, passons à la partie technique, en commençant par l’installation du scanner nmap.
Installation de Nmap
Tout d’abord, pour l’installation, il vous suffit de vous rendre sur le site officiel de téléchargement de Nmap. Ensuite, arrivé à cette page, à vous de choisir et télécharger la bonne version selon votre système d’exploitation.
Windows
Pour commencer, sur la page de téléchargement, cliquez sur le lien sous Latest stable release
Ensuite, une fois le téléchargement terminé, lancer l’exécutable en tant qu’administrateur
Enfin, suivez les étapes de l’installation et fermer la fenêtre d’installation.
Mac OS
Pour les utilisateurs Mac, sur la page de téléchargement, cliquez sur le lien pour le fichier .dmg
Ensuite, cliquez sur le fichier téléchargé, puis ajouter le fichier .mpkg dans le dossier Applications.
Puis, ouvrez le dossier Applications, faites un clic-droit sur nmap-<ver>.mpkg puis cliquez sur Ouvrir.
Enfin, suivez les étapes de l’installation et fermer le programme d’installation une fois terminé.
Distributions Linux
Nmap est nativement disponible dans les dépôts officiels des distributions Linux. Ainsi, pour l’installer, il vous suffira de lancer la commande d’installation de votre gestionnaire de paquets:
Debian/Ubuntu :
sudo apt install nmap -y
CentOS/RedHat :
sudo yum install nmap -y
Fedora :
sudo dnf install nmap -y
Arch Linux :
sudo pacman -S nmap
Par ailleurs, pour informations, nmap est disponible directement sur les distributions Linux dédiées au test d’intrusion tel que: Kali Linux, Parrot OS, et BlackArch.
Enfin, afin de vérifier que nmap est bel et bien installé sur votre système, il vous suffit de lancer la commande:
nmap --version
Cette commande vous permettra également de vérifier la version de nmap installé sur votre système. Et pour consulter le manuel de l’outil sur le terminal :
man nmap #uniquement sous système Unix
ou
nmap --help
L’installation terminée, explorons à présent les diverses commandes de nmap.
Exploitation basique de Nmap
Afin de comprendre, et apprendre à interpréter les résultats d’un scan, nous avons à notre disposition une machine cible distribué par Nmap Project: scanme.nmap.org.
Toutefois, il est conseillé de ne pas abuser des scans agressifs sur le serveur, mais l’utiliser à des fins éducatifs.
Dans le cadre de cet article, les commandes suivantes seront des commandes issues d’une distribution Linux. Si vous êtes sur un autre système, pas de souci.
Adapter les commandes selon votre système d’exploitation.
Ainsi, sans plus tarder, lancez votre premier scan avec:
sudo nmap scanme.nmap.org
Vous y êtes ? Des résultats se sont affichés sur votre terminal ? Bravo ! Mais vous vous demandez surement: » Mais qu’est-ce qu’il s’est passé ? « , je vous explique:
Par défaut, si nous rajoutons aucune option à nmap, il exécutera un scan successivement sur chaque type de scan.
En premier lieu, il lance un scan de détection d’hôte par ARP ou echo ICMP ou TCP ACK. En second lieu, un scan de port en TCP Syn ou TCP Full. Et en dernier lieu, il effectue les scans avec une vitesse à T3, qui est la vitesse normale.
Ainsi, pour que vous puissiez comprendre et modifier ce comportement, nous verrons prochainement les types de scans, avec les options et arguments les plus utilisés. Les différents types de scans que nous allons découvrir dans l’exploitation basique sont: le scan de détection d’hôte, le scan de port, et le scan de détection de version.
Enfin, la syntaxe de la commande est :
nmap <options> <cible>
- <options> : différentes options que nous allons découvrir prochainement
- <cible> : qui peut varier entre une adresse IP, rangée d’adresse, un adresse de sous-réseau, ou même un nom DNS
Scan de détection d’hôte
Le scan de détection d’hôte permet de déterminer si un hôte est actif sur le réseau. Il est ainsi très utile pour les administrateurs réseaux afin de cartographier un réseau. Voyez ce type de scan comme lorsque vous effectuez un ping pour vérifier la connectivité entre deux hôtes.
En effet, le scan de détection d’hôte par nmap est considéré comme un ping, mais sur une plus grande échelle. Ce que l’on appelle, le Ping Sweep.
Par défaut, lors de la détection d’hôte, nmap privilégiera le ping ARP
, ou sinon à défaut un echo ICMP + TCP ACK
. Ensuite, si nous ne spécifions pas d’options supplémentaires, sans réponse du scan de détection, nmap arrête son scan et renvoie une sortie indiquant qu’aucun hôte n’a été détecté, et arrête son scan.
Donc, afin d’éviter cela, vous devez spécifier des options et forcer le type de scan, qui vous permettra de sauter cette étape de détection d’hôte. Les options de détection d’hôte les plus communs sont:
- Ping ARP :
sudo nmap -PR <cible>
- Ping TCP ACK , qui complète toute la phase du 3-way Handshake :
sudo nmap -PA <cible>
- Ping TCP Syn, qui ne complète pas la phase de handshake :
sudo nmap -PS <cible>
- Ping UDP :
sudo nmap -PU <cible>
- Pour sauter le scan de détection d’hôte, ou scanner les machines cibles se situant derrière un pare-feu :
sudo nmap -Pn <cible>
Cette dernière option vous sera utile si vous voulez passer directement aux autres scans, et indiquer à nmap de forcer les scans même si la cible ne répond pas présent sur le réseau.
A présent, le scan de détection d’hôte n’a quasiment plus de secret pour vous. Voyons à présent comment effectuer un scan de port.
Scan de port
Tout d’abord, l’utilisation par défaut de nmap pour un scan de port est l’envoie des requêtes TCP. Toutefois, il ne se limite pas qu’à des scans de port TCP, et prend en charge également le scan des ports UDP.
Scan de port TCP
Pour scanner les ports TCP, nmap procède tout d’abord en Syn Scan
avec les 1024 premiers ports, ou des ports spécifiés par l’utilisateur:
- Si la cible répond avec un
TCP Syn/ACK
, nmap déduit que le port est ouvert. - Si il répond avec un
TCP RST
, on saura que le port est fermé. - Si la cible n’envoie aucune réponse: soit le port est filtré, soit il est fermé.
Ainsi, Les scans de port TCP sont définies par les options suivantes:
- Syn Scan, uniquement disponible avec des droits administrateurs, et moins bavard au niveau des logs :
sudo nmap -sS <cible>
- TCP Full Connect, qui est plus lent et bavard au niveau des logs, et le scan utilisé par défaut par nmap sans droits administrateurs:
sudo nmap -sT <cible>
Scan de port UDP
Tout d’abord, il est à savoir qu’à l’inverse du mode de transport, les scans de ports UDP sont beaucoup plus lents que les scans TCP.
En effet pour valider qu’un port UDP est ouvert, nmap va lancer sa batterie de scan plusieurs fois, afin de s’assurer qu’il n’y ait pas de faux positifs aux résultats.
Aussi, ce type de scan permet de détecter les services qui sont sur le port UDP tel que le DNS (port 53), ou le DHCP (port 67). Si vous voulez plus d’informations sur ces services évoqués, veuillez consulter les articles suivants : le DNS, DHCP pour les nuls, et le Protocole DHCP.
La commande pour scanner tous les ports UDP de votre cible est :
sudo nmap -sU <cible>
Cependant, nmap ne s’arrête pas là. Il permet également de scanner que des ports spécifiques avec l’option -p
.
Scan de port spécifique
Le scan de port spécifique vous permettra d’économiser plus de ressources lors d’un scan. En effet, cette méthode permettra au scanner d’éviter de scanner les 1024 premiers ports TCP ou UDP.
En effet, en suivant cette logique, le scan de port spécifique vous sera d’une grande utilité si vous souhaitez énumérer les machines d’un parc informatique selon leur rôle. Par exemple, afin de lister tous les serveurs web, vous pouvez lancer un scan sur le port 80 et 443, pour les serveurs de base de données, le port 3306, ou même les serveurs d’annuaire basé Active Directory, sur le port 389, etc …
Ainsi, ci-dessous les différentes manières d’effectuer les scans de ports spécifiques :
- Scan de port unique :
sudo nmap -p 80 <cible>
- Scan de port multiple :
sudo nmap -p 80,443 <cible>
- Scan sur les ports 1 à 500 :
sudo nmap -p 1-500 <cible>
- Scan sur tous les 65535 ports:
sudo nmap -p- <cible>
Enfin, pour compléter le lot de scan de base, nous verrons prochainement comment détecter les versions de services, daemons, et de système d’exploitation des cibles de notre scan.
Scan de détection de version
La détection de version permettra de compléter le lot de scan de base avec nmap. En effet, avec ce type de scan, nous pouvons énumérer les machines cibles à mettre à jour, et vérifier si des vulnérabilités sont présentes sur ces services. Comme dit, « le nerf de la guerre, c’est l’information », plus vous aurez d’informations, plus vous pouvez mieux conduire vos stratégies de sécurisation, et de pentesting.
Pour le scan de détection de version, vous aurez 3 grandes options à retenir dont :
- Scan de version des services/daemons :
sudo nmap -sV <cible>
- Scan de détection d’OS :
sudo nmap -O <cible>
Et comme les options précédentes sont très fréquemment utilisées ensemble, cette option permet d’exécuter les deux à la fois :
sudo nmap -A <cible>
Ainsi, vous êtes actuellement capable de mener un scan d’exploration réseau complet sur un parc ou votre réseau local. L’exploitation de base de l’outil vous a permis de comprendre les concepts d’un scan, analyser les résultats, et d’énumérer les machines selon les résultats.
Pour la suite, nous verrons ensemble les exploitations avancées de nmap avec l’optimisation du temps de scan, la génération d’un rapport de scan, et l’utilisation des scripts.
Exploitation avancée de Nmap
Dans cette section, nous allons aborder des sujets plus complexes, mais aussi plus intéressants. Mais pas de panique, vous serez capable de comprendre la suite si vous êtes arrivé à cette étape de l’article.
Donc, sans plus tarder, abordons ensemble la question sur l’optimisation du scan
Optimisation du scan
Tout d’abord, l’optimisation est un concept que vous entendrez très souvent lors de l’exécution d’un programme. Et vous l’aurez deviné, elle nous permet d’optimiser le temps d’exécution de notre scan, mais également la gestion des ressources utilisées par le scanner lorsqu’il lance son scan.
En effet, dans les sections précédentes, nous avons déjà optimisé les scans en spécifiant : le(s) ports à scanner et le type de scan.
Cependant, ce que nous allons voir prochainement est littéralement l’optimisation du traitement en temps d’un scan.
Pour ce faire, l’option à rajouter est l’option -T qui signifie « Time » ou temps en français. Vous avez la possibilité d’affecter la valeur de 0 à 5, du moins rapide et plus discret, jusqu’au plus rapide et plus bavard sur les logs de la machine cible.
Ainsi, la syntaxe de la commande est donc :
sudo nmap -Tx <cible> #avec x la valeur à affecter
Rapport de scan
Ensuite, parlons de la génération de rapport. Par défaut, après l’exécution d’un scan, vous avez la possibilité de visualiser les résultats sur le canal de sortie de votre terminal.
Toutefois, il est possible que vous souhaitiez sauvegarder ces résultats pour de futures analyses, ou comparer l’état du système d’un instant T et T+1. Ainsi, je vous démontre deux méthodes d’enregistrer les résultats du scan de nmap :
Méthode simple
En effet, si vous êtes un utilisateur aguerri des lignes de commande, vous saurez que vous pouvez rediriger la sortie de la commande dans un fichier avec un chevron « > » :
sudo nmap <cible> > rapport.txt
Méthode avancée
Par ailleurs, nmap inclut des options dans sa commande vous permettant de générer le rapport de scan sous des formats différents. La commande ci-dessous est l’option qui génèrera des fichiers de rapport sur tous les formats :
sudo nmap <cible> -oA rapport
Ainsi, libre à vous de traiter les résultats de vos scans, d’organiser les résultats, et de les interpréter comme bon vous semble.
A présent, attaquons à la dernière section de notre article, se portant sur le Nmap Scripting Engine.
Nmap Scripting Engine
Enfin, place à l’automatisation, qui est le Nmap Scripting Engine. En effet, nmap intègre nativement l’utilisation de script. Si vous êtes curieux, et je vous le souhaite, vous pouvez voir la liste des scripts utilisés par nmap dans le répertoire /usr/share/nmap/scripts sous les systèmes Unix, ou C:\Programmes\Nmap\scripts sous Windows.
- Sous Windows
- Sous Linux (similaire à tout système Unix)
Ainsi, cela vous donnera une idée de comment personnaliser vos scripts pour les intégrer à nmap.
Dans cet article, je ne détaillerai pas plus sur l’utilité de chaque script car le sujet reste très dense. Mais si vous êtes passionnés, partez à la découverte de cet univers en continuant à lire la documentation officiel de l’outil.
Cependant, je ne vous laisserai pas sans commandes à taper dans cette section ! L’option à rajouter à vos commandes pour exécuter le script par défaut est :
sudo nmap -sC <cible>
Cette commande vous affichera une grande quantité d’informations sur votre cible sans trop entrer dans le complexe. (Essayez pour voir !)
Aussi, comme mentionné précédemment, nmap permet également d’effectuer un scan de vulnérabilités. Il inclut une option qui choisi automatiquement le type de scan à adopter selon le scan de port effectué avec la commande :
sudo nmap --script vuln <cible>
Enfin, la notion de scripting sur nmap va dans les deux sens, c’est-à-dire que l’on peut inclure les commandes nmap dans nos scripts Bash, Python, et même Powershell ! Des liens pour en savoir plus sur ces langages sans disponibles en fin de cet article.
Conclusion
Pour conclure cet article, je n’ai qu’une parole à vous chers lecteurs : » LISEZ LA DOCUMENTATION « . Cela pour vous dire que cet article n’est présent qu’à vous informer des notions de base de l’outil, le reste est entre vos mains. Et en informatique, c’est à vous et à vous seul de CHERCHER l’information.
Avertissement
Effectuer un scan sur un réseau qui ne vous appartient pas sans autorisation est interdit. Cette action peut être puni par la loi selon les modalités ( Code Pénal 323-1 ). Si vous n’êtes pas sûr d’avoir les droits sur un réseau, NE FAITES RIEN.
Les informations partagées dans cet article ne servent qu’à des fins éducatifs dans votre aventure en cybersécurité.
Enfin, comme convenu, ci-dessous les liens vous redirigeant vers des articles du blog, qui vous permettra à mieux comprendre les notions mentionnées dans cet article.
Liens supplémentaires :