Перевод статьи подготовлен специально для студентов курса «Реверс-инжиниринг».
Исследователи Dell SecureWorks Counter Threat Unit (CTU) обнаружили вредоносное ПО, обходящее проверку подлинности в системах Active Directory (AD), в которых реализована однофакторная (только пароль) аутентификация. Злоумышленники могут использовать пароль по своему выбору для аутентификации в качестве любого пользователя. Эта вредоносная программа получила название «Skeleton Key» (универсальный ключ).
Исследователи CTU обнаружили Skeleton Key в клиентской сети, которая использовала однофакторную аутентификацию для доступа к веб-почте и VPN, предоставляя злоумышленникам беспрепятственный доступ к службам удаленного доступа. Skeleton Key развертывается как патч в памяти на контроллерах домена AD жертвы, чтобы позволить злоумышленнику аутентифицироваться в качестве любого пользователя, в то время как легитимные пользователи продолжают аутентификацию как обычно. Обход аутентификации Skeleton Key также позволяет злоумышленникам с физическим доступом залогиниться и разблокировать системы, которые аутентифицируют пользователей на скомпрометированных контроллерах домена AD.
Единственным известным на момент публикации образцам Skeleton Key не хватает персистентности — они должны быть повторно развернуты при перезапуске контроллера домена. Исследователи CTU подозревают, что злоумышленники могут идентифицировать перезапуск только на основании их неспособности успешно пройти аутентификацию, поскольку на контроллерах домена не было обнаружено никакого другого вредоносного ПО. В период от восьми часов до восьми дней от перезапуска злоумышленники использовали другое вредоносное ПО для удаленного доступа, уже развернутое в сети жертвы, для повторного развертывания Skeleton Key на контроллерах домена.
Для развертывания Skeleton Key требуются учетные данные администратора домена. Исследователи CTU наблюдали за тем, как злоумышленники развертывают Skeleton Key с использованием учетных данных, украденных с критически важных серверов, рабочих станций администраторов и целевых контроллеров домена.
Первоначально исследователи CTU наблюдали в скомпрометированной сети образец Skeleton Key с именем ole64.dll (см. Таблицу 1).
Таблица 1. Образец Skeleton Key
При изучении
Таблица 2. Образец Skeleton Key
Злоумышленники использовали для развертывания Skeleton Key как 64-битного DLL-файла следующий алгоритм:
Исследователи CTU обнаружили шаблон внедренного пароля, который предполагает, что группа злоумышленников развернула Skeleton Key в нескольких организациях.
Использование PsExec может быть обнаружено в среде Windows путем оповещения о событиях Windows, сгенерированных утилитой. Следующие идентификаторы событий, наблюдаемые на целевых контроллерах домена, регистрируют средство PsExec, устанавливающее свою службу, запускающее службу и останавливающее службу. Эти события создаются каждый раз, когда используется PsExec, поэтому требуется дополнительный анализ событий, чтобы определить, являются ли они вредоносными или легитимными:
В качестве Skeleton Key в запущенном состоянии вам нужно выполнить следующие задачи:
Для исправления каждой функции:
После патчинга злоумышленник может использовать пароль Skeleton Key, настроенный во время развертывания, чтобы войти в систему как любой пользователь домена. Легитимные пользователи по-прежнему могут войти в систему, используя свои собственные пароли. Этот обход аутентификации применяется ко всем службам, использующим однофакторную аутентификацию AD, таким как веб-почта и VPN, а также позволяет злоумышленнику с физическим доступом к скомпрометированной системе разблокировать компьютер, введя внедренный пароль на клавиатуре.
Вредоносный код Skeleton Key не передает сетевой трафик, что делает обнаружение на основе сети неэффективным. Тем не менее, это вредоносное ПО было замешано в проблемах репликации домена, которые могут указывать на заражение. Вскоре после каждого развертывания вредоносного кода Skeleton Key, обнаруженного исследователями CTU, контроллеры домена сталкивались с проблемами репликации, которые не могли быть объяснены или устранены службой поддержки Microsoft, и в конечном итоге требовалась перезагрузка для их устранения. Эти перезагрузки удалили обход аутентификации Skeleton Key, потому что у вредоносной программы нет механизма персистентности. На рис. 1 показана временная шкала этих перезагрузок, а также последующая кража паролей злоумышленниками, боковое расширение и развертывание Skeleton Key. Передислокации обычно происходили в течение нескольких часов или нескольких дней после перезагрузки.
Рисунок 1. Взаимосвязь развертываний и перезагрузок, наблюдаемая исследователями CTU, апрель — июль 2014 г. (Источник: Dell SecureWorks)
Вредоносный код Skeleton Key обходит аутентификацию и не генерирует сетевой трафик. В результате сетевые системы обнаружения и предотвращения вторжений (IDS/IPS) не будут обнаруживать эту угрозу. Тем не менее, исследователи CTU записали сигнатуры YARA в Приложении A, чтобы обнаружить DLL Skeleton Key и код, который он вводит в память процесса LSASS.
Индикаторы угроз в Таблице 3 можно использовать для обнаружения активности, связанной с вредоносным ПО Skeleton Key.
Таблица 3. Индикаторы для Skeleton Key.
Исследовательская группа CTU рекомендует организациям внедрить следующие средства защиты от Skeleton Key:
Следующие сигнатуры YARA обнаруживают наличие в системе Skeleton Key путем сканирования либо подозрительного файла, либо дампа памяти контроллеров домена Active Directory, предположительно содержащих Skeleton Key.
Краткое содержание
Исследователи Dell SecureWorks Counter Threat Unit (CTU) обнаружили вредоносное ПО, обходящее проверку подлинности в системах Active Directory (AD), в которых реализована однофакторная (только пароль) аутентификация. Злоумышленники могут использовать пароль по своему выбору для аутентификации в качестве любого пользователя. Эта вредоносная программа получила название «Skeleton Key» (универсальный ключ).
Исследователи CTU обнаружили Skeleton Key в клиентской сети, которая использовала однофакторную аутентификацию для доступа к веб-почте и VPN, предоставляя злоумышленникам беспрепятственный доступ к службам удаленного доступа. Skeleton Key развертывается как патч в памяти на контроллерах домена AD жертвы, чтобы позволить злоумышленнику аутентифицироваться в качестве любого пользователя, в то время как легитимные пользователи продолжают аутентификацию как обычно. Обход аутентификации Skeleton Key также позволяет злоумышленникам с физическим доступом залогиниться и разблокировать системы, которые аутентифицируют пользователей на скомпрометированных контроллерах домена AD.
Единственным известным на момент публикации образцам Skeleton Key не хватает персистентности — они должны быть повторно развернуты при перезапуске контроллера домена. Исследователи CTU подозревают, что злоумышленники могут идентифицировать перезапуск только на основании их неспособности успешно пройти аутентификацию, поскольку на контроллерах домена не было обнаружено никакого другого вредоносного ПО. В период от восьми часов до восьми дней от перезапуска злоумышленники использовали другое вредоносное ПО для удаленного доступа, уже развернутое в сети жертвы, для повторного развертывания Skeleton Key на контроллерах домена.
Для развертывания Skeleton Key требуются учетные данные администратора домена. Исследователи CTU наблюдали за тем, как злоумышленники развертывают Skeleton Key с использованием учетных данных, украденных с критически важных серверов, рабочих станций администраторов и целевых контроллеров домена.
Анализ
Первоначально исследователи CTU наблюдали в скомпрометированной сети образец Skeleton Key с именем ole64.dll (см. Таблицу 1).
атрибут | значение или описание |
имя файла | ole64.dll |
md5 | bf45086e6334f647fda33576e2a05826 |
sha1 | 5083b17ccc50dd0557dfc544f84e2ab55d6acd92 |
время компиляции | 2014-02-19 09:31:29 |
развернут | по мере необходимости (обычно загружается с использованием вредоносного по, а затем удаляется после использования) |
размер файла | 49664 байта |
разделы | .text, .rdata, .data, .pdata, .rsrc, .reloc |
экспорт |
ii (устанавливает патч) uu (удаляет патч) dllentrypoint (точка входа dll по умолчанию) |
Таблица 1. Образец Skeleton Key
ole64.dll
.При изучении
ole64.dll
исследователи CTU обнаружили более старый вариант msuta64.dll
на «промежуточном хосте» в сети жертвы (см. Таблицу 2). Промежуточным хостом является любая система, ранее скомпрометированная вредоносным программным обеспечением удаленного доступа злоумышленников. Этот вариант включает в себя дополнительные операторы отладки, которые позволяют разработчику Skeleton Key наблюдать адреса памяти, участвующие в процессе патчинга.атрибут | значение или описание |
имя файла | msuta64.dll |
md5 | 66da7ed621149975f6e643b4f9886cfd |
sha1 | ad61e8daeeba43e442514b177a1b41ad4b7c6727 |
время компиляции | 2012-09-20 08:07:12 |
развернут | 2013-09-29 07:58:16 |
размер файла | 50688 байт |
разделы | .text, .rdata, .data, .pdata, .rsrc, .reloc |
экспорт |
ii (устанавливает патч) uu (удаляет патч) dllentrypoint (точка входа dll по умолчанию) |
Таблица 2. Образец Skeleton Key
msuta64.dll
.Злоумышленники использовали для развертывания Skeleton Key как 64-битного DLL-файла следующий алгоритм:
- Загрузите файл DLL Skeleton Key в промежуточный каталог на промежуточном хосте в сети жертвы. Исследователи CTU наблюдали три имени файла, связанных с файлом DLL Skeleton Key: ole64.dll, ole.dll и msuta64.dll. Системы Windows включают в себя легитимный файл ole32.dll, но он не связан с этой вредоносной программой.
- Попытайтесь получить доступ к административным ресурсам на контроллерах домена, используя список украденных учетных данных администратора домена.
- Если украденные учетные данные больше не действительны, используйте инструменты кражи паролей для извлечения паролей администратора домена в открытом виде из одного из следующих мест, что предполагает знакомство со средой жертвы:
- память другого доступного сервера в сети жертвы
- рабочие места администраторов домена
- целевые контроллеры домена
- Используйте действительные учетные данные администратора домена, чтобы скопировать DLL-файл Skeleton Key в C:\WINDOWS\system32\ на контроллерах целевого домена.
- Используйте утилиту PsExec для удаленного запуска DLL-файла Skeleton Key на контроллерах целевого домена с помощью команды rundll32. Пароль, выбранный злоумышленником, отформатирован как хэш-пароль NTLM, а не представлен открытым текстом. После развертывания Skeleton Key злоумышленник может аутентифицироваться как любой пользователь, используя настроенный хэш пароля
NTLM: psexec -accepteula \\% TARGET-DC% rundll32 <имя файла DLL> ii <хэш пароля NTLM>
- Удалите файл DLL Skeleton Key из C:\WINDOWS\system32\ на целевых контроллерах домена.
- Удалите файл DLL Skeleton Key из промежуточного каталога на хосте перехода.
- Протестируйте успешное развертывание Skeleton Key с помощью команд «net use» с учетной записью AD и паролем, соответствующим настроенному хешу NTLM.
Исследователи CTU обнаружили шаблон внедренного пароля, который предполагает, что группа злоумышленников развернула Skeleton Key в нескольких организациях.
Использование PsExec может быть обнаружено в среде Windows путем оповещения о событиях Windows, сгенерированных утилитой. Следующие идентификаторы событий, наблюдаемые на целевых контроллерах домена, регистрируют средство PsExec, устанавливающее свою службу, запускающее службу и останавливающее службу. Эти события создаются каждый раз, когда используется PsExec, поэтому требуется дополнительный анализ событий, чтобы определить, являются ли они вредоносными или легитимными:
- Неожиданные события установки службы PSEXESVC (код события 7045) на контроллерах домена AD:
Имя журнала: System
Источник: Service Control Manager
Резюме: в системе установлена служба.
Имя служебного файла:%SystemRoot%\PSEXESVC.exe
- Неожиданные события запуска/остановки службы PSEXESVC (код события 7036) на контроллерах домена AD:
Имя журнала: System
Источник: Service Control Manager
Резюме:- «Сервис PSEXESVC перешел в рабочее состояние».
- «Служба PSEXESVC перешла в остановленное состояние».
В качестве Skeleton Key в запущенном состоянии вам нужно выполнить следующие задачи:
- Проверьте наличие одной из следующих совместимых 64-разрядных версий Windows. Вредоносная программа несовместима с 32-разрядными версиями Windows или версиями Windows Server, начиная с Windows Server 2012 (6.2).
- 6.1 (Windows 2008 R2)
- 6.0 (Windows Server 2008)
- 5.2 (Windows 2003 R2)
- Используйте функцию SeDebugPrivilege, чтобы получить необходимые права администратора для записи в процесс службы подсистемы локальных органов безопасности (LSASS). Этот процесс контролирует функции безопасности для домена AD, включая аутентификацию учетной записи пользователя.
- Перечислите доступные процессы, чтобы получить дескриптор процесса LSASS.
- Получите адреса для связанных с аутентификацией функций, которые будут исправлены:
- CDLocateCSystem — находится в
cryptdll.dll
- SamIRetrieveMultiplePrimaryCredentials — находится в
samsrv.dll
- SamIRetrievePrimaryCredentials — находится в
samsrv.dll
- CDLocateCSystem — находится в
- Выполните настройки для конкретной ОС, используя глобальную переменную, заданную во время проверки совместимости на шаге 1.
- Используйте функцию OpenProcess, чтобы получить дескриптор процесса LSASS.
- Зарезервируйте и выделите необходимое пространство памяти для редактирования и патчинга памяти процесса LSASS.
- Патчинг соответствующих функций на основе операционной системы:
- CDLocateCSystem (все совместимые версии Windows)
- SamIRetrieveMultiplePrimaryCredentials (только Windows 2008 R2 (6.1))
- SamIRetrievePrimaryCredentials (все совместимые версии Windows, кроме Windows 2008 R2 (6.1))
Для исправления каждой функции:
- Вызовите функцию VirtualProtectEx для изменения защиты памяти, чтобы разрешить запись в требуемые выделения памяти (PAGE_EXECUTE_READWRITE, 0x40). Этот шаг позволяет обновлять код функции в памяти.
- Вызовите функцию WriteProcessMemory, чтобы изменить адрес целевой функции так, чтобы он указывал на исправленный код. Это изменение заставляет вызовы целевой функции использовать патч.
- Восстановите исходную защиту памяти, вызвав VirtualProtectEx с оригинальными флагами защиты памяти. Этот шаг нужен, чтобы избежать подозрительного выделения памяти для записи и выполнения.
После патчинга злоумышленник может использовать пароль Skeleton Key, настроенный во время развертывания, чтобы войти в систему как любой пользователь домена. Легитимные пользователи по-прежнему могут войти в систему, используя свои собственные пароли. Этот обход аутентификации применяется ко всем службам, использующим однофакторную аутентификацию AD, таким как веб-почта и VPN, а также позволяет злоумышленнику с физическим доступом к скомпрометированной системе разблокировать компьютер, введя внедренный пароль на клавиатуре.
Возможная связь с проблемами репликации домена
Вредоносный код Skeleton Key не передает сетевой трафик, что делает обнаружение на основе сети неэффективным. Тем не менее, это вредоносное ПО было замешано в проблемах репликации домена, которые могут указывать на заражение. Вскоре после каждого развертывания вредоносного кода Skeleton Key, обнаруженного исследователями CTU, контроллеры домена сталкивались с проблемами репликации, которые не могли быть объяснены или устранены службой поддержки Microsoft, и в конечном итоге требовалась перезагрузка для их устранения. Эти перезагрузки удалили обход аутентификации Skeleton Key, потому что у вредоносной программы нет механизма персистентности. На рис. 1 показана временная шкала этих перезагрузок, а также последующая кража паролей злоумышленниками, боковое расширение и развертывание Skeleton Key. Передислокации обычно происходили в течение нескольких часов или нескольких дней после перезагрузки.
Рисунок 1. Взаимосвязь развертываний и перезагрузок, наблюдаемая исследователями CTU, апрель — июль 2014 г. (Источник: Dell SecureWorks)
Контрмеры
Вредоносный код Skeleton Key обходит аутентификацию и не генерирует сетевой трафик. В результате сетевые системы обнаружения и предотвращения вторжений (IDS/IPS) не будут обнаруживать эту угрозу. Тем не менее, исследователи CTU записали сигнатуры YARA в Приложении A, чтобы обнаружить DLL Skeleton Key и код, который он вводит в память процесса LSASS.
Индикаторы угрозы
Индикаторы угроз в Таблице 3 можно использовать для обнаружения активности, связанной с вредоносным ПО Skeleton Key.
индикатор | тип | контекст |
66da7ed621149975f6e643b4f9886cfd | md5 hash | skeleton key patch msuta64.dll |
ad61e8daeeba43e442514b177a1b41ad4b7c6727 | sha1 hash | skeleton key patch msuta64.dll |
bf45086e6334f647fda33576e2a05826 | md5 hash | skeleton key patch ole64.dl |
5083b17ccc50dd0557dfc544f84e2ab55d6acd92 | sha1 hash | skeleton key patch ole64.dl |
Таблица 3. Индикаторы для Skeleton Key.
Заключение
Исследовательская группа CTU рекомендует организациям внедрить следующие средства защиты от Skeleton Key:
- Многофакторная аутентификация для всех решений удаленного доступа, включая VPN и удаленную электронную почту, не позволяет субъектам угроз обходить однофакторную аутентификацию или аутентификацию с использованием украденных статических учетных данных.
- Журнал аудита создания процессов на рабочих станциях и серверах, включая контроллеры домена AD, может обнаруживать развертывания Skeleton Key. В частности, организации должны искать следующие артефакты:
- Неожиданные процессы PsExec.exe и использование аргумента командной строки PsExec "-accepteula"
- Неожиданные процессы rundll32.exe
- Обрабатывать аргументы, похожие на хеш-коды NTLM (32 символа, содержащие цифры 0-9 и символы A-F)
- Мониторинг событий диспетчера служб Windows на контроллерах домена AD может выявить непредвиденные события установки службы (код события 7045) и события запуска/остановки (код события 7036) для службы PSEXESVC PsExec.
Приложение A — сигнатуры YARA
Следующие сигнатуры YARA обнаруживают наличие в системе Skeleton Key путем сканирования либо подозрительного файла, либо дампа памяти контроллеров домена Active Directory, предположительно содержащих Skeleton Key.
rule skeleton_key_patcher
{
strings:
$target_process = "lsass.exe" wide
$dll1 = "cryptdll.dll"
$dll2 = "samsrv.dll"
$name = "HookDC.dll"
$patched1 = "CDLocateCSystem"
$patched2 = "SamIRetrievePrimaryCredentials"
$patched3 = "SamIRetrieveMultiplePrimaryCredentials"
condition:
all of them
}
rule skeleton_key_injected_code
{
strings:
$injected = { 33 C0 85 C9 0F 95 C0 48 8B 8C 24 40 01 00 00 48 33 CC E8 4D 02 00
00 48 81 C4 58 01 00 00 C3 }
$patch_CDLocateCSystem = { 48 89 5C 24 08 48 89 74 24 10 57 48 83 EC 20 48 8B FA
8B F1 E8 ?? ?? ?? ?? 48 8B D7 8B CE 48 8B D8 FF 50 10 44 8B D8 85 C0 0F 88 A5 00
00 00 48 85 FF 0F 84 9C 00 00 00 83 FE 17 0F 85 93 00 00 00 48 8B 07 48 85 C0 0F
84 84 00 00 00 48 83 BB 48 01 00 00 00 75 73 48 89 83 48 01 00 00 33 D2 }
$patch_SamIRetrievePrimaryCredential = { 48 89 5C 24 08 48 89 6C 24 10 48 89 74
24 18 57 48 83 EC 20 49 8B F9 49 8B F0 48 8B DA 48 8B E9 48 85 D2 74 2A 48 8B 42
08 48 85 C0 74 21 66 83 3A 26 75 1B 66 83 38 4B 75 15 66 83 78 0E 73 75 0E 66 83
78 1E 4B 75 07 B8 A1 02 00 C0 EB 14 E8 ?? ?? ?? ?? 4C 8B CF 4C 8B C6 48 8B D3 48
8B CD FF 50 18 48 8B 5C 24 30 48 8B 6C 24 38 48 8B 74 24 40 48 83 C4 20 5F C3 }
$patch_SamIRetrieveMultiplePrimaryCredential = { 48 89 5C 24 08 48 89 6C 24 10
48 89 74 24 18 57 48 83 EC 20 41 8B F9 49 8B D8 8B F2 8B E9 4D 85 C0 74 2B 49 8B
40 08 48 85 C0 74 22 66 41 83 38 26 75 1B 66 83 38 4B 75 15 66 83 78 0E 73 75 0E
66 83 78 1E 4B 75 07 B8 A1 02 00 C0 EB 12 E8 ?? ?? ?? ?? 44 8B CF 4C 8B C3 8B D6
8B CD FF 50 20 48 8B 5C 24 30 48 8B 6C 24 38 48 8B 74 24 40 48 83 C4 20 5F C3 }
condition:
any of them
}