Évitement de pare-feux/IDS et mystification

Beaucoup de pionniers d'Internet envisageaient un réseau global ouvert avec un espace d'adressage IP universel permettant des connexions virtuelles entre n'importe quel noeuds. Ceci permet aux hôtes d'agir en véritables relais, recevant et renvoyant l'information les uns aux autres. Les gens pourraient accéder à l'ensemble de leur système domestique du bureau, en changeant les réglages de climatisation ou en déverrouillant leur porte pour les premiers invités. Cette vision d'une connectivité universelle a été étouffée par la réduction de l'espace d'adressage et les considérations de sécurité. Au début des années 90, les organisations commencèrent à déployer des pare-feux dans le but explicite de réduire la connectivité. De gigantesques réseaux furent cernés et coupés (NdT : le texte original dit « barrés par un cordon de police ») d'Internet non filtré par des proxies applicatifs, la conversion des adresses réseau (network address translation) et les filtrages de paquets. Le flux d'information libre céda la place à une régulation stricte de canaux de communication approuvés et du contenu qui y transitait.

Les outils d'obstruction du réseau comme les pare-feux peuvent rendre la cartographie d'un réseau beaucoup trop difficile. Ce fait ne va pas aller en s'arrangeant puisque l'étouffement de toute possibilité de reconnaissance est souvent un point clé de l'implémentation des interfaces. Nonobstant, Nmap offre un certain nombre de fonctionnalités afin d'aider à comprendre ces réseaux complexes ainsi que de s'assurer que les filtres agissent comme ils sont censés le faire. Il supporte même des mécanismes pour contourner les défenses établies de façon trop faibles. Une des meilleures méthodes pour mieux comprendre votre réseau et la sécurité qui y est déployée est de tenter de la contourner. Mettez-vous à la place de l'attaquant et déployez les techniques de cette section contre vos réseaux. Lancez un scan « FTP bounce », un « Idle scan », une attaque par fragmentation, ou tentez d'établir un tunnel à travers un de vos propres proxies.

Outre le fait de restreindre l'activité du réseau, les compagnies surveillent de plus en plus le trafic à l'aide de systèmes de détection d'intrusion (IDS). Tous les principaux IDSs sont prévus pour détecter les scans de Nmap parce que les scans sont parfois précurseurs d'attaques. Beaucoup de ces produits ont récemment migré vers des systèmes de prévention et d'intrusion (IPS) qui bloquent de façon active un trafic supposé malveillant. Malheureusement pour les administrateurs de réseau et les distributeurs d'IDS, la fiabilité de détection de mauvaises intentions par analyse des données de paquets demeure un problème. Les attaquants, avec de la patience, un certain niveau d'expertise et certaines quelques fonctions de Nmap, peuvent traverser un IDS sans être détectés. Dans le même temps, les administrateurs doivent composer avec un grand nombre de fausses alertes (false positive) qui bloquent et signalent une activité innocente.

De temps en temps, les gens suggèrent que Nmap ne devrait pas offrir de possibilités de contourner les règles des pare-feux ou de tromper les IDSs. Ils font valoir que ces fonctionnalités sont utilisées par les attaquants de la même façon que les administrateurs les utilisent pour renforcer leur sécurité. Le problème avec cette logique est que ces méthodes seront toujours utilisées par les attaquants, qui ne feront que trouver d'autres outils ou corriger ces fonctions sur Nmap. Dans le même temps, les administrateurs trouveront plus de difficultés à faire leur travail. Déployer seulement des serveurs FTP modernes et corrigés est une défense bien plus efficace que d'empêcher la distribution d'outils permettant les attaques « FTP Bounce ».

Il n'y a pas de méthode miracle (ni d'option dans Nmap) pour détecter et tromper les pare-feux et les systèmes IDS. Cela demande un niveau de connaissances et de l'expérience. Un tutoriel est prévu pour ce guide de référence qui ne fait que lister les options relatives à ces sujets et ce qu'elles font.

-f (fragmentation de paquets); --mtu (utiliser le MTU spécifié)

