Scanner des ports avec Masscan

Beginner
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 à utiliser Masscan, un scanner de ports TCP haute performance, pour effectuer une reconnaissance réseau efficace en cybersécurité. Vous allez pratiquer l'installation de Masscan à partir des sources, la configuration des paramètres de scan et l'analyse des résultats sur des plages de réseaux privés.

Les exercices vous guideront dans la définition des cibles, l'exécution du scan et l'interprétation des résultats. En terminant ce laboratoire, vous aurez acquis une expérience pratique des capacités de scan rapide de Masscan tout en respectant les pratiques éthiques de scan.


Skills Graph

Installer Masscan

Dans cette étape, vous allez installer Masscan, un scanner de ports TCP haute performance, sur votre environnement de machine virtuelle LabEx. Masscan est connu pour sa capacité à scanner tout l'Internet en quelques minutes en utilisant la transmission asynchrone et sa propre pile TCP/IP personnalisée. Contrairement aux scanners traditionnels, Masscan ne dépend pas de la pile réseau du système d'exploitation, ce qui lui permet d'atteindre des vitesses de scan remarquables.

Avant de continuer, assurons-nous que nous sommes dans le bon répertoire de travail. Le répertoire ~/project est là où nous allons organiser tous nos fichiers liés au scan :

cd ~/project

Masscan nécessite plusieurs dépendances à installer en premier. Cela inclut les outils de développement et les bibliothèques nécessaires pour compiler le code source. La commande suivante mettra à jour votre liste de paquets et installera les composants nécessaires :

sudo apt-get update && sudo apt-get install -y git make gcc libpcap-dev

Maintenant, nous allons télécharger le code source de Masscan depuis son dépôt GitHub officiel. Le clonage du dépôt nous donne la dernière version du code :

git clone https://github.com/robertdavidgraham/masscan

Après le téléchargement, nous devons compiler le code source pour créer le programme exécutable. La commande make lit le Makefile dans le répertoire et construit le logiciel :

cd masscan && make

Une fois la compilation terminée avec succès, nous pouvons vérifier que tout fonctionne en vérifiant la version installée. C'est une bonne pratique pour confirmer que l'installation a réussi :

./bin/masscan --version

Vous devriez voir une sortie similaire à :

Masscan version 1.3.2

Enfin, pour rendre Masscan facilement accessible depuis n'importe quel répertoire, nous allons le copier dans /usr/local/bin/, qui est généralement inclus dans la variable d'environnement PATH du système :

sudo cp bin/masscan /usr/local/bin/

Ceci termine le processus d'installation. Vous avez maintenant Masscan prêt à être utilisé pour le scan de ports à grande vitesse dans les étapes suivantes de ce laboratoire.

Définir une plage de cibles

Dans cette étape, vous allez définir une plage d'adresses IP cibles pour votre opération de scan de ports. Comprendre les plages de cibles est fondamental dans le scan réseau - cela indique au scanner quelles adresses réseau examiner. Masscan nécessite des plages de cibles spécifiques pour scanner efficacement car il est conçu pour des opérations à grande vitesse sur de grands réseaux.

À des fins d'apprentissage, nous allons utiliser les plages d'adresses IP privées définies dans la RFC 1918. Ce sont des adresses sûres et non routables couramment utilisées dans les réseaux locaux, afin d'éviter de scanner accidentellement des hôtes réels sur Internet. Les trois principales plages privées que nous allons utiliser sont :

  1. 10.0.0.0/8 - Le plus grand bloc privé, souvent utilisé par les entreprises
  2. 172.16.0.0/12 - Une plage de taille moyenne fréquemment rencontrée dans les réseaux d'entreprise
  3. 192.168.0.0/16 - La plage la plus courante pour les réseaux domestiques et de petites entreprises

Tout d'abord, naviguons jusqu'à notre répertoire de travail où nous allons stocker notre liste de cibles :

cd ~/project

Maintenant, nous allons créer un fichier texte pour stocker nos plages de cibles. Nous utilisons nano comme éditeur de texte car il est simple et disponible dans la plupart des environnements Linux :

nano targets.txt

Dans l'éditeur, ajoutez ces trois plages privées standard (appuyez sur Ctrl+O pour enregistrer vos modifications, puis Ctrl+X pour quitter nano) :

10.0.0.0/8
172.16.0.0/12
192.168.0.0/16

