Ein Listener-Profil für das Mythic-C2-Framework, das die Datei-APIs von KI-Anbietern nutzt
ai_file ist ein Mythic-C2-Profil, das die öffentlich dokumentierte OpenAI Files API verwendet, um Implantat-Nachrichten über jsonl-Dateien statt über einen traditionellen HTTP/S-Listener auszutauschen. Es stützt sich auf das Verhalten der Files API, das von OpenAI in der öffentlichen Dokumentation definiert wurde: https://developers.openai.com/api/docs/guides/file-inputs?api-mode=responses.
Der Listener fragt den /v1/files-Endpunkt nach .jsonl-Dateien mit purpose=batch ab, entschlüsselt jeden Request-Umschlag lokal, leitet die rohen Mythic-Nachrichtenbytes an Mythics /agent_message weiter, verschlüsselt Mythics Antwort und lädt eine Antwort-.jsonl-Datei zurück in die Files API hoch.
\
Aus dem Mythic-Verzeichnis:
sudo ./mythic-cli install folder /path/to/openai_file
sudo ./mythic-cli c2 start openai_file
Bearbeite C2_Profiles/openai_file/openai_file/c2_code/config.json, bevor du das Profil startest:
{
"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
}
]
}
Erforderliche Werte sind api_key, transport_key und eine übereinstimmende channel_id zwischen dem Listener und der Payload-Profilkonfiguration. transport_key kann base64:<32 raw bytes> oder eine Passphrase mit hoher Entropie sein; Passphrasen werden vor der Verwendung zur Umschlagverschlüsselung mit SHA-256 abgeleitet.
Agenten und der Listener tauschen Dateien über die .jsonl-Dateien der OpenAI Files API mit purpose=batch aus.
Request-Dateiname:
<request_prefix>_<channel_id>_<request_id>.jsonl
Response-Dateiname:
<response_prefix>_<channel_id>_<request_id>.jsonl
Der Standard-Request-Präfix ist mythic_to_server; der Standard-Response-Präfix ist mythic_to_agent; der Standardkanal ist mythic.
Jede Datei enthält ein oder mehrere JSON-Objekte, eines pro Zeile:
{"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 ist die AES-256-CBC-Ausgabe mit einem abschließenden HMAC-SHA256-Tag über die rohen Mythic-Nachrichtenbytes. nonce ist der CBC-IV. nonce und ciphertext sind ungepolstertes base64url. AAD ist:
v|profile|channel|direction|id|alg
Zum Beispiel:
1|openai_file|mythic|request|req_001|aes-256-cbc-hmac-sha256+base64url