Avatar “The only person in computing that is paid to actually understand the system from top to bottom is the attacker! Everybody else usually gets paid to do their parts.” Halvar Flake

DACL & ACE'S ON ACTIVE DIRECTORY

O Microsoft Active Directory possui grupos pré-definidos para delegar permissões a usuários e grupos, porém nem sempre é plausível delegar tantos poderes quando se precisa somente de poucos privilégios. Administradores de sistemas podem delegar permissões para usuários/computadores/grupos do domínio sem que os mesmos façam parte de um grupo privilegiado, assim, usuários poderão executar tarefas como, adicionar um usuário/grupo a um determinado grupo, alterar a senha de usuários e modificar propriedades inerentes ao objeto em questão através de ACL’s.

Essas mesmas permissões criadas para ajudar no processo de delegação de privilégios podem criar problemas de segurança, levando atacantes por caminhos onde a escalação de privilégio pode ser atingida.

DACL & ACE

Todo Securable Object possui um security descriptor que pode incluir um Object Owner, DACL (Discretionary Access Control List) e uma SACL (System Access Control List).

Security Descriptor Structure

typedef struct _SECURITY_DESCRIPTOR {
  BYTE                        Revision;
  BYTE                        Sbz1;
  SECURITY_DESCRIPTOR_CONTROL Control;
  PSID                        Owner;
  PSID                        Group;
  PACL                        Sacl;
  PACL                        Dacl;
} SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR;

upload-image

DACL’s são nada mais que um conjunto de ACE’s agrupadas. Cada ACE refere-se a uma lista de permissões para usuário/grupos/processos, definidas por permitir ou negar acesso a determinada propriedade.

upload-image

Quando um usuário solicita acesso a um objeto, há uma verificação de autorização onde o acesso é concedido baseando-se nas propriedades pré definidas, ex.: Read, Write, Delete e etc.

upload-image

Any domain authenticated user can enumerate DACLs and Active Directory objects!

Veremos quais as implicações de segurança que a má configuração pode causar.

ForceChangePassword

O usuário/grupo com essas atribuições tem poderes para alterar a senha do objeto no qual a permissão foi delegada, sem a necessidade de conhecer a senha atual.

Usando o cmdlet Get-ObjectAcl do PowerView para listar as propriedades do objeto Maycon Vitali, o output informa que o IdentityReference HNR\hnr_hnr possui permissões ExtendedRight para o ObjectType User-Force-Change-Password, delegando poderes para todos os membros do grupo HNR\hnr_hnr de alterar a senha do objeto Maycon Vitali.

PS C:\Users\tuxtrack.HNR\Desktop> Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Maycon Vitali,CN=Users,DC=hnr,DC=local"}
InheritedObjectType   : All
ObjectDN              : CN=Maycon Vitali,CN=Users,DC=hnr,DC=local
ObjectType            : User-Force-Change-Password
IdentityReference     : HNR\hnr_hnr
IsInherited           : False
ActiveDirectoryRights : ExtendedRight
PropagationFlags      : None
ObjectFlags           : ObjectAceTypePresent
InheritanceFlags      : ContainerInherit
InheritanceType       : All
AccessControlType     : Allow
ObjectSID             : S-1-5-21-3380101520-2231475763-736739948-1103

BloodHound attack path, partindo do node HNR\tuxtrack, usuário pertencente ao grupo HNR\hnr_hnr, com o objetivo de obter privilégios do grupo Domain Admins.

upload-image

Para abusar da ACE que permite a alteração da senha, utilizei o cmdlet Set-DomainUserPassword do PowerView. O parâmetro identity se refere a conta do usuário no qual se deseja alterar a senha.

upload-image

GenericAll

Caso o usuário receba privilégio GenericAll, o mesmo terá poderes sobre todas as propriedades do objeto, podendo adcionar/remover usuários em grupos, alterar a senha de usuários, habilitar/desabilitar acesso a novos objetos e etc.

O grupo HNR/hnr_biscates possuem total controle sobre as propriedades do usuário tuxtrack, como pode ser verificado abaixo.

