Представьте, что атакующий получил доступ к одному из Windows-хостов в корпоративной сети. Чаще всего следующий шаг – попытка скомпрометировать другие машины, используя добытые в системе учётные данные и прочие секреты.
В наши дни большинство техник сбора секретов детектируются и блокируются EDR-системами. Однако при решении задач по анализу защищённости и редтимингу бывает полезно добыть учётные данные, не привлекая внимания «синих».
Наш коллега Хайдар Кабибо нашёл простой метод, позволяющий извлекать секреты из реестра Windows на лету – без записи на диск, доступа к LSASS, срабатывания EDR и даже без привилегий SYSTEM, используя легитимные функции самой Windows.
Общая идея техники:
– За хранение секретов в Windows отвечает подсистема Local Security Authority, работающая через процесс lsass.exe. Подсистема использует две базы данных в памяти, которым соответствуют кусты реестра SAM и SECURITY. В первой базе хранятся пользовательские учётные данные, во второй – другие секреты (кэшированные учетные данные домена, различные ключи и т.д).
– Каждый куст защищен списком контроля доступа (DACL), который требует привилегий SYSTEM для доступа по стандартным API-интерфейсам. Но оказывается, можно прочитать значения этих кустов с более низкими правами (правами локального администратора), если работать с бэкапами кустов реестра: включение привилегии SeBackupPrivilege отменяет проверки безопасности на основе ACL.
– Доступ получили, но как пройти под радаром? EDR-решение детектирует подозрительную активность в реестре, используя callback-процедуры на уровне ядра. Но типичная Винда производит тысячи операций с реестром каждую минуту, и полный мониторинг таких событий очень затормозил бы ваши машины. Поэтому EDR регистрирует лишь самые "интересные" вызовы.
– В частности, попытка прочитать значения из SAM или SECURITY будет отслежена по использованию таких типичных API, как RegQueryValueExW или NtQueryValueKey. Чтобы обойти эту проверку, достаточно найти более редкую API-функцию для чтения, которую не отслеживает EDR. И такие API существуют. Например, RegQueryMultipleValuesW.
– Это ещё не всё! Значения, прочитанные из SAM и SECURITY, зашифрованы. Последний шаг: для расшифровки надо восстановить ключи, используя данные из куста SYSTEM.
Как защищаться:
Необходимо добавить к детектирующей логике защитных решений проверку запуска RegQueryMultipleValuesW.
Подробности техники читайте в блоге Хайдара. Ещё больше подробностей – в видеозаписи его доклада на OFFZONE.
В наши дни большинство техник сбора секретов детектируются и блокируются EDR-системами. Однако при решении задач по анализу защищённости и редтимингу бывает полезно добыть учётные данные, не привлекая внимания «синих».
Наш коллега Хайдар Кабибо нашёл простой метод, позволяющий извлекать секреты из реестра Windows на лету – без записи на диск, доступа к LSASS, срабатывания EDR и даже без привилегий SYSTEM, используя легитимные функции самой Windows.
Общая идея техники:
– За хранение секретов в Windows отвечает подсистема Local Security Authority, работающая через процесс lsass.exe. Подсистема использует две базы данных в памяти, которым соответствуют кусты реестра SAM и SECURITY. В первой базе хранятся пользовательские учётные данные, во второй – другие секреты (кэшированные учетные данные домена, различные ключи и т.д).
– Каждый куст защищен списком контроля доступа (DACL), который требует привилегий SYSTEM для доступа по стандартным API-интерфейсам. Но оказывается, можно прочитать значения этих кустов с более низкими правами (правами локального администратора), если работать с бэкапами кустов реестра: включение привилегии SeBackupPrivilege отменяет проверки безопасности на основе ACL.
– Доступ получили, но как пройти под радаром? EDR-решение детектирует подозрительную активность в реестре, используя callback-процедуры на уровне ядра. Но типичная Винда производит тысячи операций с реестром каждую минуту, и полный мониторинг таких событий очень затормозил бы ваши машины. Поэтому EDR регистрирует лишь самые "интересные" вызовы.
– В частности, попытка прочитать значения из SAM или SECURITY будет отслежена по использованию таких типичных API, как RegQueryValueExW или NtQueryValueKey. Чтобы обойти эту проверку, достаточно найти более редкую API-функцию для чтения, которую не отслеживает EDR. И такие API существуют. Например, RegQueryMultipleValuesW.
– Это ещё не всё! Значения, прочитанные из SAM и SECURITY, зашифрованы. Последний шаг: для расшифровки надо восстановить ключи, используя данные из куста SYSTEM.
Как защищаться:
Необходимо добавить к детектирующей логике защитных решений проверку запуска RegQueryMultipleValuesW.
Подробности техники читайте в блоге Хайдара. Ещё больше подробностей – в видеозаписи его доклада на OFFZONE.