L'option -f force le scan demandé (y compris les scans de type ping) à utiliser des paquets IP fragmentés en petits paquets. L'idée est de partager l'en-tête TCP en plusieurs paquets pour rendre plus difficile la détection de ce que vous faites par les dispositifs de filtrage de paquets, les systèmes de détection et d'intrusion et autres systèmes ennuyeux. Il faudra cependant faire attention ! Certains programmes ont du mal à gérer ces petits paquets. Les anciens sniffers comme Sniffit souffraient d'erreurs de segmentation immédiatement après avoir reçu le premier fragment. Spécifiez cette option une fois, et Nmap partage les paquets en 8 bytes ou moins après l'en-tête IP. Par exemple, un en-tête de 20 bytes sera fragmenté en 3 paquets. Deux avec 8 bytes d'en-tête TCP et un avec les 4 derniers. Bien entendu, chaque paquet a son en-tête IP. Spécifiez encore -f pour utiliser 16 bytes par fragment (ceci réduit le nombre de fragments). Vous pouvez aussi spécifier votre propre taille d'offset avec l'option --mtu. Par contre, ne spécifiez pas -f si vous utilisez --mtu. L'offset doit être un multiple de 8. Bien que les paquets fragmentés ne tromperont pas les filtrages de paquets et les pare-feux, tenant compte de tous les fragments IP, comme l'option CONFIG_IP_ALWAYS_DEFRAG dans le noyau Linux, certains réseaux ne peuvent supporter la perte de performance que cela entraîne et de ce fait laisse ceci désactivé. D'autres ne peuvent pas l'activer parce que les fragments peuvent prendre différentes routes au sein de leur réseau. Certains systèmes source défragmentent les paquets sortant dans le noyau. Linux, avec le module de connection « tracking iptables » est un très bon exemple. Faites donc ce genre de scan avec un sniffer comme Ethereal tournant en même temps afin de vous assurer que les paquets envoyés sont bien fragmentés. Si votre système d'exploitation causait des problèmes, essayez l'option --send-eth pour contourner la couche IP et envoyer des trames en raw Ethernet.

-D <decoy1 [,decoy2][,ME],...> (Dissimuler un scan avec des leurres)

Engendrez un scan avec des leurres, ce qui fait croire à l'hôte distant que les hôtes que vous avez spécifié exécutent eux aussi un scan contre lui. Un IDS fera état d'un scan de 5 à 10 ports depuis des adresses IP différentes, dont la vôtre, sans pouvoir faire la différence entre les leurres et la véritable origine. Bien que ceci puisse être repéré par la tracabilité des routeurs, le renvoi de réponses (response-dropping), et d'autres mécanismes actifs, ceci reste une technique généralement efficace pour cacher votre adresse IP.

Séparez chaque leure par une virgule et vous pourrez utiliser de façon facultative ME en tant que l'un des leurres pour représenter la position de votre véritable adresse IP. Si vous mettez ME en sixième position ou après, certains systèmes de détection de scans de ports (comme l'excellent scanlogd de Solar Designer) sont incapables de voir votre adresse IP. Si vous n'utilisez pas ME, Nmap vous placera à une position aléatoire.

Notez que les hôtes que vous utilisez comme leurres devraient être réellement actifs; sinon, vous risquez d'inonder votre cible par des SYN. Sans compter qu'il serait très facile de déterminer quel hôte est en train de scanner si en fait un seul est actif sur le réseau. Vous pourriez utiliser des adresses IP plutôt que des noms afin de ne pas apparaître dans les logs des serveurs de nom du réseau.

Les leurres sont utilisés autant dans la phase initiale de scan ping (utilisant les ICMP, SYN, ACK, ou quoi que ce soit) que dans la phase proprement dite de scan de ports. Les leurres sont aussi utilisés pendant la détection d'OS distant (-O). Les leurres ne fonctionnent pas avec la détection de version ou un scan de type TCP connect().

Il est inutile d'utiliser trop de leurres car cela pourrait ralentir votre scan et potentiellement le rendre moins précis. Enfin, certains FAI peuvent filtrer vos paquets usurpés (spoofés) toutefois beaucoup ne le font pas du tout.

-S <IP_Address> (Usurper votre adresse source)

Dans certaines circonstances, Nmap n'est pas capable de déterminer votre adresse source ( Nmap vous avisera le cas échéant). Dans cette situation, utilisez -S avec l'adresse IP de l'interface avec laquelle vous souhaitez envoyer les paquets.

