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

De Get Docs
Aller à :navigation, rechercher

Introduction

La configuration d'un pare-feu pour votre infrastructure est un excellent moyen d'assurer une sécurité de base pour vos services. Une fois que vous avez développé une politique qui vous convient, l'étape suivante consiste à tester vos règles de pare-feu. Il est important d'avoir une bonne idée de savoir si vos règles de pare-feu font ce que vous pensez qu'elles font et d'avoir 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 quelques-uns des mêmes outils que les utilisateurs malveillants peuvent utiliser, vous pourrez donc voir quelles informations ils peuvent trouver en faisant des requêtes à 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 à créer votre stratégie de pare-feu en suivant un ou plusieurs de ces guides :

  • Iptables
  • UFW
  • FirewallD


Dans ce guide, nous appellerons le serveur contenant les politiques de pare-feu que vous souhaitez tester la cible. En plus de votre cible, vous devrez également avoir accès à un serveur à partir duquel tester, situé en dehors du réseau protégé par votre pare-feu. Dans ce guide, nous utiliserons un serveur Ubuntu 14.04 comme machine d'audit.

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

Avertissement

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 la numérisation des ports sont incertaines dans de nombreuses juridictions. Les FAI et autres fournisseurs sont connus pour interdire les utilisateurs qui sont trouvés en train de scanner les ports.


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

Il existe de nombreux outils différents que nous pouvons utiliser pour tester nos politiques 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 couvrirons certaines catégories générales d'outils d'audit et passerons en revue les outils que nous utiliserons dans ce guide.

Analyseurs de paquets

Les analyseurs de paquets peuvent être utilisés pour surveiller de manière très détaillée tout le trafic réseau passant 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 qu'ils sont envoyés ou reçus, ou d'écrire des informations sur les paquets dans un fichier et de les traiter ultérieurement. L'analyse des paquets nous donne la possibilité de voir, à un niveau granulaire, quels types de réponses nos machines cibles renvoient aux hôtes sur le réseau ouvert.

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

Scanners de ports

Afin de générer le trafic et les réponses à capturer par notre analyseur de paquets, nous utiliserons un scanner de ports. Les scanners de ports peuvent être utilisés pour créer et envoyer différents types de paquets à des hôtes distants afin de découvrir le type de trafic que le serveur accepte. Les utilisateurs malveillants l'utilisent souvent comme un outil de découverte pour essayer de trouver des services vulnérables à exploiter (une partie de la raison d'utiliser un pare-feu en premier lieu), nous allons donc l'utiliser pour essayer 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 nmap. Nous pouvons utiliser nmap pour envoyer des paquets de différents types pour essayer de déterminer quels services se trouvent 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 que nous disposons des outils décrits ci-dessus. Nous pouvons obtenir tcpdump à partir des dépôts d'Ubuntu. Nous pouvons également obtenir nmap avec cette méthode, mais la version du référentiel est probablement obsolète. Au lieu de cela, nous installerons des packages pour nous aider dans la compilation du logiciel, puis nous le créerons nous-mêmes à partir de la source.

Mettez à jour l'index de package local et installez le logiciel s'il n'est pas déjà disponible. Nous purgerons également nmap 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 de nmap à partir de la page de téléchargement sur le site officiel. 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 de nmap. Au moment d'écrire ces lignes, cela ressemble à ceci:

Faites un clic droit sur le lien et copiez l'adresse du lien.

De retour sur votre machine d'audit, accédez à votre répertoire personnel et utilisez wget 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

Le résultat doit correspondre à la version que vous avez téléchargée depuis le site Web nmap :

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 dans lequel nous pourrons stocker nos résultats d'analyse :

mkdir ~/scan_results

Pour vous assurer d'obtenir des résultats corrects, quittez toutes 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 pu établir dans un navigateur Web, etc.

Analysez votre cible pour les ports TCP ouverts

Maintenant que notre serveur et nos fichiers sont prêts, nous allons commencer par analyser notre hôte cible pour les ports TCP ouverts.

