Rappel : L’article qui va suivre contient des techniques et méthodes qui peuvent s’avérer être illégales et dangereuses si elles sont utilisées à mauvais escient. Ce tutoriel ne doit en aucun cas être utilisé contre un particulier, une entreprise, une organisation à but non lucratif ou une administration publique de quelconque pays. Je me dédouane de toute responsabilité en cas de problèmes ou d’incidents de quelque nature que ce soit après le visionnage de cet article.

***For educational purposes only***

Bonjour à tous, dans cet article vous allez découvrir les principales techniques permettant d’outrepasser certains pare-feu mal configuré ou vieillissant. Les méthodes que vous allez voir ci-dessous demandent de disposer d’un bon socle de connaissances en réseau afin de ne pas être perdu dans le jargon technique.

Avant toutes choses, je tiens à préciser que les techniques présentées peuvent être aussi bien utilisées pour un firewall « système », que pour un firewall « réseau » ou encore un IDS. Dans le cadre de la démonstration, je n’outrepasse pas de firewall « physique » J’explique des concepts de « bypassing/evasion » en vous traduisant mes dires par l’intermédiaire de commande, que j’exécute face à deux machines Windows. (disposant de leurs firewall de base)

Bonne lecture !

I. Quelques rappels :

  • IDS (Intrusion Detection System) : Système qui surveille et analyse le trafic réseau pour détecter toute activité suspecte. Le cas échéant il émet des alertes, mais ne bloque pas le trafic. (Équipement passif, différent de son « frère » IPS)
  • IPS (Intrusion Prevention Systems)
  • Parefeu : Élement de sécurité réseau, matériel ou logiciel, qui contrôle le trafic entrant et sortant selon un ensemble de règles prédéfinies.

Pour plus d’info, « firewall vs ids vs ips sur Google 😝 »

Bien qu’un pare-feu est généralement la première barrière pour empêcher un trafic malveillant d’atteindre ses réseaux sous-jacents (si la conception réseau intègre bien la notion de segmentation), un attaquant peut tenter d’utiliser différentes techniques de contournement afin d’essayer d’échapper à la surveillance d’un IDS ou des règles de filtrages d’un firewall.

A mesure que la technologie évolue IDS et IPS sont généralement intégré à un UTM (Unified Threat Management). L’UTM est un équipement d’orchestration récent et répondant à de hauts standards en matière de sécurité informatique.

Pour plus d’information :

– https://www.thesecuritybuddy.com/data-breaches-prevention/what-is-unified-threat-management-utm/

– https://www.geeksforgeeks.org/what-is-unified-threat-management-utm/

Pour les scans de reconnaissances, NMAP embarque fonctionnalités intéressantes. Nous allons découvrirs celles qui sont le plus efficace ci-dessous.

Si-vous faites un man nmap, vous pourrez vous intéresser de près à la section « FIREWALL/IDS EVASION AND SPOOFING »

FIREWALL/IDS EVASION AND SPOOFING:
  -f; --mtu <val>: fragment packets (optionally w/given MTU)
  -D <decoy1,decoy2[,ME],...>: Cloak a scan with decoys
  -S <IP_Address>: Spoof source address
  -e <iface>: Use specified interface
  -g/--source-port <portnum>: Use given port number
  --proxies <url1,[url2],...>: Relay connections through HTTP/SOCKS4 proxies
  --data <hex string>: Append a custom payload to sent packets
  --data-string <string>: Append a custom ASCII string to sent packets
  --data-length <num>: Append random data to sent packets
  --ip-options <options>: Send packets with specified ip options
  --ttl <val>: Set IP time-to-live field
  --spoof-mac <mac address/prefix/vendor name>: Spoof your MAC address
  --badsum: Send packets with a bogus TCP/UDP/SCTP checksum

II. Envirronnement d’éxecution

  • Attaquant : Kalilinux 2022.3 – 192.168.130.128 (avec wireshark (optionel))
  • Victime :
    • Windows 11 – 192.168.130.101
      • (Firewall et AV activé) – RDP, SMB activé
    • Windows Server 2016 192.168.125.100 (Firewall et AV activé)
      • Rôles : ADDS/DNS
      • Hostname : DC

Nmap est comme vous le savez un outil très puissant qui permet de faire un grand nombre de choses (scan de ports, scan de vulns connus, etc.). Cependant, Nmap n’est pas qu’un scanner de ports « bête ». Il offre aussi de nombreuses options pour outrepasser des équipements de sécurité défensifs.

