diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 4f96c20dc..ad681ba95 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -260,6 +260,7 @@ - [Ad Certificates](windows-hardening/active-directory-methodology/ad-certificates.md) - [AD information in printers](windows-hardening/active-directory-methodology/ad-information-in-printers.md) - [AD DNS Records](windows-hardening/active-directory-methodology/ad-dns-records.md) + - [Adws Enumeration](windows-hardening/active-directory-methodology/adws-enumeration.md) - [ASREPRoast](windows-hardening/active-directory-methodology/asreproast.md) - [BloodHound & Other AD Enum Tools](windows-hardening/active-directory-methodology/bloodhound.md) - [Constrained Delegation](windows-hardening/active-directory-methodology/constrained-delegation.md) diff --git a/src/windows-hardening/active-directory-methodology/adws-enumeration.md b/src/windows-hardening/active-directory-methodology/adws-enumeration.md new file mode 100644 index 000000000..2160b8b87 --- /dev/null +++ b/src/windows-hardening/active-directory-methodology/adws-enumeration.md @@ -0,0 +1,106 @@ +# Active Directory Web Services (ADWS) Enumeração & Coleta Stealth + +{{#include ../../banners/hacktricks-training.md}} + +## O que é ADWS? + +Active Directory Web Services (ADWS) está **habilitado por padrão em todos os Controladores de Domínio desde o Windows Server 2008 R2** e escuta na porta TCP **9389**. Apesar do nome, **nenhum HTTP está envolvido**. Em vez disso, o serviço expõe dados no estilo LDAP através de uma pilha de protocolos de estrutura .NET proprietários: + +* MC-NBFX → MC-NBFSE → MS-NNS → MC-NMF + +Como o tráfego está encapsulado dentro desses frames SOAP binários e viaja por uma porta incomum, **a enumeração através do ADWS é muito menos provável de ser inspecionada, filtrada ou assinada do que o tráfego clássico LDAP/389 & 636**. Para os operadores, isso significa: + +* Recon mais furtivo – As equipes azuis frequentemente se concentram em consultas LDAP. +* Liberdade para coletar de **hosts não-Windows (Linux, macOS)** através de um túnel 9389/TCP por meio de um proxy SOCKS. +* Os mesmos dados que você obteria via LDAP (usuários, grupos, ACLs, esquema, etc.) e a capacidade de realizar **escritas** (por exemplo, `msDs-AllowedToActOnBehalfOfOtherIdentity` para **RBCD**). + +> NOTA: O ADWS também é usado por muitas ferramentas GUI/PowerShell do RSAT, então o tráfego pode se misturar com a atividade administrativa legítima. + +## SoaPy – Cliente Python Nativo + +[SoaPy](https://github.com/logangoins/soapy) é uma **reimplementação completa da pilha de protocolos ADWS em Python puro**. Ele cria os frames NBFX/NBFSE/NNS/NMF byte a byte, permitindo a coleta de sistemas semelhantes ao Unix sem tocar no runtime .NET. + +### Principais Recursos + +* Suporta **proxy através de SOCKS** (útil a partir de implantes C2). +* Filtros de busca detalhados idênticos ao LDAP `-q '(objectClass=user)'`. +* Operações de **escrita** opcionais ( `--set` / `--delete` ). +* Modo de saída **BOFHound** para ingestão direta no BloodHound. +* Flag `--parse` para embelezar timestamps / `userAccountControl` quando a legibilidade humana é necessária. + +### Instalação (host do operador) +```bash +python3 -m pip install soapy-adws # or git clone && pip install -r requirements.txt +``` +## Stealth AD Collection Workflow + +O seguinte fluxo de trabalho mostra como enumerar **objetos de domínio e ADCS** através do ADWS, convertê-los para JSON do BloodHound e caçar caminhos de ataque baseados em certificado – tudo a partir do Linux: + +1. **Tunnel 9389/TCP** da rede alvo para sua máquina (por exemplo, via Chisel, Meterpreter, SSH dynamic port-forward, etc.). Exporte `export HTTPS_PROXY=socks5://127.0.0.1:1080` ou use `--proxyHost/--proxyPort` do SoaPy. + +2. **Coletar o objeto de domínio raiz:** +```bash +soapy ludus.domain/jdoe:'P@ssw0rd'@10.2.10.10 \ +-q '(objectClass=domain)' \ +| tee data/domain.log +``` +3. **Coletar objetos relacionados ao ADCS do NC de Configuração:** +```bash +soapy ludus.domain/jdoe:'P@ssw0rd'@10.2.10.10 \ +-dn 'CN=Configuration,DC=ludus,DC=domain' \ +-q '(|(objectClass=pkiCertificateTemplate)(objectClass=CertificationAuthority) \\ +(objectClass=pkiEnrollmentService)(objectClass=msPKI-Enterprise-Oid))' \ +| tee data/adcs.log +``` +4. **Converter para BloodHound:** +```bash +bofhound -i data --zip # produces BloodHound.zip +``` +5. **Faça o upload do ZIP** na interface do BloodHound e execute consultas cypher como `MATCH (u:User)-[:Can_Enroll*1..]->(c:CertTemplate) RETURN u,c` para revelar caminhos de escalonamento de certificado (ESC1, ESC8, etc.). + +### Escrevendo `msDs-AllowedToActOnBehalfOfOtherIdentity` (RBCD) +```bash +soapy ludus.domain/jdoe:'P@ssw0rd'@dc.ludus.domain \ +--set 'CN=Victim,OU=Servers,DC=ludus,DC=domain' \ +msDs-AllowedToActOnBehalfOfOtherIdentity 'B:32:01....' +``` +Combine isso com `s4u2proxy`/`Rubeus /getticket` para uma cadeia completa de **Delegação Constrangida Baseada em Recurso**. + +## Detecção e Fortalecimento + +### Registro Verboso do ADDS + +Ative as seguintes chaves de registro nos Controladores de Domínio para expor buscas caras / ineficientes provenientes do ADWS (e LDAP): +```powershell +New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\NTDS\Diagnostics' -Name '15 Field Engineering' -Value 5 -Type DWORD +New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\NTDS\Parameters' -Name 'Expensive Search Results Threshold' -Value 1 -Type DWORD +New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\NTDS\Parameters' -Name 'Search Time Threshold (msecs)' -Value 0 -Type DWORD +``` +Eventos aparecerão sob **Directory-Service** com o filtro LDAP completo, mesmo quando a consulta chegou via ADWS. + +### Objetos Canary SACL + +1. Crie um objeto fictício (por exemplo, usuário desativado `CanaryUser`). +2. Adicione um ACE de **Auditoria** para o principal _Everyone_, auditado em **ReadProperty**. +3. Sempre que um atacante realizar `(servicePrincipalName=*)`, `(objectClass=user)` etc., o DC emite **Event 4662** que contém o SID do usuário real – mesmo quando a solicitação é proxy ou se origina do ADWS. + +Exemplo de regra pré-construída do Elastic: +```kql +(event.code:4662 and not user.id:"S-1-5-18") and winlog.event_data.AccessMask:"0x10" +``` +## Resumo de Ferramentas + +| Propósito | Ferramenta | Notas | +|-----------|------------|-------| +| Enumeração ADWS | [SoaPy](https://github.com/logangoins/soapy) | Python, SOCKS, leitura/escrita | +| Ingestão do BloodHound | [BOFHound](https://github.com/bohops/BOFHound) | Converte logs do SoaPy/ldapsearch | +| Comprometimento de Certificado | [Certipy](https://github.com/ly4k/Certipy) | Pode ser proxy através do mesmo SOCKS | + +## Referências + +* [SpecterOps – Make Sure to Use SOAP(y) – An Operators Guide to Stealthy AD Collection Using ADWS](https://specterops.io/blog/2025/07/25/make-sure-to-use-soapy-an-operators-guide-to-stealthy-ad-collection-using-adws/) +* [SoaPy GitHub](https://github.com/logangoins/soapy) +* [BOFHound GitHub](https://github.com/bohops/BOFHound) +* [Microsoft – MC-NBFX, MC-NBFSE, MS-NNS, MC-NMF specifications](https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-nbfx/) + +{{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/active-directory-methodology/bloodhound.md b/src/windows-hardening/active-directory-methodology/bloodhound.md index fff31dc3d..fab8d5259 100644 --- a/src/windows-hardening/active-directory-methodology/bloodhound.md +++ b/src/windows-hardening/active-directory-methodology/bloodhound.md @@ -1,87 +1,78 @@ -# BloodHound & Outras Ferramentas de Enumeração AD +# BloodHound & Outras Ferramentas de Enumeração do Active Directory {{#include ../../banners/hacktricks-training.md}} +{{#ref}} +adws-enumeration.md +{{#endref}} + +> NOTA: Esta página agrupa algumas das utilidades mais úteis para **enumerar** e **visualizar** relacionamentos do Active Directory. Para coleta através do canal stealthy **Active Directory Web Services (ADWS)**, consulte a referência acima. + +--- + ## AD Explorer -[AD Explorer](https://docs.microsoft.com/en-us/sysinternals/downloads/adexplorer) é da Sysinternal Suite: +[AD Explorer](https://docs.microsoft.com/en-us/sysinternals/downloads/adexplorer) (Sysinternals) é um **visualizador e editor de AD** avançado que permite: -> Um visualizador e editor avançado de Active Directory (AD). Você pode usar o AD Explorer para navegar facilmente em um banco de dados AD, definir locais favoritos, visualizar propriedades e atributos de objetos sem abrir caixas de diálogo, editar permissões, visualizar o esquema de um objeto e executar pesquisas sofisticadas que você pode salvar e reexecutar. +* Navegação GUI da árvore de diretórios +* Edição de atributos de objetos e descritores de segurança +* Criação / comparação de snapshots para análise offline -### Snapshots +### Uso rápido -O AD Explorer pode criar snapshots de um AD para que você possa verificá-lo offline.\ -Ele pode ser usado para descobrir vulnerabilidades offline ou para comparar diferentes estados do banco de dados AD ao longo do tempo. +1. Inicie a ferramenta e conecte-se a `dc01.corp.local` com quaisquer credenciais de domínio. +2. Crie um snapshot offline via `File ➜ Create Snapshot`. +3. Compare dois snapshots com `File ➜ Compare` para identificar desvios de permissão. -Você precisará do nome de usuário, senha e direção para se conectar (qualquer usuário AD é necessário). - -Para tirar um snapshot do AD, vá em `File` --> `Create Snapshot` e insira um nome para o snapshot. +--- ## ADRecon -[**ADRecon**](https://github.com/adrecon/ADRecon) é uma ferramenta que extrai e combina vários artefatos de um ambiente AD. As informações podem ser apresentadas em um **relatório** Microsoft Excel **especialmente formatado** que inclui visualizações resumidas com métricas para facilitar a análise e fornecer uma visão holística do estado atual do ambiente AD alvo. -```bash -# Run it -.\ADRecon.ps1 +[ADRecon](https://github.com/adrecon/ADRecon) extrai um grande conjunto de artefatos de um domínio (ACLs, GPOs, trusts, templates de CA …) e produz um **relatório Excel**. +```powershell +# On a Windows host in the domain +PS C:\> .\ADRecon.ps1 -OutputDir C:\Temp\ADRecon ``` -## BloodHound +--- -From [https://github.com/BloodHoundAD/BloodHound](https://github.com/BloodHoundAD/BloodHound) +## BloodHound (visualização gráfica) -> BloodHound é uma aplicação web Javascript de página única, construída sobre [Linkurious](http://linkurio.us/), compilada com [Electron](http://electron.atom.io/), com um banco de dados [Neo4j](https://neo4j.com/) alimentado por um coletor de dados em C#. +[BloodHound](https://github.com/BloodHoundAD/BloodHound) usa teoria dos grafos + Neo4j para revelar relacionamentos de privilégio ocultos dentro do AD local e do Azure AD. -BloodHound usa teoria dos grafos para revelar as relações ocultas e muitas vezes não intencionais dentro de um ambiente Active Directory ou Azure. Atacantes podem usar BloodHound para identificar facilmente caminhos de ataque altamente complexos que, de outra forma, seriam impossíveis de identificar rapidamente. Defensores podem usar BloodHound para identificar e eliminar esses mesmos caminhos de ataque. Tanto equipes azuis quanto vermelhas podem usar BloodHound para obter uma compreensão mais profunda das relações de privilégio em um ambiente Active Directory ou Azure. - -Assim, [Bloodhound ](https://github.com/BloodHoundAD/BloodHound) é uma ferramenta incrível que pode enumerar um domínio automaticamente, salvar todas as informações, encontrar possíveis caminhos de escalonamento de privilégios e mostrar todas as informações usando gráficos. - -BloodHound é composto por 2 partes principais: **ingestors** e a **aplicação de visualização**. - -Os **ingestors** são usados para **enumerar o domínio e extrair todas as informações** em um formato que a aplicação de visualização entenderá. - -A **aplicação de visualização usa neo4j** para mostrar como todas as informações estão relacionadas e para mostrar diferentes maneiras de escalar privilégios no domínio. - -### Instalação - -Após a criação do BloodHound CE, todo o projeto foi atualizado para facilitar o uso com Docker. A maneira mais fácil de começar é usar sua configuração pré-configurada do Docker Compose. - -1. Instale o Docker Compose. Isso deve estar incluído na instalação do [Docker Desktop](https://www.docker.com/products/docker-desktop/). -2. Execute: +### Implantação (Docker CE) ```bash curl -L https://ghst.ly/getbhce | docker compose -f - up +# Web UI ➜ http://localhost:8080 (user: admin / password from logs) ``` -3. Localize a senha gerada aleatoriamente na saída do terminal do Docker Compose. -4. Em um navegador, navegue até http://localhost:8080/ui/login. Faça login com o nome de usuário **`admin`** e uma **`senha gerada aleatoriamente`** que você pode encontrar nos logs do docker compose. +### Coletores -Após isso, você precisará alterar a senha gerada aleatoriamente e terá a nova interface pronta, a partir da qual você pode baixar diretamente os ingestors. +* `SharpHound.exe` / `Invoke-BloodHound` – variante nativa ou PowerShell +* `AzureHound` – enumeração do Azure AD +* **SoaPy + BOFHound** – coleta do ADWS (veja o link no topo) -### SharpHound +#### Modos comuns do SharpHound +```powershell +SharpHound.exe --CollectionMethods All # Full sweep (noisy) +SharpHound.exe --CollectionMethods Group,LocalAdmin,Session,Trusts,ACL +SharpHound.exe --Stealth --LDAP # Low noise LDAP only +``` +Os coletores geram JSON que é ingerido através da interface do BloodHound. -Eles têm várias opções, mas se você quiser executar o SharpHound de um PC conectado ao domínio, usando seu usuário atual e extrair todas as informações, você pode fazer: -``` -./SharpHound.exe --CollectionMethods All -Invoke-BloodHound -CollectionMethod All -``` -> Você pode ler mais sobre **CollectionMethod** e a sessão de loop [aqui](https://support.bloodhoundenterprise.io/hc/en-us/articles/17481375424795-All-SharpHound-Community-Edition-Flags-Explained) - -Se você deseja executar o SharpHound usando credenciais diferentes, pode criar uma sessão CMD netonly e executar o SharpHound a partir daí: -``` -runas /netonly /user:domain\user "powershell.exe -exec bypass" -``` -[**Saiba mais sobre Bloodhound em ired.team.**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-with-bloodhound-on-kali-linux) +--- ## Group3r -[**Group3r**](https://github.com/Group3r/Group3r) é uma ferramenta para encontrar **vulnerabilidades** no Active Directory associadas à **Política de Grupo**. \ -Você precisa **executar group3r** a partir de um host dentro do domínio usando **qualquer usuário do domínio**. +[Group3r](https://github.com/Group3r/Group3r) enumera **Group Policy Objects** e destaca configurações incorretas. ```bash -group3r.exe -f -# -s sends results to stdin -# -f send results to file +# Execute inside the domain +Group3r.exe -f gpo.log # -s to stdout ``` +--- + ## PingCastle -[**PingCastle**](https://www.pingcastle.com/documentation/) **avalia a postura de segurança de um ambiente AD** e fornece um bom **relatório** com gráficos. - -Para executá-lo, pode-se executar o binário `PingCastle.exe` e ele iniciará uma **sessão interativa** apresentando um menu de opções. A opção padrão a ser utilizada é **`healthcheck`** que estabelecerá uma **visão geral** do **domínio**, e encontrará **configurações incorretas** e **vulnerabilidades**. - +[PingCastle](https://www.pingcastle.com/documentation/) realiza uma **verificação de saúde** do Active Directory e gera um relatório em HTML com pontuação de risco. +```powershell +PingCastle.exe --healthcheck --server corp.local --user bob --password "P@ssw0rd!" +``` {{#include ../../banners/hacktricks-training.md}}