Рассматриваем мифический фреймворк C2 Mythic. Часть 1
Всех приветствую, на связи лаборатория кибербезопасности AP Security. В этой статье мы продолжим разбирать C2-фреймворки. На этот раз, мы будем изучать относительно новый фреймворк под названием Mythic. Приятного прочтения!
Дисклеймер
Все методы примененные в статье продемонстрированы в учебных целях
Описание
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, на котором висит веб-интерфейс для клиента.
Переходим к нему и видим, что нас встречает окно авторизации:
Чтобы авторизоваться, нам нужно взять логин и пароль из файла .env
в главном каталоге фреймворка:
Открываем файл и находим нужные нам данные:
Теперь мы можем авторизоваться. Нас встречает вот такой веб-интерфейс, который предлагает нам быстрый гайд по генерации нагрузки:
Как я и сказал, по умолчанию в 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
:
Mythic группирует действия, выполняемые по отношению к цели или связанному с ней набору целей, в «операции». Пользователям Mythic должны быть предоставлены права доступа для каждой операции. Операцией по умолчанию, которая может быть задана в файле .env
, является Operation Chimera
. Доступ к экрану операций можно получить, нажав кнопку Operation Chimera на панели кнопок в верхней части страницы.
На экране операций можно создавать и редактировать операции, создавать новых пользователей, а также создавать блок-листы команд. Я нажал кнопку New Operation
, чтобы создать новую операцию. После ее создания я нажал кнопку Edit
для операторов этой операции, и у меня появилась возможность назначить на неё пользователей, задать их роли и назначить блок-листы.
Доступные роли:
lead
— является администратором операции с возможностью добавлять/удалять операторов и изменять роли;operator
— является стандартным оператором;spectator
— может наблюдать за операцией, но не предпринимать никаких действий.
Я назначил свою учетную запись justin
руководителем операции, затем вышел из учетной записи mythic_admin
и снова вошел в систему с помощью justin
. В качестве отступления отмечу, что, даже будучи руководителем операции, я не мог изменить операцию, пока не нажал синюю кнопку Make Current
на экране управления операцией.
Нажатие Edit
кнопки самой операции открывает возможность переименовать операцию, пометить ее как завершенную или настроить веб-перехватчики Slack для этой операции, если вы интегрируетесь со Slack.
Последнее, что есть на странице конфигурации операций, — это раздел черных списков. Черные списки определяют список команд, которые Mythic не разрешит запускать данному агенту (например, Apollo, Poseidon, Merlin).
Черные списки можно назначать для каждого пользователя и для каждой операции. Итак, если вы хотите, чтобы конкретный пользователь не мог ничего делать для изменения диска на взломанной машине, вы можете создать черный список, который отключает такие команды, как cp
, upload
, mv
, mkdir
и т. д., а затем назначить его на странице редактирования операции operators
.
Профили C2
Я щелкнул значок наушников в верхней части страницы, чтобы открыть страницу «Payload Types and C2 Profiles».
На этой странице отображается информация обо всех установленных агентах и соединениях C2. На моем сервере это показало, что у меня установлены агенты Apollo и Poseidon, а также соединения http и Poseidon TCP C2.
Параметры конфигурации соединения http C2 Mythic ограничены изменением заголовков сервера, порта, URL-адреса и включения TLS. Чтобы получить доступ к конфигурации профиля, я нажал стрелку вниз на кнопке start profile
, чтобы получить доступ к раскрывающемуся меню, и выбрал View/Edit Config
.
Конфигурация представляет собой файл JSON, который позволяет оператору устанавливать заголовки сервера, порт прослушивания и включать TLS/SSL. Чтобы включить TLS/SSL, установите значение use ssl
как true
. Если key path
и cert path
являются действительными файлами, Mythic будет использовать их для профиля http C2. В противном случае он будет генерировать самозаверяющие сертификаты.
Я решил использовать профиль по умолчанию. Профиль http C2 будет относительно легко идентифицировать, поскольку каждый запрос будет по существу идентичен.
Я сохранил свою конфигурацию и нажал кнопку Start Profile
. Через мгновение появился журнал вывода, подтверждающий действие, а на панели Profile
отобразился новый статус.
Агенты
Mythic поддерживает множество агентов, каждый из которых имеет свой набор возможностей и поддержку ОС и соединений. Важно внимательно прочитать документацию по конкретному агенту, чтобы убедиться, что агент сможет поддерживать конкретные операции, для которых он будет использоваться.
Если щелкнуть значок биологической опасности на панели кнопок в верхней части страницы, откроется страница полезных нагрузок.
Я щелкнул на раскрывающийся список Actions
и выбрал Generate New Payload
из меню.
В качестве целевой операционной системы я выбрал Linux. Выбор целевой ОС ограничит выбор типов агентов на следующем экране.
Выбрав агента Linux, моими вариантами агентов были Medusa и Poseidon. Я выбрал Medusa и получил параметры сборки. Medusa поддерживает создание агентов в виде обычных скриптов или больших двоичных объектов в кодировке Base64. Он также дает возможность создавать агенты, совместимые с Python 2.7 или 3.8, выбирать реализацию шифрования (вручную или библиотеку cryptography
), а также кодировать и шифровать код агента. Я решил использовать настройки по умолчанию.
Некоторые типы агентов позволяют оператору настраивать команды, встроенные в агент. Это можно использовать для управления размером полезных данных и для обеспечения невозможности запуска определенных команд. Medusa требует от оператора утвердительно указать, какие команды встроить. Я решил встроить все команды в свой агент.
На следующей странице я выбрал профиль http C2 (единственный доступный) и установил адрес хоста http://
. Другие варианты здесь включают установку даты уничтожения агента, URI и параметров для запросов POST и GET, а также порта обратного вызова.
На последней странице создания агента я могу указать имя файла и описание агента и утвердить его создание.
Довольно быстро появилось всплывающее окно с сообщением о том, что агент готов к загрузке, и оно появилось на странице полезных нагрузок.
Нажатие на значок информации справа вызывает конфигурацию полезной нагрузки, включая список встроенных команд.
При работе с активным агентом ту же информацию можно получить через раскрывающееся меню агента под этой опцией View Metadata
.
В целях тестирования я загрузил агент на машину, с которой работал, запустил его командой python3 medusa_agent.py
и почти сразу же получил обратный вызов. Нажатие на значок клавиатуры позволило мне взаимодействовать с маяком.
Pivots
В Mythic есть С2-каналы, которые поддерживают создание цепочки из маяков в глубине сети, которые соединяются через один маяк, имеющий HTTP-доступ к C2-серверу. Маяк должен быть создан с помощью однорангового С2-соединения, а затем связан с маяком, имеющим прямой или цепной доступ к С2-серверу, с помощью команды link
. Наиболее распространено SMB-соединение, хотя маяки Poseidon и Freyja имеют собственные пользовательские TCP P2P.
При выполнении команды link
появляется диалоговое окно, в котором оператор может либо выбрать известный хост, с которым уже была установлена связь, либо задать новый хост.
Связанные агенты будут отображаться в виде значка цепочки под типом C2. У них также может быть высокое время последней проверки, поскольку они не регистрируют проверку, если им не была отправлена команда или не поступили данные для возврата.
SOCKS5
Некоторые агенты Mythic поддерживают создание прокси-серверов SOCKS5, позволяющих оператору проксировать трафик с тестового узла в целевую сеть. Агенты Apollo и Medusa поддерживают SOCKS5-прокси, а новый агент Athena на базе .NET 6 заявлен как бета-версия поддержки прокси.
Оператор может запустить прокси с помощью команды socks [port]
. Заданный порт должен находиться в диапазоне, указанном в переменной MYTHIC_SERVER_DYNAMIC_PORTS
конфигурационного файла Mythic, которая по умолчанию равна 7000–7010. В настоящее время Mythic поддерживает только TCP через свои SOCKS5-прокси, UDP-соединения не поддерживаются.
После того как оператор создал прокси, щелчком на значке socks
в верхней части экрана можно открыть вкладку SOCKS, на которой отображаются все активные прокси, порты и агенты, через которые они работают.
Поскольку мой сервер 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 и могу
добавить свой порт вперед, как если бы я делал это при запуске клиента.
Теперь, имея прокси-сервер и переадресацию локального порта, я могу использовать проксирование таких инструментов, как Certipy, через агента.
Замечу, что запуск прокси-сервера SOCKS5 не изменит интервал регистрации агента, поэтому, если кажется, что команды, выполняемые через агента, выполняются исключительно долго, установка этого агента в интерактивный режим () sleep 0
может ускорить дело.
Заключение
Это основы установки и использования Mythic. Это один из наиболее настраиваемых C2, как с точки зрения различных агентов, так и с точки зрения того, как отдельные агенты могут быть адаптированы для конкретной задачи. В следующей статье я покажу как на конкретном примере использовать этот фреймворк. До скорых встреч!