Como obter programaticamente a configuração de diretiva de grupo Enforce Password History?

Como posso obter programaticamente oAplicar histórico de senhas configuração de diretiva de grupo?

Esforço de pesquisa

Você pode encontrar a opção Diretiva de Grupo em:

** Configuração do computador \ Configurações do Windows \ Configurações de segurança \ Diretivas de conta \ Diretiva de senha **

Aplicar histórico de senhas

Essa configuração de segurança determina o número de novas senhas exclusivas que precisam ser associadas a uma conta de usuário antes que uma senha antiga possa ser reutilizada. O valor deve estar entre 0 e 24 senhas.

Essa política permite que os administradores aprimorem a segurança, garantindo que as senhas antigas não sejam reutilizadas continuamente.

Como todas as opções de diretiva de grupo, ele é armazenado no registro. Infelizmente, ele é armazenado em um local de registro não documentado:

HKEY_LOCAL_MACHINE \ SAM \ SAM \ Domínios \ Conta \ F

Em umformato de blob binário não documentado.

é uma classe WMIRSOP_SecuritySettingBoolean, mas sem qualquer contexto, é apenas um nome por aí - o qual não faço ideia de como ler o COM / native.

NetValidatePasswordPolicy

O Windows fornece umaNetValidatePasswordPolicy API que permitirá validar sua senha para coisas como:

muitas tentativas ruinsbloqueio de contaredefinição automática de bloqueioidade mínima da senhaidade máxima da senhareutilização de senha

e fará tudo isso seguindo a diretiva de grupo em vigor no computador. E tudo funciona muito bem, exceto o histórico de senhas.

A função requer que você passe uma lista de hashes de senha, por exemplo:

$2aémACnM5lzNigHMaf7O1py1OLCBgGL4tYUF0N/4rS9CwDsI7ytwL4D6$2aémACnM5lzNigHMaf7O1py1O3vlf6.BA8k8x3IoJ.Tq3IB/2e7g61Km$2aformato de blob binário não documentado.TtQJ4Jr6isd4Hp.mVfZeuh6Gws4rOQ/vdBczhDx.19NFK0Y84Dle$2aformato de blob binário não documentadoRo0CUfOqk6cXEKf3dyaM7OhSCvnwM9s4wIX9JeLapehKK5YdLxKcm

bem como o hash da nova senha do candidato, por exemplo:

$2aHKEY_LOCAL_MACHINE \ SAM \ SAM \ Domínios \ Conta \ F1JsBs47iuMNsV166PKV.u.56hlT5/tRe9V5t5FIdfA0axpDSQuNN

Isso causaráNetValidatePasswordPolicy para verificar se o seu hash atual corresponde a algum dos hashes existentes. Infelizmente, todo o conceito de verificação de hashes de senha anteriores só funciona quando você usa um algoritmo de senha fraca (como PBKDF2 que o Windows usa)

Porque eu uso um moderno,caro, salgado, algoritmo de hash de senha (BCrypt / SCrypt), um hash não pode ser gerado deterministicamente apenas com uma senha - não posso simplesmente verificar a lista antiga. Eu precisaria refazer a nova senha do usuário contracada sal previamente armazenado.

não é apenas uma operação cara; potencialmente levando 12 segundos para verificar todos os 24 hashes armazenadosNão sei quando parar, porque não sei o valor da política de grupo Histórico de Senhas (por exemplo, eu verificaria todos os 24 hashes armazenados, quando só preciso verificar zero).

Eu considerei ligarNetValidatePasswordPolicy com uma lista fictícia de 24 hashes de senha armazenados, por exemplo:

abcd...vwx

A API informará que sua senha não corresponde a nenhuma nan história. Mas a API também foi projetada para retornar a você o que você deve manter. istopoderia então retorne:

$2aHKEY_LOCAL_MACHINE \ SAM \ SAM \ Domínios \ Conta \ F1JsBs47iuMNsV166PKV.u.56hlT5/tRe9V5t5FIdfA0axpDSQuNNabc

E a partir disso, posso deduzir que a senha histo, ry length équatro.

Mas eu ainda não cheguei lá.

Estou com três dias e perdendo a paciência.

por que a Microsoft ofuscou a política de grupo?por que a Microsoft não permitiu que as pessoas o lessem?por que não está documentado?como faço para obter tudo a mesma coisa?

questionAnswers(1)

yourAnswerToTheQuestion