PS C:\Users\tuxtrack.HNR\Desktop> Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=tuxtrack,OU=hnr_blog,DC=hnr,DC=local"}
InheritedObjectType   : All
ObjectDN              : CN=tuxtrack,OU=hnr_blog,DC=hnr,DC=local
ObjectType            : All
IdentityReference     : HNR\hnr_biscates
IsInherited           : False
ActiveDirectoryRights : GenericAll
PropagationFlags      : None
ObjectFlags           : None
InheritanceFlags      : ContainerInherit
InheritanceType       : All
AccessControlType     : Allow
ObjectSID             : S-1-5-21-3380101520-2231475763-736739948-1105

BloodHound attack path, partindo do node HNR\alexos, com o objetivo de obter privilégios do grupo Domain Admins.

upload-image

Como prova de conceito, foi alterada a propriedade msTSInitialProgram, adicionando o path de um compartilhamento de rede no qual o atacante possua acesso. Assim, o atacante poderá controlar o arquivo que foi inserido na propriedade.

msTSInitialProgram - This attribute specifies the path and file name of the application that the user wants to start automatically when the user logs on to the terminal server.

upload-image

GenericWrite

Generic Write permite a leitura que e escrita para qualquer atributo não projegido do objeto.

PS C:\Users\tuxtrack.HNR\Desktop> Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=hnr_biscates,OU=HNR_Groups,DC=hnr,DC=local"}
InheritedObjectType   : All
ObjectDN              : CN=hnr_biscates,OU=HNR_Groups,DC=hnr,DC=local
ObjectType            : All 
IdentityReference     : HNR\hnr_nullbyte
IsInherited           : False
ActiveDirectoryRights : WriteProperty
PropagationFlags      : None
ObjectFlags           : None
InheritanceFlags      : ContainerInherit
InheritanceType       : All
AccessControlType     : Allow
ObjectSID             : S-1-5-21-3380101520-2231475763-736739948-1109

BloodHound attack path, partindo do node HNR\idiotbox, usuário pertencente ao grupo HNR\nullbyte, com o objetivo de obter privilégios do grupo Domain Admins.

upload-image

O usuário hnr/idiotbox pertence ao grupo HNR_BISCATES que possui privilégios GenericWrite no grupo HNR_NULLBYTE. Para exemplificar, adicionamos o usuário HNR/palmitao ao grupo hnr_biscates, mas qualquer propriedade pertencente ao objeto poderia ser modificada (ObjectType : All).

upload-image

WriteDACL

Permissão para modificar DACL. Sendo assim, os usuários contemplados com essa permissão podem alterar quaisquer propriedades do objeto DACL (ACE), concedendo a si próprio qualquer privilégio.

No exemplo abaixo, o grupo hnr_devs possuiem a permissão WriteDacl no grupo Enterprise Admins.

PS C:\Users\tuxtrack.HNR\Desktop> Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Enterprise Admins,CN=Users,DC=hnr,DC=local"}
Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Enterprise Admins,CN=Users,DC=hnr,DC=local"}
InheritedObjectType   : All
ObjectDN              : CN=Enterprise Admins,CN=Users,DC=hnr,DC=local
ObjectType            : All
IdentityReference     : HNR\hnr_devs
IsInherited           : False
ActiveDirectoryRights : WriteDacl
PropagationFlags      : None
ObjectFlags           : None
InheritanceFlags      : None
InheritanceType       : None
AccessControlType     : Allow
ObjectSID             : S-1-5-21-3380101520-2231475763-736739948-519

BloodHound attack path, partindo do node HNR\neko, usuário pertencente ao grupo HNR\hnr_devs, com o objetivo de obter privilégios do grupo Enterprise Admins e Domain Admins.

upload-image

O ataque consiste em criar uma nova ACE no objeto Enterprise Admins, concedendo totais poderes sobres suas propriedades para o usuário HNR/neko e então adicioná-lo como membro do grupo Enterprise Admins, abusando dos direitos adquiridos.

upload-image

O cenário exibido acima e no próximo tópico são meramente ilustrativos. Contas e Grupos definidos como Protected Accounts, possuem mecanismos de segurança que verificam sua integridade automaticamente a cada 60 minutos, resetando suas permissões, comparando-as com as permissões do objeto AdminSDHolder. Esse processo é chamado de Security Description Propagation ou SDProp.

