Active Directory 2012 LDAP Служба интеграции Имя участника Запись исчезает?

8

Создание службы Python для запроса атрибутов AD

Я интегрирую нашу AD с веб-сервисами, работающими под управлением Python на Linux, используя Python-LDAP через SASL (DIGEST-MD5) для запроса пользовательских атрибутов AD 2012 (отдел, отдел, добавочный номер телефона, электронная почта и т. Д.). После того, как я определил особенности, специфичные для моей службы, в AD 2003, я начал сталкиваться с ошибкой SPN в нашей новой AD 2012, из-за того, что digest-uri не совпадает ни с одним SPN на сервере. Я перекрестно ссылался на список SPN для обоих серверов, и они содержат идентичные аналоги друг друга.

Ошибка: digest-uri не соответствует ни одному имени участника-службы LDAP, зарегистрированному для этого сервера.

Исправление?

Это было исправлено с помощью:

setspn -A ldap/<Domain_Name> <Computer_Name>

Обратите внимание, что создание учетной записи службы не исправило мою ошибку имени участника-службы даже при выполнении следующей команды:

setspn -A ldap/<Domain_Name> <Domain_Name>/<Service_Account_Name>

simple_bind_s () не требует SPN, sasl_interactive_bind_s () требует SPN

Только добавление имени участника-службы в список имен SPN локальной машины работало для моей службы Python-LDAP с использованием sasl_interactive_bind_s (). Я также должен отметить, что шаг SPN можно пропустить, если я использую simple_bind_s (), но этот метод отправляет учетные данные в открытом тексте, что недопустимо.

Однако я заметил, что запись остается в списке SPN только около минуты, прежде чем исчезнуть? Когда я запускаю команду setspn, ошибок нет, журналы событий полностью пусты, нигде нет дубликатов, проверено с помощью поиска -F по всему лесу на базе dn и ничего. Я добавил и попытался повторно добавить, удалить и переместить имя участника-службы из объекта в объект, чтобы убедиться, что он нигде не скрывается, но когда я добавляю объект куда-либо, а затем пытаюсь повторно добавить его, уведомляет меня о дубликате. Поэтому я очень уверен, что где-то не спрятан дубликат.

Взломать

На данный момент у меня есть запланированное задание, повторно запускающее команду, чтобы сохранить запись в списке, чтобы моя служба работала точно под названием «SPN Hack».

cmd.exe /C "setspn -A ldap/<Domain_Name> <Computer_Name>"

пока я не смогу выяснить, почему SPN удаляется из списка.

Я не являюсь основным администратором этой конкретной AD, может ли администратор запустить службу, которая синхронизирует SPN с другой службой в AD, и не знать об этом? Меня зовут Веб-разработчик, но не для оправдания, а для объяснения моего невежества в вопросах Active Directory. Мне сказали сделать AD основной пользовательской БД, и я много читаю, но я не могу найти нигде, где у людей бывают проблемы с перезаписью или очисткой имени участника-службы, и ни один из Администраторы хорошо знакомы с SPN вне записей SQLServer.

Зачем мне взломать?

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


Обновить

После разговора с системным администратором он согласился, что создание службы поверх хака не является решением, поэтому он дал мне разрешение развернуть локальную службу с шифрованием конечной точки, которую я могу использовать для своих целей, результат тот же , Я буду следить за тем, что приводит к очистке SPN. Локальное связывание не является проблемой при использовании Python-LDAP, и локальный сервис уже запущен и работает только через час или около того. К сожалению, я по сути обертываю функциональность, встроенную в LDAP, но мы делаем то, что должны.

Melignus
источник
Ну, это загадка. SPN обычно не исчезают сами по себе. Держу пари, что приложение удаляет его. Python-Ldap автоматически регистрирует свои собственные SPN? Если так, то делает ли это правильно? Кроме того, вам может потребоваться настроить аудит доступа к объектам на контроллере домена, чтобы попытаться определить, кто отвечает за удаление SPN каждые пару минут.
Райан Райс
1
Python-LDAP не регистрирует свой собственный SPN. Я проклял все свои сервисы тестирования и сети, так как он выглядит как стандартный поток входа в систему, а теперь вопрос о том, будет ли первоначальный запрос регистрировать этот запрос на стороне AD, что, как кажется, приведет к поражению цели SPN. на первом месте? Я знаю, что связывание открытого текста работает без spn, только запрос sasl не выполняется без записи SPN в AD ... Я начал искать службы, которые могли бы управлять SPN снаружи, почти как вайп и заменить сценарий работает где-то ...
Melignus
Эй, вы нашли, почему ваш SPN исчезал? Похоже, у нас такое же поведение через несколько часов ...
Дэвид

