GPO (Group Policy Objects)
Criando GPO e Linkando com uma OU
Os objetos de política de grupo são armazenados em CN=Policies,CN=System
- os principais que podem criar novos GPOs no domínio têm o privilégio Create groupPolicyContainer objects
sobre este objeto. Podemos encontrá-los com o cmdlet Get-DomainObjectAcl
do PowerView, procurando aqueles que têm direitos CreateChild
no Group-Policy-Container
e, em seguida, resolvendo seus SIDs para nomes legíveis.
A partir do resultado do comando acima, podemos ver quais grupos tem direito de criar GPO. Porém, ser capaz de criar um GPO não resulta em nada, a menos que possa ser vinculado a uma OU. A capacidade de vincular um GPO a uma OU é controlada na própria OU, concedendo privilégios Write gPLink
. Isso é algo que podemos encontrar com o PowerView, primeiro obtendo todas as OUs do Domínio e canalizando-as para Get-DomainObjectAcl
novamente. Itere sobre cada um deles procurando instâncias de WriteProperty
sobre GP-Link
.
Caso o retorno seja positivo, então já sabemos que os membros de um determinado grupo, podem vincular GPOs a uma determianda OU. Aliás guarde o valor de ObjectDN
para uso futuro.
Os GPOs podem ser gerenciados na linha de comando por meio dos módulos RSAT do PowerShell. Esta é uma instalação opcional e geralmente encontrada apenas em estações de trabalho de gerenciamento. O cmdlet Get-Module
mostrará se eles estão presentes.
Use o cmdlet New-GPO
para criar e vincular um novo GPO.
Alguns abusos podem ser implementados diretamente usando o RSAT. Por exemplo, o cmdlet Set-GPPrefRegistryValue
pode ser usado para adicionar uma chave de execução automática HKLM ao registro.
Agora, aplique o GPO à OU de destino. Pegue o valor de ObjectDN
pelo retorno do segundo comando, que em resumo será o caminho da OU vulnerável.
Lembre-se que, as execuções automáticas do HKLM exigem uma reinicialização do SO para serem executadas.
Modificando GPOs Existentes
Modificar um GPO existente que já esteja aplicado a uma ou mais OUs é o cenário mais simples. Para pesquisá-los, precisamos enumerar todos os GPOs do domínio com Get-DomainGPO
e verificar a ACL de cada um com Get-DomainObjectAcl
. Queremos filtrar qualquer um para o qual um principal tenha privilégios de modificação, como CreateChild
, WriteProperty
ou GenericWrite
, e também queremos filtrar os principais legítimos, incluindo SYSTEM, Domain Admins e Enterprise Admins.
Pegue o valor de ObjectDN
e converta em seu nome de GPO. Observe a saída em displarname
Agora vamos converter o SID capturado no campo SecurityIdentifier
, presente na saída do primeiro comando, utilizando-o no comando abaixo. A partir do resultado, iremos saber qual grupo tem privilégios (verificar permissões no campo ActiveDirectoryRights
) na GPO em questão.
Também queremos saber a quais OUs essa GPO se aplica e quais computadores estão nessas OUs. As GPOs são vinculados a uma OU modificando a propriedade gPLink
da própria OU. O cmdlet Get-DomainOU
possui um parâmetro -GPLink
que usa um GUID de GPO. No comando abaixo, utilize somente o valor SID (entre chaves) da GPO, presente no campo ObjectDN
.
Finalmente, para obter os computadores em uma OU, podemos usar Get-DomainComputer
e usar o nome distinto da OU como base de pesquisa. Utilize o valor de distinguishedName
do comando acima, para montar o comando abaixo.
Para modificar um GPO sem o uso do GPMC (Group Policy Management Console)
, podemos modificar os arquivos associados diretamente no SYSVOL (o gpcFileSysPath
).
Ou se preferir, podemos fazer isso de forma automatizada. Como exemplo, podemos usar um script de inicialização no SYSVOL, que será executado toda vez que um computador afetado for iniciado.
Para verificar se deu certo, execute o comando do PowerView abaixo
Agora assim que a máquina alvo tiver sua GPO atualizada e a máquina for reiniciada, irá ser trigado o Beacon. Caso tenha acesso a máquina, force esse acontecimento com os seguintes comandos
Sites
Last updated