Light mode

Кто кого: PT NAD vs Cobalt Strike и Brute Ratel C4

15 минут
  • #PT NAD
  • #Cobalt Strike
  • #Brute Ratel 4

Модная тема

Фреймворки постэксплуатации становятся все популярнее среди злоумышленников. Это удобный инструмент для контроля зараженных машин и горизонтального перемещения внутри сети. Фреймворки помогают атакующему собрать карту сети и связи между хостами в одном интерфейсе, из которого и управляются.

В этой сфере есть своя мода и тренды: число хакерских фреймворков постоянно растет. Кроме того, в открытый доступ периодически попадают взломанные версии инструментов. Так, в 2021–2022 годах в интернете появились бесплатные релизы платформ Cobalt Strike и Brute Ratel C4. В результате их популярность резко выросла: последние исследования говорят о тысячах серверов Cobalt Strike, в честь решения называют целые группировки, а огромные корпорации борются с кейсами злоупотребления инструментом.

1.png

Какие вызовы несут хакерские фреймворки для систем защиты и специалистов по ИБ? Зачастую в этих инструментах есть богатый арсенал для обхода хостовых средств защиты (в основном для противостояния антивирусам и EDR-решениям). Все фреймворки используют сеть, чтобы получать команды и устанавливать связи с управляющими серверами. При этом так называемые биконы (beacons) Cobalt Strike умеют общаться с управляющим сервером и без доступа в интернет. Они просто передают свои данные по протоколу SMB или TCP по цепочке таких же биконов, пока те не выйдут «наружу». Соединение же с самим управляющим сервером может идти более привычным образом — по HTTP или HTTPS, нередко мимикрируя под загрузку библиотеки jQuery или общение с удостоверяющими центрами. Другие фреймворки, напротив, могут «притворяться» обычными сайтами: на HTML-страницы периодически отправляются «отстуки», а результаты их выполнения выглядят как POST-запросы на PHP-скрипты. Более того, искушенным пользователям этих инструментов предлагаются классические DNS-тоннели.

«Отстук» — периодический запрос на управляющий сервер. Его главная цель — дать понять, что бикон все еще «жив», и запросить новые команды.

Многообразие сетевых протоколов и способов маскировки помогает злоумышленникам в обходе привычных средств сетевой защиты. Но о решениях класса network traffic analysis (NTA), к которым относится наш PT Network Attack Discovery, хакеры пока знают не так много.

12122222.svg
Рисунок 1. Биконы Cobalt Strike умеют связываться с управляющим сервером по цепочке и работать даже в сетях без доступа в интернет

Пара слов о PT Network Attack Discovery

PT NAD — это средство анализа сетевого трафика. Продукт не только исследует общую фактуру сети, но и определяет все стадии атак на инфраструктуру. Схема работы проста: вы передаете в систему копию сетевого трафика (по принципу «чем больше, тем лучше»), и PT NAD выявляет в нем вредоносные программы, слабые пароли, следы атак и всевозможные активности злоумышленников.

Cobalt Strike

3.png
Рисунок 2. Интерфейс Cobalt Strike: именно так хакер видит инфраструктуру жертвы. Линии между хостами обозначают протоколы для связи между биконами

Главным фигурантом в наших делах по детекту 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
Рисунок 3. Cobalt Strike маскируется под запросы популярной библиотеки jQuery. Метаданные передаются в заголовке куки, при этом ответ сервера маскируется под содержимое легитимной библиотеки

Готов поспорить, вы уже устали от перечисления возможностей 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
6.png
Рисунок 4. Анализатор сетевого трафика Wireshark. В выделенных пакетах Cobalt Strike передает метаданные по протоколам SMB и TCP

С протоколом 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
Рисунок 5. Интерфейс командного сервера Brute Ratel C4

Авторы 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
Рисунок 6. Типичный HTTP-трафик BRc4. Все данные передаются в теле POST-запроса, остальные параметры настраиваются

С точки зрения работы в сети между Brute Ratel 4 и Cobalt Strike есть несколько различий:

  • Метаданные передаются не в любом HTTP-заголовке, а строго в теле запроса.
  • Данные тоже зашифрованы, но кодируются только в Base64.
  • Вся информация отправляется при помощи HTTP-запросов методом POST.

Получается, что гибкости для обхода сетевых детектов у BRc4 даже меньше. Строгие правила передачи метаданных по HTTP делают его еще более легкой целью для наших алгоритмов детектирования. Схема проста:

  1. Собрать побольше запросов HTTP POST.
  2. Убедиться, что у них одинаковые заголовки.
  3. Проверить, что тела запросов тоже совпадают.
  4. Подсчитать среднее время между запросами и убедиться в регулярности «отстуков».

Что касается общения между «барсуками» по протоколу TCP или SMB, взаимодействие максимально просто. Обмен данными через SMB-пайп или TCP-соединение осуществляется напрямую, ведь спрятать что-либо в них действительно сложно.

8.png
Рисунок 7. Передача метаданных «барсуков» по протоколу SMB. На скриншоте видно, что информация закодирована в Base64

В SMB-трафике видно, как «барсук» отправляет метаданные в куске Base64-данных длиной 108 байт (см. рис. 7). После декодирования они превратятся в 80 шифрованных байт, что соразмерно с данными Cobalt Strike во время «отстука». В TCP-сообщениях данные будут иметь длину 110 байт за счет дополнительных символов \r\n в конце каждого сообщения.

9.png
Рисунок 8. Передача метаданных «барсуков» по TCP. Кодировка та же — Base64

Другие платформы

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
11.png
Рисунок 9. Карточка атаки в интерфейсе PT NAD: обнаружена активность неизвестного образца Cobalt Strike, представлены детали HTTP-запросов

И вишенка на торте. Мы пишем детектирующие правила для всех видов коммуникации вредоносных программ. Некоторые из них удивляют (см. рис. 10).

12.png
Рисунок 10. Иногда биконы Sliver кодируют байты своих данных в английские слова

Почему обычный антивирус не способен вовремя обнаружить Cobalt Strike и Brute Ratel C4 и заблокировать их запуск?

Анализ сетевого трафика очень результативен при обнаружении активности инструментария злоумышленников. На это есть несколько причин. Первая достаточно банальна: за инфраструктурой очень сложно уследить. В крупных организациях новые рабочие станции и серверы могут появляться ежедневно. В какой-то момент ибэшники сталкиваются с неизвестным им устройством, на котором должным образом не настроены ни журналирование, ни агентское средство защиты (антивирус или EDR-система). С сетью такой проблемы нет. Если анализируется копия трафика, новое устройство не останется без внимания.

Вторая причина заключается в ресурсах злоумышленников. Результаты наших проектов по анализу защищенности показывают, что скрыть вредоносное ПО от средств антивирусной защиты не составляет особого труда. Злоумышленники могут как сами адаптировать свои инструменты, так и пользоваться сторонними решениями. Существует большое количество техник для обхода антивирусов, а на черном рынке можно найти готовый упаковщик, который поможет скрыть программу от проверок на конечном устройстве.

Чтобы спрятать сетевую активность, потребуется не только адаптация клиентской части вредоносного ПО, но и изменение самого управляющего сервера, так как придется пересмотреть формат взаимодействия между ними. Для злоумышленника это дополнительные временные затраты и расходы на разработку. Вот почему мало кто может позволить себе так кардинально менять инструментарий между атаками, а анализ трафика показывает высокую эффективность.
 

Мы дěлаем Positive Research → для ИБ-экспертов, бизнеса и всех, кто интересуется ✽ {кибербезопасностью}