Реализация синхронизации хэшированных паролей в службе синхронизации Azure AD Connect

В этой статье содержатся сведения о том, как синхронизировать пароли пользователей локального экземпляра службы Active Directory (AD) и облачного экземпляра службы Azure Active Directory (Azure AD).

Как работает синхронизация хэшированных паролей

Доменная служба Active Directory хранит пароли в виде хэш-значений, полученных на основе фактических паролей. Для получения хэш-значений используется необратимая математическая функция (алгоритм хэширования). Не существует метода для возврата результата односторонней функции в обычную текстовую версию пароля.

Чтобы синхронизировать пароль, Azure AD Connect Sync извлекает хэш пароля из локального экземпляра Active Directory. Перед синхронизацией в службу проверки подлинности Azure Active Directory хэш пароля дополнительно обрабатывается системой безопасности. Пароли синхронизируются для каждого пользователя отдельно и в хронологическом порядке.

Процесс синхронизации хэша паролей использует такой же поток данных, как и синхронизация любых пользовательских данных. Но синхронизация паролей происходит чаще, чем это обычно делается для других атрибутов. Процесс синхронизации хэшированных паролей выполняется каждые 2 минуты. Нельзя изменять частоту выполнения этого процесса. При синхронизации пароль перезаписывает существующий в облачной службе.

Когда вы впервые включаете функцию синхронизации хэшированных паролей, выполняется первоначальная синхронизация паролей для всех пользователей в области действия функции. Вы не можете явно выделить подмножество пользователей, для которых нужно синхронизировать пароли. Однако, если есть несколько соединителей, можно отключить синхронизацию хэша паролей для одних соединителей, но не для других, используя командлет Set-ADSyncAADPasswordSyncConfiguration.

При изменении локального пароля новый пароль, как правило, синхронизируется в течение нескольких минут. Функция синхронизации хэшированных паролей использует механизм повторных попыток при сбоях. Ошибки, возникающие во время синхронизации паролей, записываются в журнал событий.

Синхронизация пароля не влияет на пользователей Azure, находящихся в системе в момент ее выполнения. Если изменение пароля синхронизируется во время вашего пребывания в облачной службе, оно не применяется в сеансе облачной службы немедленно. Однако, когда снова возникнет необходимость в проверке подлинности в облачной службе, потребуется указать новый пароль.

Для аутентификации в Azure AD пользователь должен вводить корпоративные учетные данные повторно, независимо от того, выполнен ли вход в корпоративную сеть. Но эту проблему можно свести к минимуму, если пользователь при входе в систему установит флажок "Оставаться в системе". Это действие создает для сеанса файл cookie, который в течение 180 дней позволяет обходить аутентификацию. Администратор Azure Active Directory может включить или отключить функцию "Оставаться в системе". Кроме того, можно сократить число запросов пароля, включив простой единый вход. Он автоматически обеспечивает пользователям вход в систему, когда они работают на корпоративных устройствах, подключенных к корпоративной сети.

Примечание

Синхронизация паролей поддерживается только для типа объектов user в Active Directory. Она не поддерживается для типа объектов iNetOrgPerson.

Подробное описание принципа действия синхронизации хэшированных паролей

В следующем разделе подробно описан принцип действия синхронизации хэша паролей между локальным экземпляром Active Directory и Azure Active Directory.

