Comment tester votre configuration de pare-feu avec Nmap et Tcpdump

introduction

La mise en place d’un pare-feu pour votre infrastructure est un excellent moyen de fournir une sécurité de base à vos services. Une fois que vous avez développé une stratégie qui vous convient, la prochaine étape consiste à tester les règles de votre pare-feu. Il est important de déterminer avec précision si les règles de votre pare-feu agissent comme vous le pensez et de vous donner une idée de ce à quoi ressemble votre infrastructure pour le monde extérieur.

Dans ce guide, nous allons passer en revue quelques outils et techniques simples que vous pouvez utiliser pour valider vos règles de pare-feu. Ce sont certains des mêmes outils que les utilisateurs malveillants peuvent utiliser. Vous pourrez ainsi savoir quelles informations ils peuvent trouver en faisant des demandes à vos serveurs.

Conditions préalables

Dans ce guide, nous supposerons que vous avez un pare-feu configuré sur au moins un serveur. Vous pouvez commencer à construire votre politique de pare-feu en suivant un ou plusieurs de ces guides:

Dans ce guide, nous appellerons le serveur contenant les politiques de pare-feu dont vous souhaitez tester lestarget. En plus de votre cible, vous devez également avoir accès à un serveur à partir duquel effectuer des tests, situé en dehors du réseau que votre pare-feu protège. Dans ce guide, nous utiliserons un serveur Ubuntu 14.04 comme machine d’audit.

Une fois que vous avez un serveur pour tester et les cibles que vous souhaitez évaluer, vous pouvez continuer avec ce guide.

Attention

[.warning] # Vous ne devez effectuer les activités décrites dans ce guide que sur l'infrastructure que vous contrôlez, à des fins d'audit de sécurité. Les lois entourant le balayage des ports sont incertaines dans de nombreuses juridictions. Les FAI et autres fournisseurs sont connus pour interdire aux utilisateurs trouvés de scanner les ports.
#

Les outils que nous allons utiliser pour tester les stratégies de pare-feu

Nous pouvons utiliser différents outils pour tester vos stratégies de pare-feu. Certains d'entre eux ont des fonctionnalités qui se chevauchent. Nous ne couvrirons pas tous les outils possibles. Au lieu de cela, nous allons couvrir quelques catégories générales d'outils d'audit et passer en revue les outils que nous allons utiliser dans ce guide.

Analyseurs de paquets

Les analyseurs de paquets peuvent être utilisés pour surveiller en détail tout le trafic réseau transitant par une interface. La plupart des analyseurs de paquets ont la possibilité de fonctionner en temps réel, d'afficher les paquets au fur et à mesure de leur envoi ou de leur réception, ou d'écrire les informations de paquet dans un fichier et de les traiter ultérieurement. L'analyse des paquets nous permet de voir, à un niveau granulaire, les types de réponses que nos machines cibles renvoient aux hôtes sur le réseau ouvert.

Pour les besoins de notre guide, nous utiliserons l'outiltcpdump. C'est une bonne option car elle est puissante, flexible et plutôt omniprésente sur les systèmes Linux. Nous allons l'utiliser pour capturer les paquets bruts lors de l'exécution de nos tests, au cas où nous aurions besoin de la transcription pour une analyse ultérieure. Certaines autres options populaires sont Wireshark (outshark, son cousin en ligne de commande) ettcpflow qui peuvent rassembler des conversations TCP entières de manière organisée.

Scanners de port

Afin de générer le trafic et les réponses que notre analyseur de paquets doit capturer, nous utiliserons un scanner de ports. Les scanners de ports peuvent être utilisés pour créer et envoyer divers types de paquets à des hôtes distants afin de découvrir le type de trafic accepté par le serveur. Les utilisateurs malveillants l'utilisent souvent comme outil de découverte pour tenter de trouver des services vulnérables à exploiter (une des raisons pour lesquelles un pare-feu est utilisé en premier lieu). Nous allons donc l'utiliser pour tenter de voir ce qu'un attaquant pourrait découvrir.