Il existe en fait quelques scans TCP que nmap sait faire. Le meilleur pour commencer est généralement un scan SYN, également connu sous le nom de «scan semi-ouvert», car il ne négocie jamais réellement une connexion TCP complète. Ceci est souvent utilisé par les attaquants car il ne parvient pas à s'enregistrer 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 configurer tcpdump pour capturer le trafic généré par le test. Cela nous aidera à analyser plus en profondeur les paquets envoyés et reçus plus tard si nous en avons besoin. Créons un répertoire dans ~/scan_results afin que nous puissions conserver ensemble les fichiers liés à notre analyse SYN :

mkdir ~/scan_results/syn_scan

Nous pouvons démarrer une capture tcpdump 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 nmap dans la même fenêtre, nous devrons mettre en pause le processus tcpdump, puis le redémarrer en arrière-plan.

Nous pouvons mettre en pause le processus en cours en appuyant sur CTRL-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 tapant bg :

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 s'exécute maintenant en arrière-plan, surveillant tous les paquets passant entre notre audit et les machines cibles. Nous pouvons maintenant exécuter notre analyse SYN.

Exécutez l'analyse SYN

Avec tcpdump enregistrant notre trafic vers la machine cible, nous sommes prêts à exécuter nmap. Nous utiliserons les drapeaux suivants pour que nmap effectue les actions dont nous avons besoin :

  • -sS : Cela démarre un balayage SYN. Il s'agit techniquement de l'analyse par défaut que nmap effectuera si aucun type d'analyse n'est donné, mais nous l'inclurons ici pour être explicite.
  • -Pn : cela indique à nmap de sauter l'étape de découverte de l'hôte, ce qui annulerait le test plus tôt si l'hôte ne répondait pas à un ping. Puisque nous savons que la cible est en ligne, nous pouvons ignorer cela.
  • -p- : par défaut, les analyses SYN n'essaieront que les 1 000 ports les plus couramment utilisés. Cela indique à nmap de vérifier chaque port disponible.
  • -T4 : Cela définit un profil de synchronisation pour nmap, 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. Étant donné que nous analysons chaque port, nous pouvons l'utiliser comme référence et revérifier ultérieurement tous les ports qui auraient pu être signalés de manière incorrecte.
  • -vv : Cela augmente la verbosité de la sortie.
  • --reason : cela indique à nmap de fournir la raison pour laquelle l'état d'un port a été signalé d'une certaine manière.
  • -oN : Cela écrit les résultats dans un fichier que nous pouvons utiliser pour une analyse ultérieure.

Noter

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


Ensemble, la commande ressemblera à 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 sur 4, l'analyse prendra probablement un certain temps car elle passe par 65 535 ports (mon test a duré environ quarante minutes). Vous verrez des résultats commencer à s'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 processus tcpdump 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 contrôle enfoncée et en appuyant sur "c":

CTRL-C

Analyse des 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 tcpdump, et un généré par nmap appelé nmap.results.

Regardons d'abord le fichier nmap.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 le port 22 et le port 80 sont ouverts sur l'hôte scanné afin d'autoriser le trafic SSH et HTTP. Nous pouvons également voir 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 sur le 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 machines 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 fichier packets dans tcpdump, 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 trafic envoyé à la cible, vous pouvez saisir :

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 changer 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 vous montrera uniquement les réponses SYN réussies et devrait correspondre aux ports que vous avez vus dans l'exécution nmap :

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 un traitement et une analyse asynchrones.

Analysez votre cible pour les ports UDP ouverts

Maintenant que vous savez comment exécuter ces tests, nous pouvons effectuer un processus similaire pour rechercher les ports UDP ouverts.

Configuration de la capture de paquets

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

mkdir ~/scan_results/udp_scan

Redémarrez une capture tcpdump. 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

Exécutez l'analyse UDP

Maintenant, nous sommes prêts à exécuter l'analyse UDP. En raison de la nature du protocole UDP, cette analyse prendra généralement considérablement 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 est un protocole sans connexion, donc ne recevoir aucune réponse peut signifier que le port de la cible est bloqué, qu'il a été accepté ou que le paquet a été 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 que nous avons utilisés pour le scan SYN. En fait, le seul nouveau drapeau est :

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

Accélération du test UDP

Si vous vous inquiétez de la durée de ce test, vous ne voudrez peut-être tester qu'un sous-ensemble de vos ports UDP dans un premier temps. Vous pouvez tester uniquement les 1000 ports les plus courants en omettant l'indicateur -p-. Cela peut raccourcir considérablement votre temps de numérisation. Si vous voulez une image complète, vous devrez revenir plus tard et analyser toute votre plage de ports.