Подробная схема использования паролей

  1. Каждые две минуты агент синхронизации хэша паролей на сервере AD Connect запрашивает у контроллера домена сохраненные хэши паролей (атрибут unicodePwd). Этот запрос выполняется по стандартному протоколу репликации MS-DRSR, который используется для синхронизации данных между контроллерами домена. Для получения хэша паролей учетной записи службы требуются разрешения AD "Репликация изменений каталога" и "Репликация всех изменений каталога" (предоставляется по умолчанию при установке).
  2. Перед отправкой контроллер домена шифрует MD4-хэш пароля с помощью ключа — комбинации MD5-хэша от ключа сеанса RPC и случайных данных. После этого он отправляет результат агенту синхронизации хэшированных паролей по протоколу RPC. Контроллер домена также передает агенту синхронизации случайные данные, используя протокол репликации контроллера домена, чтобы агент смог расшифровать конверт.
  3. Когда агент синхронизации хэшированных паролей получает зашифрованный конверт, он создает ключ для расшифровки полученных данных в исходный формат MD4, используя MD5CryptoServiceProvider и значение соли. Агенту синхронизации хэша паролей не доступен пароль в виде открытого текста. Он применяет MD5 только для совместимости по протоколу репликации с контроллером домена и только в локальной среде для обмена данными между контроллером домена и агентом синхронизации хэшированных паролей.
  4. Агент синхронизации хэшированных паролей увеличивает 16-байтовый двоичный хэш пароля до 64 байтов. Для этого он преобразует хэш в 32-байтовую шестнадцатеричную строку, а затем преобразует ее обратно в двоичный формат с кодировкой UTF-16.
  5. Агент синхронизации паролей добавляет к 64-байтовому двоичному значению 10-байтовое значение соли для каждого пользователя, чтобы обеспечить дополнительную защиту исходного хэша.
  6. Затем он передает строку, полученную при объединении хэша MD4 с солью каждого пользователя, в функцию PBKDF2. Выполняется 1000 итераций алгоритма хэширования с ключом HMAC-SHA256. Дополнительные сведения см. в техническом документе по Azure AD.
  7. Агент синхронизации паролей принимает полученный 32-байтовый хэш, присоединяет к нему значение соли для каждого пользователя и число итераций SHA256 (которое используется в Azure AD) и передает полученную строку из Azure AD Connect в Azure AD по протоколу TLS.
  8. Когда пользователь вводит пароль для входа в Azure AD, пароль обрабатывается точно так же (MD4, случайные данные, PBKDF2 и HMAC-SHA256). Если полученный хэш совпадает с хэшем, хранящимся в Azure AD, это означает, что пользователь ввел правильный пароль и он проходит аутентификацию.

Примечание

Оригинальный MD4-хэш не передается в Azure AD. Вместо этого передается SHA256-хэш от оригинального MD4-хэша. Это означает, что хранимый в Azure AD хэш невозможно использовать для атаки Pass-the-Hash на локальную систему, даже если удастся его получить.

Вопросы безопасности

При синхронизации паролей их текстовое значение никогда не передается в службу синхронизации хэшированных паролей, в Azure AD или другие связанные службы.

Пользователь проходит аутентификацию в Azure AD, а не в корпоративном экземпляре Active Directory. Данные пароля SHA256, хранимые в Azure AD (хэш исходного хэша MD4), безопаснее, чем данные, хранимые в Active Directory. Кроме того, так как хэш SHA256 невозможно расшифровать, его невозможно вернуть в корпоративную среду Active Directory и представить в качестве действительного пароля пользователя в ходе атаки Pass-the-Hash.

Рекомендации по политикам паролей

Есть два типа политик паролей, которые затрагивает синхронизация хэшированных паролей:

  • Политика сложности паролей
  • политика срока действия паролей.

Политика сложности паролей

Если используется синхронизация хэшированных паролей, настроенные в локальном экземпляре Active Directory политики сложности паролей переопределяют политики сложности, настроенные в облаке для синхронизированных пользователей. Все допустимые пароли из локального экземпляра Active Directory можно использовать для доступа к службам Azure AD.

Примечание

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

политика срока действия паролей.

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

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

EnforceCloudPasswordPolicyForPasswordSyncedUsers

Если есть синхронизированные пользователи, которые взаимодействуют только с интегрированными службами Azure AD и должны соответствовать политике срока действия паролей, вы можете принудительно применить к ним политику срока действия паролей Azure AD, включив функцию EnforceCloudPasswordPolicyForPasswordSyncedUsers.

