Um perfil de listener para o framework Mythic C2 que utiliza as APIs de arquivos de fornecedores de IA
ai_file é um perfil Mythic C2 que usa a API OpenAI Files, publicamente documentada, para trocar mensagens de implante por meio de arquivos jsonl em vez de um listener HTTP/S tradicional. Ele depende do comportamento da Files API definido pela OpenAI na documentação pública: https://developers.openai.com/api/docs/guides/file-inputs?api-mode=responses.
O listener consulta o endpoint /v1/files em busca de arquivos .jsonl com purpose=batch, descriptografa cada envelope de requisição localmente, encaminha os bytes brutos da mensagem Mythic para o /agent_message do Mythic, criptografa a resposta do Mythic e envia um arquivo .jsonl de resposta de volta para a Files API.
\
A partir do diretório do Mythic:
sudo ./mythic-cli install folder /path/to/openai_file
sudo ./mythic-cli c2 start openai_file
Edite C2_Profiles/openai_file/openai_file/c2_code/config.json antes de iniciar o perfil:
{
"instances": [
{
"name": "default",
"api_key": "REPLACE_ME",
"base_url": "https://api.openai.com/v1",
"organization": "",
"project": "",
"purpose": "batch",
"channel_id": "mythic",
"request_prefix": "mythic_to_server",
"response_prefix": "mythic_to_agent",
"transport_key": "REPLACE_ME",
"poll_interval_seconds": 5,
"delete_processed_files": true,
"debug": true,
"max_file_bytes": 10485760,
"mythic_host": "",
"mythic_port": 0
}
]
}
Os valores obrigatórios são api_key, transport_key e um channel_id correspondente entre o listener e a configuração do perfil do payload. transport_key pode ser base64:<32 raw bytes> ou uma passphrase de alta entropia; passphrases são derivadas via SHA-256 antes do uso na criptografia do envelope.
Os agentes e o listener trocam arquivos usando arquivos .jsonl da Files API da OpenAI com purpose=batch.
Nome do arquivo de requisição:
<request_prefix>_<channel_id>_<request_id>.jsonl
Nome do arquivo de resposta:
<response_prefix>_<channel_id>_<request_id>.jsonl
O prefixo de requisição padrão é mythic_to_server; o prefixo de resposta padrão é mythic_to_agent; o canal padrão é mythic.
Cada arquivo contém um ou mais objetos JSON, um por linha:
{"v":1,"profile":"openai_file","channel":"mythic","direction":"request","id":"req_001","alg":"aes-256-cbc-hmac-sha256+base64url","nonce":"...","ciphertext":"...","created_at":0}
ciphertext é a saída do AES-256-CBC com uma tag HMAC-SHA256 anexada sobre os bytes brutos da mensagem Mythic. nonce é o IV do CBC. nonce e ciphertext são base64url sem padding. O AAD é:
v|profile|channel|direction|id|alg
Por exemplo:
1|openai_file|mythic|request|req_001|aes-256-cbc-hmac-sha256+base64url