Как программно получить параметр групповой политики Enforce Password History?

Как я могу программно получитьИспользовать историю паролей настройка групповой политики?

Исследования усилий

Вы можете найти параметр групповой политики в разделе:

** Конфигурация компьютера \ Параметры Windows \ Параметры безопасности \ Политики учетных записей \ Политика паролей **

Использовать историю паролей

Этот параметр безопасности определяет количество уникальных новых паролей, которые должны быть связаны с учетной записью пользователя, прежде чем старый пароль можно будет повторно использовать. Значение должно быть от 0 до 24 паролей.

Эта политика позволяет администраторам повышать безопасность, обеспечивая постоянное повторное использование старых паролей.

Как и все параметры групповой политики, он хранится в реестре. К сожалению, он хранится в недокументированном месте реестра:

HKEY_LOCAL_MACHINE \ SAM \ SAM \ Domains \ Account \ F

Внедокументированный двоичный формат двоичных объектов.

Тамявляется класс WMIRSOP_SecuritySettingBoolean, но без какого-либо контекста, это просто имя висит там - что я понятия не имею, как читать через COM / native.

NetValidatePasswordPolicy

Windows действительно обеспечиваетNetValidatePasswordPolicy API это позволит ему подтвердить ваш пароль для таких вещей, как:

слишком много неудачных попытокблокировка аккаунтаблокировка автоматического сбросаминимальный срок действия паролямаксимальный срок действия пароляповторное использование пароля

и он будет выполнять все эти действия в соответствии с действующей на компьютере групповой политикой. И все это прекрасно работает, за исключением истории паролей.

Функция требует, чтобы вы передавали список хэшей паролей, например:

$2aявляетсяmACnM5lzNigHMaf7O1py1OLCBgGL4tYUF0N/4rS9CwDsI7ytwL4D6$2aявляетсяmACnM5lzNigHMaf7O1py1O3vlf6.BA8k8x3IoJ.Tq3IB/2e7g61Km$2aнедокументированный двоичный формат двоичных объектов.TtQJ4Jr6isd4Hp.mVfZeuh6Gws4rOQ/vdBczhDx.19NFK0Y84Dle$2aнедокументированный двоичный формат двоичных объектовRo0CUfOqk6cXEKf3dyaM7OhSCvnwM9s4wIX9JeLapehKK5YdLxKcm

а также хеш нового пароля-кандидата, например:

$2aHKEY_LOCAL_MACHINE \ SAM \ SAM \ Domains \ Account \ F1JsBs47iuMNsV166PKV.u.56hlT5/tRe9V5t5FIdfA0axpDSQuNN

Это вызоветNetValidatePasswordPolicy чтобы проверить, соответствует ли ваш текущий хеш любому из существующих хешей. К сожалению, вся концепция проверки предыдущих хэшей паролей работает только при использовании алгоритма слабого пароля (такой как PBKDF2, который использует Windows).

Потому что я использую современный,дорого, соленый, алгоритм хэширования паролей (BCrypt / SCrypt), хеш не может быть детерминированно сгенерирован из одного пароля - я не могу просто проверить старый список. Я должен был бы перефразировать новый пароль пользователя противкаждый предварительно хранится соль.

это не только дорогая операция; потенциально требуется 12 секунд, чтобы проверить все 24 сохраненных хэшая не знаю, когда остановиться, потому что я не знаю значения групповой политики истории паролей (например, я проверял бы все 24 сохраненных хэша, когда мне нужно только проверить ноль).

Я подумал позвонитьNetValidatePasswordPolicy с фиктивным списком из 24 сохраненных хэшей паролей, например:

abcd...vwx

Затем API сообщит мне, что пароль не соответствует ни одному изn история. Но API также разработан, чтобы вернуть вам то, что вы должны сохранить. Этоможет быть затем вернитесь:

$2aHKEY_LOCAL_MACHINE \ SAM \ SAM \ Domains \ Account \ F1JsBs47iuMNsV166PKV.u.56hlT5/tRe9V5t5FIdfA0axpDSQuNNabc

И из этого я мог бы заключить, что его парольчетыре.

Но я еще не добрался там.

Я три дня на это и теряю терпение.

почему Microsoft запутывает групповую политику?почему Microsoft не позволяет людям читать это?почему это недокументировано?как мне все это получить?

Ответы на вопрос(1)

Ваш ответ на вопрос