Backdoor в Active Directory

В свое время, менее года назад, на хабре мелькала публикация с аналогичным заголовком [1]. В ней автор предлагал способ по сокрытию привилегий администратора домена путем использования в качестве контейнера, для размещения "скрытой" учетной записи, служебное хранилище "Program data", в совокупностью с агрессивным разграничением прав с целью предотвращения доступа к "спрятанной" учетной записи. Однако, несмотря на заверения автора, обнаружение "скрытой" учетной записи и ее последующее удаление можно было выполнить всего в несколько кликов.

Т.е. предложенный подход на практике будет не работоспособен. Но может быть существует более подходящая альтернатива этому способу (в том числе без использования руткитов на контроллерах домена:))?

Как говорил один известный писатель детективных романов:
- Где лучше всего спрятать лист?
- В осеннем лесу!
- Где лучше всего спрятать камень?
- На морском берегу!
- А где лучше всего спрятать труп?
- На поле сражения.

Проводя параллель с каталогом домена можно придерживаться следующей стратегии:

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

- Идентификатор backdoor не должен непосредственно являться членом групп с расширенными привилегиями в домене. Для этого лучше использовать возможности контроля доступа, как показано на картинке ниже.


- Не совсем разумно "светить" идентификатор backdoor пользователя даже в списках контроля доступа у групп с расширенными привилегиями в домене. Более разумный подход – расширение привилегий группам безопасности, которые уже являются участниками ACLs в списках контроля доступа у групп с расширенными привилегиями в домене. Для этих целей удачно подходит группа "Builtin\Terminal Server License Servers":


Итак, для эффективного создания бэкдора, по описанному сценарию выше, требуется:

1. Завести неприметного пользователя;
2. Разрешить этому пользователю изменять список участников группы "Builtin\Terminal Server License Servers";
3. Разрешить группе "Builtin\Terminal Server License Servers" изменять список участников группы, например, "Domain Admins".

Тут стоит отметить небольшой нюанс. Просто так изменить список контроля доступа для группы "Domain Admins" не получится. Дело в том, что в архитектуре Active Directory предусмотрена защита списков контроля доступа наиболее чувствительных объектов (adminSDHolder, [2]), в их числе:

- Enterprise Admins
- Schema Admins
- Domain Admins
- Administrators
- Domain Controllers
- Cert Publishers
- Backup Operators
- Replicator Server Operators
- Account Operators
- Print Operators

Для того чтобы вносимые изменения в список контроля доступа перечисленных выше групп не перезаписывались каждый час, требуется либо изменить шаблонный список контроля доступа на объекте "CN=AdminSDHolder,CN=System, <defaultNamingContext>", либо установить атрибут "adminCount" в ноль для требуемого объекта [3]. Перезаписать шаблонный список контроля доступа видится мне более перспективным т.к. не каждый администратор знаком с подобным "защитным" механизмом Active Directory.

Для автоматизации "закладки" в Active Directory может использоваться сценарий, который приведен ниже.


Стоит лишь добавить, что, несмотря на свою простоту, обнаружить подобную закладку без средств непрерывного автоматизированного контроля довольно сложно. А развивая идею можно подумать в сторону и более сложных закладок, например, разрешить пользователю управлять групповыми политиками для OU, содержащего контроллеры домена и т.п.

5 комментариев :

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

    или я не прав?

    ОтветитьУдалить
  2. да, верно! Причем мониторинг списков контроля доступа не только у групп, но и у критических объектов. Например, список контроля доступа для редактирования GPO у сайтов.

    К слову, обладая эталонными списками контроля доступа (default после установки домена, установки exchange, etc) можно разобраться со всеми изменениями ACL, включая делегирование полномочий.

    ОтветитьУдалить
  3. Вот для этих целей у нас и придумали КУБ:
    http://www.securitycode.ru/products/other/cube/

    ОтветитьУдалить
  4. "против лома нет приема, если нет другого лома" (с)

    ОтветитьУдалить