Содержание статьи
В этой статье мы рассмотрим процесс создания и настройки профиля Malleable C2, который будет имитировать легитимные запросы к известным сайтам. Мы детально разберем структуру профиля и посмотрим, как замаскировать его под взаимодействие с реальными сервисами.
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
Что такое профиль Malleable C2
Профиль Malleable C2 позволяет гибко настроить поведение маячка (beacon) Cobalt Strike при взаимодействии с сервером управления (Team Server). Основное назначение профиля Malleable C2 — изменять сетевые запросы и ответы таким образом, чтобы они выглядели как обычный трафик, который не будет вызывать вопросов у систем IDS/IPS. К тому же это усложняет анализ трафика специалистами. Достигается же маскировка путем настройки различных параметров HTTP-запросов и ответов: URI, заголовков, параметров и содержимого запроса.
Как происходит взаимодействие
Когда маячок запускается на целевой машине, он инициирует транзакцию HTTP-GET к Team Server (запрос при этом может быть как GET, так и POST). В запросе передаются метаданные о скомпрометированной системе. Сервер в ответ отправляет задачи, которые должен выполнить маячок. После завершения задач маячок проверяет наличие данных для отправки и инициирует транзакцию HTTP-POST, содержащую идентификатор сеанса. Сервер использует эту информацию для привязки данных к соответствующему сеансу.
Теперь, когда мы разобрались с основами взаимодействия маячка и сервера, перейдем к настройке профиля Malleable C2.
Структура профиля
Для запуска Team Server с кастомным профилем необходимо выполнить команду
./teamserver <ip> <pass> <путь к файлу с профилем>
Профиль описывает, как маячок общается с сервером и как происходит постэксплуатация. Выше я говорил, что маячок использует два вида транзакций для обмена данными (HTTP-GET и HTTP-POST). Дальше мы посмотрим, как реализовать это в профиле.
http-get
В профиле параметр http-get
отвечает за передачу метаданных на Team Server и получение задач от него. Он обязан содержать ключи:
-
client
— описывает, как будет выглядеть HTTP-запрос от маячка к серверу; -
server
— описывает ответ сервера на запрос.
Ключ client
должен иметь параметр metadata
, в котором определяются способы обработки отправляемой маячком метаинформации, а ключ server
— параметр output
, в котором описывается порядок обработки ответа клиенту.
В параметрах client
и server
еще определяются:
-
uri
— описывает URL; -
header
— добавляет HTTP-заголовки к запросу; -
parameter
— добавляет параметры кuri
.
В перечисленных параметрах могут использоваться подстановочные знаки или перечисление значений.
Изменять метаданные (metadata
) и выводимую информацию (output
) помогут следующие выражения:
-
append
— добавляет строку в конце данных; -
base64
— кодирует данные в Base64; -
base64url
— кодирует данные в Base64 для использования в URL; -
mask
— выполняет операцию XOR со случайным ключом; -
netbios
— кодирует данные в NetBIOS; -
netbiosu
— кодирует данные в NetBIOS; -
prepend
— добавляет строку перед данными.
Преобразование данных должно заканчиваться одним из следующих операторов, указывающих на место размещения передаваемой информации в HTTP-запросе:
-
header
— запишет отправляемые данные в HTTP-заголовок"Cookie" Cookie
(может использоваться любой заголовок); -
parameter
— запишет отправляемые данные в параметр"view" view
(например,http://
);sadfadsf. com/ asdfsadf?view=< передаваемые_данные> -
print
— запишет данные в тело HTTP (обязателен для блоковhttp-get.
,server. output http-post.
иserver. output http-stager.
);server. output -
uri-append
— добавит данные в URI.
Структура профиля HTTP-GET будет следующая:
http-get { set uri "/hacker/notes/[set.php|view.php]"; client { # Параметры header и parameter можно пропустить header "Accept-Encoding" "gzip, deflate"; parameter "user" "admin|xaker|helpdesk"; metadata { base64url uri-append } } server { # Параметры header и parameter можно пропустить header "Accept-Encoding" "gzip, deflate"; parameter "user" "admin|xaker|helpdesk"; output { mask base64 prepend "data=" print } }}
http-post
Этот параметр отвечает за отправку данных, полученных в результате выполнения задач маячка.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»