La notation CIDR (/8, /12, /16) spécifie combien d'adresses IP il y a dans chaque plage :

  • /8 signifie que les 8 premiers bits sont fixes (10.x.x.x)
  • /12 fixe les 12 premiers bits (de 172.16.x.x à 172.31.x.x)
  • /16 fixe les 16 premiers bits (192.168.x.x)

Vérifions que notre fichier de cibles a été créé correctement en affichant son contenu :

cat targets.txt

Vous devriez voir les trois plages CIDR listées exactement comme vous les avez saisies. Ce fichier servira d'entrée pour Masscan dans les étapes suivantes, en lui indiquant quels réseaux scanner.

Exécuter un scan de ports à grande vitesse

Dans cette étape, vous allez exécuter un scan de ports à grande vitesse en utilisant Masscan sur les plages de cibles définies à l'étape précédente. Le scan de ports est une technique de reconnaissance réseau fondamentale qui permet d'identifier les services accessibles sur les systèmes cibles. L'architecture unique de Masscan lui permet de scanner des milliers de ports par seconde tout en conservant une précision élevée, ce qui le rend idéal pour scanner rapidement de grands réseaux.

Tout d'abord, assurez-vous que vous êtes dans le bon répertoire de travail où se trouve votre fichier de cibles. Cela permet à Masscan d'accéder à votre liste de cibles prédéfinie :

cd ~/project

Maintenant, exécutons le scan réel. La commande Masscan suivante va scanner les ports les plus courants (de 1 à 1000) sur vos plages de cibles. Ces ports incluent généralement des services bien connus tels que les serveurs web (80, 443), les services de messagerie (25, 110) et d'autres protocoles fréquemment utilisés :

sudo masscan -p1-1000 -iL targets.txt --rate 1000 -oG scan_results.gnmap