En guise d’introduction, je vais tenter de scanner les ports de ma machine windows 11 avec une simple commande nmap très basique :

nmap 192.168.130.101

Par défaut, la taille de l’entête d’un packet envoyé par NMAP est de 40 bytes.

Comme vous pouvez le constater, Nmap est « bloqué » par le firewall de windows, car celui-ci a reconnu (grâce à un ensemble de règles prédéfinies) qu’il était en train de se faire scanner. Donc chaque requête que j’ai envoyé automatiquement avec Nmap a été ignorés. Résultat, ma machine windows 11 n’apparaît pas comme étant une machine DOWN, alors qu’en réalité il est bien allumé et connecté au réseau.

III. Technique de contournement/bypass de firewall

Tout au long du tutorial, je vous encourage vivement à capturer le réseau avec Wireshark. Cela vous permettra de mieux visualiser ce que l’usine à gaz « Nmap » fait. N’oubliez pas de filtrer les paquets en fonction du contexte technique pour plus de lisibilité.

A. La fragmentation de paquets

Cette technique était très efficace, surtout il y a quelques années d’après ce que j’ai pu lire, mais vous pouvez toujours l’utiliser si vous auditez un un réseau ou que vous êtes face à qui est mal configuré (cela arrive plus souvent que ce que l’ont crois), poreux en sécurité ou vieillissant. l’argument -f, va fragmenter les paquets lors du lancement du scan réseau.

Pour fragmenter vos paquets, nmap à besoin de droits sudo.

nmap -f 192.168.130.101

Ici, face à un firewall « système » windows, il n’y a pas de problème cette technique fonctionne toujours en 2022 ^^. D’ou le même que j’adore ci-dessous :

^^

Nmap envoie des paquets fragmenté de 8 bytes (octets) pour les entêtes IPv4 (en lien bien sûr avec la couche 3 du modèle OSI)

Schéma mettant en relief la fragmentation d’un packet IP.
Source : https://en.wikipedia.org/wiki/IP_fragmentation
Une simple capture réseau Wireshark, nous permet de constater que les paquets transmis sont bel et bien fragmentés

B. Spécifiez un MTU (Maximum Transmission Unit) spécifique

Petit rappel : MTU vs Packet

  • Le MTU (Maximum transmission unit) est la taille maximale d’une trame Ethernet. une trame ethernet fait partie de la couche 2 (liaison de données) du modèle OSI.
  • Les paquets se construisent au niveau de la couche 3 (réseau) du modèle OSI. Ils sont encapsulés dans des trames lors d’une communication dite « sortante ». Les paquets ont été inventés pour que les données puissent traverser un réseau local vers d’autres réseaux locaux / internet.

Nmap donne donc la possibilité à l’utilisateur de définir un MTU spécifique pour la trame. Cette méthode est similaire à la technique de fragmentation « classique » de paquets IP que nous avons expliqué ci-dessus. Pendant l’analyse, nmap générera des trames avec une taille basée sur le nombre que nous lui donnerons. Gardez à l’esprit que le nombre MTU doit être un multiple de 8 (8,16,24,32 etc.). Vous pouvez spécifier le MTU de votre choix avec l’argument –mtu. Dans cet exemple, j’ai attribué le nombre 24 afin que le Nmap crée des trames de 24 octets pouvant provoqué une incompréhension du pare-feu.

nmap -mtu 24 192.168.130.101

Si jamais vous voyez des paquets IP (level 3) transité sur votre capture réseau, cela veut dire que Nmap n’arrive pas à envoyer uniquement ses scans via des trames (niv2). Essayez l’option --send-eth pour tenter de forcer le contournement la couche IP. Si cela n’est pas possible, cela peut être dû à un problème au niveau du système d’exploitation.

Pour plus d’information :

C. Manipulation du numéro de port source

Pour que cette méthode fonctionne, il faut prendre en compte deux choses :

Encapsuler son scan via un port spécifique représente une autre technique qui peut s’avérer utile pour tenter de contourner les équipements de sécurité réseaux.

En effet, une erreur de configuration (étonnamment courante) que font les administrateurs réseaux consiste à faire confiance implicitement au trafic. J’entends par la d’autoriser tous les protocoles (par défaut) à transiter par ce port.

Si vos équipements le permette, il est vivement conseillé de sélectionner les protocoles qui seront autorisés à circuler à travers celui-ci (le(s) ports). Cette « best practice » vous permettra de durcir votre configuration réseau, et de compliqué la tâche à un attaquant.

