Explorando ACL/ACE
Permissões mal configuradas são sempre um bom ponto de entrada para um atacante e no AD não poderia ser diferente. Iremos ver no decorrer dessa página, informaçes sobre as DACL
(Discretionary Access Control Lists) e ACE (Acccess Control Entries),.
ACL
Quando um usuário loga no Windows, ele recebe um token no qual consiste em verificar se o usuário está incluso na ACL do objetos ou recursos que ele solicita. Essa ACL é uma lista composta por ACE (Access Control Entry) e cada ACE em uma ACL, identifica uma entidade de segurança, os direitos de acesso permitido, negados ou auditados para essa entidade.
Abaixo segue os tipos de ACL:
DACL (Discretionary Access Control List)
= Tudo no AD é um objeto e todos os objetos possuem uma DACL. Em resumo, a DACL define as entidades de segurança com seus respectivos tipos de acessos comoAllowed
ouDenied
(Permitido ou Negado) para o objeto em questão. Para cada tipo de acesso (Allowed ou Denied), temos a operação que pode (ou não) ser realizada, sendo elas:Read
,Write
eExecute
. Sendo assim, quando um usuário tenta acessar um objeto, o sistema verifica as ACE's na DACL desse objeto que está sendo acessado, para determinar se deve ou não conceder acesso a esse usuário. Podemos por exemplo configurar na DACL que, o usuário mysther terá acesso permitido (allowed) para leitura (read) e execução (execute) nesse objeto, mas não para escrita (write) e também que todos os usuários (Everyone) e o grupoRH
tenham acesso negado (denied) para leitura (read), execução (execute) e escrita (write) nesse objetoSACL (System Access Control List)
= Permite que os administadores registrem em logs, as tentativas de acesso a um objeto protegido. Diferente da ACE na DACL que configura permissões de acesso, A ACE na SACL especifica os tipos de tentativas de acesso por uma entidade, salvando os registros no log de evento de segurança do Windows. Nesses logs, pode conter casos onde houve tentativa de acesso com falha, bem-sucedida ou ambos. Por exemplo, podemos configurar uma SACL na nossa máquina local para verificar se um determinado objeto (como o lsass) foi lido (read) ou até mesmo modificado (write)
ACE
Abaixo, está uma rápida descrição das permissões e tipos de objetos do Active Directory que são interessantes:
GenericAll
= O mesmo que umFull-Control
na ACE, ou seja, direitos totais ao objeto (adicionar usuários a um grupo ou redefinir a senha do usuário, etc)GenericWrite
= Atualiza os atributos do objeto (ou seja, script de logon)WriteOwner
= Altera o proprietário do objeto para que o usuário controlado pelo invasor assuma o objetoWriteDACL
= Modifica as ACE's do objeto, podendo assim dar ao invasor controle total sobre o objetoAllExtendedRights
= Capacidade de adicionar usuário a um grupo ou redefinir a senhaForceChangePassword
= Capacidade de alterar a senha do usuárioSelf (Self-Membership)
= Pode adicionar qualquer usuário ao grupoAdd Members
= Adiciona membros
PowerView
Listando todas as ACL's
Listando todas as ACL's em que um determinado usuário é "afetado". Imagine que estivesse vendo a lista de propriedade de ACE desse usuário através do AD no modo GUI.
Pegando a lista de ACE de um usuário, de forma semelhante ao GUI do AD
Comando semelhante ao anterior, porém pegando todas as ACE's de todos os obejtos de uma só vez
Pesquisando todos os objetos que um determinado usuário ou grupo, tem acesso via ACE
Verificando todos os objetos que possuem ACL GenericAll
sobre o usuário Administrator
O comando Find-InterestingDomainAcl
pesquisa objetos no Domínio com direitos de modificação sobre objetos não internos. Esse comando produz uma grande quantidade de dados, então precisa ser filtrado para obter melhores informações
Enumerando ACL
Built-in Cmdlets
Verificando quais usuários tem permissões GenericAll
ou WriteProperty
em um detereminado usuário do AD
PowerView
Verificando quais usuários tem permissões GenericAll
ou WriteProperty
em um detereminado usuário do AD
Procurando por usuários que podem realitzar DCSync:
ADModule
Verificando todas as ACE's do usuário administrator
. Altere a consulta LDAP caso queira filtrar por outro usuários
GenericAll (User)
Conforme dito, a permissão GenericAll
nos permite ter direitos totais aos objetos e isso inclui alterar a senha outros usuários. Abaixo segue um exemplo de como alterar a senha de um usuário e logo abaixo algumas maneiras de descobrir se nosso usuário possui ou não essa permissão.
Para isso, estamos utilizando o ADModule
(link disponível no final da página).
PowerView.ps1
Primeiro vamos verificar se nosso usuário atual possui permissões de GenericAll
no objeto AD, com um dos comandos abaixo:
Procure onde tenha o nome do usuário em IdentityReference
(talvez não apareca) e veja se há GenericAll
em ActiveDirectoryRights
(esse item tem que estar presente). Caso seja positivo, podemos alterar a senha do usuário que está presente em ObjectDN
, sem precisar saber a senha atual. Para acessar o terminal com a conta do usuário, execute o comando abaixo:
SharpView.exe
BloodHound
Em Node Info
, veja se há algo em First Degree Object Control
(na seção Outbound Object Control
).
GenericAll (Group)
Semelhante ao GenericAll
que vimos anteriormente, porém este se aplica a permissões em grupo.
Primeiro vamos pesquisar pelos grupos e buscar o Distinguishedname
.
Após localizar o Distinguishedname
, utilize-o no comando abaixo (para fins, de exemplo, foi utilizado o CN=Domain Admins,CN=Users,DC=offense,DC=local
):
Assim como no modo do usuário, no grupo também devemos procurar por GenericAll
em ActiveDirectoryRights
e, caso positivo, podemos ter permissões de colocar usuários como Domain Admins (levando em conta que foi utilizado esse grupo como exemplo).
Sites
Last updated