Рассматриваем мифический фреймворк C2 Mythic. Часть 1

Всех приветствую, на связи лаборатория кибербезопасности AP Security. В этой статье мы продолжим разбирать C2-фреймворки. На этот раз, мы будем изучать относительно новый фреймворк под названием Mythic. Приятного прочтения!

Дисклеймер
Все методы примененные в статье продемонстрированы в учебных целях

fac35c0cd5d6cc8c2118e4b7ead54fe6.png

Описание

Mythic — это кроссплатформенный С2 фреймворк Red Team, разработанный Коди Томасом из компании SpecterOps и предназначенный для пост-эксплуатации. Основные элементы Mythic написаны на Python3, а платформа в значительной степени опирается на Docker для управления ключевыми элементами своей функциональности, включая сервер, агенты и профили С2. Также фреймворк имеет свой веб-интерфейс, и спроектирован так, чтобы быть расширяемым, с возможностью других людей создавать для него агенты и соединения.
На данный момент, он поддерживает такие соединения как:

  • TCP

  • HTTP

  • Web-socket

  • SMB

  • DNS

    Кроме этого, Mythic имеет около дюжины различных агентов, на писанных на Go, Python, C#, ориентированных на Windows, MacOS, и Linux.

Агентами в этом фреймворке называют типы нагрузок, которые вы можете посмотреть в официальном репозитории MythicAgents, каждая из которых написана на соответствующем языке программирования, в зависимости от ОС.

Установка и монтаж

Докер-контейнеры, которые Mythic использует для агентов, соединений C2 и т.п., могут быть большими, поскольку они могут содержать целые среды сборки, иногда для нескольких ОС.
Установить Mythic можно из официального репозитория GitHub:

git clone https://github.com/its-a-feature/Mythic

Прежде чем запускать Mythic, убедитесь, что у вас установлены Docker и Docker-compose, поскольку они необходимы для установки и запуска фреймворка:

sudo apt update && apt upgrade -y && apt install docker docker-compose

Mythic включает пару скриптов ( install_docker_debian.sh и install_docker_ubuntu.sh), чтобы упростить задачу. (Есть  install_docker_kali.sh, но это только команды, которые я перечислил ранее.)

Mythic управляется через бинарный файл mythic-cli. Чтобы его сгенерировать, пропишите в папке с фреймворком sudo make .
После загрузки вы можете запустить все контейнеры сразу командой:

sudo ./mythic-cli start

Более конкретные инструкции по настройке, конфигурации, примеры, снимки экрана и многое другое можно найти на веб-сайте документации Mythic .

Сам репозиторий не содержит никаких типов полезной нагрузки и профилей С2. Вместо этого Mythic предоставляет команду,

./mythic-cli install github  [branch name] [-f]

которая может быть использована для установки агентов в текущий экземпляр Mythic.
Например:

sudo ./mythic-cli install github https://github.com/MythicAgents/apollo

Начало работы

После того, как вы запустите Mythic командой sudo ./mythic-cli start, вы сможете увидеть все сервисы, которые работают на данный момент.
Нас интересует сервис nginx, на котором висит веб-интерфейс для клиента.

e8c2c4f1ed4898b050c51bdf4e178561.png

Переходим к нему и видим, что нас встречает окно авторизации:

60f49ab2c8c9a3258f18fffee0c93f35.png

Чтобы авторизоваться, нам нужно взять логин и пароль из файла .env в главном каталоге фреймворка:

a33eed81a9b3f068e61f4c8f35b51758.png

Открываем файл и находим нужные нам данные:

afe4b49029a43b5f61b1fc991eadb7fc.png

Теперь мы можем авторизоваться. Нас встречает вот такой веб-интерфейс, который предлагает нам быстрый гайд по генерации нагрузки:

6d8491dbdd2133fdce4c528591365812.png

Как я и сказал, по умолчанию в Mythic не установлены профили или C2-агенты. Все, что вы хотите использовать, необходимо установить с помощью инструмента Mythic CLI. Чтобы установить агент Poseidon, я набрал следующую команду:

sudo ./mythic-cli install github https://github.com/MythicAgents/poseidon

Poseidon устанавливает своё собственное C2-TCP соединение, но это одноранговое соединение для взаимодействия агентов внутри скомпрометированной среды, поэтому, чтобы включить исходящую связь с моим сервером, я также установил http соединение с помощью следующей команды:

sudo ./mythic-cli install github https://github.com/MythicC2Profiles/http

Как я и говорил, Mythic — это платформа с несколькими операторами, и с помощью учетной записи администратора вы можете добавлять пользователей, щелкнув значок пользователя в правом верхнем углу страницы и выбрав нашего пользователя mythic_admin:

f5721abc66b12a7c40182a88fc7fe0f6.png2ef69920200d3552f2807f77aea79722.png