Exemple :

Port 443 :

  • Autoriser uniquement le traffic pour le protocol HTTPS, et bannir par défaut les autres protocoles tel que FTP,SSH,SMB.

Attention tout de même à vérifier en amont dans un environnement de test que cette configuration ne présente pas d’effet de bord pour vos applications.

L’option --source-port / -g  de Nmap peut donc être utilisée pour profiter de cette mauvaise configuration en forçant le scan Nmap à transiter par un port spécifique qu’on a explicitement défini. En règle générale les ports qui peuvent utiliser pour ce type de scan sont : 80,443, 53. Les règles affectant ce tiercé sont souvent plus permissives.

nmap --source-port 80 192.168.130.100
Comme vous pouvez le constater, le scan qu’effectue nmap ici, passe par l’intermédiaire du port 80.

D. Ajouter des données aléatoires aux paquets envoyés

De nombreux pare-feu inspectent les paquets en examinant leurs tailles, métadonnées, etc. afin d’essayer d’identifier un scan de port. C’est parce que de nombreux scanners (comme Nmap) envoient des paquets « spécifique » facilement reconnaissable que ce genre de protection sur les pare-feu a vus le jour.

Vous pouvez utiliser la commande –data-length pour ajouter des données supplémentaires et envoyer des paquets avec une taille différente de celle par défaut afin de tenter d’éviter une détection.

Normalement, Nmap envoie des paquets minimalistes contenant seulement un en-tête. Donc ces paquets TCP présente la taille suivante 40 octes.

Attention l’option -O (os detection) n’est pas pris en charge dans ce cas précis.

Ci-dessous, j’ai modifié la taille du paquet en ajoutant 98 octets supplémentaires.

nmap --data-length 98 192.168.130.100

D’autres sous-options sont disponnible pour --data à savoir

  • --data (Ajouter des données hexadécimal aux paquets envoyés)
    • –data 0xdeadbeef
  • --data-string « Hello World ! »
nmap --data-string "Hello World" 192.168.125.100
On constate la présence de la chaine de caractère « Hello World » (surligné en bleu, juste au dessus)

Note : Les options data ne peuvent pas être cumulé, seul une est autorisé par scan.

E. Régler l’intensité du scan

Pour terminer, régler l’intensité de votre scan peut permettre d’éviter de « déclencer la sonnete d’alarme des pare-feux » :

nmap -T0 192.168.125.100

Voici les options disponnible :

  • Paranoid : 0
  • Sneaky : 1
  • Polite : 2
  • Normal : 3
  • Aggressive : 4
  • Insane : 5

Paranoid et Sneaky sont en règle général utilisé pour éviter les IDS.

  • Le profile « Polite » ralentit le scan afin de consommer moins de bande passante et moins de ressources sur la machine cible.
  • Le profil « Normal » est celui par défaut.
  • Le profil « Agressive » accélère les scans, partant du principe que vous travaillez sur un réseau suffisamment rapide et efficace.
  • Enfin, le profil 5 « insane » suppose que :
    • vous êtes sur un réseau équipé de matériels très récent
    • vous êtes prêt à sacrifier votre discression pour obtenir un résultat moins précis mais plus rapide.

F. Usurpation d’adresse MAC

Une autre méthode pour contourner les restrictions d’un pare-feu consiste à usurper une adresse MAC. Cette technique peut être très efficace, en particulier s’il existe une règle de filtrage par adresse MAC pour accéder à tout ou partie du réseau. Bien évidament, il faut découvrir en amont une ou plusieurs adresse pour que ce test l’outrepassement puisse fonctionner.

–spoof-mac vous donne la possibilité de choisir

  • une adresse MAC aléatoire (+)
  • une adresse MAC d’un fournisseur spécifique (++) [Cf la/les marques des PC utilisés]
  • une adresse MAC spécifique de votre choix. (+++)

Exemples :

  • Spécifier l’adresse MAC d’un fournisseur –spoof-mac Dell/Apple/3Com
  • Générer une adresse MAC aléatoire —spoof-mac 0
  • Spécifier une adresse MAC —spoof-mac 00:01:02:25:56:AE

Un autre avantage de l’usurpation d’adresse MAC est que vous effectuez votre analyse plus furtifvement vu que votre véritable adresse MAC n’apparaîtra pas dans les fichiers journaux du pare-feu.

IV. Stratégies d’obfuscation

