
Профиль Mythic C2, который туннелирует трафик агента через каналы Microsoft Teams с использованием Microsoft Graph API, с шифрованием AES256, джиттером, датами отключения и поддержкой прокси.
C2-профиль для Mythic, использующий Microsoft Graph API для связи через канал Microsoft Teams.
Agent <---> Microsoft Teams Channel <---> C2 Server <---> Mythic
Связь выглядит как обычная активность в канале Teams.
Этот профиль поддерживает:
С вашего сервера Mythic:
sudo ./mythic-cli install github https://github.com/Whispergate/msteams
Или из локальной папки:
sudo ./mythic-cli install folder /path/to/msteams
ChannelMessage.Read.All — чтение сообщений каналаChannelMessage.Send — отправка сообщений каналаЕсли ChannelMessage.Send недоступно, используйте Group.ReadWrite.All или настройте URL вебхука.
Полные инструкции по настройке приведены на странице документации Mythic после установки по адресу https://<your-mythic-server>:7443/docs/c2-profiles/msteams.
Редактируется через UI Mythic: C2 Profiles > msteams > View/Edit Config.
| Параметр | Описание | По умолчанию |
|---|---|---|
tenant_id | ID тенанта (каталога) Entra ID | |
client_id | ID клиента регистрации приложения | |
client_secret | Секрет клиента регистрации приложения | |
team_id | ID команды Teams | |
channel_id | ID канала Teams | |
webhook_url | Опциональный URL вебхука для отправки | |
graph_base | Базовый URL Graph API | https://graph.microsoft.com/v1.0 |
login_base | Базовый URL эндпоинта входа | https://login.microsoftonline.com |
poll_interval | Секунды между опросами | 10 |
clear_messages | Удалять сообщения после обработки | false |
debug | Включить подробное логирование | false |
Любой агент Mythic, реализующий параметры C2-профиля msteams, может использовать этот профиль. Агенту необходимо:
Инфраструктура mock-тестирования включена в test/ для локального тестирования без учётной записи Azure или M365. Это позволяет протестировать весь C2-конвейер — включая скомпилированные импланты — против локального поддельного Graph API.
Скопируйте test/mock_server.py на ваш хост Mythic и запустите его:
python3 mock_server.py
Это запускает поддельный Graph API на порту 8443.
Настройте C2-профиль msteams в Mythic с mock-значениями:
{
"tenant_id": "fake-tenant-id",
"client_id": "fake-client-id",
"client_secret": "fake-client-secret",
"team_id": "fake-team-id",
"channel_id": "fake-channel-id",
"graph_base": "http://<mythic-host-ip>:8443/v1.0",
"login_base": "http://<mythic-host-ip>:8443",
"poll_interval": 3,
"clear_messages": true,
"debug": true
}
Запустите профиль msteams в UI Mythic.
Чтобы протестировать реальный скомпилированный агент против mock-сервера, бинарник агента должен быть собран с жёстко прописанными IP и портом mock-сервера вместо реальных эндпоинтов Graph API. В коде агента Starburst (agent_code/src/transport/msteams.cc):
// Change these for mock testing:
#define GRAPH_API_HOST "<mythic-host-ip>"
#define LOGIN_HOST "<mythic-host-ip>"
#define API_PORT 8443
// And change WINHTTP_FLAG_SECURE to 0 in WinHttpOpenRequest
// since the mock server uses plain HTTP:
WINHTTP_DEFAULT_ACCEPT_TYPES,
0
Затем переустановите Starburst, соберите payload с профилем msteams (используя те же fake tenant/client/team/channel IDs) и запустите его на Windows VM, имеющей доступ к хосту Mythic.
Не забудьте откатить эти изменения перед сборкой production payload:
#define GRAPH_API_HOST "graph.microsoft.com"
#define LOGIN_HOST "login.microsoftonline.com"
#define API_PORT 443
WINHTTP_DEFAULT_ACCEPT_TYPES,
WINHTTP_FLAG_SECURE
Для быстрого теста конвейера без компиляции агента:
GRAPH_URL=http://<mythic-host-ip>:8443 python test/fake_agent.py
Подробности см. в test/README.md.
clear_messages для очистки после обработкиpoll_interval (10–30 с), чтобы избежать ограничения скоростиmsteams/
config.json # Mythic container config
C2_Profiles/msteams/
Dockerfile # Container image
main.py # Mythic service entrypoint
requirements.txt # Python dependencies
rabbitmq_config.json # RabbitMQ settings
msteams/
c2_functions/msteams.py # C2Profile class + parameters
c2_code/
server.py # Main polling loop
graph_client.py # MS Graph API client
mythic_client.py # Mythic API forwarder
config.py # Config singleton
config.json # Default config values
documentation-c2/msteams/_index.md # Mythic docs page
test/
mock_server.py # Mock Graph API server
fake_agent.py # Simulated agent for testing
test_c2_server.py # Standalone C2 server test harness
test_config.json # Test config with fake values