Ответы:

6

Это действительно интересное (и раздражающее) явление, и я настаиваю на том, чтобы мы узнали, что здесь происходит.

К счастью, с 2008 года в Windows Server есть несколько тонких политик аудита, и мы можем использовать аудит, чтобы отследить, кто это сделал. Для этого нам нужно:

  1. Узнайте, где происходит модификация SPN
  2. Включить аудит изменений объекта AD DS
  3. Установить аудит ACE на объекте
  4. Воспроизведите ошибку
  5. Проверьте журнал безопасности на неисправном контроллере домена.

Узнайте, где происходит модификация SPN:

Откройте командную строку с повышенными привилегиями на контроллере домена и введите следующую команду:

repadmin /showobjmeta . "CN=computerAccount,DC=domain,DC=local"|findstr servicePricipalName

Вывод будет содержать имя контроллера домена, который изначально записал текущую версию значения атрибутов servicePrincipalName: Репадмин из босса

Включить аудит изменений объекта AD DS:

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

Откройте консоль управления групповой политикой ( gpmc.msc), найдите Default Domain Controllers Policyи измените ее.

  1. Перейти к Computer Configuration -> Windows Settings -> Security Settings
  2. Выберите и разверните Local Policies -> Security Options
  3. Убедитесь, что для параметра Аудит: Принудительно настроить параметры подкатегории политики аудита ... Включено Принудительный аудит подкатегорий, где классические категории уже применяются
  4. Выберите и разверните Advanced Audit Policy -> Audit Policies -> DS Access
  5. Убедитесь, что Audit Directory Service Changes установлен как минимум на Успех Аудит службы каталогов изменений

Установите аудит ACE на объекте:

Откройте Active Directory - пользователи и компьютеры ( dsa.msc) и проверьте параметр «Расширенные функции» в меню «Вид».
Перейдите к объекту учетной записи компьютера, щелкните его правой кнопкой мыши и выберите «Свойства». Выберите вкладку « Безопасность » и нажмите кнопку «Дополнительно».

В приглашении выберите вкладку Аудит и убедитесь, что «Записать все свойства» проверяется для всех . Если нет или сомневаетесь, добавьте новую запись:

  1. Нажмите Добавить .
  2. Введите «Все» в качестве целевого участника
  3. Выберите «Успех» в качестве типа
  4. Прокрутите вниз по свойствам и установите флажок «Написать servicePrincipalName»
  5. Нажмите OK, чтобы добавить запись и выйти из ADUC

( Если вам лень, вы можете просто выбрать «Написать все свойства» )

Воспроизведите ошибку

Из вашего вопроса кажется, что SPN get удаляется каждую минуту или около того, так что это, вероятно, самый простой шаг. Возьмите 1 минутный урок музыки в то же время.

Проверьте журнал безопасности на неисправном контроллере домена.

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

  1. Откройте Event Viewer и перейдите к Windows Logs -> Security
  2. На правой панели выберите Filter Current Log.
  3. В поле ввода « <All Event IDs>» введите 5136 (это идентификатор события для модификации объекта каталога)

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

Определите «Субъекта», ответственного за изменение, и посмотрите, откуда он произошел. Убей этот процесс / машину / аккаунт огнем!

Если объект идентифицируется как SYSTEM, ANONYMOUS LOGONили так же общее описание, мы имеем дело с внутренней обработкой на самом контроллере домена, и мы должны сломать некоторые NTDS ведения журнала диагностики , чтобы выяснить , что происходит. Пожалуйста, обновите вопрос, если это так

Матиас Р. Ессен
источник
Я видел ту же самую проблему в моей попытке исправить ту же проблему SPN LDAP. Я последовал вашим предложениям, но вижу только мои (успешные) модификации SPN и никаких записей об их последующем удалении.
Гриша Левит