Un autre usage possible de ce drapeau est d'usurper (spoofer) le scan afin de faire croire à la cible que quelqu'un d'autre est en train de les scanner. Imaginez une compagnie constamment scannée pas un concurrent ! L'option -e est généralement requise pour ce genre d'usage et -P0 est à conseiller quoi qu'il en soit.

-e <interface> (Utiliser l'interface précisée)

Avise Nmap sur quelle interface envoyer et recevoir les paquets. Nmap devrait pouvoir la détecter automatiquement mais il vous le dira si ce n'est pas le cas.

--source-port <portnumber>; -g <portnumber> (Usurper le numéro du port source)

L'une des erreurs de configuration les plus surprenantes est de faire confiance au trafic sur la base du port d'où il provient. Il est facile de comprendre pourquoi une telle situation se produit. Un administrateur va régler un tout nouveau pare-feu et être noyé sous les plaintes des utilisateurs dont les applications ne fonctionnent plus. En particulier, les DNS peuvent être cassés parce que les réponses UDP DNS depuis les serveurs externes ne peuvent plus entrer sur le réseau. Le FTP est un autre exemple. Dans les transferts actifs en FTP, le serveur distant essaie d'établir une connexion en retour vers le client afin de transférer le fichier demandé.

La solution sécurisée pour ce problème existe, souvent sous la forme de proxies applicatifs ou de modules de filtrage de protocoles au niveau du pare-feu. Malheureusement, il existe aussi des solutions faciles non sécurisées. En remarquant que les réponses DNS viennent du port 53 et le FTP actif du port 20, beaucoup d'administrateurs sont tombés dans le piège de seulement permettre le trafic entrant depuis ces ports. Ils imaginent souvent qu'aucun attaquant n'aura noté et pensé exploiter de telles failles de pare-feux. Dans d'autres cas, l'administrateur va considérer que c'est une solution à court terme jusqu'à ce qu'il implémente une solution plus sécurisée. Ils oublient par la suite d'effectuer la mise à jour de sécurité.

Les administrateurs de réseau surchargés de travail ne sont pas les seuls à tomber dans ce piège. Beaucoup de produits sont pensés avec ce genre de règle mal sécurisée. Même Microsoft en a été coupable. Les filtres IPsec, fournis avec Windows 2000 et Windows XP, contiennent une règle implicite qui autorise tout trafic depuis le port 88 (Kerberos) en TCP ou UDP. Dans un autre cas bien connu, les versions du pare-feu Zone Alarm personal firewall jusqu'à 2.1.25 permettaient tout paquet UDP provenant du port 53 (DNS) ou 67 (DHCP).

Nmap propose les options -g et --source-port qui sont équivalentes pour exploiter ces faiblesses. Fournissez simplement un numéro de port et Nmap enverra les paquets depuis ce port si possible. Nmap doit utiliser certains numéros de port afin que certains tests de détection d'OS fonctionnent correctement. De plus, les requêtes DNS ignorent le drapeau --source-port parce que Nmap se fonde sur un système de bibliothèques pour les traiter. La plupart des scans TCP, y compris le SYN scan, supportent entièrement l'option comme le fait aussi le scan UDP.

--data-length <number> (Ajoute des données aléatoires aux paquets envoyés)

Normalement, Nmap envoie des paquets minimalistes contenant seulement un en-tête. Donc ces paquets TCP ne font généralement que 40 bytes et les ICMP echo request seulement 28 bytes. Cette option indique à Nmap d'ajouter le nombre donné de bytes aléatoires à la plupart des paquets qu'il envoie. Les paquets de la détection d'OS (-O) ne sont pas affectés, contrairement à la plupart des paquets de ping et de scan de port. Cette procédure ralentit bien entendu les choses mais permet toutefois de faire passer un scan pour un peu moins suspect.

--ip-options <S|R [route]|L [route]|T|U ... >;> --ip-options <hex string>> (Envoie des paquets avec les options IP spécifiées)

Le protocole IP offre plusieurs options pouvant être placées dans l'entête des paquets. Contrairement aux options TCP habituelles, les options IP sont rarement rencontrées pour des raisons pratiques et de sécurité. En fait, beaucoup de routeurs Internet bloquent les options les plus dangereuses comme le routage de source. CEpendant les options peuvent s'avérer utiles dans certains cases for determining and manipulating the network route to cas de machines cibles. Par exemple vous pouvez être en mesure d'utiliser l'enregistrement de routage pour déterminer un chemin vers une cible quand bien même une approche plus traditionnelle de Traceroute échouerait. Ou si vos paquets sont rejettés par un pare-feu, vous pouvez spécifier une autre route avec des options plus ou moins vagues de routage.

La facon la plus puissante de spécifier ces options IP est simplement de passer ces valeurs en argument à --ip-options. Faites précéder chaque nombre héxadécimal par \x puis les deux chiffres. Vous pouvez répèter certains charactères en les séparant par un asterisk suivit du nombre de répétions. Par exemple, \x01\x07\x04\x00*36\x01 est une chaine héxa contenant 36 NUL bytes.

Nmap propose aussi un mechanisme de raccourcis pour spécifier ces options. Donnez simplement la lettre R, T, ou U pour demander l'enregistrement de routage, de timestamp, ou les deux simultanement, respectivement. Un routage strict ou plus vague peut être spécifié avec un L ou un S suivit d'un espace et d'une liste séparée d'espaces d'adresses IP.

Si vous souhaitez voir les options dans les paquets envoyés et recus, spécifiez --packet-trace. Pour plus d'information et d'exemples de l'utilisation des options IP avec Nmap, voir https://seclists.org/nmap-dev/2006/q3/0052.html.

--badsum (Envoyer des paquets avec des sommes de contrôle TCP/UDP erronnées)

Demande a Nmap d'utiliser une somme de contrôle TCP ou UDP erronnée pour les paquets envoyés aux hôtes cibles. Comme virtuellement toutes les piles IP des hôtes rejettent ces paquets, toute réponse recue doivent venir d'un pare-feu ou d'un IDS qui ne se préoccuppe pas de vérifier les sommes de contrôle. Pour plus de détails sur cette technique, voir https://nmap.org/p60-12.txt

--ttl <value> (Règle la valeur du champ IP de durée de vie (time-to-live))

Règle le champ IPv4 du time-to-live dans les paquets envoyés à la valeur donnée.

--randomize-hosts (Met les hôtes dans un ordre aléatoire)

Indique à Nmap de mélanger tous les groupes contenant jusqu'à 8 096 hôtes avant de les scanner. Ceci peut rendre les scans moins évidents pour de nombreux systèmes de surveillance réseau, spécialement si vous le combinez à des options de délai lentes. Si vous souhaitez mélanger des groupes de taille plus importante, augmentez la valeur PING_GROUP_SZ dans nmap.h et recompilez. Une autre solution serait de générer la liste des IP cibles avec un scan de listage (list scan, -sL -n -oN <filename> ), le mélanger à l'aide d'un script Perl, puis fournir la liste complète à Nmap avec -iL.

--spoof-mac <mac address, prefix, or vendor name> (Usurpation d'adresses MAC)

Demande à Nmap d'utiliser l'adresse MAC spécifiée pour l'ensemble des trames en raw Ethernet qu'il envoie. Cette option implique --send-eth pour s'assurer que Nmap envoie vraiment des paquets au niveau Ethernet. Le MAC donné peut prendre plusieurs formes. S'il s'agit seulement de la chaîne « 0 », Nmap choisit une adresse MAC totalement aléatoire pour la session. Si la chaîne est un nombre hexadécimal (avec les paires de nombres éventuellement séparées par les deux points), Nmap utilisera ceci comme adresse MAC. Si moins de 12 chiffres sont spécifiés, Nmap remplit le reste avec des valeurs aléatoires. Si l'argument n'est ni 0 ni une chaîne hexadécimale, Nmap recherche dans sa base de données nmap-mac-prefixes un nom de fournisseur contenant la chaîne en question (non sensible à la casse). Si une correspondance est trouvée, Nmap utilise le numéro OUI du distributeur (un préfixe de 3 bytes) et utilise les 3 bytes restants de façon aléatoire. Des exemples de valeurs --spoof-mac valides sont Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2 et Cisco.