Привет, Хабр, на связи лаборатория кибербезопасности AP Security. В этой статье мы продолжим разбирать C2-фреймворки. На этот раз будем изучать относительно новый фреймворк под названием Mythic. Приятного прочтения!
Дисклеймер
Все методы примененные в статье продемонстрированы в учебных целях
![](https://habrastorage.org/getpro/habr/upload_files/fac/35c/0cd/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 <url> [branch name] [-f]
которая может быть использована для установки агентов в текущий экземпляр Mythic.
Например:
sudo ./mythic-cli install github https://github.com/MythicAgents/apollo
Начало работы
После того, как вы запустите Mythic командой sudo ./mythic-cli start
, вы сможете увидеть все сервисы, которые работают на данный момент.
Нас интересует сервис nginx, на котором висит веб-интерфейс для клиента.
![](https://habrastorage.org/getpro/habr/upload_files/e8c/2c4/f1e/e8c2c4f1ed4898b050c51bdf4e178561.png)
Переходим к нему и видим, что нас встречает окно авторизации:
![](https://habrastorage.org/getpro/habr/upload_files/60f/49a/b2c/60f49ab2c8c9a3258f18fffee0c93f35.png)
Чтобы авторизоваться, нам нужно взять логин и пароль из файла .env
в главном каталоге фреймворка:
![](https://habrastorage.org/getpro/habr/upload_files/a33/eed/81a/a33eed81a9b3f068e61f4c8f35b51758.png)
Открываем файл и находим нужные нам данные:
![](https://habrastorage.org/getpro/habr/upload_files/afe/4b4/902/afe4b49029a43b5f61b1fc991eadb7fc.png)
Теперь мы можем авторизоваться. Нас встречает вот такой веб-интерфейс, который предлагает нам быстрый гайд по генерации нагрузки:
![](https://habrastorage.org/getpro/habr/upload_files/6d8/491/dbd/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
:
![](https://habrastorage.org/getpro/habr/upload_files/f57/21a/bc6/f5721abc66b12a7c40182a88fc7fe0f6.png)
![](https://habrastorage.org/getpro/habr/upload_files/2ef/699/202/2ef69920200d3552f2807f77aea79722.png)
Mythic группирует действия, выполняемые по отношению к цели или связанному с ней набору целей, в "операции". Пользователям Mythic должны быть предоставлены права доступа для каждой операции. Операцией по умолчанию, которая может быть задана в файле .env
, является Operation Chimera
. Доступ к экрану операций можно получить, нажав кнопку Operation Chimera на панели кнопок в верхней части страницы.
![](https://habrastorage.org/getpro/habr/upload_files/e84/f51/843/e84f51843d1177b104ce52a006a2c3d0.png)
На экране операций можно создавать и редактировать операции, создавать новых пользователей, а также создавать блок-листы команд. Нажмём New Operation
, чтобы создать новую операцию. После ее создания используем Edit
для операторов этой операции, после чего появляется возможность назначить на неё пользователей, задать их роли и назначить блок-листы.
![](https://habrastorage.org/getpro/habr/upload_files/6b5/40e/0ca/6b540e0ca1381c84f4287076180f1911.png)
Доступные роли:
lead
- является администратором операции с возможностью добавлять/удалять операторов и изменять роли;operator
- является стандартным оператором;spectator
- может наблюдать за операцией, но не предпринимать никаких действий.
В начале учётную записьjustin
назначаем руководителем операции, затем выходим из учетной записи mythic_admin
и снова авторизуемся в системе как justin
. В качестве отступления отметим, что даже будучи руководителем операции, изменить операцию не было возможности, пока не была нажата синяя кнопка Make Current
на экране управления операцией.
Нажатие кнопки Edit
самой операции открывает возможность переименовать ее, пометить как завершенную или настроить веб-перехватчики Slack для этой операции, если вы интегрируетесь со Slack.
![](https://habrastorage.org/getpro/habr/upload_files/f80/cb4/4e5/f80cb44e5165c8d3b421cdc8513da861.png)
Последнее, что есть на странице конфигурации операций, — это раздел черных списков. Черные списки определяют список команд, которые Mythic не разрешит запускать данному агенту (например, Apollo, Poseidon, Merlin).
![](https://habrastorage.org/getpro/habr/upload_files/9fb/6bb/061/9fb6bb06133a3412fff26b17a7ee43e9.png)
Черные списки можно назначать для каждого пользователя и для каждой операции. Итак, если вы хотите, чтобы конкретный пользователь не мог ничего делать для изменения диска на взломанной машине, вы можете создать черный список, который отключает такие команды, как cp
, upload
, mv
, mkdir
и т. д., а затем назначить его на странице редактирования операции operators
.
![](https://habrastorage.org/getpro/habr/upload_files/59e/510/fe9/59e510fe9c78d8e37fe9a4cf72bf228f.png)
Профили C2
Значок наушников в верхней части страницы создан, чтобы открыть страницу "Payload Types and C2 Profiles".
![](https://habrastorage.org/getpro/habr/upload_files/0c9/7ef/0ee/0c97ef0ee1c4ffccc538ef0e0db6b80c.png)
На этой странице отображается информация обо всех установленных агентах и соединениях C2. На приведенном в данном примере сервере это показало, что имеются установлены агенты Apollo и Poseidon, а также соединения http и Poseidon TCP C2.
Параметры конфигурации соединения http C2 Mythic ограничены изменением заголовков сервера, порта, URL-адреса и включения TLS. Чтобы получить доступ к конфигурации профиля, необходимо нажать стрелку вниз на кнопке start profile
, чтобы получить доступ к раскрывающемуся меню, и затем выбираем View/Edit Config
.
![](https://habrastorage.org/getpro/habr/upload_files/5df/9e5/43e/5df9e543e03a8527e8c40df7eadf9771.png)
Конфигурация представляет собой файл JSON, который позволяет оператору устанавливать заголовки сервера, порт прослушивания и включать TLS/SSL. Чтобы включить TLS/SSL, установите значение use ssl
как true
. Если key path
и cert path
являются действительными файлами, Mythic будет использовать их для профиля http C2. В противном случае он будет генерировать самозаверяющие сертификаты.
![](https://habrastorage.org/getpro/habr/upload_files/726/1e8/232/7261e823219125afaeab5e3962c87db9.png)
В данной статье использовался профиль по умолчанию. Профиль http C2 будет относительно легко идентифицировать, поскольку каждый запрос будет по существу идентичен.
Сохраняем свою конфигурацию и нажимаем кнопку Start Profile
. Через мгновение появился журнал вывода, подтверждающий действие, а на панели Profile
отобразился новый статус.
![](https://habrastorage.org/getpro/habr/upload_files/553/f0b/404/553f0b4047d919b0aa3ee0e86cc0d64b.png)
Агенты
![](https://habrastorage.org/getpro/habr/upload_files/0e8/ea5/cc7/0e8ea5cc73d85f65937f2580252526b0.png)
Mythic поддерживает множество агентов, каждый из которых имеет свой набор возможностей и поддержку ОС и соединений. Важно внимательно прочитать документацию по конкретному агенту, чтобы убедиться, что агент сможет поддерживать конкретные операции, для которых он будет использоваться.
Если щелкнуть значок биологической опасности на панели кнопок в верхней части страницы, откроется страница полезных нагрузок.
![](https://habrastorage.org/getpro/habr/upload_files/e31/1cf/a17/e311cfa1725a078405ef957399b4afed.png)
Щелкнем на раскрывающийся список Actions
и выберем Generate New Payload
из меню.
В качестве целевой операционной системы используется Linux. Выбор целевой ОС ограничит выбор типов агентов на следующем экране.
![](https://habrastorage.org/getpro/habr/upload_files/bd2/afb/a62/bd2afba628802ba3a4e44a0b88d5026c.png)
Выбрав агента Linux, вариантами агентов были Medusa и Poseidon. Выбор был остановлен на Medusa, после чего получаем параметры сборки. Medusa поддерживает создание агентов в виде обычных скриптов или больших двоичных объектов в кодировке Base64. Он также дает возможность создавать агенты, совместимые с Python 2.7 или 3.8, выбирать реализацию шифрования (вручную или библиотеку cryptography
), а также кодировать и шифровать код агента. В примере используем настройки по умолчанию.
![](https://habrastorage.org/getpro/habr/upload_files/04a/c9a/08f/04ac9a08fcd0f75f60aa2b4e56b0aac6.png)
Некоторые типы агентов позволяют оператору настраивать команды, встроенные в агент. Это можно использовать для управления размером полезных данных и для обеспечения невозможности запуска определенных команд. Medusa требует от оператора утвердительно указать, какие команды встроить. Выстроим все команды в свой агент.
![](https://habrastorage.org/getpro/habr/upload_files/bb0/332/96c/bb033296c25d67433600b7e95b5f731f.png)
На следующей странице был выбран профиль http C2 (единственный доступный) и установил адрес хоста http://<ip_address>
. Другие варианты здесь включают установку даты уничтожения агента, URI и параметров для запросов POST и GET, а также порта обратного вызова.
![](https://habrastorage.org/getpro/habr/upload_files/e4f/974/97b/e4f97497b4467b424c4f0a876bd0e9a0.png)
На последней странице создания агента можно указать имя файла и описание агента и утвердить его создание.
![](https://habrastorage.org/getpro/habr/upload_files/622/196/5a5/6221965a56f89dfe4da5eb6288c3f542.png)
Довольно быстро появилось всплывающее окно с сообщением о том, что агент готов к загрузке, и оно появилось на странице полезных нагрузок.
![](https://habrastorage.org/getpro/habr/upload_files/b63/cda/790/b63cda7907eca722b3f42861bd80711b.png)
![](https://habrastorage.org/getpro/habr/upload_files/f4b/d48/6a4/f4bd486a43e670c4ff47423b5751ce99.png)
Нажатие на значок информации справа вызывает конфигурацию полезной нагрузки, включая список встроенных команд.
![](https://habrastorage.org/getpro/habr/upload_files/f24/2be/067/f242be06722252ce67fc7091af14b9d6.png)
При работе с активным агентом ту же информацию можно получить через раскрывающееся меню агента под этой опцией View Metadata
.
![](https://habrastorage.org/getpro/habr/upload_files/586/f9f/2bb/586f9f2bb89d4220a72b547f5df8bb9e.png)
В целях тестирования загрузим агент на машину, с которой работали, запускаем его командой python3 medusa_agent.py
и почти сразу же получаем обратный вызов. Нажатие на значок клавиатуры позволило осуществить взаимодействие с маяком.
![](https://habrastorage.org/getpro/habr/upload_files/be2/b9d/fa7/be2b9dfa73ac15340d2e8205f9e04eaa.png)
Pivots
В Mythic есть С2-каналы, которые поддерживают создание цепочки из маяков в глубине сети, которые соединяются через один маяк, имеющий HTTP-доступ к C2-серверу. Маяк должен быть создан с помощью однорангового С2-соединения, а затем связан с маяком, имеющим прямой или цепной доступ к С2-серверу, с помощью команды link
. Наиболее распространено SMB-соединение, хотя маяки Poseidon и Freyja имеют собственные пользовательские TCP P2P.
При выполнении команды link
появляется диалоговое окно, в котором оператор может либо выбрать известный хост, с которым уже была установлена связь, либо задать новый хост.
![](https://habrastorage.org/getpro/habr/upload_files/255/703/755/25570375565bae5f666834b973eec579.png)
Связанные агенты будут отображаться в виде значка цепочки под типом C2. У них также может быть высокое время последней проверки, поскольку они не регистрируют проверку, если им не была отправлена команда или не поступили данные для возврата.
![](https://habrastorage.org/getpro/habr/upload_files/76d/be1/992/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, на которой отображаются все активные прокси, порты и агенты, через которые они работают.
![](https://habrastorage.org/getpro/habr/upload_files/d83/94a/a47/d8394aa4721dccfb3c2ebde855ad349d.png)
Поскольку сервер Mythic работает на другом хосте, отличном от того, на котором сидим сейчас, нужно добавить переадресационный порт к моему ssh-соединению, чтобы сделать прокси-сервер доступным для наших инструментов. Это можно сделать это либо при запуске соединения, добавив его в конец командной строки ssh -L 127.0.0.1:7000:127.0.0.1:7000
, либо используя последовательность управления ssh , чтобы добавить его в существующий сеанс, выполнив следующие действия:
$ <enter>
$~C
ssh> -L 127.0.0.1:7000:127.0.0.1:7000
ssh>
сообщает, что теперь даются команды непосредственно SSH имеется возможность добавить свой порт вперед, как если бы это было при запуске клиента.
![](https://habrastorage.org/getpro/habr/upload_files/777/3a9/630/7773a963007317429217f00604a675f2.png)
Теперь, имея прокси-сервер и переадресацию локального порта, используем проксирование таких инструментов, как Certipy, через агента.
Заметим, что запуск прокси-сервера SOCKS5 не изменит интервал регистрации агента, поэтому, если кажется, что команды, выполняемые через агента, выполняются исключительно долго, установка этого агента в интерактивный режим ( ) sleep 0
может ускорить дело.
Заключение
Это основы установки и использования Mythic. Один из наиболее настраиваемых C2, как с точки зрения различных агентов, так и с точки зрения того, как отдельные агенты могут быть адаптированы для конкретной задачи. В следующей статье мы покажем как на конкретном примере использовать этот фреймворк. До скорых встреч!