Mythic группирует действия, выполняемые по отношению к цели или связанному с ней набору целей, в «операции». Пользователям Mythic должны быть предоставлены права доступа для каждой операции. Операцией по умолчанию, которая может быть задана в файле .env, является Operation Chimera. Доступ к экрану операций можно получить, нажав кнопку Operation Chimera на панели кнопок в верхней части страницы.

e84f51843d1177b104ce52a006a2c3d0.png

На экране операций можно создавать и редактировать операции, создавать новых пользователей, а также создавать блок-листы команд. Я нажал кнопку New Operation, чтобы создать новую операцию. После ее создания я нажал кнопку Edit для операторов этой операции, и у меня появилась возможность назначить на неё пользователей, задать их роли и назначить блок-листы.

6b540e0ca1381c84f4287076180f1911.png

Доступные роли:

  1. lead— является администратором операции с возможностью добавлять/удалять операторов и изменять роли;

  2. operator — является стандартным оператором;

  3. spectator — может наблюдать за операцией, но не предпринимать никаких действий.

Я назначил свою учетную запись justin руководителем операции, затем вышел из учетной записи mythic_admin и снова вошел в систему с помощью justin. В качестве отступления отмечу, что, даже будучи руководителем операции, я не мог изменить операцию, пока не нажал синюю  кнопку Make Current на экране управления операцией.
Нажатие  Edit кнопки самой операции открывает возможность переименовать операцию, пометить ее как завершенную или настроить веб-перехватчики Slack для этой операции, если вы интегрируетесь со Slack.

f80cb44e5165c8d3b421cdc8513da861.png

Последнее, что есть на странице конфигурации операций, — это раздел черных списков. Черные списки определяют список команд, которые Mythic не разрешит запускать данному агенту (например, Apollo, Poseidon, Merlin).

9fb6bb06133a3412fff26b17a7ee43e9.png

Черные списки можно назначать для каждого пользователя и для каждой операции. Итак, если вы хотите, чтобы конкретный пользователь не мог ничего делать для изменения диска на взломанной машине, вы можете создать черный список, который отключает такие команды, как cp,  upload,  mv,  mkdir и т. д., а затем назначить его на странице редактирования операции  operators.

59e510fe9c78d8e37fe9a4cf72bf228f.png

Профили C2

Я щелкнул значок наушников в верхней части страницы, чтобы открыть страницу «Payload Types and C2 Profiles».

0c97ef0ee1c4ffccc538ef0e0db6b80c.png

На этой странице отображается информация обо всех установленных агентах и ​​соединениях C2. На моем сервере это показало, что у меня установлены агенты Apollo и Poseidon, а также соединения http и Poseidon TCP C2.

Параметры конфигурации соединения http C2 Mythic ограничены изменением заголовков сервера, порта, URL-адреса и включения TLS. Чтобы получить доступ к конфигурации профиля, я нажал стрелку вниз на кнопке start profile , чтобы получить доступ к раскрывающемуся меню, и выбрал  View/Edit Config.

5df9e543e03a8527e8c40df7eadf9771.png

Конфигурация представляет собой файл JSON, который позволяет оператору устанавливать заголовки сервера, порт прослушивания и включать TLS/SSL. Чтобы включить TLS/SSL, установите  значение use ssl как true. Если  key path и cert path являются действительными файлами, Mythic будет использовать их для профиля http C2. В противном случае он будет генерировать самозаверяющие сертификаты.

7261e823219125afaeab5e3962c87db9.png

Я решил использовать профиль по умолчанию. Профиль http C2 будет относительно легко идентифицировать, поскольку каждый запрос будет по существу идентичен.

Я сохранил свою конфигурацию и нажал кнопку Start Profile. Через мгновение появился журнал вывода, подтверждающий действие, а на панели Profile отобразился новый статус.

553f0b4047d919b0aa3ee0e86cc0d64b.png

Агенты

0e8ea5cc73d85f65937f2580252526b0.png

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

Если щелкнуть значок биологической опасности на панели кнопок в верхней части страницы, откроется страница полезных нагрузок.

e311cfa1725a078405ef957399b4afed.png

Я щелкнул на раскрывающийся список Actions и выбрал Generate New Payload из меню.
В качестве целевой операционной системы я выбрал Linux. Выбор целевой ОС ограничит выбор типов агентов на следующем экране.

bd2afba628802ba3a4e44a0b88d5026c.png

Выбрав агента Linux, моими вариантами агентов были Medusa и Poseidon. Я выбрал Medusa и получил параметры сборки. Medusa поддерживает создание агентов в виде обычных скриптов или больших двоичных объектов в кодировке Base64. Он также дает возможность создавать агенты, совместимые с Python 2.7 или 3.8, выбирать реализацию шифрования (вручную или библиотеку cryptography), а также кодировать и шифровать код агента. Я решил использовать настройки по умолчанию.

04ac9a08fcd0f75f60aa2b4e56b0aac6.png

