Un perfil de listener para el framework Mythic C2 que utiliza las API de archivos de proveedores de IA
ai_file es un perfil de Mythic C2 que utiliza la API de Files de OpenAI, documentada públicamente, para intercambiar mensajes de implante a través de archivos jsonl en lugar de un listener HTTP/S tradicional. Se basa en el comportamiento de la API de Files definido por OpenAI en la documentación pública: https://developers.openai.com/api/docs/guides/file-inputs?api-mode=responses.
El listener consulta el endpoint /v1/files en busca de archivos .jsonl con purpose=batch, descifra cada sobre de solicitud localmente, reenvía los bytes sin procesar del mensaje de Mythic al /agent_message de Mythic, cifra la respuesta de Mythic y sube un archivo .jsonl de respuesta de vuelta a la API de Files.
\
Desde el directorio de Mythic:
sudo ./mythic-cli install folder /path/to/openai_file
sudo ./mythic-cli c2 start openai_file
Edita C2_Profiles/openai_file/openai_file/c2_code/config.json antes de iniciar el 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
}
]
}
Los valores requeridos son api_key, transport_key y un channel_id coincidente entre el listener y la configuración del perfil del payload. transport_key puede ser base64:<32 raw bytes> o una passphrase de alta entropía; las passphrases se derivan con SHA-256 antes de su uso en el cifrado del sobre.
Los agentes y el listener intercambian archivos usando archivos .jsonl de la API de Files de OpenAI con purpose=batch.
Nombre de archivo de solicitud:
<request_prefix>_<channel_id>_<request_id>.jsonl
Nombre de archivo de respuesta:
<response_prefix>_<channel_id>_<request_id>.jsonl
El prefijo de solicitud predeterminado es mythic_to_server; el prefijo de respuesta predeterminado es mythic_to_agent; el canal predeterminado es mythic.
Cada archivo contiene uno o más objetos JSON, uno por línea:
{"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 es la salida de AES-256-CBC con una etiqueta HMAC-SHA256 final sobre los bytes sin procesar del mensaje de Mythic. nonce es el IV de CBC. nonce y ciphertext están en base64url sin relleno. El AAD es:
v|profile|channel|direction|id|alg
Por ejemplo:
1|openai_file|mythic|request|req_001|aes-256-cbc-hmac-sha256+base64url