Étant donné que vous analysez votre propre infrastructure, la meilleure option pour accélérer les analyses UDP consiste peut-être à 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 (c'est généralement une bonne chose, mais pas pour notre audit), ce qui signifie qu'une analyse UDP complète prendrait plus de 18 heures. Vous pouvez vérifier ce paramètre sur votre machine 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 temporairement désactiver 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 de rétablir cette valeur après votre test.

Exécution du test

Assurez-vous d'écrire les résultats dans le répertoire ~/scan_results/udp_scan. Tous 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 du débit ICMP sur la cible, cette analyse a pris environ 2 heures et 45 minutes lors de notre test. Une fois l'analyse terminée, vous devez rétablir votre limite de débit 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

Ramenez le processus tcpdump au premier plan sur votre machine d'audit en tapant :

fg

Arrêtez la capture de paquets en maintenant le contrôle et en appuyant sur "c":

CTRL-c

Analyse des résultats

Maintenant, nous pouvons jeter un œil aux fichiers générés.

Le fichier nmap.results résultant devrait ressembler assez à celui que nous avons vu précédemment :

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 précédent sera probablement le nombre de ports marqués open|filtered. Cela signifie que nmap 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 tcpdump est également beaucoup plus difficile car il n'y a pas d'indicateurs de connexion et parce que nous devons faire correspondre les réponses ICMP aux requêtes UDP.

Nous pouvons voir comment nmap a dû envoyer de nombreux paquets vers les ports signalés comme open|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 que nous voyons de l'un des ports analysés qui a été marqué comme "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 suivi par nmap 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 indiquant 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 alors 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ée par nmap (elle peut contenir des faux positifs provenant de paquets de retour perdus).

Découverte d'hôtes et de services

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

Créons un répertoire pour contenir nos résultats de versionnage :

mkdir ~/scan_results/versions

Découverte des versions des services sur le serveur

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

Un tcpdump ne serait pas très 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.

L'analyse nmap que nous devons utiliser est déclenchée par le drapeau -sV. Comme nous avons déjà effectué des analyses SYN et UDP, nous pouvons transmettre les ports exacts que nous voulons examiner avec le drapeau -p. Ici, nous allons examiner 22 et 80 (les ports qui ont été affichés dans notre analyse 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 d'exécution, selon le degré de "bavardage" ou même le caractère unique 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 packagé ainsi que la version du protocole SSH acceptée. Il a également reconnu la version de Nginx et l'a de nouveau identifiée comme correspondant à un package Ubuntu.

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

Nous pouvons essayer de faire en sorte que nmap devine le système d'exploitation hôte en fonction des caractéristiques de son logiciel et de ses réponses. Cela fonctionne à peu près de la même manière que la gestion des versions de service. Encore une fois, nous omettrons l'exécution tcpdump de ce test, mais vous pouvez l'effectuer si vous le souhaitez.

Le drapeau 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 à 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 supposition pour le système d'exploitation en fonction de la signature qu'il a vue. S'il avait reçu plus d'informations, il afficherait probablement divers pourcentages indiquant comment la signature de la machine cible correspond aux signatures du système d'exploitation dans ses bases de données. Vous pouvez voir la signature d'empreintes digitales que nmap a reçue de la cible sous la ligne TCP/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 peut contribuer à entraver la précision de certaines de ces méthodes de détection.

Conclusion

Tester votre pare-feu et prendre conscience de ce à quoi ressemble votre réseau interne pour un attaquant extérieur peut vous aider à minimiser vos risques. Les informations que vous trouvez en sondant votre propre infrastructure peuvent ouvrir une conversation sur la nécessité de revoir l'une de vos décisions politiques afin d'augmenter la sécurité. Cela peut également mettre en lumière les lacunes de votre sécurité qui auraient pu se produire en raison d'un ordre incorrect des règles ou de politiques de test oubliées. Il est recommandé de tester vos politiques avec la régularité des dernières analyses de bases de données afin d'améliorer, ou au moins de maintenir, votre niveau de sécurité actuel.

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