O que estabelece a revisão de grupos privilegiados vazios no AD
A Revisao de grupos privilegiados vazios AD procura determinar se a ausência de membros reportada é fiável e intencional. Um resultado informativo é um ponto de partida para a verificação: identificar o grupo, estabelecer o que a recolha efetivamente leu e, depois, registar a decisão do responsável. O encerramento do achado deve preservar essas evidências, em vez de alterar a associação ao grupo apenas para fazer desaparecer o resultado.
A Microsoft documenta vários grupos de operadores sem membros por predefinição, incluindo Account Operators, Backup Operators, Print Operators e Server Operators. O seu estado vazio pode, portanto, ser esperado. A mesma referência explica as capacidades administrativas dos grupos e as restrições à eliminação de grupos integrados. Consulte a referência dos grupos de segurança do Active Directory para o grupo específico que está a rever.
A distinção útil é entre associação desconhecida, presença de membros confirmada e ausência intencional de membros confirmada num âmbito definido. Estes resultados exigem diferentes ações de acompanhamento. Um atributo em falta, um comando que falhou e um grupo vazio aprovado não devem partilhar a mesma classificação de encerramento.
Como as evidências de associação podem estar incompletas
O atributo member do objeto de grupo é multivalor e utiliza a sintaxe de nomes distintos. A sua leitura fornece uma visão ao nível do atributo. A revisão também precisa de considerar grupos aninhados e, quando relevante, a associação ao grupo primário definida nas contas.
A paginação de resultados LDAP e a recuperação de atributos por intervalos resolvem problemas diferentes. A paginação recupera lotes de objetos; a recuperação de atributos por intervalos recupera lotes de valores de um único atributo multivalor. Um coletor pode concluir a paginação da pesquisa de grupos e, mesmo assim, não conseguir reunir os valores de associação de um grupo individual. Ao diagnosticar uma exportação LDAP em bruto, examine os nomes de atributos devolvidos e a conclusão dos intervalos.
A referência do esquema primaryGroupID define o atributo da conta como o identificador relativo do seu grupo primário. Uma exportação que inclua apenas grupos não examina esse atributo das contas. O nosso artigo sobre associações por primaryGroupID omitidas por exportações que leem apenas member explica esse caminho de associação separado. Utilize-o para compreender o limite da cobertura; esta revisão não exige alterar primaryGroupID nem reproduzir a técnica de abuso.
Antes de interpretar um resultado em branco, registe o DC exato, o domínio, a base de pesquisa, a identidade de recolha e os limites relevantes. Preserve os erros devolvidos. Se não conseguir estabelecer esses factos, classifique a associação como desconhecida e atribua um responsável pelo acompanhamento. Não transforme uma falha operacional num resultado vazio obtido com sucesso.
Deteção: verificar o grupo num DC escolhido
Os exemplos PowerShell seguintes utilizam sintaxe documentada pelo Microsoft Learn. São exemplos de revisão apenas de leitura, adaptados com valores de ambiente fictícios a substituir, não comandos executados num laboratório AD para este artigo. Substitua o servidor, o domínio e a identidade do grupo antes de os executar num sistema com o módulo ActiveDirectory disponível.
Passo 1: estabelecer a identidade antes de contar membros
Utilize um DN, GUID ou SID verificado, em vez de presumir que o nome de apresentação identifica de forma única o grupo privilegiado pretendido. Get-ADGroup suporta estas identidades e a recuperação explícita de propriedades:
$server = 'dc01.example.com'
$groupIdentity = 'CN=Schema Admins,CN=Users,DC=example,DC=com'
$group = Get-ADGroup -Identity $groupIdentity -Server $server -Properties member -ErrorAction Stop
$group | Select-Object DistinguishedName, SID, GroupScope, GroupCategory, member
Neste exemplo, selecione um DC no domínio raiz da floresta que contém Schema Admins e substitua o DN em conformidade. Registe o SID devolvido e confronte-o com o inventário de grupos de referência. Se estiver a rever um grupo de operadores, escolha a sua identidade e o seu domínio reais. Preserve o registo de identidade mesmo quando a leitura da associação estiver vazia.
Passo 2: preservar separadamente os resultados diretos e recursivos
Get-ADGroupMember aceita um servidor e uma identidade de grupo explícitos. O seu modo recursivo expande a hierarquia até aos membros sem objetos subordinados. Preserve o resultado não recursivo para ver os objetos de grupo que um resultado achatado não mantém:
$direct = @(Get-ADGroupMember -Identity $group.DistinguishedName -Server $server -ErrorAction Stop)
$direct | Select-Object DistinguishedName, objectClass, SID
$recursive = @(Get-ADGroupMember -Identity $group.DistinguishedName -Server $server -Recursive -ErrorAction Stop)
$recursive | Select-Object DistinguishedName, objectClass, SID
Trate-os como conjuntos de evidências separados, não como contagens intercambiáveis. Se um resultado direto contiver um grupo, reveja a identidade e a associação desse grupo no DC adequado. Um grupo aninhado vazio continua a ser um membro direto do grupo que o contém. Uma saída recursiva sem contas não deve apagar essa relação do registo de revisão.
-ErrorAction Stop apresenta um erro e interrompe o comando; promove erros não terminantes a erros terminantes. Se um comando falhar, interrompa essa medição e preserve o erro; não reutilize o conteúdo de uma variável anterior como se fosse o novo resultado. Um comando concluído com sucesso continua a ser evidência para o servidor escolhido e o âmbito legível, não uma certificação incondicional de todos os domínios ou relações de confiança. A documentação Microsoft de Get-ADGroupMember também exclui instantâneos do Active Directory e grupos com membros noutra floresta quando essa floresta não dispõe de Active Directory Web Service. Registe qualquer uma dessas limitações como uma leitura por resolver, não como um grupo vazio.
Passo 3: ler primaryGroupID quando for relevante
Para um grupo de segurança de domínio verificado, uma verificação nas contas pode comparar primaryGroupID com o RID desse grupo. Mantenha a consulta dentro do domínio representado pelo SID do grupo: o RID, por si só, não é uma identidade válida em toda a floresta. Não aplique mecanicamente este exemplo de grupo de domínio a um SID do contentor Builtin.
O exemplo seguinte utiliza os parâmetros documentados LDAPFilter, SearchBase, Server e Properties de Get-ADObject, combinados com a definição de primaryGroupID no esquema:
$domainBase = 'DC=example,DC=com'
$rid = $group.SID.Value.Split('-')[-1]
$primaryMembers = @(Get-ADObject -LDAPFilter "(primaryGroupID=$rid)" -SearchBase $domainBase -SearchScope Subtree -Server $server -Properties primaryGroupID,objectSid -ErrorAction Stop)
$primaryMembers | Select-Object DistinguishedName, objectClass, objectSid, primaryGroupID
Esta é uma consulta de revisão, não um script de remediação do grupo primário. Estabeleça a sua aplicabilidade e a população legível antes de interpretar a saída. Para grupos de domínio aninhados, considere também as evidências relevantes nas contas desses níveis; não presuma que o resultado recursivo do nível superior responde a todas as questões sobre grupos primários. Se a população ou a visibilidade dos atributos estiver incompleta, preserve essa limitação na conclusão.
Remediação: resolver a lacuna de evidências antes do encerramento (Remediation)
Neste contexto, remediar significa corrigir a incerteza da revisão ou documentar a configuração pretendida. As alterações de associação exigem uma justificação separada. Utilize a sequência seguinte depois de recolher as evidências de identidade e associação.
- Resolver leituras desconhecidas. Investigue o erro registado, a identidade de recolha, a visibilidade dos atributos, o âmbito de pesquisa e os limites de objetos. Quando o LDAP em bruto devolver atributos de associação por intervalos, utilize um método de recuperação que processe esses intervalos e preserve a evidência de conclusão. Volte a executar a leitura relevante no DC registado depois de resolver o problema de recolha.
- Confrontar os membros confirmados. Se a revisão nativa devolver membros enquanto o coletor reporta uma lista vazia, preserve ambas as saídas com os respetivos momentos e identidades de recolha. Investigue a diferença antes de classificar o achado. Não remova membros válidos para forçar a concordância com uma exportação incompleta.
- Documentar a ausência intencional de membros. Peça ao responsável pelo grupo que confirme o objetivo operacional, o estado vazio aprovado e o processo para qualquer utilização futura. Anexe a identidade verificada e o âmbito da leitura a essa decisão. Para um grupo de operadores sem membros por predefinição, documente por que motivo o estado atual corresponde ao modelo de administração local.
- Escalar a ausência inesperada de membros. Se o responsável esperava administradores ativos ou um grupo aninhado documentado, investigue a discrepância através do processo de alterações da organização. Não volte a preencher automaticamente o grupo a partir de uma exportação antiga nem adicione uma identidade abrangente como solução rápida.
- Preservar o registo de encerramento. Inclua o responsável, a decisão, a data das evidências, o DC, o SID do grupo, os comandos, os erros e os limites por resolver. Defina quando a decisão deve ser revista, por exemplo perante uma alteração do modelo de administração ou uma nova divergência nas evidências recolhidas.
O guia relacionado sobre excesso perigoso de membros em grupos privilegiados e ausência intencional de membros em Schema Admins explica por que motivo preencher um grupo privilegiado não é uma resposta adequada a este Info. Mantenha a discussão dos riscos de acesso desse guia separada da decisão sobre a completude das evidências aqui tratada.
Por exemplo, um revisor pode receber uma lista vazia do coletor para um grupo de operadores. Se a identidade corresponder, as leituras independentes forem concluídas no âmbito exigido e o responsável confirmar que não estão previstos operadores, a decisão pode preservar o estado vazio. Se a mesma revisão encontrar um erro de leitura por resolver, o resultado correto é associação desconhecida com um acompanhamento atribuído. Estas são decisões ilustrativas, não resultados de testes observados.
Como a EtcSec deteta este caso
O detetor GROUP_EMPTY_PRIVILEGED da EtcSec produz um achado Info para grupos privilegiados reconhecidos cuja lista Member recolhida satisfaça len(Member) == 0. A revisão do etc-collector analisada é 20268a321609c193b79c5da6764f3f56950449cb; o detetor é public/internal/audit/detectors/ad/groups/privileged/empty-privileged.go.
Reconhece dez nomes em inglês: Domain Admins, Enterprise Admins, Schema Admins, Administrators, Account Operators, Server Operators, Backup Operators, Print Operators, DnsAdmins e Group Policy Creator Owners. Compara sAMAccountName sem distinguir maiúsculas de minúsculas, recorre a DisplayName quando sAMAccountName está vazio ou encontra uma subcadeia de nome cn= em qualquer ponto do DN. Não verifica um SID nem um limite de RDN. Grupos renomeados ou localizados podem ser omitidos; uma correspondência de nome, por si só, não estabelece a identidade de um grupo integrado.
O predicado não expande associações aninhadas nem calcula primaryGroupID. No fornecedor LDAP analisado, a recolha de grupos utiliza por predefinição (objectClass=group) dentro do BaseDN e do limite de objetos configurados. O parser lê exatamente member, sem reunir os valores de member;range=.... A ausência do atributo exato transforma-se numa lista vazia. A paginação de objetos não corrige essa lacuna de recuperação de atributos.
Estas observações do código estabelecem um risco de interpretação incompleta, não um falso positivo demonstrado num ambiente AD em funcionamento. Não foram executados testes AD para este artigo. A recomendação genérica do detetor menciona a remoção de grupos não utilizados; não deve ser aplicada a grupos integrados. Utilize o Info para desencadear a revisão da identidade, da completude e da decisão do responsável descrita acima.
Explore as paginas de identidade que sustentam este tema
