Бесплатно Экспресс-аудит сайта:

13.05.2023

Ищем иголку вредоносных запросов в стоге трафика: PT NAD vs. Cobalt Strike и Brute Ratel 4

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

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

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

Cobalt Strike

Скриншот интерфейса с официального сайта cobaltstrike.com

Главным «фигурантом» наших детектов Cobalt Strike станут метаданные. Именно их бикон передает с каждым отстуком. Иногда отстуки заканчиваются для бикона новыми командами, выполнение которых требует еще нескольких запросов. В каждом сетевом запросе от бикона будут передаваться метаданные, которые представляют из себя 128 шифрованных байтов. Эти данные действительно имеют высокую энтропию, а внутри них содержатся различные идентификаторы и информация о самом биконе. Время между отстуками строго фиксировано и задается в Malleable C2 config — это конфигурационный файл, с которым запускается управляющий Team Server (C2). Он содержит абсолютно все параметры Cobalt Strike. Временная задержка строго фиксирована, но умеет случайным образом меняться в заданном диапазоне, например 60 ± 5% секунд между запросами. HTTP-протокол — самый популярный транспорт для биконов и имеет больше всего настраиваемых параметров: заголовки, метод, возможность вставлять различные мусорные данные для маскировки и т. д. Метаданные, кстати, передаются не в открытом виде, а кодируются в различные формы. И здесь авторы фреймворка хорошо постарались: кодировок действительно много, и они могут быть рекурсивно вложены. Например, метаданные могут быть сначала «поксорены» с четырьмя случайными байтами, затем закодированы в Base64 и потом в NetBIOS. Правда, размер таких метаданных будет расти кратно.

Где могут передаваться метаданные? Везде: внутри HTTP-заголовков, в теле POST-запроса и даже в URL. В последнем случае, если данные будут «поксорены» со случайным ключом, URL будет также постоянно меняться, оставаясь при этом одной длины. В любой другой ситуации, напротив, URL случайным образом выбирается среди заданных в конфигурации — это также затрудняет обнаружение. Я уже говорил, что Cobalt маскируется под легитимные запросы? Для достижения этой цели перед и после метаданных можно добавлять мусорные данные: например, сами метаданные могут передаваться в Base64 якобы под видом JWT в HTTP cookie, будучи обрамленными необходимыми конструкциями. Каждый автор волен сам придумывать способ маскировки, поэтому вы можете найти десятки и сотни различных конфигураций Malleable на GitHub.

Cobalt Strike маскируется под запросы популярной библиотеки JQuery. Метаданные передаются в заголовке Cookie, при этом ответ от сервера маскируется под содержимое легитимной библиотеки

Если вы устали от перечисления возможностей Cobalt Strike, то это неудивительно: он обладает огромной гибкостью и потенциалом маскировки.

Обнаружение Cobalt Strike по сети было для нас несложной задачей. Для ее решения мы использовали:

  1. знания о том, что метаданные передаются в каждом запросе HTTP;
  2. достаточное количество запросов для определения закономерностей в них;
  3. алгоритм определения поля для хранения метаданных Cobalt Strike;
  4. проверку энтропии байтов метаданных.

Конечно, в настоящем трафике существует достаточное количество периодических HTTP-запросов с подходящей структурой, но мы смогли довести алгоритм обнаружения до полного отсутствия ложных срабатываний. Все это в совокупности лежит в основе нашего модуля обнаружения Cobalt Strike в PT NAD.

Описание Cobalt Strike будет неполным, если не упомянуть его способы горизонтального перемещения по сети. В его арсенале имеются создание сервисов на удаленном сервере по SMB и сессии SSH на Linux. Само по себе создание сервисов и задач на удаленных серверах хорошо изучено и покрыто нашими правилами, но в этой секции мы разберем особенности взаимодействия биконов Cobalt Strike по другим протоколам. Конечно, распространять на другие узлы можно и привычные HTTP(S) биконы, но для устройств без доступа в интернет существуют только две узкоспециализированные опции: SMB и TCP. Они действуют схожим образом: это либо bind/reverse TCP-соединение, либо его аналог в SMB — SMB-пайпы (pipes). Причем появление необычного пайпа также бросается в глаза средствам защиты.

После успешного захвата узла и установления соединения (подключения к пайпу) бикон первым делом передает свои метаданные. Размер метаданных равен 132 байтам, что соответствует xor-шифрованию со случайным ключом — он передается в первых четырех байтах.

Пакет SMB, в котором видно передачу метаданных бикона Cobalt Strike

Передача метаданных от бикона Cobalt Strike, но уже по протоколу TCP

По протоколу TCP мы наблюдаем ту же самую картину: 132 байта с данными о биконе в начале соединения. И в том, и в другом случае метаданные предваряются четырьмя байтами длины, которые посылаются отдельными пакетами. Для метаданных она будет равняться 0x84 0x00 0x00 0x00 в шестнадцатеричной системе. А раз для SMB- и TCP-биконов метаданные передаются только вначале, все последующие разы узлы будут обмениваться только полями длины по четыре нулевых байта.