Если функция EnforceCloudPasswordPolicyForPasswordSyncedUsers отключена (значение по умолчанию), Azure AD Connect задает атрибуту PasswordPolicies синхронизированных пользователей значение DisablePasswordExpiration. Это выполняется при каждом синхронизации пароля пользователя, а Azure AD получает указание игнорировать политику срока действия облачных паролей для этого пользователя. Значение атрибута можно проверить с помощью модуля Azure AD PowerShell, выполнив следующую команду:

(Get-AzureADUser -objectID <User Object ID>).passwordpolicies

Чтобы включить функцию EnforceCloudPasswordPolicyForPasswordSyncedUsers, выполните приведенную ниже команду с помощью модуля PowerShell MSOnline, как показано ниже. Для параметра Enable необходимо ввести значение "Да", как показано ниже.

Set-MsolDirSyncFeature -Feature EnforceCloudPasswordPolicyForPasswordSyncedUsers
cmdlet Set-MsolDirSyncFeature at command pipeline position 1
Supply values for the following parameters:
Enable: yes
Confirm
Continue with this operation?
[Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): y

После включения Azure AD не переходит к каждому синхронизированному пользователю, чтобы удалить значение DisablePasswordExpiration из атрибута PasswordPolicies. Вместо этого значение DisablePasswordExpiration удаляется из PasswordPolicies во время следующей синхронизации хэша паролей для каждого пользователя при следующем изменении пароля в локальной службе Active Directory.

После включения функции EnforceCloudPasswordPolicyForPasswordSyncedUsers новые пользователи подготавливаются без значения PasswordPolicies.

Рекомендуется включить функцию EnforceCloudPasswordPolicyForPasswordSyncedUsers, прежде чем включать синхронизацию хэша паролей, чтобы начальная синхронизация хэшей паролей не добавила значение DisablePasswordExpiration атрибуту PasswordPolicies для пользователей.

Политика паролей Azure AD по умолчанию требует от пользователей менять свои пароли каждые 90 дней. Если в вашей политике в Active Directory также заданы 90 дней, обе политики должны совпадать. Однако если в политике AD заданы не 90 дней, вы можете обновить политику паролей Azure AD, чтобы обеспечить ее соответствие, с помощью команды PowerShell Set-MsolPasswordPolicy.

Azure AD поддерживает отдельные политики срока действия паролей для каждого зарегистрированного домена.

Предостережение. Если у вас есть синхронизированные учетные записи, которые должны иметь бессрочные пароли в Azure AD, необходимо явно добавить значение DisablePasswordExpiration атрибуту PasswordPolicies объекта User в Azure AD. Для этого выполните следующую команду.

Set-AzureADUser -ObjectID <User Object ID> -PasswordPolicies "DisablePasswordExpiration"

Примечание

Для гибридных пользователей, у которых параметра PasswordPolicies имеет значение DisablePasswordExpiration, оно изменяется на None после смены пароля в локальной среде.

Примечание

Команда PowerShell Set-MsolPasswordPolicy не работает в федеративных доменах.

Примечание

Команда PowerShell Set-AzureADUser не будет работать в федеративных доменах.

Синхронизация временных паролей и принудительное изменение пароля при следующем входе

Обычно при первом входе в систему пользователю в обязательном порядке предлагается сменить свой пароль, особенно после сброса пароля администратора. Обычно такие пароли называются временными. Для завершения их действия устанавливается флажок "Требовать смены пароля при следующем входе в систему" для объекта user в Active Directory (AD).

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

Чтобы поддерживать временные пароли в Azure AD для синхронизированных пользователей, можно включить функцию ForcePasswordChangeOnLogOn, выполнив на сервере Azure AD Connect следующую команду:

Set-ADSyncAADCompanyFeature -ForcePasswordChangeOnLogOn $true

Примечание

Принудительное изменение пароля пользователем при следующем входе в систему требует одновременной смены пароля. Служба Azure AD Connect не принимает флаг принудительного изменения пароля сама по себе; она дополняет обнаруженное изменение пароля, которое происходит во время синхронизации хэша пароля.

