Популярность фреймворков постэксплуатации среди злоумышленников растет: это удобный инструмент контроля зараженных устройств и горизонтального перемещения внутри сети. Они помогают атакующему собрать всю карту сети и связи между узлами в одном интерфейсе, из которого они же и управляются. Среди фреймворков тоже есть своя мода: их число растет и появляются новые проекты, что ставит новые задачи перед создателями средств защиты. То и дело в открытый доступ попадают взломанные версии инструментов. В 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 копию сетевого трафика по принципу «чем больше — тем лучше», а далее он будет обнаруживать вредоносные программы, хакерские атаки и другую злонамеренную активность, даже применение пользователями слабых паролей и передачу паролей в открытом виде. В наборе экспертизы сейчас насчитывается более 7000 правил и десятки модулей со сложной логикой.
Cobalt Strike
Главным «фигурантом» наших детектов 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, то это неудивительно: он обладает огромной гибкостью и потенциалом маскировки.
Обнаружение Cobalt Strike по сети было для нас нетривиальной задачей. Для ее решения мы использовали:
знания о том, что метаданные передаются в каждом запросе HTTP;
достаточное количество запросов для определения закономерностей в них;
алгоритм определения поля для хранения метаданных Cobalt Strike;
проверку энтропии байтов метаданных.
Конечно, в настоящем трафике существует достаточное количество периодических HTTP-запросов с подходящей структурой, но мы смогли довести алгоритм обнаружения до минимального количества ложных срабатываний. Все это в совокупности лежит в основе нашего модуля обнаружения Cobalt Strike в PT NAD.
Описание Cobalt Strike будет неполным, если не упомянуть его способы горизонтального перемещения по сети. В его арсенале имеются создание сервисов на удаленном сервере по SMB и сессии SSH на Linux. Само по себе создание сервисов и задач на удаленных серверах хорошо изучено и покрыто нашими правилами, но в этой секции мы разберем особенности взаимодействия биконов Cobalt Strike по другим протоколам. Конечно, распространять на другие узлы можно и привычные HTTP(S) биконы, но для устройств без доступа в интернет существуют только две узкоспециализированные опции: SMB и TCP. Они действуют схожим образом: это либо bind/reverse TCP-соединение, либо его аналог в SMB — SMB-пайпы (pipes). Причем появление необычного пайпа также бросается в глаза средствам защиты.
После успешного захвата узла и установления соединения (подключения к пайпу) бикон первым делом передает свои метаданные. Размер метаданных равен 132 байтам, что соответствует xor-шифрованию со случайным ключом — он передается в первых четырех байтах.
По протоколу TCP мы наблюдаем ту же самую картину: 132 байта с данными о биконе в начале соединения. И в том, и в другом случае метаданные предваряются четырьмя байтами длины, которые посылаются отдельными пакетами. Для метаданных она будет равняться 0x84 0x00 0x00 0x00 в шестнадцатеричной системе. А раз для SMB- и TCP-биконов метаданные передаются только вначале, все последующие разы узлы будут обмениваться только полями длины по четыре нулевых байта.
Только что мы проанализировали трафик Cobalt Strike в лабораторных условиях методом черного ящика, и гибкость этого фреймворка поражает. При компиляции биконов на командном сервере в их код буквально компилируется алгоритм по извлечению метаданных, как они описаны в конфигурации Malleable. Все это дает огромный простор фантазии злоумышленников при маскировке запросов, и, как правило, сетевые средства обнаружения находятся на месте догоняющих: они могут обнаруживать только известные конфигурации. Наш механизм детекта в PT NAD способен находить новые неизвестные образцы этого фреймворка. Благодаря чему это стало возможно?
Метаданные:
передаются в каждом отстуке бикона,
хранятся в одном и том же месте (HTTP-заголовок или тело запроса),
передаются в одной и той же кодировке,
имеют одинаковый размер,
время между отстуками меняется несильно.
Почему же авторы Cobalt Strike не добавят в метаданные случайную длину, кодировку или не сделают время между отстуками максимально непредсказуемым? Возможно, причин этому несколько:
сложность кодовой базы: научить бикон и управляющий сервер хранить метаданные в разных частях запроса может быть непростой задачей;
случайная длина метаданных сделает их легко обнаруживаемыми, то есть поле длины метаданных должно где-то храниться после того, как они будут зашифрованы;
случайное время между отстуками сделает поведение биконов непредсказуемым. Как понять, это антивирус удалил процесс на узле или бикон просто выжидает больше обычного? Злоумышленники тоже ценят удобство;
необходимость бороться и с узловыми детектами, которые пока еще традиционно занимают первое место по обнаружению.
Подтвердить или опровергнуть эти гипотезы поможет следующий фреймворк постэксплуатации — Brute Ratel C4 (BRc4).
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 делают его еще более простой мишенью для наших алгоритмов детектирования. Алгоритм получается простым:
собрать как можно больше HTTP POST-запросов,
убедиться, что все они имеют одинаковые заголовки,
проверить, что тела запросов тоже совпадают,
подсчитать среднее время между запросами и убедиться в регулярности отстуков.
Что касается общения между баджерами по TCP- и SMB-протоколам, их протокол взаимодействия максимально простой. Обмен данными через SMB pipe или TCP-соединение осуществляется напрямую, ведь спрятать что-либо в них действительно сложно.
В SMB-трафике видно, как баджер передает метаданные во фрагменте Base64 данных длиной 108 байт. После декодирования они превратятся в 80 шифрованных байтов, что соразмерно данными Cobalt Strike во время отстука. В TCP-сообщениях данные будут иметь длину 110 байт за счет дополнительных символов \r\n в конце каждого сообщения.
Другие платформы
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.».
Мы пишем детектирующие правила для всех видов коммуникации вредоносных программ, многие из которых способны вас удивить:
Тематике противостояния хакеров и сетевых средств защиты будет посвящен один из конкурсов на киберфестивале Positive Hack Days под названием IDS Bypass, который пройдет 19 и 20 мая в московском Парке Горького. Участники смогут попробовать свои силы в обходе сетевых детектов для защиты шести конкурсных серверов и выиграть ценные призы (о задачах на конкурсе прошлого года можно прочитать здесь).
Кроме того, киберфестиваль знаменит своей масштабной кибербитвой между командами синих и красных, а также крутейшими докладами от экспертов по кибербезопасности (в этом году их будет более 200). Приходите и участвуйте! Чтобы вживую послушать технические доклады, принять участие в воркшопах и дискуссиях, необходимо приобрести билет.