Некоторые типы агентов позволяют оператору настраивать команды, встроенные в агент. Это можно использовать для управления размером полезных данных и для обеспечения невозможности запуска определенных команд. Medusa требует от оператора утвердительно указать, какие команды встроить. Я решил встроить все команды в свой агент.

bb033296c25d67433600b7e95b5f731f.png

На следующей странице я выбрал профиль http C2 (единственный доступный) и установил адрес хоста http://. Другие варианты здесь включают установку даты уничтожения агента, URI и параметров для запросов POST и GET, а также порта обратного вызова.

e4f97497b4467b424c4f0a876bd0e9a0.png

На последней странице создания агента я могу указать имя файла и описание агента и утвердить его создание.

6221965a56f89dfe4da5eb6288c3f542.png

Довольно быстро появилось всплывающее окно с сообщением о том, что агент готов к загрузке, и оно появилось на странице полезных нагрузок.

b63cda7907eca722b3f42861bd80711b.pngf4bd486a43e670c4ff47423b5751ce99.png

Нажатие на значок информации справа вызывает конфигурацию полезной нагрузки, включая список встроенных команд.

f242be06722252ce67fc7091af14b9d6.png

При работе с активным агентом ту же информацию можно получить через раскрывающееся меню агента под этой опцией  View Metadata.

586f9f2bb89d4220a72b547f5df8bb9e.png

В целях тестирования я загрузил агент на машину, с которой работал, запустил его  командой python3 medusa_agent.py и почти сразу же получил обратный вызов. Нажатие на значок клавиатуры позволило мне взаимодействовать с маяком.

be2b9dfa73ac15340d2e8205f9e04eaa.png

Pivots

В Mythic есть С2-каналы, которые поддерживают создание цепочки из маяков в глубине сети, которые соединяются через один маяк, имеющий HTTP-доступ к C2-серверу. Маяк должен быть создан с помощью однорангового С2-соединения, а затем связан с маяком, имеющим прямой или цепной доступ к С2-серверу, с помощью команды link. Наиболее распространено SMB-соединение, хотя маяки Poseidon и Freyja имеют собственные пользовательские TCP P2P.

При выполнении команды link появляется диалоговое окно, в котором оператор может либо выбрать известный хост, с которым уже была установлена связь, либо задать новый хост.

25570375565bae5f666834b973eec579.png

Связанные агенты будут отображаться в виде значка цепочки под типом C2. У них также может быть высокое время последней проверки, поскольку они не регистрируют проверку, если им не была отправлена команда или не поступили данные для возврата.

76dbe1992926cd9c3b29056096496b31.png

SOCKS5

Некоторые агенты Mythic поддерживают создание прокси-серверов SOCKS5, позволяющих оператору проксировать трафик с тестового узла в целевую сеть. Агенты Apollo и Medusa поддерживают SOCKS5-прокси, а новый агент Athena на базе .NET 6 заявлен как бета-версия поддержки прокси.
Оператор может запустить прокси с помощью команды socks [port]. Заданный порт должен находиться в диапазоне, указанном в переменной MYTHIC_SERVER_DYNAMIC_PORTS конфигурационного файла Mythic, которая по умолчанию равна 7000–7010. В настоящее время Mythic поддерживает только TCP через свои SOCKS5-прокси, UDP-соединения не поддерживаются.
После того как оператор создал прокси, щелчком на значке socks в верхней части экрана можно открыть вкладку SOCKS, на которой отображаются все активные прокси, порты и агенты, через которые они работают.

d8394aa4721dccfb3c2ebde855ad349d.png

Поскольку мой сервер Mythic работает на другом хосте, отличном от того, на котором я сижу, мне нужно добавить переадресационный порт к моему ssh-соединению, чтобы сделать прокси-сервер доступным для моих инструментов. Я могу сделать это либо при запуске соединения, добавив его в конец командной строки ssh -L 127.0.0.1:7000:127.0.0.1:7000, либо используя последовательность управления ssh , чтобы добавить его в существующий сеанс, выполнив следующие действия:

$ 
$~C
ssh> -L 127.0.0.1:7000:127.0.0.1:7000

ssh> сообщает мне, что теперь я даю команды непосредственно SSH и могу
 добавить свой порт вперед, как если бы я делал это при запуске клиента.

7773a963007317429217f00604a675f2.png

Теперь, имея прокси-сервер и переадресацию локального порта, я могу использовать проксирование таких инструментов, как Certipy,  через агента.

Замечу, что запуск прокси-сервера SOCKS5 не изменит интервал регистрации агента, поэтому, если кажется, что команды, выполняемые через агента, выполняются исключительно долго, установка этого агента в интерактивный режим () sleep 0 может ускорить дело.

Заключение

Это основы установки и использования Mythic. Это один из наиболее настраиваемых C2, как с точки зрения различных агентов, так и с точки зрения того, как отдельные агенты могут быть адаптированы для конкретной задачи. В следующей статье я покажу как на конкретном примере использовать этот фреймворк. До скорых встреч!

© Habrahabr.ru