Если для пользователя настроен параметр «Срок действия пароля не истекает» в Active Directory (AD), то флаг принудительного изменения пароля не устанавливается в Active Directory (AD), поэтому пользователю не будет предложено изменить пароль при следующем входе.

Внимание!

Эту функцию следует использовать, только если в арендаторе включены SSPR и компонент обратной записи паролей. Таким образом, если пользователь изменяет свой пароль посредством SSPR, он синхронизируется с Active Directory.

Срок действия учетной записи

Если в вашей организация используется атрибут accountExpires для управления учетными записями пользователей, то этот атрибут не синхронизируется с Azure AD. В результате учетная запись Active Directory будет всегда активной в Azure AD, даже если срок ее действия истек в той среде, где настроена синхронизация хэшированных паролей. Рекомендуется использовать запланированный сценарий PowerShell, который отключает учетные записи AD пользователей по окончании срока их действия (используйте командлет Set-ADUser). И наоборот, в процессе удаления окончания срока действия из учетной записи AD эту учетную запись нужно включить повторно.

Перезапись синхронизированных паролей

Администратор может вручную сбросить пароль с помощью Windows PowerShell.

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

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

Синхронизация пароля не влияет на вошедших в систему пользователей Azure. Если изменение пароля синхронизируется, когда вы вошли в облачную службу, это не повлияет на открытый сеанс связи с облачной службой. Функция "Оставаться в системе" продлевает срок действия такого расхождения. Когда снова возникнет необходимость в аутентификации в облачной службе, потребуется указать новый пароль.

Дополнительные преимущества

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

Процесс синхронизации хэша паролей для доменных служб Azure AD

Если используются доменные службы Azure AD для предоставления возможности устаревшей проверки подлинности приложениям и службам, которым необходимо использовать Kerberos, LDAP или NTLM, некоторые дополнительные процессы входят в состав потока синхронизации хэша паролей. Чтобы синхронизировать хэши паролей в Azure AD для использования в доменных службах Azure AD, Azure AD Connect использует следующий дополнительный процесс:

Важно!

Azure AD Connect следует устанавливать и настраивать только для синхронизации с локальными средами AD DS. Установка Azure AD Connect в управляемом домене Azure AD DS для синхронизации объектов обратно в Azure AD не поддерживается.

При включении Azure AD DS для арендатора Azure AD служба Azure AD Connect синхронизирует хэши только устаревших паролей. Следующие действия не используются, если Azure AD Connect используется только для синхронизации локальной среды AD DS с Azure AD.