Pour ce guide, nous utiliserons l'outil de cartographie réseau et d'analyse des ports denmap. Nous pouvons utilisernmap pour envoyer des paquets de différents types afin d'essayer de déterminer quels services sont sur notre machine cible et quelles règles de pare-feu la protègent.

Configuration de la machine d'audit

Avant de commencer, nous devons nous assurer de disposer des outils décrits ci-dessus. Nous pouvons obtenirtcpdump depuis les référentiels d'Ubuntu. Nous pouvons également obtenirnmap avec cette méthode, mais la version du référentiel est probablement obsolète. Au lieu de cela, nous installerons des paquets pour nous aider dans la compilation de logiciels, puis nous les construirons nous-mêmes à partir des sources.

Mettez à jour l'index de package local et installez le logiciel s'il n'est pas déjà disponible. Nous purgerons égalementnmap de notre système s'il est déjà installé pour éviter les conflits:

sudo apt-get update
sudo apt-get purge nmap
sudo apt-get install tcpdump build-essential libssl-dev

Maintenant que nous avons nos outils de compilation et la bibliothèque de développement SSL, nous pouvons obtenir la dernière version denmap depuis la page de téléchargement sur leofficial site. Ouvrez la page dans votre navigateur Web.

Faites défiler jusqu'à la section «Distribution du code source». En bas, vous verrez un lien vers le code source de la dernière version denmap. Au moment d'écrire ces lignes, cela ressemble à ceci:

Nmap latest version

Cliquez avec le bouton droit sur le lien et copiez l'adresse du lien.

De retour sur votre machine d'audit, accédez à votre répertoire personnel et utilisezwget pour télécharger le lien que vous avez collé. Assurez-vous de mettre à jour le lien ci-dessous pour refléter la version la plus récente que vous avez copiée à partir du site:

cd ~
wget https://nmap.org/dist/nmap-6.49BETA4.tar.bz2

Décompressez le fichier que vous avez téléchargé et déplacez-vous dans le répertoire résultant en tapant:

tar xjvf nmap*
cd nmap*

Configurez et compilez le code source en tapant:

./configure
make

Une fois la compilation terminée, vous pouvez installer les exécutables résultants et les fichiers de support sur votre système en tapant:

sudo make install

Confirmez votre installation en tapant:

nmap -V

La sortie doit correspondre à la version que vous avez téléchargée sur le site Web denmap:

