ACL Abuse Havoc, um toolkit de BOFs para exploração de ACLs de AD via Havoc C2
Os ambientes de Active Directory estão crivados de más configurações de ACL. GenericAll numa conta de utilizador, WriteDacl num grupo, GenericWrite num objeto de computador - são estes os caminhos que transformam um apoio pouco privilegiado em domain admin. Ferramentas como o BloodHound mapeiam estas relações, mas explorá-las a partir de uma beacon de C2 exigia sempre largar binários em disco ou correr ferramentas externas que comprometem o opsec.
Não existia um toolkit nativo de abuso de ACL para o Havoc C2, por isso construímos um. O acl-abuse-havoc é um toolkit de BOFs (Beacon Object Files) que corre oito primitivas comuns de abuso de ACL inteiramente em memória, sem tocar no disco e sem dependências externas.
O que lá está
O toolkit cobre os caminhos de abuso de ACL que encontramos com mais frequência em projetos:
- acl-shadow - cadeia de ataque Shadow Credentials (GenericWrite/GenericAll). Geração de par de chaves RSA, escrita de KeyCredential, PKINIT, extração do NT hash, limpeza. Corre em menos de 5 segundos.
- acl-fcp - ForceChangePassword via LDAPS.
- acl-addmember - Adicionar um utilizador a um grupo (WriteMembers/GenericAll).
- acl-owner - Assumir a propriedade de um objeto via WriteOwner sobre LDAPS.
- acl-rbcd - Abuso de Resource-Based Constrained Delegation (GenericWrite em computador).
- acl-dcsync - DCSync via WriteDacl no objeto do domínio. Concede DS-Replication-Get-Changes e DS-Replication-Get-Changes-All num só passo.
- acl-genericall - Abuso de GenericAll via modificação de WriteDacl.
- acl-ace - Escrever um ACE custom com access mask, tipo e flags arbitrários.
acl-shadow
Shadow Credentials é um dos caminhos de escalada de privilégios mais fiáveis em ambientes AD com AD CS. A cadeia envolve escrever um KeyCredential num objeto-alvo, autenticar via PKINIT para obter um TGT e extrair o NT hash do PAC. Ferramentas existentes como o Rubeus e o Certipy fazem isto bem, mas nenhuma corre como BOF nativo dentro do Havoc. O acl-shadow fecha essa lacuna.
A cadeia completa corre como um único BOF:
- Lookup LDAP para resolver o DN e o objectSid do alvo.
- Geração em processo de par de chaves RSA de 2048 bits.
- Certificado self-signed com UPN SAN e SID URL (conformidade com KB5014754).
- Construção do blob msDS-KeyCredentialLink segundo a secção 2.2.20 do MS-ADTS.
- Escrita LDAP para adicionar o KeyCredential ao objeto-alvo.
- PKINIT AS-REQ com PA-PK-AS-REQ e troca de chaves DH (MODP Group 2).
- Derivação da reply key do AS-REP via kTruncate (RFC 4556, secção 3.2.3.1).
- U2U TGS-REQ para obter um service ticket cifrado com a session key.
- Decifração de PAC_CREDENTIAL_INFO para extrair o NT hash.
- Limpeza - remove o KeyCredential do msDS-KeyCredentialLink.
Da escrita à limpeza demora menos de 5 segundos. A negociação do tipo de cifra trata de AES256-CTS-HMAC-SHA1-96, AES128-CTS-HMAC-SHA1-96 e RC4-HMAC automaticamente. Requisitos do alvo: DC Windows Server 2016+ e AD CS com o certificate template Kerberos Authentication.
Considerações de opsec
O acl-shadow toca em dois protocolos: LDAP para a escrita/eliminação do KeyCredential e Kerberos para a troca PKINIT + U2U. A escrita LDAP gera o Evento 5136 (objeto de diretório modificado) no atributo msDS-KeyCredentialLink do alvo. A autenticação PKINIT gera o Evento 4768 com informação de certificado. A limpeza remove o valor do atributo, mas o 5136 da escrita inicial já ficou registado.
A janela curta entre escrita e limpeza dificulta a deteção em tempo real, mas a análise forense ainda vê ambos os eventos. Nada é escrito em disco - o par de chaves RSA, o certificado e o PFX vivem todos na memória do processo durante a execução do BOF.
Começar
A compilação exige mingw-w64 (apenas x64). Clone o repositório, corra make e carregue o acl-abuse.py via Script Manager no cliente Havoc. Todos os comandos aceitam um argumento DC opcional - omita-o e o DC é descoberto automaticamente via DsGetDcNameW.
O projeto é open-source e está disponível em github.com/OFFCEPT/acl-abuse-havoc.