Contas e grupos protegidos no Active Directory pelo sistema operacional

WriteOwner

Write Owner é o privilégio destinado ao Owner da DACL de um objeto no Active Directory. Ao ser criada a permissão, ela pode ser designada via ACE a apenas algumas propriedades do objeto ou a todas. O Owner possui GenericAll sobre todas as propridades do objeto, garantindo assim ao atacantes plenos poderes para executar diversas tarefas que podem comprometer o objeto.

PS C:\Users\tuxtrack.HNR\Desktop> Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Domain Admins,CN=Users,DC=hnr,DC=local"}
InheritedObjectType   : All
ObjectDN              : CN=Domain Admins,CN=Users,DC=hnr,DC=local
ObjectType            : All
IdentityReference     : HNR\hnr_admins
IsInherited           : False
ActiveDirectoryRights : WriteOwner
PropagationFlags      : None
ObjectFlags           : None
InheritanceFlags      : ContainerInherit
InheritanceType       : All
AccessControlType     : Allow
ObjectSID             : S-1-5-21-3380101520-2231475763-736739948-512

BloodHound attack path, partindo do node HNR\acode, usuário pertencente ao grupo HNR\hnr_admins, com o objetivo de obter privilégios do grupo Domain Admins.

upload-image

Abaixo pode-se notar que foi verificado que o usuário HNR\acode não fazia parte dos membros do grupo Domain Admins, somente do grupo hnr_admins. O powerview possui o cmdlet Set-DomainObjectOwner, utilizado para definir o usuário HNR\acode como Owner do grupo Domain Admins. Após concluir a escrita do owner para usuário HNR\acode, foi criada uma ACE (Add-DomainObjectAcl) concedendo todos os privilégios ao usuário (-Rights “ALL”). Após todos os privilégios serem concedidos, o usuário HNR\acode foi inserido como membro do grupo Domain Admins (Add-DomainGroupMember).

upload-image

AllExtendedRights

Poderes sobre todas as propriedades Extended Righs de um objeto.

PS C:\Users\tuxtrack.HNR\Desktop> Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=tuxtrack,OU=hnr_blog,DC=hnr,DC=local"}
InheritedObjectType   : All
ObjectDN              : CN=tuxtrack,OU=hnr_blog,DC=hnr,DC=local
ObjectType            : All
IdentityReference     : HNR\pupilo
IsInherited           : False
ActiveDirectoryRights : ReadProperty, WriteProperty, ExtendedRight
PropagationFlags      : None
ObjectFlags           : None
InheritanceFlags      : ContainerInherit
InheritanceType       : All
AccessControlType     : Allow
ObjectSID             : S-1-5-21-3380101520-2231475763-736739948-1105

BloodHound attack path, partindo do node HNR\pupilo, usuário com AllExtendedRights sobre o usuário HNR\tuxtrack.

upload-image

Extended Rights aplicáveis a usuários

Extended Right Description
Change Password {ab721a53-1e2f-11d0-9819-00aa0040529b} Enables you to change the password on a user account. You must know the user’s current password in order to provide them with a new password.
Reset Password {00299570-246d-11d0-a768-00aa006e0529} Enables you to reset the password on a user account. You do not need to know the user’s current password in order to provide them with a new password.
Receive As {ab721a56-1e2f-11d0-9819-00aa0040529b} Exchange right that enables you to receive mail as a given mailbox.
Send As {ab721a54-1e2f-11d0-9819-00aa0040529b} Exchange right that enables you to send mail as the mailbox.

No cenário abaixo, o usuário HNR\pupilo, possui plenos privilégios para alterar a senha do usuário HNR\tuxtrack. Após alterá-la, o usuário pode executar o cmd.exe através do comando runas com o usuário HNR\tuxtrack.

upload-image


Como apresentado, privilégios podem ser abusados em diversos caminhos, explorando a necessidade de delegá-los dentro de uma infraestrutura corporativa para atender as mais adversas necessidades.

Fico a disposição para sanar quaisquer dúvidas, até o próximo!

Referências:

An ACE Up The Sleeve

Active Directory Rights Enum

Extended Rights Reference