OutputNmap version 6.49BETA4 ( https://nmap.org )
Platform: x86_64-unknown-linux-gnu
Compiled with: nmap-liblua-5.2.3 openssl-1.0.1f nmap-libpcre-7.6 nmap-libpcap-1.7.3 nmap-libdnet-1.12 ipv6
Compiled without:
Available nsock engines: epoll poll select

Ensuite, nous allons créer un répertoire où nous pouvons stocker nos résultats d'analyse:

mkdir ~/scan_results

Pour vous assurer d'obtenir des résultats clairs, quittez les sessions ouvertes entre votre système d'audit et le système cible. Cela inclut les sessions SSH, toutes les connexions HTTP (S) que vous avez éventuellement établies dans un navigateur Web, etc.

Scannez votre cible pour Open TCP Ports

Maintenant que notre serveur et nos fichiers sont prêts, nous commencerons par analyser notre hôte cible à la recherche de ports TCP ouverts.

Il y a en fait quelques scans TCP quenmap sait faire. La meilleure solution consiste généralement en une analyse SYN, également appelée «analyse à moitié ouverte», car elle ne négocie jamais réellement une connexion TCP complète. Ceci est souvent utilisé par les attaquants car il ne parvient pas à s'inscrire sur certains systèmes de détection d'intrusion car il ne termine jamais une poignée de main complète.

Configuration de la capture de paquets

Avant de scanner, nous allons configurertcpdump pour capturer le trafic généré par le test. Cela nous aidera à analyser les paquets envoyés et reçus plus en profondeur ultérieurement si nous en avons besoin. Créons un répertoire dans~/scan_results afin que nous puissions conserver ensemble les fichiers liés à notre scan SYN:

mkdir ~/scan_results/syn_scan

Nous pouvons démarrer une capturetcpdump et écrire les résultats dans un fichier de notre répertoire~/scan_results/syn_scan avec la commande suivante:

sudo tcpdump host target_ip_addr -w ~/scan_results/syn_scan/packets

Par défaut,tcpdump s'exécutera au premier plan. Afin d'exécuter notre analyse denmap dans la même fenêtre, nous devons suspendre le processus detcpdump, puis le redémarrer en arrière-plan.

Nous pouvons suspendre le processus en cours en appuyant surCTRL-Z:

CTRL-Z

Cela mettra en pause le processus en cours:

Output^Z
[1]+  Stopped                 sudo tcpdump host target_ip_addr -w ~/scan_results/syn_scan/packets

Maintenant, vous pouvez redémarrer le travail en arrière-plan en tapantbg:

bg

Vous devriez voir une ligne de sortie similaire, cette fois sans l'étiquette «Stopped» et avec une esperluette à la fin pour indiquer que le processus sera exécuté en arrière-plan:

Output[1]+ sudo tcpdump host target_ip_addr -w ~/scan_results/syn_scan/packets &

La commande est maintenant exécutée en arrière-plan, surveillant les paquets allant entre nos ordinateurs d'audit et les ordinateurs cibles. Nous pouvons maintenant exécuter notre scan SYN.

Lancer le scan SYN

Avectcpdump enregistrant notre trafic vers la machine cible, nous sommes prêts à exécuternmap. Nous utiliserons les indicateurs suivants pour obtenirnmap pour effectuer les actions dont nous avons besoin:

  • -sS: Ceci lance une analyse SYN. Il s'agit techniquement du scan par défaut quenmap effectuera si aucun type de scan n'est donné, mais nous l'inclurons ici pour être explicite.

  • -Pn: ceci indique ànmap d'ignorer l'étape de découverte d'hôte, ce qui abandonnerait le test prématurément si l'hôte ne répond pas à un ping. Puisque nous savons que la cible est en ligne, nous pouvons ignorer cela.

  • -p-: par défaut, les analyses SYN n'essayeront que les 1000 ports les plus couramment utilisés. Cela indique ànmap de vérifier chaque port disponible.

  • -T4: Ceci définit un profil de synchronisation pournmap, lui indiquant d'accélérer le test au risque d'obtenir des résultats légèrement moins précis. 0 est le plus lent et 5 est le plus rapide. Comme nous analysons tous les ports, nous pouvons l’utiliser comme base de référence et vérifier à nouveau tous les ports ultérieurement signalés incorrectement.

  • -vv: cela augmente la verbosité de la sortie.

  • --reason: Ceci indique ànmap de fournir la raison pour laquelle l'état d'un port a été signalé d'une certaine manière.

  • -oN: Ceci écrit les résultats dans un fichier que nous pouvons utiliser pour une analyse ultérieure.

Note

[.note] # Une chose à garder à l'esprit est que pour vérifier IPv6, vous devrez ajouter l'indicateur-6 à vos commandes. Étant donné que la plupart des didacticiels prérequis n'acceptent pas le trafic IPv6, nous ignorerons IPv6 pour ce guide. Ajoutez cet indicateur si votre pare-feu accepte le trafic IPv6.
#

Ensemble, la commande ressemblera à quelque chose comme ceci:

sudo nmap -sS -Pn -p- -T4 -vv --reason -oN ~/scan_results/syn_scan/nmap.results target_ip_addr

Même avec le modèle de synchronisation défini à 4, l'analyse prendra probablement un certain temps, car elle passe par 65 535 ports (mon test a duré environ quarante minutes). Vous verrez les résultats commencer à imprimer qui ressemblent à ceci:

OutputStarting Nmap 6.49BETA4 ( https://nmap.org ) at 2015-08-26 16:54 EDT
Initiating Parallel DNS resolution of 1 host. at 16:54
Completed Parallel DNS resolution of 1 host. at 16:54, 0.12s elapsed
Initiating SYN Stealth Scan at 16:54
Scanning 198.51.100.15 [65535 ports]
Discovered open port 22/tcp on 198.51.100.15
Discovered open port 80/tcp on 198.51.100.15
SYN Stealth Scan Timing: About 6.16% done; ETC: 17:02 (0:07:52 remaining)
SYN Stealth Scan Timing: About 8.60% done; ETC: 17:06 (0:10:48 remaining)

. . .

Arrêtez la capture de paquets tcpdump

Une fois l'analyse terminée, nous pouvons ramener notre processustcpdump au premier plan et l'arrêter.

Sortez-le de l'arrière-plan en tapant:

fg

Arrêtez le processus en maintenant la touche de commande enfoncée et en appuyant sur «c»:

CTRL-C

Analyser les résultats

Vous devriez maintenant avoir deux fichiers dans votre répertoire~/scan_results/syn_scan. Un appelépackets, généré par l'exécution detcpdump, et un généré parnmap appelénmap.results.

Examinons d'abord le fichiernmap.results:

less ~/scan_results/syn_scan/nmap.results

~/scan_results/syn_scan/nmap.results

# Nmap 6.49BETA4 scan initiated Wed Aug 26 17:05:13 2015 as: nmap -sS -Pn -p- -T4 -vv --reason -oN /home/user/scan_results/syn_scan/nmap.results 198.51.100.15
Increasing send delay for 198.51.100.15 from 0 to 5 due to 9226 out of 23064 dropped probes since last increase.
Increasing send delay for 198.51.100.15 from 5 to 10 due to 14 out of 34 dropped probes since last increase.
Nmap scan report for 198.51.100.15
Host is up, received user-set (0.00097s latency).
Scanned at 2015-08-26 17:05:13 EDT for 2337s
Not shown: 65533 closed ports
Reason: 65533 resets
PORT   STATE SERVICE REASON
22/tcp open  ssh     syn-ack ttl 63
80/tcp open  http    syn-ack ttl 63

Read data files from: /usr/local/bin/../share/nmap
# Nmap done at Wed Aug 26 17:44:10 2015 -- 1 IP address (1 host up) scanned in 2336.85 seconds

La zone en surbrillance ci-dessus contient les principaux résultats de l'analyse. Nous pouvons voir que les ports 22 et 80 sont ouverts sur l'hôte analysé afin de permettre le trafic SSH et HTTP. Nous pouvons également constater que 65 533 ports ont été fermés. Un autre résultat possible serait «filtré». Filtré signifie que ces ports ont été identifiés comme étant arrêtés par quelque chose le long du chemin du réseau. Il peut s'agir d'un pare-feu sur la cible, mais il peut également s'agir de règles de filtrage sur l'un des hôtes intermédiaires entre les ordinateurs d'audit et cible.

Si nous voulons voir le trafic de paquets réel qui a été envoyé et reçu de la cible, nous pouvons relire le fichierpackets danstcpdump, comme ceci:

sudo tcpdump -nn -r ~/scan_results/syn_scan/packets | less

Ce fichier contient l'intégralité de la conversation qui a eu lieu entre les deux hôtes. Vous pouvez filtrer de plusieurs manières.

Par exemple, pour afficher uniquement le traficsent vers la cible, vous pouvez taper:

sudo tcpdump -nn -r ~/scan_results/syn_scan/packets 'dst target_ip_addr' | less

De même, pour afficher uniquement le trafic de réponse, vous pouvez modifier le «dst» en «src»:

sudo tcpdump -nn -r ~/scan_results/syn_scan/packets 'src target_ip_addr' | less

Les ports TCP ouverts répondraient à ces demandes avec un paquet SYN. Nous pouvons rechercher directement des réponses pour ce type avec un filtre comme celui-ci:

sudo tcpdump -nn -r ~/scan_results/syn_scan/packets 'src target_ip_addr and tcp[tcpflags] & tcp-syn != 0' | less

Cela ne vous montrera que les réponses SYN réussies et devrait correspondre aux ports que vous avez vus dans l'exécution denmap:

Outputreading from file packets, link-type EN10MB (Ethernet)
17:05:13.557597 IP 198.51.100.15.22 > 198.51.100.2.63872: Flags [S.], seq 2144564104, ack 4206039348, win 29200, options [mss 1460], length 0
17:05:13.558085 IP 198.51.100.15.80 > 198.51.100.2.63872: Flags [S.], seq 3550723926, ack 4206039348, win 29200, options [mss 1460], length 0

Vous pouvez faire plus d'analyse des données comme bon vous semble. Tout a été capturé pour le traitement et l'analyse asynchrones.

Analysez votre cible pour les ports UDP ouverts

Maintenant que vous maîtrisez bien l'exécution de ces tests, nous pouvons effectuer un processus similaire pour rechercher des ports UDP ouverts.

Configuration de la capture de paquets

Encore une fois, créons un répertoire contenant nos résultats:

mkdir ~/scan_results/udp_scan

Relancez une capturetcpdump. Cette fois, écrivez le fichier dans le nouveau répertoire~/scan_results/udp_scan:

sudo tcpdump host target_ip_addr -w ~/scan_results/udp_scan/packets

Mettez le processus en pause et mettez-le en arrière-plan:

CTRL-Z
bg

Lancer le scan UDP

Nous sommes maintenant prêts à exécuter l'analyse UDP. En raison de la nature du protocole UDP, cette analyse prendra généralementsignificantly plus longtemps que l'analyse SYN. En fait, cela peut prendre plus d'une journée si vous analysez tous les ports du système. UDP étant un protocole sans connexion, ne recevoir aucune réponse pourrait signifier que le port de la cible est bloqué, accepté ou que le paquet est perdu. Pour essayer de les distinguer,nmap doit retransmettre des paquets supplémentaires pour essayer d'obtenir une réponse.

La plupart des drapeaux seront les mêmes que ceux utilisés pour le scan SYN. En fait, le seul nouveau drapeau est:

  • -sU: Ceci indique ànmap d'effectuer une analyse UDP.

Accélérer le test UDP

Si vous êtes préoccupé par la durée de ce test, vous pouvez uniquement tester d'abord un sous-ensemble de vos ports UDP. Vous pouvez tester uniquement les 1000 ports les plus courants en omettant l'indicateur-p-. Cela peut réduire considérablement votre temps de balayage. Si vous souhaitez une image complète, vous devrez revenir plus tard et analyser l’ensemble de votre plage de ports.

Étant donné que vous analysez votre propre infrastructure, la meilleure option pour accélérer les analyses UDP consiste à désactiver temporairement la limitation de débit ICMP sur le système cible. En règle générale, les hôtes Linux limitent les réponses ICMP à 1 par seconde (ce qui est généralement une bonne chose, mais pas pour notre audit), ce qui signifie qu'une analyse UDP complète prend plus de 18 heures. Vous pouvez vérifier ce paramètre sur votre ordinateur cible en tapant:

sudo sysctl net.ipv4.icmp_ratelimit
Outputnet.ipv4.icmp_ratelimit = 1000

Le «1000» est le nombre de millisecondes entre les réponses. Nous pouvons désactiver temporairement cette limitation de débit sur le système cible en tapant:

sudo sysctl -w net.ipv4.icmp_ratelimit=0

Il est très important d'inverser cette valeur après votre test.

Lancer le test

Assurez-vous d'écrire les résultats dans le répertoire~/scan_results/udp_scan. Dans l'ensemble, la commande devrait ressembler à ceci:

sudo nmap -sU -Pn -p- -T4 -vv --reason -oN ~/scan_results/udp_scan/nmap.results target_ip_addr

Même avec la désactivation de la limitation de débit ICMP sur la cible, cette analyse a duré environ 2 heures et 45 minutes au cours de notre test. Une fois l'analyse terminée, vous devez rétablir votre limite de taux ICMP (si vous l'avez modifiée) sur la machine cible:

sudo sysctl -w net.ipv4.icmp_ratelimit=1000

Arrêtez la capture de paquets tcpdump

Remettez le processustcpdump au premier plan sur votre machine d'audit en tapant:

fg

Arrêtez la capture du paquet en tenant le contrôle et en appuyant sur «c»:

CTRL-c

Analyser les résultats

Maintenant, regardons les fichiers générés.

Le fichiernmap.results résultant devrait ressembler assez à celui que nous avons vu auparavant:

less ~/scan_results/udp_scan/nmap.results

~/scan_results/udp_scan/nmap.results

# Nmap 6.49BETA4 scan initiated Thu Aug 27 12:42:42 2015 as: nmap -sU -Pn -p- -T4 -vv --reason -oN /home/user/scan_results/udp_scan/nmap.results 198.51.100.15
Increasing send delay for 198.51.100.15 from 0 to 50 due to 10445 out of 26111 dropped probes since last increase.
Increasing send delay for 198.51.100.15 from 50 to 100 due to 11 out of 23 dropped probes since last increase.
Increasing send delay for 198.51.100.15 from 100 to 200 due to 3427 out of 8567 dropped probes since last increase.
Nmap scan report for 198.51.100.15
Host is up, received user-set (0.0010s latency).
Scanned at 2015-08-27 12:42:42 EDT for 9956s
Not shown: 65532 closed ports
Reason: 65532 port-unreaches
PORT    STATE         SERVICE REASON
22/udp  open|filtered ssh     no-response
80/udp  open|filtered http    no-response
443/udp open|filtered https   no-response

Read data files from: /usr/local/bin/../share/nmap
# Nmap done at Thu Aug 27 15:28:39 2015 -- 1 IP address (1 host up) scanned in 9956.97 seconds

Une différence clé entre ce résultat et le résultat SYN antérieur sera probablement le nombre de ports marquésopen|filtered. Cela signifie quenmap n'a pas pu déterminer si l'absence de réponse signifiait qu'un service acceptait le trafic ou s'il avait été abandonné par un pare-feu ou un mécanisme de filtrage le long du chemin de livraison.

L'analyse de la sortie detcpdump est également beaucoup plus difficile car il n'y a pas d'indicateur de connexion et parce que nous devons faire correspondre les réponses ICMP aux requêtes UDP.

Nous pouvons voir commentnmap a dû envoyer de nombreux paquets aux ports signalés commeopen|filtered en demandant à voir le trafic UDP vers l'un des ports signalés:

sudo tcpdump -nn -Q out -r ~/scan_results/udp_scan/packets 'udp and port 22'

Vous verrez probablement quelque chose qui ressemble à ceci:

Outputreading from file /home/user/scan_results/udp_scan/packets, link-type EN10MB (Ethernet)
14:57:40.801956 IP 198.51.100.2.60181 > 198.51.100.15.22: UDP, length 0
14:57:41.002364 IP 198.51.100.2.60182 > 198.51.100.15.22: UDP, length 0
14:57:41.202702 IP 198.51.100.2.60183 > 198.51.100.15.22: UDP, length 0
14:57:41.403099 IP 198.51.100.2.60184 > 198.51.100.15.22: UDP, length 0
14:57:41.603431 IP 198.51.100.2.60185 > 198.51.100.15.22: UDP, length 0
14:57:41.803885 IP 198.51.100.2.60186 > 198.51.100.15.22: UDP, length 0

Comparez cela aux résultats de l'un des ports scannés qui ont été marqués «fermé»:

sudo tcpdump -nn -Q out -r ~/scan_results/udp_scan/packets 'udp and port 53'
Outputreading from file /home/user/scan_results/udp_scan/packets, link-type EN10MB (Ethernet)
13:37:24.219270 IP 198.51.100.2.60181 > 198.51.100.15.53: 0 stat [0q] (12)

Nous pouvons essayer de reconstruire manuellement le processus quenmap traverse en compilant d'abord une liste de tous les ports auxquels nous envoyons des paquets UDP en utilisant quelque chose comme ceci:

sudo tcpdump -nn -Q out -r ~/scan_results/udp_scan/packets "udp" | awk '{print $5;}' | awk 'BEGIN { FS = "." } ; { print $5 +0}' | sort -u | tee outgoing

Ensuite, nous pouvons voir quels paquets ICMP nous avons reçus en disant que le port était inaccessible:

sudo tcpdump -nn -Q in -r ~/scan_results/udp_scan/packets "icmp" |  awk '{print $10,$11}' | grep unreachable | awk '{print $1}' | sort -u | tee response

Nous pouvons voir ensuite prendre ces deux réponses et voir quels paquets UDP n'ont jamais reçu de réponse ICMP en tapant:

comm -3 outgoing response

Cela devrait principalement correspondre à la liste des ports signalés parnmap (il peut contenir des faux positifs de paquets de retour perdus).

Découverte des hôtes et des services

Nous pouvons exécuter des tests supplémentaires sur notre cible pour voir s'il est possible pournmap d'identifier le système d'exploitation en cours d'exécution ou l'une des versions de service.

Faisons un répertoire pour contenir nos résultats de versioning:

mkdir ~/scan_results/versions

Découverte des versions de services sur le serveur

Nous pouvons essayer de deviner les versions des services s'exécutant sur la cible via un processus appelé empreinte digitale. Nous récupérons des informations sur le serveur et les comparons aux versions connues de notre base de données.

Untcpdump ne serait pas trop utile dans ce scénario, nous pouvons donc l'ignorer. Si vous voulez quand même le capturer, suivez le processus que nous avons utilisé la dernière fois.

Le scannmap que nous devons utiliser est déclenché par l'indicateur-sV. Comme nous avons déjà effectué des analyses SYN et UDP, nous pouvons transmettre les ports exacts que nous voulons regarder avec l'indicateur-p. Ici, nous allons regarder 22 et 80 (les ports qui ont été montrés dans notre scan SYN):

sudo nmap -sV -Pn -p 22,80 -vv --reason -oN ~/scan_results/versions/service_versions.nmap target_ip_addr

Si vous affichez le fichier qui en résulte, vous pouvez obtenir des informations sur le service en cours, en fonction du degré de «bavardage» ou même de l’originalité de la réponse du service:

less ~/scan_results/versions/service_versions.nmap

~/scan_results/versions/service_versions.nmap

# Nmap 6.49BETA4 scan initiated Thu Aug 27 15:46:12 2015 as: nmap -sV -Pn -p 22,80 -vv --reason -oN /home/user/scan_results/versions/service_versions.nmap 198.51.100.15
Nmap scan report for 198.51.100.15
Host is up, received user-set (0.0011s latency).
Scanned at 2015-08-27 15:46:13 EDT for 8s
PORT   STATE SERVICE REASON         VERSION
22/tcp open  ssh     syn-ack ttl 63 OpenSSH 6.6.1p1 Ubuntu 2ubuntu2 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    syn-ack ttl 63 nginx 1.4.6 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Read data files from: /usr/local/bin/../share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Thu Aug 27 15:46:21 2015 -- 1 IP address (1 host up) scanned in 8.81 seconds

Ici, vous pouvez voir que le test a pu identifier la version du serveur SSH et la distribution Linux qui l’a conditionnée, ainsi que la version du protocole SSH acceptée. Il a également reconnu la version de Nginx et l’a encore identifiée comme correspondant à un paquet Ubuntu.

Découverte du système d'exploitation hôte

Nous pouvons essayer de faire deviner ànmap le système d'exploitation hôte en fonction des caractéristiques de son logiciel et des réponses. Cela fonctionne beaucoup de la même manière que la gestion des versions de service. Une fois de plus, nous omettons l’exécution detcpdump de ce test, mais vous pouvez l’effectuer si vous le souhaitez.

L'indicateur dont nous avons besoin pour effectuer la détection du système d'exploitation est-O (la lettre majuscule «O»). Une commande complète peut ressembler à quelque chose comme ceci:

sudo nmap -O -Pn -vv --reason -oN ~/scan_results/versions/os_version.nmap target_ip_addr

Si vous affichez le fichier de sortie, vous verrez peut-être quelque chose qui ressemble à ceci:

less ~/scan_results/versions/os_version.nmap

~/scan_results/versions/os_versions.nmap

# Nmap 6.49BETA4 scan initiated Thu Aug 27 15:53:54 2015 as: nmap -O -Pn -vv --reason -oN /home/user/scan_results/versions/os_version.nmap 198.51.100.15
Increasing send delay for 198.51.100.15 from 0 to 5 due to 65 out of 215 dropped probes since last increase.
Increasing send delay for 198.51.100.15 from 5 to 10 due to 11 out of 36 dropped probes since last increase.
Increasing send delay for 198.51.100.15 from 10 to 20 due to 11 out of 35 dropped probes since last increase.
Increasing send delay for 198.51.100.15 from 20 to 40 due to 11 out of 29 dropped probes since last increase.
Increasing send delay for 198.51.100.15 from 40 to 80 due to 11 out of 31 dropped probes since last increase.
Nmap scan report for 198.51.100.15
Host is up, received user-set (0.0012s latency).
Scanned at 2015-08-27 15:53:54 EDT for 30s
Not shown: 998 closed ports
Reason: 998 resets
PORT   STATE SERVICE REASON
22/tcp open  ssh     syn-ack ttl 63
80/tcp open  http    syn-ack ttl 63
No exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=6.49BETA4%E=4%D=8/27%OT=22%CT=1%CU=40800%PV=N%DS=2%DC=I%G=Y%TM=55
OS:DF6AF0%P=x86_64-unknown-linux-gnu)SEQ(SP=F5%GCD=1%ISR=106%TI=Z%CI=Z%TS=8
OS:)OPS(O1=M5B4ST11NW8%O2=M5B4ST11NW8%O3=M5B4NNT11NW8%O4=M5B4ST11NW8%O5=M5B
OS:4ST11NW8%O6=M5B4ST11)WIN(W1=7120%W2=7120%W3=7120%W4=7120%W5=7120%W6=7120
OS:)ECN(R=Y%DF=Y%T=40%W=7210%O=M5B4NNSNW8%CC=Y%Q=)T1(R=Y%DF=Y%T=40%S=O%A=S+
OS:%F=AS%RD=0%Q=)T2(R=N)T3(R=N)T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)
OS:T5(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=40%W=0%S=A%A
OS:=Z%F=R%O=%RD=0%Q=)T7(R=N)U1(R=Y%DF=N%T=40%IPL=164%UN=0%RIPL=G%RID=G%RIPC
OS:K=G%RUCK=G%RUD=G)U1(R=N)IE(R=N)

