Cobalt Strike представляет собой коммерческий инструмент для тестирования защищённости. Пентестеры используют его для имитации действий злоумышленников и проверки устойчивости инфраструктуры к атакам. Основной компонент Cobalt Strike - агент Beacon. Он разворачивается на компьютере жертвы и предоставляет оператору широкий набор возможностей: выполнение команд, перехват нажатий клавиш, передача файлов, сканирование портов и боковое перемещение по сети. Beacon работает без сохранения на диск, загружая себя в память процесса через уязвимость или специальный загрузчик. Такой подход делает его трудным для обнаружения.
Описание
За годы существования Beacon завоевал популярность среди пентестеров и киберпреступников. Причина в стабильности, производительности и высокой настраиваемости. Однако недавно при анализе одного из образцов выяснилось, что под видом стандартного агента может скрываться нечто более опасное.
Как показал технический анализ, внутри образца находился не обычный Beacon, а драйвер с именем SakDriver. Этот драйвер представляет собой руткит, работающий на уровне ядра операционной системы. Руткиты такого типа получают привилегированный доступ ко всем системным механизмам. Они могут скрывать своё присутствие, перехватывать данные и противодействовать антивирусным решениям.
Первый шаг SakDriver после загрузки - отключение системы журналирования событий Windows. Драйвер перехватывает структуры ядра, отвечающие за трассировку событий, и изменяет их. В результате операционная система не фиксирует действия руткита. Ни антивирус, ни система мониторинга не получают уведомлений о подозрительной активности. Дополнительно драйвер скрывает собственные процессы в списке активных приложений и сетевые порты, используемые для связи. Для этого он напрямую изменяет объекты ядра и перехватывает вызовы, связанные с сетевой фильтрацией.
После этого руткит приступает к маскировке. Он копирует себя в системную папку драйверов под случайным именем с расширением .sys. Имя генерируется с использованием случайного набора данных, включая параметры системы и текущее время. Затем в реестре создаётся запись о новой службе. Служба получает имя, похожее на "Microsoft Player Service", а её описание выглядит как стандартный текст для системных компонентов. Такой приём позволяет обмануть невнимательного администратора. Если установка завершается успешно, руткит отправляет на командный сервер уведомление об успехе и удаляет исходный файл, чтобы скрыть следы заражения.
Для связи с оператором SakDriver использует интернет. Он отправляет на заранее определённый командный сервер запрос с информацией о системе жертвы. Для маскировки трафика используется нестандартный идентификатор клиента. Руткит также блокирует доступ к своим адресам со стороны средств защиты. Он перехватывает попытки антивирусов связаться с подозрительными сайтами и предотвращает их. Кроме того, драйвер скрывает ряд портов, которые могут быть использованы для управления.
Одной из ключевых особенностей SakDriver является защита собственных компонентов. Руткит регистрирует в системе обработчик событий реестра. Этот обработчик вызывается при любой попытке изменения ключей, связанных с драйвером. Если антивирус или администратор пытается удалить или изменить эти ключи, обработчик отклоняет запрос. В итоге удалить руткит стандартными методами не удаётся.
Ещё более интересная деталь - использование реестра для передачи команд. Вместо прямого сетевого взаимодействия пользовательский агент записывает команды в заранее определённые ключи реестра. Эти ключи выглядят безобидно и не привлекают внимание. Драйвер периодически проверяет их содержимое. Если в данных присутствует специальная метка, руткит извлекает команду и выполняет её. Такой способ полностью обходит сетевые экраны и системы обнаружения вторжений, так как трафик не создаётся вовсе.
Список доступных команд включает десятки функций. Прежде всего, это чтение и запись памяти произвольных процессов. Руткит может внедрять код в чужие процессы, загружать в них библиотеки, а также извлекать данные из памяти антивирусов и других приложений. Некоторые команды позволяют принудительно завершать защищённые процессы и удалять файлы, которые используются системой. Другие функции отвечают за подделку ввода с клавиатуры и мыши. Драйвер может отправлять системным драйверам фиктивные события, имитируя действия пользователя.
Отдельно стоит отметить низкоуровневые операции. Руткит умеет обращаться к физической памяти компьютера, изменяя содержимое оперативной памяти напрямую. Это даёт возможность модифицировать данные любых программ, включая средства защиты. Также SakDriver может получать доступ к адресному пространству процессов, обходя механизмы защиты, встроенные в операционную систему.
Для обхода эвристического анализа руткит не использует стандартные таблицы импорта. Вместо этого он самостоятельно находит адреса системных функций. Драйвер загружает ядро операционной системы и вручную разбирает его структуры. Это позволяет избежать статического обнаружения по сигнатурам. Дополнительно SakDriver сканирует системные библиотеки и применяет глобальные перехваты. Он контролирует системные таймеры, счётчики производительности и другие ресурсы, чтобы заметать следы.
Подобные руткиты представляют серьёзную угрозу для организаций. Они способны долгое время оставаться незамеченными, похищая учётные данные, документы и переписку. Удаление SakDriver стандартными средствами невозможно из-за активного противодействия. Поэтому важнейшее значение имеет профилактика. Необходимо регулярно обновлять операционную систему и антивирусные базы. Следует ограничивать привилегии пользователей на рабочих станциях и серверах. Рекомендуется использовать решения для контроля целостности системных файлов и мониторинга поведения драйверов.
Обнаружение SakDriver показывает, что киберпреступники адаптируют даже легитимные инструменты пентеста для создания сложных угроз. Cobalt Strike изначально разрабатывался как средство для проверки защищённости, но теперь его модификации могут включать в себя полноценные руткиты ядра. Компаниям стоит учитывать эту тенденцию при построении системы защиты и уделять особое внимание контролю драйверов и целостности ядра.
Индикаторы компрометации
IPv4
- 43.160.247.24
- 91.99.165.207
Domain
- just-do-it.icu
SHA256
- 4e95aba17c1a423cda5cc9f9f04f7cf8db17e294eb31ed1aa85063601b82fe8d
YARA
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | rule SakDriver_Rootkit { meta: description = "Detects an advanced Windows kernel rootkit featuring ETW/CKCL hooking, NSI manipulation, HWID spoofing, and WFP." author = "0xSec" date = "2026-07-26" strings: /* Use of ntoskrnl.exe / ntkrnlpa.exe */ $ntoskrnl_str = "ntoskrnl.exe" ascii $ntkrnlpa_str = "ntkrnlpa.exe" ascii $ascii_str1 = "AWAVAUATASARAQAPPQSRUTVW" ascii $ascii_str2 = "_^\\]Z[YXAXAYAZA[" ascii /* Encrypted API Strings */ $enc_api_alloc = "iCtZ[WZ[OYkWM44#/\t +(:0J" ascii // ZwAllocateVirtualMemory $enc_api_win32k = "lkB_Y\x0b\x0bQHHH\`@" ascii // __win32kstub_ $enc_api_ntuser = "}@`ERJhO^NDiV.%-4D" ascii // NtUserQueryWindow /* WFP Targets */ $domain = "just-do-it.icu" ascii wide $ip = "91.99.165.207" ascii wide $dev_sakdriver = "\\Device\\SakDriverWFP" ascii wide /* Debug Strings */ $dbg_etw_hook = "[%s] ssdt call back ptr is 0x%p" ascii $dbg_khook_init = "k_hook::Initialize" ascii $dbg_nsi_hide = "[NSI] Adding default hidden ports..." ascii $dbg_wfp_fail = "Failed to start auto-unblock thread" ascii $dbg_wfp_ip_block = "Failed to add IP to block list." ascii /* HWID spoof strings */ $hwid_mouse = "\\Driver\\mouhid" ascii $hwid_keyboard = "\\Driver\\kbdhid" ascii $hwid_gpu = "\\Driver\\nvlddmkm" ascii $hwid_ps2 = "\\Driver\\i8042prt" ascii condition: uint16(0) == 0x5A4D // PE magic and filesize < 5MB and ( ($ascii_str1 and $ascii_str2) and all of ($hwid_*) or ($ntoskrnl_str and $ntkrnlpa_str) or 2 of ($enc_api_*) or ($dev_sakdriver and $domain and $ip) or all of ($dbg_*) ) } |