Профиль слушателя для фреймворка Mythic C2, использующий файловые API поставщиков ИИ
ai_file — это профиль Mythic C2, использующий публично документированный OpenAI Files API для обмена сообщениями импланта через jsonl-файлы вместо традиционного HTTP/S-листенера. Он опирается на поведение Files API, определённое OpenAI в публичной документации: https://developers.openai.com/api/docs/guides/file-inputs?api-mode=responses.
Листенер опрашивает эндпоинт /v1/files на наличие .jsonl-файлов с purpose=batch, локально расшифровывает каждый конверт запроса, пересылает необработанные байты сообщения Mythic в /agent_message Mythic, шифрует ответ Mythic и загружает ответный .jsonl-файл обратно в Files API.
\
Из директории Mythic:
sudo ./mythic-cli install folder /path/to/openai_file
sudo ./mythic-cli c2 start openai_file
Отредактируйте C2_Profiles/openai_file/openai_file/c2_code/config.json перед запуском профиля:
{
"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
}
]
}
Обязательными значениями являются api_key, transport_key и совпадающий channel_id между конфигурацией листенера и профиля полезной нагрузки. transport_key может быть base64:<32 raw bytes> или высокоэнтропийной парольной фразой; парольные фразы проходят через SHA-256 перед использованием для шифрования конверта.
Агенты и листенер обмениваются файлами через OpenAI Files API, используя .jsonl-файлы с purpose=batch.
Имя файла запроса:
<request_prefix>_<channel_id>_<request_id>.jsonl
Имя файла ответа:
<response_prefix>_<channel_id>_<request_id>.jsonl
Префикс запроса по умолчанию — mythic_to_server; префикс ответа по умолчанию — mythic_to_agent; канал по умолчанию — mythic.
Каждый файл содержит один или несколько JSON-объектов, по одному на строку:
{"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 — это результат AES-256-CBC с завершающим тегом HMAC-SHA256 поверх необработанных байтов сообщения Mythic. nonce — это CBC IV. nonce и ciphertext — это base64url без выравнивающих символов. AAD:
v|profile|channel|direction|id|alg
Например:
1|openai_file|mythic|request|req_001|aes-256-cbc-hmac-sha256+base64url