Только что мы проанализировали трафик Cobalt Strike в лабораторных условиях методом черного ящика, и гибкость этого фреймворка поражает. При компиляции биконов на командном сервере в их код буквально компилируется алгоритм по извлечению метаданных, как они описаны в конфигурации Malleable. Все это дает огромный простор фантазии злоумышленников при маскировке запросов, и, как правило, сетевые средства обнаружения находятся на месте догоняющих: они могут обнаруживать только известные конфигурации. Наш механизм детекта в PT NAD способен находить новые неизвестные образцы этого фреймворка. Благодаря чему это стало возможно?

Метаданные:

  • передаются в каждом отстуке бикона,
  • хранятся в одном и том же месте (HTTP-заголовок или тело запроса),
  • передаются в одной и той же кодировке,
  • имеют одинаковый размер,
  • время между отстуками меняется несильно.

Почему же авторы Cobalt Strike не добавят в метаданные случайную длину, кодировку или не сделают время между отстуками максимально непредсказуемым? Возможно, причин этому несколько:

  • сложность кодовой базы: научить бикон и управляющий сервер хранить метаданные в разных частях запроса может быть непростой задачей;
  • случайная длина метаданных сделает их легко обнаруживаемыми, то есть поле длины метаданных должно где-то храниться после того, как они будут зашифрованы;
  • случайное время между отстуками сделает поведение биконов непредсказуемым. Как понять, это антивирус удалил процесс на узле или бикон просто выжидает больше обычного? Злоумышленники тоже ценят удобство;
  • необходимость бороться и с узловыми детектами, которые пока еще традиционно занимают первое место по обнаружению.

Подтвердить или опровергнуть эти гипотезы поможет следующий фреймворк постэксплуатации — Brute Ratel C4.

Brute Ratel C4

Интерфейс командного сервера Brute Ratel C4

Авторы Brute Ratel C4 на своем сайте заявляют (дословно): «Badger doesn’t care. It takes what it wants! » Brute Ratel C4 и Cobalt Strike имеют как схожую функциональность, так и ряд отличий: например, Brute Ratel C4 называет свои исполняемые файлы не «биконы», а «барсуки (баджеры)», а еще у них другой цвет интерфейса. Транспорты «барсуков» те же самые: HTTP(S) и SMB/TCP. Для искушенных пользователей также существуют способы коммуникации через DNS-туннели, однако во взломанной версии 1.2.2 эта возможность отсутствовала. Упор в Brute Ratel C4 был сделан на обход узловых детектов, за что его считали не обнаруживаемым на узлах и по-настоящему опасным. Мы со своим анализом трафика думаем иначе.

Отличий Brute Ratel 4 от Cobalt Strike с точки зрения сети несколько, давайте их перечислим:

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

Выходит, гибкости для обхода сетевых детектов у Brute Ratel C4 еще меньше. Строгие правила передачи метаданных по HTTP делают его еще более простой мишенью для наших алгоритмов детектирования. Алгоритм получается простым:

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

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

Передача метаданных по протоколу SMB от баджера Brute Ratel С4

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

Передача метаданных по протоколу TCP от баджера Brute Ratel С4

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

Cobalt Strike имеет свою устоявшуюся аудиторию и разрабатывается более 10 лет. Brute Ratel, напротив, появился в конце 2020 года и получил заметную популярность после выхода взломанной версии в 2022-м. Каждый день злоумышленники ищут аналоги своим инструментам, которые постепенно обрастают детектами. Так, в последнее время стали заметны новые имена — открытые фреймворки Sliver и Havoc. Функциональность таких платформ постэксплуатации несильно отличается, а интерфейс Havoc очень напоминает Cobalt Strike. И даже если функциональность остается той же, средства защиты и специалисты могут быть не готовы к этим новым инструментам. Тем более что группы злоумышленников уже активно используют Sliver — это подтверждает опыт команды по расследованию инцидентов из экспертного центра безопасности Positive Technologies — PT Expert Security Center (PT ESC).

Мы постоянно следим за новыми хакерскими инструментами и трендами, непрерывно обновляем экспертизу в продукте PT Network Attack Discovery и разрабатываем новые модули и правила для обнаружения сетевых угроз. С технической точки зрения способы общения Cobalt Strike и Brute Ratel 4 по протоколу HTTP представляют огромный интерес, так как имеют большую вариативность и способность мимикрировать под легитимный трафик. Сейчас с их обнаружением PT NAD 11 пока справляется с помощью правил, а в новой версии 11.1, которая выйдет в ближайшее время, помогать с этим будут уже разработанные нами модули.

В любом, даже самом хитром протоколе есть пригодные для детекта артефакты. Например, первый DNS-запрос от Sliver начинается с символов «baakb», а DNS-запросы Cobalt Strike часто содержат внутри себя суффикс «.180.».

Карточка в PT NAD, в которой сообщается об успешном обнаружении активности бикона Cobalt Strike

Карточка сессии в PT NAD, в которой открыт один из HTTP-запросов бикона. В ней видны детали HTTP-запроса: заголовки, URL, метод, а также адреса, порты и домены

Мы пишем детектирующие правила для всех видов коммуникации вредоносных программ, многие из которых способны вас удивить:

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