15/11/2024

Améliorer les performances d’un scan réseau

I. Présentation

Dans ce chapitre, nous allons apprendre à optimiser la vitesse des scans réseau réalisés avec Nmap en utilisant différentes options spécifiques. Ce chapitre sera notamment l’occasion d’en apprendre plus sur le fonctionnement interne de Nmap, de la gestion des timeouts aux configurations préenregistrées dans l’outil.

Maintenant que nous avons fait un bon tour d’horizon des fonctionnalités de Nmap, nous allons apprendre à maîtriser la bête et sa puissance. Si vous avez déjà utilisé l’outil sur de larges réseaux, vous vous êtes sûrement aperçu que certains scans peuvent être longs, malgré la puissance de l’outil. Et pour cause, une simple commande Nmap avec quelques options peut générer des millions de paquets ciblant des centaines de milliers de systèmes et services potentiels.

De plus, certaines configurations d’équipement réseau peuvent intentionnellement imposer un ralentissement de la cadence (nombre de paquets par seconde), au risque de rejeter vos paquets ou bannir votre adresse IP pour des raisons de sécurité.

En fonction des contextes, il peut être intéressant de chercher à optimiser tout cela, c’est ce que nous allons voir dans ce chapitre.

Dans tous les cas, sachez que vous pouvez consulter les valeurs par défaut des paramètres que nous allons voir ainsi que la bonne prise en compte des options que vous allez utiliser via le debug de Nmap (option “-d” vue dans un précédent chapitre) :

Visualisation des options de Timing via l’option “-d” de Nmap.
Visualisation des options de Timing via l’option “-d” de Nmap.

II. Gérer la rapidité des scans Nmap

A. Gérer la parallélisation

Par défaut, Nmap utilise la parallélisation dans ses scans pour les optimiser et tous les paramètres qu’il utilise sont modifiables via différentes options. Cependant, les cas où la modification de ces paramètres est réellement nécessaire sont assez rares, nous n’allons donc pas les aborder en détail dans ce cours :

  • --min-hostgroup/max-hostgroup <size> : taille des groupes de scans d'hôtes en parallèle.
  • --min-parallelism/max-parallelism <numprobes> : parallélisation des Probes.
  • --scan-delay/--max-scan-delay <time> : ajuste le délai entre les Probes.

Sachez simplement qu’ils existent et peuvent être utilisés.

B. Gérer le nombre de paquets par seconde

Par défaut, Nmap va ajuster lui-même le nombre de paquets par seconde qu’il va envoyer en fonction de la réaction du réseau. Mais il est possible de forcer ce paramétrage en définissant la valeur haute et/ou minimale à suivre en termes de nombre de paquets par seconde. Ce paramétrage se fait à l’aide des options --min-rate <nombre> et –max-rate <nombre> où "nombre>" représente un nombre de paquets par seconde. Exemple :

# Limiter la vitesse des scans à 300 paquets par seconde
nmap -sV 10.10.10.0/24 --max-rate 300

Ces options permettent de régler la rapidité des scans en fonction des besoins spécifiques, que ce soit pour accélérer le processus, soit pour limiter la bande passante utilisée. Le second cas de figure (limiter la vitesse des scans) est celui qui vous amènera sûrement en priorité vers ces options, notamment si vous constatez des latences réseau au moment de l’utilisation de Nmap (ce qui reste assez rare).

III. Gérer les échecs de connexions et timeout

Un autre paramètre sur lequel nous pouvons jouer pour optimiser la vitesse des scans Nmap (ou garantir une meilleure précision) concerne les timeout et les retry.

Il s’agit, pour les timeouts, du délai d’attente sans réponse au-delà duquel Nmap cessera d’attendre une réponse et considérera le service ou l’hôte comme non joignable. Pour les retry, il s’agit du nombre d'essais successifs d’une opération que Nmap va réaliser avant de passer à autre chose.

Comme pour la parallélisation, la gestion du timeout et du retry peut porter sur les phases de découverte de l’hôte ou des services :

  • --min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <temps> : spécifie le temps aller-retour d’un échange. À nouveau, ce paramètre est dans les faits calculé et adapté à la volée durant le scan. Il est peu probable que vous ayez à l’utiliser, Nmap calculant à la volée ce temps en fonction de la réaction du réseau.
  • --max-retries <nombre> : limite le nombre de retransmissions d’un paquet lors du scan de port. Par défaut, Nmap peut aller jusqu’à 10 essais pour un même service, notamment si il constate des latences ou pertes au niveau réseau, mais dans la plupart des cas, un seul est réalisé.
  • --host-timeout <temps> : spécifie le temps maximum que Nmap va passer sur un hôte pour l'ensemble de ses opérations, y compris le scan de ports, la détection de services, et toute autre opération liée à cet hôte. Si cet intervalle de temps est dépassé sans réponse ou sans achèvement des opérations, Nmap abandonnera cet hôte sans afficher aucun résultat le concernant, et passera au suivant dans sa liste. Cela permet de contrôler la durée maximale que Nmap consacre à un hôte donné, évitant ainsi de rester bloqué sur des hôtes récalcitrants et permettant d'optimiser le temps de scan global.

Dans mes usages courants, j’utilise en priorité les options "--max-retries", et  "--host-timeout" pour optimiser mes scans :

# Optimisation d’un scan avec 0 tentative supplémentaire et un timeout de 15 minutes par hôte
nmap -sV -sC 10.10.10.0/24 --max-retries 0 --host-timeout 15m

Ces paramètres offrent une flexibilité supplémentaire pour ajuster les comportements de scan en fonction des besoins spécifiques et des conditions du réseau. Il faut cependant bien être conscient de ce qu’ils impliquent en termes de charge sur les hôtes scannés et en termes de perte potentielle de précision.

IV. Utilisation des configurations préparamétrées

Les différentes options que nous avons vues dans ce chapitre peuvent être utilisées individuellement ou dans le cadre de configurations préparamétrées proposées par Nmap. L’option qui permet l’utilisation de ces templates (modèles de configuration) est “-T <numéro>” ou “-T <nom>”. Il existe 5 niveaux templates utilisables :

-T<0-5>: Set timing template (higher is faster)

Par défaut, Nmap utilise le template 3 (normal), qui est en général suffisant.

Pour ma part, j’opère généralement dans des contextes où il faut être assez rapide (tout en restant aussi complet que possible) et j’utilise fréquemment l’option “-T4”.

# Utilisation de Nmap pour un scan réseau avec le préparamétrage T4 (avec debug)
nmap 10.10.10.0/24 -sV --top-ports 2000 -T4 -d

Voici ce que nous affichent les informations de debug concernant ce scan :

Utilisation du préparamétrage “-T4” lors d’un scan Nmap.
Utilisation du préparamétrage “-T4” lors d’un scan Nmap.

V. Conclusion

Dans ce chapitre, nous avons vu différentes techniques et options utilisables afin de gérer la puissance, l’agressivité et la performance de Nmap. Ces options vous seront utiles notamment lors de scans sur de larges réseaux, et plus rarement pour gagner en discrétion.

Dans le prochain chapitre, nous allons passer en revue quelques bonnes pratiques concernant l’utilisation et la sécurité lors de l’utilisation de Nmap.

author avatar
Mickael Dorigny Co-founder
Co-fondateur d'IT-Connect.fr. Auditeur/Pentester chez Orange Cyberdéfense.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.