O que Análise de Abuso de ACL no Active Directory faz?
Visão Geral
As Listas de Controle de Acesso (ACLs) do Active Directory definem permissões em objetos AD por meio de Listas de Controle de Acesso Discricionário (DACLs) que contêm Entradas de Controle de Acesso (ACEs). ACEs mal configurados podem conceder a usuários não privilegiados permissões perigosas como GenericAll (controle total), WriteDACL (modificar permissões), WriteOwner (assumir propriedade) e GenericWrite (modificar atributos) em objetos sensíveis como grupos de Administradores do Domínio, controladores de domínio ou GPOs.
Esta skill usa a biblioteca Python ldap3 para conectar-se a um Controlador de Domínio, consultar objetos com seu atributo nTSecurityDescriptor, analisar o descritor de segurança binário no formato SDDL (Security Descriptor Definition Language) e identificar ACEs que concedem permissões perigosas a entidades não administrativas. Essas misconfigurações são a base para caminhos de ataque baseados em ACL descobertos por ferramentas como o BloodHound.
Quando Usar
- Ao investigar incidentes de segurança que exigem análise de abuso de ACL no Active Directory
- Ao construir regras de detecção ou consultas de caça a ameaças para este domínio
- Quando analistas de SOC precisam de procedimentos estruturados para este tipo de análise
- Ao validar a cobertura de monitoramento de segurança para técnicas de ataque relacionadas
Pré-requisitos
- Python 3.9 ou superior com a biblioteca ldap3 (
pip install ldap3) - Credenciais de usuário do domínio com acesso de leitura a objetos AD
- Conectividade de rede ao Controlador de Domínio na porta 389 (LDAP) ou 636 (LDAPS)
- Compreensão do modelo de segurança do Active Directory e do formato SDDL
Passos
-
Conectar ao Controlador de Domínio: Estabeleça uma conexão LDAP usando ldap3 com autenticação NTLM ou simples. Use LDAPS (porta 636) para conexões criptografadas em produção.
-
Consultar objetos de destino: Pesquise a UO de destino ou todo o domínio por objetos, incluindo usuários, grupos, computadores e UOs. Solicite os atributos
nTSecurityDescriptor,distinguishedName,objectClassesAMAccountName. -
Analisar descritores de segurança: Converta o nTSecurityDescriptor binário em sua representação de string SDDL. Analise cada ACE na DACL para extrair o SID do trustee, a máscara de acesso e o tipo de ACE (permitir/negar).
-
Resolver SIDs para entidades: Mapeie identificadores de segurança (SIDs) para nomes de conta legíveis por humanos usando consultas LDAP no domínio. Identifique SIDs conhecidos para grupos internos.
-
Verificar permissões perigosas: Compare a máscara de acesso de cada ACE com as máscaras de bits de permissões perigosas: GenericAll (0x10000000), WriteDACL (0x00040000), WriteOwner (0x00080000), GenericWrite (0x40000000) e WriteProperty para direitos estendidos específicos.
-
Filtrar trustees não administrativos: Exclua trustees administrativos esperados (Administradores do Domínio, Administradores da Empresa, SYSTEM, Administradores) e sinalize ACEs onde usuários ou grupos não privilegiados possuem permissões perigosas.
-
Mapear caminhos de ataque: Para cada descoberta, documente a cadeia de ataque potencial (ex.: GenericAll em usuário permite redefinição de senha, WriteDACL em grupo permite adicionar a si mesmo ao grupo).
-
Gerar relatório de remediação: Gere um relatório JSON com todos os ACEs perigosos, objetos afetados, trustees não administradores e etapas de remediação recomendadas.
Saída Esperada
{
"domain": "corp.example.com",
"objects_scanned": 1247,
"dangerous_aces_found": 8,
"findings": [
{
"severity": "critical",
"target_object": "CN=Domain Admins,CN=Users,DC=corp,DC=example,DC=com",
"target_type": "group",
"trustee": "CORP\\helpdesk-team",
"permission": "GenericAll",
"access_mask": "0x10000000",
"ace_type": "ACCESS_ALLOWED",
"attack_path": "GenericAll no grupo Domain Admins permite adicionar membros arbitrários",
"remediation": "Remover o ACE GenericAll para helpdesk-team em Domain Admins"
}
]
}