Zerologon
CVE-2020-1472, или Zerologon, позволяет атакующему скомпрометировать учетную запись машинного аккаунта контроллера домена и получить доступ к содержимому всей базы Active Directory. Она получила звание одной из самых опасных уязвимостей, обнаруженных за последние годы. Для эксплуатации достаточно наличия сетевой связности с контроллером домена организации.
Zerologon — уязвимость в протоколе шифрования, который использует служба Netlogon. Протокол позволяет компьютерам проходить аутентификацию на контроллере домена и обновлять пароль своего аккаунта в Active Directory. Именно эта особенность делает Zerologon опасной. В частности, уязвимость позволяет атакующему выдать себя за контроллер домена и изменить его пароль. Злоумышленник получает доступ к контроллеру домена c наивысшими привилегиями, а следовательно — и к корпоративной сети. После изменения пароля атакующий может использовать учетную запись контроллера для проведения дальнейших атак, таких как DCSync, чтобы получить учетные записи Active Directory через репликацию.
Zerologon вызвана недостатком в схеме криптографической аутентификации, которую использует Netlogon Remote Protocol (MS-NRPC). Рукопожатие и аутентификация MS-NRPC предполагают использование режима AES-CFB8 (с 8-битным режимом обратной связи по шифротексту). Это вариант блочного шифра AES, который предназначен для работы с блоками входных данных по 8 байт вместо обычных 16 байт (128-бит).
Как обнаружилось, применение шифрования AES-CFB8 к состоящему из одних нулей открытому тексту приведет к такому же состоящему из одних нулей зашифрованному тексту. Это происходит из-за ошибки реализации для 1 из 256 ключей.
Согласно техническому документу Secura, процесс эксплуатации Zerologon состоит из трех этапов.
- Отправка нулевых байтов. Вместо отправки восьми случайных байтов атакующий отправляет 8 нулевых байтов. Злоумышленник повторяет отправку таких сообщений, пока сервер успешно не примет одно из них, и тем самым обходит процесс аутентификации. В случае с Zerologon для успешного соединения с сервером требуется в среднем 256 попыток отправки сообщения ClientChallenge, состоящего из одних нулей.
- Отключение механизма RPC signing and sealing. MS-NRPC использует механизм RPC signing and sealing для шифрования транспортного уровня. Обычно шифрование — обязательный процесс при передаче данных, но в MS-NRPC этот механизм не является обязательным и управляется клиентом. Сервер не будет отказывать в установлении соединения клиентам, которые не запрашивают использование шифрования. Это означает, что вы можете просто отключить шифрование в заголовке сообщения. Собственно, вторая стадия и заключается в отключении механизма RPC signing and sealing, чтобы сообщения отправлялись в открытом виде и атакующий мог использовать методы протокола MS-NRPC.
- Изменение пароля учетной записи. Третья стадия эксплуатации уязвимости Zerologon заключается в изменении пароля для учетной записи контроллера домена, соединение от имени которого было установлено ранее. Атакующие при помощи метода NetrServerPasswordSet в MS-NRPC могут изменить пароль учетной записи компьютера. Самый простой способ использования этого метода заключается в удалении текущего пароля или, другими словами, установке пароля в пустое значение. Также возможно изменить пароль, просто отправив запрос с предпочтительным новым паролем. После смены пароля атакующие могут использовать учетную запись контроллера домена для развития атаки, например, как упоминалось ранее, выполнить репликацию базы данных Active Directory.
Первый PoC после успешного установления соединения немедленно завершит работу и не будет выполнять никаких действий через Netlogon.
Вот еще несколько версий эксплойта для разных ситуаций:
https://github.com/nccgroup/nccfsas/tree/main/Tools/SharpZeroLogon
https://github.com/dirkjanm/CVE-2020-1472
В Metasploit тоже есть модуль для эксплуатации этой уязвимости:
Обнаружение артефактов, оставленных эксплоитами
Первая стадия процесса эксплуатации — это фактически брутфорс. Эксплоит множество раз пытается аутентифицироваться с помощью Netlogon на контроллере домена с сообщением ClientChallenge, состоящим из 8 нулевых байт. Множественные неуспешные попытки аутентификации приводят к генерации события 5805 на контроллере домена.