Кто кого: PT NAD vs Cobalt Strike и Brute Ratel C4
- Для кого:
- Сотрудники отделов ИБ, специалисты SOC, эксперты по сетям и сетевым средствам обнаружения, системные администраторы
- Скиллы:
- Сетевой трафик, фреймворки постэксплуатации, хакерский инструментарий, тактики и техники атакующих, анализ сетевого трафика, обнаружение сетевых угроз
- PT NAD
- Cobalt Strike
- Brute Ratel 4
![](/_next/image?url=https%3A%2F%2Fpt-research.storage.yandexcloud.net%2Fzahodnaya_2_2_80b7647655.png&w=3840&q=75)
Модная тема
Фреймворки постэксплуатации становятся все популярнее среди злоумышленников. Это удобный инструмент для контроля зараженных машин и горизонтального перемещения внутри сети. Фреймворки помогают атакующему собрать карту сети и связи между хостами в одном интерфейсе, из которого и управляются.
В этой сфере есть своя мода и тренды: число хакерских фреймворков постоянно растет. Кроме того, в открытый доступ периодически попадают взломанные версии инструментов. Так, в 2021–2022 годах в интернете появились бесплатные релизы платформ Cobalt Strike и Brute Ratel C4. В результате их популярность резко выросла: последние исследования говорят о тысячах серверов Cobalt Strike, в честь решения называют целые группировки, а огромные корпорации борются с кейсами злоупотребления инструментом.
![1.png](https://pt-research.storage.yandexcloud.net/1_a086d83d3f.png)
Какие вызовы несут хакерские фреймворки для систем защиты и специалистов по ИБ? Зачастую в этих инструментах есть богатый арсенал для обхода хостовых средств защиты (в основном для противостояния антивирусам и EDR-решениям). Все фреймворки используют сеть, чтобы получать команды и устанавливать связи с управляющими серверами. При этом так называемые биконы (beacons) Cobalt Strike умеют общаться с управляющим сервером и без доступа в интернет. Они просто передают свои данные по протоколу SMB или TCP по цепочке таких же биконов, пока те не выйдут «наружу». Соединение же с самим управляющим сервером может идти более привычным образом — по HTTP или HTTPS, нередко мимикрируя под загрузку библиотеки jQuery или общение с удостоверяющими центрами. Другие фреймворки, напротив, могут «притворяться» обычными сайтами: на HTML-страницы периодически отправляются «отстуки», а результаты их выполнения выглядят как POST-запросы на PHP-скрипты. Более того, искушенным пользователям этих инструментов предлагаются классические DNS-тоннели.
«Отстук» — периодический запрос на управляющий сервер. Его главная цель — дать понять, что бикон все еще «жив», и запросить новые команды.
Многообразие сетевых протоколов и способов маскировки помогает злоумышленникам в обходе привычных средств сетевой защиты. Но о решениях класса network traffic analysis (NTA), к которым относится наш PT Network Attack Discovery, хакеры пока знают не так много.
Пара слов о PT Network Attack Discovery
PT NAD — это средство анализа сетевого трафика. Продукт не только исследует общую фактуру сети, но и определяет все стадии атак на инфраструктуру. Схема работы проста: вы передаете в систему копию сетевого трафика (по принципу «чем больше, тем лучше»), и PT NAD выявляет в нем вредоносные программы, слабые пароли, следы атак и всевозможные активности злоумышленников.
Cobalt Strike
![3.png](https://pt-research.storage.yandexcloud.net/3_e0cb161274.png)
Главным фигурантом в наших делах по детекту Cobalt Strike станут метаданные, которые бикон отправляет с каждым «отстуком». Иногда «отстуки» заканчиваются для бикона новыми командами, выполнение которых требует еще нескольких запросов. При этом в каждом сетевом запросе от него передаются метаданные — 128 шифрованных байт. Они имеют высокую энтропию, содержат разные идентификаторы и информацию о самом биконе.
Время между «отстуками» строго фиксируется и задается в Malleable C2 config — конфиг-файле, с которым запускается управляющий Team Server (C2). Этот файл содержит все параметры Cobalt Strike. Отметим, что задержка может случайным образом меняться в заданном диапазоне, например 60 ± 5% секунд.
Самый популярный транспорт для биконов — HTTP-протоколы. У них больше всего настраиваемых параметров: это заголовки, метод, «мусорные» данные (обычные строки, которые можно добавить до или после метаданных для маскировки) и другие. Метаданные, кстати, передаются не в открытом виде, а кодируются в разные формы. Авторы фреймворка хорошо постарались: кодировок действительно много, и они могут быть рекурсивно вложены друг в друга (при этом размер метаданных будет кратно расти). Например, метаданные сначала могут быть поксорены» с четырьмя случайными байтами, затем закодированы в Base64 и потом — в NetBIOS.
Где могут передаваться метаданные? Везде: внутри HTTP-заголовков, в теле POST-запросов и даже в URL. В последнем случае, если данные будут ксориться со случайным ключом, URL будет постоянно меняться, сохраняя при этом первоначальную длину. В любой другой ситуации URL, напротив, случайным образом выбирается из имеющихся в конфиге, что также затрудняет обнаружение злоумышленников.
Я уже говорил, что Cobalt Strike маскируется под легитимные запросы? Для этого перед метаданными и после них можно добавлять «мусорные» строки. Например, сами метаданные могут отправляться в Base64 под видом JWT-токена в HTTP-куки, будучи обрамленными необходимыми конструкциями. Каждый автор волен сам придумывать способ маскировки, поэтому на GitHub можно найти сотни разных Malleable-конфигов.
![4.png](https://pt-research.storage.yandexcloud.net/4_3dadd9d017.png)
Готов поспорить, вы уже устали от перечисления возможностей Cobalt Strike. Это неудивительно: он гибкий и имеет огромный потенциал для маскировки, поэтому обнаружение инструмента было для нас довольно нетривиальной задачей. Главным образом в детектировании помогает то, что метаданные передаются в каждом HTTP-запросе. Зная, как они выглядят и в какие рекурсивные формы кодируются, можно научить средство защиты копить HTTP-запросы, пока среди них не начнет прослеживаться некая периодичность, а затем определять, какое именно поле хранит метаданные. Опять же, расположение полей строго фиксируется в конфиг-файле и не меняется, что тоже играет нам на руку. Все перечисленное плюс проверка энтропии байтов метаданных и составляет алгоритм детекта активности Cobalt Strike в PT NAD. Конечно, в настоящем трафике достаточно много периодических HTTP-запросов с подходящей структурой, но мы смогли довести алгоритм до минимального количества ложных срабатываний.
Описание Cobalt Strike будет неполным без упоминания способов горизонтального перемещения фреймворка по сети. В арсенале инструмента — средства для создания сервисов на удаленной машине по протоколу SMB и SSH-сессии на Linux. Такие кейсы хорошо изучены и покрыты нашими детектами, в этой статье мы разберем особенности взаимодействия биконов Cobalt Strike по другим протоколам. Конечно, можно распространить на другие хосты и привычные биконы HTTP и HTTPS, но для машин без доступа в интернет есть только две узкоспециализированные опции — протоколы SMB и TCP. Они действуют схожим образом: это либо bind (reverse) TCP-соединение, либо SMB-пайпы (pipes). Причем появление необычного пайпа также бросается в глаза PT NAD.
После успешного захвата хоста и установки соединения (подключения к пайпу) бикон первым делом передает метаданные. Их размер — 132 байта, что соответствует XOR-шифрованию со случайным ключом, который отправляется в первых четырех байтах.
![5.png](https://pt-research.storage.yandexcloud.net/5_58839f7f57.png)
![6.png](https://pt-research.storage.yandexcloud.net/6_dca5fc9f67.png)
С протоколом TCP мы наблюдаем ту же картину: 132 байта со сведениями о биконе в начале соединения. В обоих случаях метаданные предваряются полями их длины (длина составляет 4 байта), которые отправляются отдельными пакетами. Для метаданных она будет равняться 0x84 0x00 0x00 0x00 в шестнадцатеричной системе. А раз для SMB- и TCP-биконов метаданные передаются только в начале, все последующие разы хосты будут обмениваться только полями длиной по 4 нулевых байта.
Мы проанализировали трафик Cobalt Strike в лабораторных условиях методом черного ящика и можем сказать, что гибкость фреймворка поражает. При компиляции биконов на командном сервере в их коде буквально компилируется алгоритм по извлечению метаданных (как они описаны в Malleable-конфиге). Все это дает злоумышленникам огромный простор для маскировки запросов. Сетевые средства обнаружения, как правило, находятся в позиции догоняющих, ведь они могут обнаруживать только уже известные конфигурации. Тем не менее механизмы детекта в PT NAD способны находить и новые, еще неизвестные образцы фреймворка. Благодаря чему это возможно? Время между «отстуками» меняется несильно. Кроме того, метаданные:
- передаются в каждом «отстуке» бикона;
- хранятся в одном и том же месте (HTTP-заголовок или тело запроса);
- отправляются в одной и той же кодировке;
- имеют одинаковый размер.
Почему же авторы Cobalt Strike не зададут метаданным случайную длину, не добавят кодировку или не сделают время между «отстуками» максимально непредсказуемым? Причин может быть несколько:
- Сложность кодовой базы. Научить бикон и управляющий сервер хранить метаданные в разных частях запроса — довольно сложная задача.
- Случайная длина упростит процесс обнаружения. После того как метаданные будут зашифрованы, поле со значением их длины должно где-то храниться.
- Случайное время между «отстуками» сделает поведение биконов непредсказуемым. Как в таком случае понять, удалил ли антивирус процесс на узле или бикон просто выжидает дольше обычного? Злоумышленники тоже ценят удобство.
- Необходимость бороться с хостовыми детектами, которые традиционно занимают первое место по эффективности обнаружения.
Подтвердить или опровергнуть эти гипотезы нам поможет следующий фреймворк постэксплуатации — Brute Ratel C4 (BRc4).
Brute Ratel C4
![7.png](https://pt-research.storage.yandexcloud.net/7_275497ceed.png)
Авторы BRc4 на своем сайте заявляют: «Badger doesn’t care. It takes what it wants!»
У BRc4 и Cobalt Strike схожие функции, но есть и ряд различий. Например, исполняемые файлы BRc4 называются не биконами, а «барсуками» (badgers). У «барсуков» те же транспорты: HTTP(S) и SMB (или TCP), а для искушенных пользователей также существуют способы коммуникации через DNS-тоннели (но во взломанной версии 1.2.2 эта возможность отсутствует). Создатели BRc4 сделали упор на обход хостовых детектов, поэтому инструмент считался не обнаруживаемым на узлах и по-настоящему опасным. Мы думаем иначе.
![7_1.png](https://pt-research.storage.yandexcloud.net/7_1_6bf978ca69.png)
С точки зрения работы в сети между Brute Ratel 4 и Cobalt Strike есть несколько различий:
- Метаданные передаются не в любом HTTP-заголовке, а строго в теле запроса.
- Данные тоже зашифрованы, но кодируются только в Base64.
- Вся информация отправляется при помощи HTTP-запросов методом POST.
Получается, что гибкости для обхода сетевых детектов у BRc4 даже меньше. Строгие правила передачи метаданных по HTTP делают его еще более легкой целью для наших алгоритмов детектирования. Схема проста:
- Собрать побольше запросов HTTP POST.
- Убедиться, что у них одинаковые заголовки.
- Проверить, что тела запросов тоже совпадают.
- Подсчитать среднее время между запросами и убедиться в регулярности «отстуков».
Что касается общения между «барсуками» по протоколу TCP или SMB, взаимодействие максимально просто. Обмен данными через SMB-пайп или TCP-соединение осуществляется напрямую, ведь спрятать что-либо в них действительно сложно.
![8.png](https://pt-research.storage.yandexcloud.net/8_7645d3e02f.png)
В SMB-трафике видно, как «барсук» отправляет метаданные в куске Base64-данных длиной 108 байт (см. рис. 7). После декодирования они превратятся в 80 шифрованных байт, что соразмерно с данными Cobalt Strike во время «отстука». В TCP-сообщениях данные будут иметь длину 110 байт за счет дополнительных символов \r\n в конце каждого сообщения.
![9.png](https://pt-research.storage.yandexcloud.net/9_a6154f2116.png)
Другие платформы
Cobalt Strike разрабатывается более десяти лет, у него уже есть устоявшаяся аудитория. Brute Ratel C4 же появился в конце 2020 года и стал набирать популярность после выхода взломанной версии в 2022-м. Кроме того, злоумышленники продолжают активно искать аналоги привычным инструментам, которые постепенно обрастают детектами. Так, в последнее время все чаще мелькают новые названия: фреймворки Sliver и Havoc (это подтверждает наша команда расследования инцидентов). Функциональность платформ не особенно отличается, а интерфейс Havoc и вовсе напоминает Cobalt Strike. Тем не менее специалисты по ИБ могут быть не готовы к атакам с использованием этих инструментов.
Противодействие
Мы отслеживаем тренды развития хакерских инструментов и постоянно совершенствуем детекты, используемые в PT NAD. С технической точки зрения способы общения Cobalt Strike и Brute Ratel 4 по протоколу HTTP представляют огромный интерес, поскольку они очень вариативны и могут мимикрировать под легитимный трафик. Мы хотели показать вам, к каким мерам порой прибегают злоумышленники, чтобы специалист SOC не смог найти иголку — вредоносный запрос — в стоге легитимного трафика. Но в любом, даже самом хитром протоколе должны быть пригодные для детекта артефакты. Мы реализовали описанную выше логику детектирования в отдельных модулях PT NAD: они отлично справляются со своими задачами и присутствуют в новой версии продукта — 11.1. А для обнаружения других протоколов хорошо подходят правила без сложной логики. Например, первый DNS-запрос Sliver начинается с символов baakb, а DNS-запросы Cobalt Strike часто содержат суффикс «.180.».
![10.png](https://pt-research.storage.yandexcloud.net/10_b4107256c0.png)
![11.png](https://pt-research.storage.yandexcloud.net/11_00c3678c1c.png)
И вишенка на торте. Мы пишем детектирующие правила для всех видов коммуникации вредоносных программ. Некоторые из них удивляют (см. рис. 10).
![12.png](https://pt-research.storage.yandexcloud.net/12_bcbf8d0809.png)
Анализ сетевого трафика очень результативен при обнаружении активности инструментария злоумышленников. На это есть несколько причин. Первая достаточно банальна: за инфраструктурой очень сложно уследить. В крупных организациях новые рабочие станции и серверы могут появляться ежедневно. В какой-то момент ибэшники сталкиваются с неизвестным им устройством, на котором должным образом не настроены ни журналирование, ни агентское средство защиты (антивирус или EDR-система). С сетью такой проблемы нет. Если анализируется копия трафика, новое устройство не останется без внимания.
Вторая причина заключается в ресурсах злоумышленников. Результаты наших проектов по анализу защищенности показывают, что скрыть вредоносное ПО от средств антивирусной защиты не составляет особого труда. Злоумышленники могут как сами адаптировать свои инструменты, так и пользоваться сторонними решениями. Существует большое количество техник для обхода антивирусов, а на черном рынке можно найти готовый упаковщик, который поможет скрыть программу от проверок на конечном устройстве.
Чтобы спрятать сетевую активность, потребуется не только адаптация клиентской части вредоносного ПО, но и изменение самого управляющего сервера, так как придется пересмотреть формат взаимодействия между ними. Для злоумышленника это дополнительные временные затраты и расходы на разработку. Вот почему мало кто может позволить себе так кардинально менять инструментарий между атаками, а анализ трафика показывает высокую эффективность.
Алексей Леднев
руководитель отдела обнаружения атак, экспертный центр безопасности Positive Technologies (PT ESC)