A. Utilisation d’adresses IP « leurres »

Pour dissimuler l’origine d’une attaque, Nmap est d’autre part capable d’utiliser des « adresses leurres » dans l’objectif de modifier les entêtes IP des paquêts émis. Cette approche vous permettra de camoufler votre vrai adresse IP parmis un nombre que vous pourrez définir.

De ce fait, dans les journaux du pare-feu il y aura votre adresse IP ainsi que celle des leures. Il sera donc beaucoup plus difficile de déterminer à partir de quel IP l’analyse a démarré.

Il existe deux options que vous pouvez utiliser dans ce type d’analyse :

  1. nmap -D RND:10 [cible] (Génère des IPs aléatoires. Ici 10)
11 IPs présentes lors de la capture wireshark. 10 « fausses IPs » et la votre.

2. nmap -D fakeip1,fakeip2,fakeip3 target (spécifiez manuellement les adresses IP des leurres)

Même remarque ici avec quatre IPs au total dont trois leures.

Bien que cette technique puisse être bloqué par des mécanismes de protection dit « actif » (WAF, etc.), voici quand même quelques informations complémentaires :

  • Nmap placera votre IP à une position aléatoire à chaque éxécution de la commande
  • Notez que les « fake hôtes » que vous utilisez comme leurres devraient être réellement actifs; sinon, vous risquez d’inonder votre cible par des requêtes SYN. Sans compter qu’il serait assez facile de déterminer quel hôte est en train de scanner si en fait un seul est actif sur le réseau.
    • Pour un réseau privée, utilisé des adresses privée active, sinon il serat très facile de remonter jusqu’à votre IP.
    • Pareil pour un réseau public, utilisé des adresses publique active.
  • Les leurres sont utilisés autant dans la phase initiale de scan (l’hôte est-il actif ?) que pendant dans les phases « proprement dite de scan » de ports.
    • Les leurres peuvent-être utilisés avec l’option -O. (tentative de détection de l’OS distant.)
    • En revanche, ils 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 le rendre potentiellement moins précis.
  • Enfin, d’après la doc de Nmap certains FAI peuvent filtrer vos paquets usurpés (spoofés) toutefois beaucoup ne le font pas du tout.
Rappel : schéma d’une communication basique TCP entre deux machines

B. Bonus – encapsuler votre scan dans le réseau TOR

Afin de masquer leurs adresses IPs, les attaquants se protège en règle générale en encapsulant leurs attaques par l’intermédiaire du réseau TOR. Techniquement, ils encapsulent leurs attaques dans un proxy tor local, qui est « la passerelle » permettant d’accéder à ce réseau.

Pour ce faire, les utilitaires torsocks <=> torify ou bien encore proxychains sont les plus utilisés. Le plus complet étant de mon point de vue proxychains en terme d’options de configurations et de prise en charge de commandes. (et oui ce n’est pas le cas de tous les outils de pentest que vous trouverez sur internet)

Pour installer proxychain et tor :

apt install proxychains 
apt install tor 
systemctl start tor 

Vérifier que votre service tor local (serveur proxy) et proxychains sont bel et bien liés (je vérifie ici tout simplement si mon IP publique est bien une IP publique du réseau TOR et non ma véritable IP)

proxychains curl ifconfig.me/ip

Dès lors que vous avez cette confirmation, vous pouvez lancer un scan nmap en préfixant votre commande nmap avec « proxychains »

proxychains nmap -Pn -sT -p80 target -v

V. Autres méthodes que je n’ai pas abordés :

  • Randomiser l’ordre des scans de plusieurs hôte (.2, .5, .10, au lieu de .1, .2. ,3 etc) .en atténuant l’aggréssivité du scan (-T)
  • Envoyer des paquets avec des sommes de contrôle (badsum) TCP/UDP erronnées
  • Il y en aura surement d’autre à l’avenir…
  • Source routing (Changer la « route » qu’empreinte Nmap par défaut afin d’éviter des IDS/IPS/Firewall)

VI. Sources

++

Merci à Florian Burnel pour sa relecture 😉

Geoffrey


Geoffrey Sauvageot-Berland

Ingénieur diplômé par l’état en Informatique et Cybersécurité. Généraliste, à l'origine administrateur systèmes et réseaux, j’occupe actuellement un poste d’auditeur en sécurité offensive. J’apprécie également la programmation/automatisation. Fondateur du blog : "Le Guide du SecOps", anciennement "Le Guide du SysOps"