Uptime guess: 1.057 days (since Wed Aug 26 14:32:23 2015)
Network Distance: 2 hops
TCP Sequence Prediction: Difficulty=245 (Good luck!)
IP ID Sequence Generation: All zeros

Read data files from: /usr/local/bin/../share/nmap
OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Thu Aug 27 15:54:24 2015 -- 1 IP address (1 host up) scanned in 30.94 seconds

Nous pouvons voir que dans ce cas,nmap n'a aucune estimation pour le système d'exploitation en fonction de la signature qu'il a vue. S'il avait reçu plus d'informations, il indiquerait probablement divers pourcentages indiquant la correspondance entre la signature de l'ordinateur cible et les signatures du système d'exploitation dans ses bases de données. Vous pouvez voir la signature d'empreinte digitale quenmap a reçue de la cible sous la ligneTCP/IP fingerprint:.

L'identification du système d'exploitation peut aider un attaquant à déterminer quels exploits peuvent être utiles sur le système. La configuration de votre pare-feu pour répondre à moins de demandes d'informations peut nuire à la précision de certaines de ces méthodes de détection.

Conclusion

Le test de votre pare-feu et la sensibilisation de votre réseau interne à un attaquant externe peuvent aider à réduire votre risque. Les informations que vous trouverez en analysant votre propre infrastructure peuvent ouvrir la voie à une discussion sur la nécessité de revoir certaines de vos décisions de stratégie pour renforcer la sécurité. Cela peut également mettre en lumière toute lacune dans votre sécurité pouvant être due à un ordre incorrect des règles ou à des stratégies de test oubliées. Il est recommandé de tester vos stratégies avec la dernière régularité des bases de données d'analyse afin d'améliorer, ou du moins de maintenir, votre niveau de sécurité actuel.

Pour avoir une idée de certaines améliorations de politique pour votre pare-feu, consultezthis guide.