Кратко разбираем Zerologon на практике и смотрим его артефакты

Уязвимость CVE-2020–1472 (ZeroLogon) позволяет неаутентифицированному атакующему удаленно получить права администратора домена. За счет ошибки в реализации протокола шифрования AES-CFB8 в Netlogon Remote Protocol (MS-NRPC) атакующий, имеющий доступ по сети к контроллеру домена, может эскалировать свои привилегии и изменить пароль учетной записи контроллера домена в AD. После этого атакующий может авторизоваться на DC с правами SYSTEM и получить полный доступ к базе Active Directory (сбросить пароли администраторов домена, или любые другие действия в AD).

Теория

Для реализации уязвимости Zerologon атакующему нужно установить соединение через Netlogon (используются порты RPC локатора TCP/135, динамический диапазон RPC и протокол SMB по порту TCP/445) с помощью определенной последовательности, начинающейся с нулей. Уязвимость в Netlogon позволяет выдать себя за легитимный компьютер домена, а эскалация привилегий позволяет сменить пароль аккаунта DC.

В контексте выполнения атаки, аутентификация происходит по протоколу RPC_NETLOGON и представляет собой следующий алгоритм:

  1. Запрос NetrServerReqChallenge с Client Challenge: 0000000000000000 к компьютеру DC_TEST

  2. Ответ NetrServerReqChallenge с Server Challenge от DC_TEST

  3. Запрос NetrServerAuthenticate3 с Client Crenedtials: 0000000000000000 к DC_TEST

  4. Ответ NetrServerAuthenticate3 с Return Code: STATUS_SUCCESS или STATUS_ACCESS_DENIED

e2ddef3595b120ba9029341157b8f53b.png

В конечном счете, таких итераций будет ≤ 256, одна из которых позволит создать шифр-текст, состоящий только их одних нулей.

После успешного прохождения аутентификации (Return Code: STATUS_SUCCESS), меняется пароль, алгоритм смены которого выглядит следующим образом:

  1. Запрос NetrServerPasswordSet2 c желаемым паролем

  2. Ответ NetrServerPasswordSet2 с уведомлением об успешном изменении пароля

7a56246c666c7dae3a43726b77b52086.png

Если подытожить, то общая схема атаки выглядит так:

5c6f49f947a744ab99426c40ce84325e.png

Кстати, поскольку Timestamp = 0, то в ответе на аутентификацию получим 1 января 1970 года:

e110b854c7a5fa7c2538168c2a7e4f05.png

Практика

Есть 2 способа реализации атаки: локальный и удаленный.

В качестве локального вектора, используется mimikatz, а в качестве удаленного- общеизвестные эксплоиты.

Локальная атака

Итак, для проведения атаки локально, воспользуемся mimikatz, в функционал которого был добавлен модуль zerologon.

lsadump::zerologon /target:dc_test.test.local /account:dc_test$ /exploit /null

33a81860adc8fb27be09f06748ee57e6.png

Отлично, пароль для УЗ домен контроллера сброшен. Теперь, например, можно провести атаку DC SYNC:

lsadump::dcsync /domain:test.local /dc:dc_test.test.local /user:krbtgt /authuser:dc_test$ /authpassword:"”

fab2247694c054d9d1b3464b69891fbd.png

NT хэш krbtgt успешно получен.

Удаленная атака

В качестве эксплоита, использовал реализацию от riskense: https://github.com/risksense/zerologon

При использования именно данного эксплойта, достаточно лишь данной команды:

python3 set_empty_pw.py DC_TEST 192.168.1.1

6734d077680a32e0502aa304889a9b4f.png

Также проведем атаку DC SYNC, но в этот раз с использованием хэша:

impacket-secretsdump -hashes :31d6cfe0d16ae931b73c59d7e0c089c0 'TEST/DC_TEST$@192.168.1.1'

b785a9debf2485a66bd04298b97975b4.png

Обратите внимание, что хэш пустого пароля действительно совпадает с хэшом УЗ компьютера.

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

Артефакты

Трафик

Отличительной особенностью выполненной атаки служит большое количество трафика с попытками аутентификации по протоколу RPC_NETLOGON и однотипным содержанием:

0195a217ea2b766a29c2f6803b89eeda.png4bc47f2b11acb8a9022085308ae9ee18.png7457a61c252cb52d34be2da20fe90a51.png73613a1169b7473af706a6816aad6912.png3a7529a63d080cda0c3853acda2c1810.png

В конечном счете, увидим STATUS_SUCCESS

6723103f5fc1953eb0e5d4c88f0876c2.png2ad69e37fbc737f258e6db08b368ac3c.png833e789ffaac7eacdce9d00d7061d100.png8be9d40e2aa0020672c873e099fc4b76.png8117469ab3a8ce9003ffed8bae7e08cb.png89d859874d30ee3907fb7007192097c9.png

Поскольку наш пароль- пустая строка, то NT хэш пароля будет принимать значение :31d6cfe0d16ae931b73c59d7e0c089c0

4b5bf359219d245fba3b82287798b841.png475807fc6aeb0bae43a577856862f7a6.png

События Windows

Основными артефактами проведенной атаки из журнала событий Windows служат:

  • 5805 — _Не удалось выполнить проверку подлинности для сеанса компьютера kali (в случае удалено проведенной атаки). Произошла следующая ошибка: Отказано в доступе.

  • 5723 — Не удалось установить сеанс с компьютера «mimikatz» (в случае локальной атаки), так как указанная им доверительная учетная запись «some_account» отсутствует в базе данных.

  • 4742 — Была изменена учетная запись компьютера. Здесь стоит учитывать AccountName (учетка домен контроллера).

  • 5823 — Система успешно сменила свой пароль на контроллере домена. Здесь артефактом является хост контроллера домена в параметре Computer.

P.S. Если вы тоже любите сначала делать, а потом думать, то сбросить пароль от УЗ хоста можно командой Reset-ComputerMachinePassword:)

© Habrahabr.ru