
Perfil C2 Mythic que faz túnel do tráfego do agente através de canais do Microsoft Teams usando a API do Microsoft Graph, com criptografia AES256, jitter, datas de encerramento e suporte a proxy.
Um Perfil C2 do Mythic que usa a API do Microsoft Graph para se comunicar através de um canal do Microsoft Teams.
Agent <---> Microsoft Teams Channel <---> C2 Server <---> Mythic
A comunicação aparece como atividade normal do canal do Teams.
Este perfil suporta:
A partir do seu servidor Mythic:
sudo ./mythic-cli install github https://github.com/Whispergate/msteams
Ou a partir de uma pasta local:
sudo ./mythic-cli install folder /path/to/msteams
ChannelMessage.Read.All - Ler mensagens do canalChannelMessage.Send - Enviar mensagens do canalSe ChannelMessage.Send não estiver disponível, use Group.ReadWrite.All ou configure um URL de webhook.
As instruções completas de configuração encontram-se na página de documentação do Mythic após a instalação em https://<your-mythic-server>:7443/docs/c2-profiles/msteams.
Editar através da UI do Mythic: C2 Profiles > msteams > View/Edit Config.
| Parâmetro | Descrição | Predefinição |
|---|---|---|
tenant_id | ID do tenant (diretório) do Entra ID | |
client_id | ID de cliente do registo de aplicação | |
client_secret | Segredo de cliente do registo de aplicação | |
team_id | ID da equipa do Teams | |
channel_id | ID do canal do Teams | |
webhook_url | URL de webhook opcional para envio | |
graph_base | URL base da API Graph | https://graph.microsoft.com/v1.0 |
login_base | URL base do endpoint de login | https://login.microsoftonline.com |
poll_interval | Segundos entre consultas | 10 |
clear_messages | Eliminar mensagens após processamento | false |
debug | Ativar registo detalhado | false |
Qualquer agent Mythic que implemente os parâmetros do perfil C2 msteams pode usar este perfil. O agent precisa de:
Uma infraestrutura de teste simulada está incluída em test/ para testes locais sem qualquer conta Azure ou M365. Isto permite-lhe testar todo o pipeline C2 — incluindo implants compilados — contra uma API Graph falsa local.
Copie test/mock_server.py para o seu host Mythic e inicie-o:
python3 mock_server.py
Isto inicia uma API Graph falsa na porta 8443.
Configure o perfil C2 msteams no Mythic com valores simulados:
{
"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
}
Inicie o perfil msteams na UI do Mythic.
Para testar um agent compilado real contra o mock, o binário do agent precisa de ser compilado com o IP e a porta do servidor simulado codificados em vez dos endpoints reais da API Graph. No código do agent 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
Depois reinstale o Starburst, compile um payload com o perfil msteams (usando os mesmos IDs falsos de tenant/client/team/channel) e execute-o numa VM Windows que consiga alcançar o host Mythic.
Lembre-se de reverter estas alterações antes de compilar payloads de produção:
#define GRAPH_API_HOST "graph.microsoft.com"
#define LOGIN_HOST "login.microsoftonline.com"
#define API_PORT 443
WINHTTP_DEFAULT_ACCEPT_TYPES,
WINHTTP_FLAG_SECURE
Para um teste rápido do pipeline sem compilar um agent:
GRAPH_URL=http://<mythic-host-ip>:8443 python test/fake_agent.py
Consulte test/README.md para mais detalhes.
clear_messages para limpar após o processamentopoll_interval razoável (10-30s) para evitar limitação de taxamsteams/
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