Décortiquons chaque partie de cette commande pour comprendre ce qu'elle fait :

  • -p1-1000 : Spécifie la plage de ports à scanner (de 1 à 1000)
  • -iL targets.txt : Lit les adresses IP cibles à partir de votre fichier de liste prédéfini
  • --rate 1000 : Contrôle la vitesse de scan (1000 paquets par seconde est sûr pour les environnements d'apprentissage)
  • -oG scan_results.gnmap : Enregistre les résultats au format "grepable" pour une analyse facile

Pendant le scan, vous verrez une sortie en temps réel montrant la progression. Cela vous permet de surveiller l'état du scan et le temps estimé de fin :

Starting masscan 1.3.2 (http://bit.ly/14GZzcT) at 2023-01-01 00:00:00 GMT
Initiating SYN Stealth Scan
Scanning 3 hosts [1000 ports/host]

Après la fin du scan (généralement en moins d'une minute pour les petits réseaux), vous pouvez consulter les résultats de votre scan. Le format "grepable" permet d'identifier facilement les ports ouverts et les services :

cat scan_results.gnmap

La sortie montrera les ports ouverts découverts dans un format clair, chaque ligne représentant un hôte et ses ports ouverts :

Host: 10.0.0.1 ()   Ports: 80/open/tcp//http///, 443/open/tcp//https///

Examiner les ports ouverts

Dans cette étape, vous allez analyser les résultats du scan de ports effectué précédemment pour identifier les ports ouverts et les services associés. Les ports ouverts sont comme des portes dans un réseau - lorsqu'ils sont ouverts, ils permettent la communication entre les appareils. Comprendre quels ports sont ouverts est essentiel pour la sécurité du réseau car chaque port ouvert peut potentiellement être un point d'entrée pour le trafic légitime ainsi que pour les menaces de sécurité.

Tout d'abord, naviguons jusqu'au répertoire où sont stockés les résultats de votre scan. Cela garantit que nous travaillons avec les bons fichiers de données :

cd ~/project

Pour afficher les résultats complets du scan dans leur format brut, nous allons utiliser la commande cat. Cela affiche tout ce que Masscan a enregistré, y compris les ports fermés et les métadonnées du scan :

cat scan_results.gnmap

Étant donné que nous sommes principalement intéressés par les ports ouverts, nous pouvons filtrer les résultats en utilisant grep. Cette commande n'affichera que les lignes contenant le mot "open", ce qui facilite la détection des services actifs :

grep "open" scan_results.gnmap

Pour une meilleure organisation, nous pouvons afficher les résultats en associant clairement les adresses IP à leurs ports ouverts. La commande awk permet de restructurer la sortie pour montrer quels ports sont ouverts sur quels hôtes spécifiques :

awk '/Host:/ {ip=$2} /open/ {print ip,$0}' scan_results.gnmap

Si vous souhaitez vérifier combien d'hôtes ont un port particulier ouvert (par exemple, le port web commun 80), cette commande grep avec le flag -c vous donnera le nombre :

grep -c "80/open" scan_results.gnmap

Enfin, pour obtenir une vue d'ensemble complète de tous les ports ouverts dans la plage de réseau scannée, ce pipeline comptera le nombre d'occurrences de chaque port ouvert. La commande trie les ports et indique combien de fois chacun apparaît :

grep -oP '\d+/open' scan_results.gnmap | sort | uniq -c

Un exemple de sortie pourrait ressembler à ceci, montrant trois hôtes avec SSH (port 22) ouvert, cinq avec HTTP (port 80) et deux avec HTTPS (port 443) :

   3 22/open
   5 80/open
   2 443/open

Exporter les résultats du scan

Dans cette étape, vous allez apprendre à exporter les résultats de votre scan Masscan dans différents formats de fichiers. Exporter correctement les données de scan est crucial car cela vous permet d'analyser les résultats, de partager des rapports avec les membres de votre équipe ou d'alimenter d'autres outils de sécurité. Nous allons créer trois formats courants : CSV pour l'analyse dans des tableurs, texte brut pour une revue rapide et JSON pour le traitement automatisé.

Tout d'abord, accédez au répertoire de votre projet où sont stockés les résultats du scan. Cela garantit que tous les fichiers exportés seront enregistrés au bon emplacement :

cd ~/project

La première conversion consiste à créer un fichier CSV (Comma-Separated Values, valeurs séparées par des virgules). Le format CSV est idéal pour l'importation dans des logiciels de tableur comme Excel. La commande awk extrait l'adresse IP, le numéro de port et le nom du service à partir du fichier au format "grepable" :

awk -F'[ /]' '/Host:/ {ip=$2} /open/ {print ip","$4","$7}' scan_results.gnmap > scan_results.csv

Ensuite, nous allons générer un simple rapport texte facile à lire dans un terminal ou un éditeur de texte. Ce format est utile lorsque vous avez besoin de vérifier rapidement quels hôtes ont des ports ouverts sans ouvrir un tableur :

grep "open" scan_results.gnmap | awk '{print "Host:", $2, "Port:", $4}' > scan_report.txt

Pour l'intégration avec d'autres outils ou scripts, nous allons créer un fichier JSON. JSON est un format structuré que la plupart des langages de programmation peuvent facilement analyser. Les commandes ci-dessous créent un tableau JSON correct avec tous les résultats du scan :

echo '[' > scan_results.json
grep "open" scan_results.gnmap | awk '{print "{\"host\":\""$2"\",\"port\":\""$4"\",\"service\":\""$7"\"},"}' >> scan_results.json
sed -i '$ s/,$//' scan_results.json
echo ']' >> scan_results.json

Enfin, vérifiez que tous les fichiers exportés ont été créés avec succès. Cette commande liste les fichiers avec leurs tailles afin que vous puissiez confirmer que les exports ont fonctionné comme prévu :

ls -l scan_results.* scan_report.txt

Vous devriez voir une sortie similaire à :

-rw-r--r-- 1 labex labex 1234 scan_results.csv
-rw-r--r-- 1 labex labex 5678 scan_results.json
-rw-r--r-- 1 labex labex 9012 scan_report.txt

Résumé

Dans ce laboratoire (lab), vous avez appris à effectuer un scan de ports à grande vitesse en utilisant Masscan, depuis l'installation jusqu'à la préparation des cibles. Le processus a inclus la configuration des dépendances, la compilation du code source et la configuration des plages d'adresses IP privées pour une pratique sûre.

Vous avez acquis des connaissances pratiques sur les capacités de scan asynchrone de Masscan et sur l'utilisation de la notation CIDR. Le laboratoire a mis l'accent sur les pratiques éthiques de scan en se concentrant sur les adresses non routables, vous préparant ainsi aux scénarios d'analyse de réseau du monde réel.