Если устаревшие приложения не используют проверку подлинности NTLM или простые привязки LDAP, рекомендуется отключить синхронизацию хэшей паролей NTLM для Azure AD DS. Дополнительные сведения см. в статье Отключение слабых комплектов шрифтов и синхронизации хэшей учетных данных NTLM.

  1. Azure AD Connect получает открытый ключ для экземпляра доменных служб Azure AD арендатора.
  2. Когда пользователи меняют свои пароли, локальный контроллер домена сохраняет результат изменения пароля (хэши) в двух атрибутах:
    • unicodePwd для хэша паролей NTLM,
    • supplementalCredentials для хэша паролей Kerberos.
  3. Azure AD Connect обнаруживает изменения паролей через канал репликации каталога (изменения атрибутов, которые необходимо реплицировать на другие контроллеры домена).
  4. Для каждого пользователя, чей пароль изменился, Azure AD Connect выполняет следующие действия:
    • Создает случайный 256-битный симметричный ключ AES.
    • Создает случайный вектор инициализации, необходимый для первого раунда шифрования.
    • Извлекает хэши паролей Kerberos из атрибутов supplementalCredentials.
    • Проверяет настройку SyncNtlmPasswords конфигурации безопасности доменных служб Azure AD.
      • Если эта настройка отключена, создает случайный хэш NTLM с высокой энтропией (отличный от пароля пользователя). Затем этот хэш объединяется с точными хэшами паролей Kerberos из атрибута supplementalCrendetials в одну структуру данных.
      • Если настройка включена, значение атрибута unicodePwd объединяется с извлеченными хэшами паролей Kerberos из атрибута supplementalCredentials в одну структуру данных.
    • Шифрует одну структуру данных с использованием симметричного ключа AES.
    • Шифрует симметричный ключ AES с помощью открытого ключа доменных служб Azure AD арендатора.
  5. Azure AD Connect передает зашифрованный симметричный ключ AES, зашифрованную структуру данных с хэшами паролей и вектор инициализации в Azure AD.
  6. Azure AD сохраняет зашифрованный симметричный ключ AES, зашифрованную структуру данных и вектор инициализации для пользователя.
  7. Azure AD отправляет зашифрованный симметричный ключ AES, зашифрованную структуру данных и вектор инициализации с помощью внутреннего механизма синхронизации в рамках зашифрованного HTTP-сеанса доменным службам Azure AD.
  8. Доменные службы Azure AD получают закрытый ключ для экземпляра арендатора из хранилища ключей Azure.
  9. Для каждого зашифрованного набора данных (представляющего изменение пароля одного пользователя) доменные службы Azure AD выполняют следующие действия:
    • Используют свой закрытый ключ для расшифровки симметричного ключа AES.
    • Используют симметричный ключ AES с вектором инициализации для расшифровки зашифрованной структуры данных, содержащей хэши паролей.
    • Записывают хэши паролей Kerberos, которые они получают на контроллер домена доменных служб Azure AD. Хэши сохраняются в атрибуте supplementalCredentials объекта user, который шифруется в открытом ключе контроллера домена доменных служб Azure AD.
    • Доменные службы Azure AD записывают хэш паролей NTLM, полученный контроллером домена доменных служб Azure AD. Хэши сохраняются в атрибуте unicodePwd объекта user, который шифруется в открытом ключе контроллера домена доменных служб Azure Active Directory.

Включение синхронизации хэшированных паролей

Важно!

Если выполняется переход с AD FS (или других технологий федерации) на синхронизацию хэшей паролей, мы настоятельно рекомендуем следовать нашему подробному руководству по развертыванию, опубликованному здесь.

Если для установки Azure AD Connect вы используете стандартные параметры, синхронизация хэшированных паролей включается по умолчанию. Дополнительные сведения см. в статье Приступая к работе с Azure AD Connect с использованием стандартных параметров.

Если для установки Azure AD Connect вы используете пользовательские параметры, синхронизацию хэшированных паролей можно настроить на странице входа в систему. Дополнительные сведения см. в статье Выборочная установка Azure AD Connect.

Включение синхронизации хэшированных паролей

Синхронизация хэшированных паролей и FIPS

Если сервер блокируется в соответствии с федеральным стандартом обработки информации (FIPS), схема MD5 отключается.

Чтобы включить MD5 для синхронизации хэшированных паролей, выполните следующие действия.

  1. Перейдите в папку %programfiles%\Microsoft Azure AD Sync\Bin.
  2. Откройте файл miiserver.exe.config.
  3. Перейдите к узлу конфигурации или среды выполнения (в конце файла конфигурации).
  4. Добавьте следующий узел: <enforceFIPSPolicy enabled="false"/>
  5. Сохраните изменения.
  6. Чтобы изменения вступили в силу, выполните перезагрузку.

Этот фрагмент должен выглядеть примерно так:

    <configuration>
        <runtime>
            <enforceFIPSPolicy enabled="false"/>
        </runtime>
    </configuration>

Дополнительные сведения о безопасности и FIPS см. в записи блога AAD Password Sync, Encryption and FIPS compliance (Синхронизация паролей, шифрование и соответствие FIPS в AAD).

Устранение неполадок при синхронизации хэшированных паролей

Если вы столкнетесь с проблемами при синхронизации хэшированных паролей, воспользуйтесь рекомендациями из статьи Устранение неполадок синхронизации хэшированных паролей в службе синхронизации Azure AD Connect.

Дальнейшие действия