Содержание статьи
В этой статье мы рассмотрим процесс создания и настройки профиля 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
Этот параметр отвечает за отправку данных, полученных в результате выполнения задач маячка.
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее