Resumen ejecutivo
Akamai Hunt ha identificado una nueva cepa de malware que intenta ocultarse tras un terminal de API legítimo de un modelo de lenguaje de gran tamaño (LLM).
El malware envía una cadena que aparenta estar codificada en Base64 para establecer una conexión de mando y control (C2), en lugar de utilizar un esquema habitual.
La explotación de esta técnica podría permitir al atacante obtener el control total y llevar a cabo la exfiltración de datos.
Este es otro ejemplo más de cómo los atacantes están evolucionando rápidamente sus metodologías de ataque, lo que refuerza la necesidad de que las organizaciones se preparen frente a estas amenazas modernas.
Introducción
El panorama de amenazas evoluciona al ritmo de las expectativas, y los atacantes se adaptan con rapidez. A medida que los modelos de lenguaje de gran tamaño (LLM) se generalizan dentro de las organizaciones, sus patrones de comunicación pueden permitir a los atacantes ocultar tráfico malicioso a simple vista.
Del mismo modo que los defensores se apresuran a integrar la IA en los procesos de detección, mediante el uso de LLM para investigar alertas, resumirlas y correlacionar indicadores, los autores de malware también están experimentando con el uso de la IA. Ya hemos observado indicios tempranos con malware como LameHug y PromptLock, que muestran cómo los LLM diseñados para la generación de texto se pueden explotar con fines maliciosos.
También hemos visto un ejemplo de cómo los atacantes emplean la API de OpenAI como infraestructura de mando y control (C2) en la puerta trasera SesameOp, lo que pone de relieve una superficie de ataque completamente nueva dentro del ámbito de la IA.
Recientemente, el equipo de Akamai Hunt descubrió un nuevo malware que emplea un enfoque innovador de explotación de LLM, al combinar tráfico malicioso con el ruido del tráfico legítimo de las solicitudes a API de LLM. En esta entrada del blog, el equipo de Hunt comparte un ejemplo de la amenaza emergente que identificó en el marco de la prestación del servicio a los clientes de Hunt.
Abuso del terminal
Mientras buscábamos nuevos usos de LLM en malware, apareció un archivo que llamó inmediatamente nuestra atención. Ya estaba marcado como malicioso en VirusTotal y coincidía con varias reglas YARA. Al iniciar la investigación, esperábamos encontrar otro patrón de creación de código mediante LLM y su posterior ejecución en el sistema de la víctima.
El malware intenta primero conectarse, mediante un socket, a la dirección IP 39.97.57[.]244. Al no lograrlo, recurre a un C2 HTTP especialmente llamativo: 1347790942-k1bok35vg3.ap-guangzhou.tencentscf[.]com/v1/chat/completions.
Tras observar la primera solicitud HTTP a la API, nos sorprendió comprobar que no seguía los encabezados requeridos para este tipo de peticiones.
El terminal de la API
Parte de nuestra investigación incluyó la búsqueda de usos de terminales de API de LLM, y en particular del terminal /v1/chat/completions.
Según la documentación de OpenAI, este terminal "crea una respuesta del modelo para la conversación de chat proporcionada" (figuras 1 y 2).
curl https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-5",
"messages": [
{
"role": "developer",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Hello!"
}
]
}'
{
"id": "chatcmpl-B9MBs8CjcvOU2jLn4n570S5qMJKcT",
"object": "chat.completion",
"created": 1741569952,
"model": "gpt-4.1-2025-04-14",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Hello! How can I assist you today?",
"refusal": null,
"annotations": []
},
...
El terminal /v1/chat/completions fue introducido por OpenAI y rápidamente emulado por múltiples proveedores y puertas de enlace que ofrecen API compatibles con OpenAI (por ejemplo, OpenRouter y Hugging Face).
No obstante, las API oficiales de otros proveedores pueden utilizar terminales nativos diferentes o presentar variaciones en los parámetros, la autenticación y el comportamiento de streaming, a pesar de mantener un esquema de solicitud similar.
Esquema de solicitud
Normalmente, al utilizar esta API, es necesario añadir los siguientes parámetros obligatorios:
Autorización: se requiere un encabezado de token bearer con el formato "Authorization: Bearer YOUR_API_KEY" para autenticar la solicitud.
Modelo: un identificador de cadena que selecciona un modelo con capacidad de chat (p. ej., gpt-3.5-turbo o Llama-4-Maverick-17B-128E-Instruct-FP8) al que el terminal dirigirá su solicitud.
Mensajes: una matriz de objetos de mensaje etiquetados por rol (con rol y contenido) que representa el historial de la conversación que el modelo utilizará para generar la siguiente respuesta.
Como hemos mencionado antes, ya hemos visto un uso malicioso real de este terminal en entornos reales: LameHug. Los autores del malware utilizaron el mismo terminal para acceder a un modelo de LLM en Hugging Face, solicitando comandos específicos y generando código de forma dinámica para ejecutarlo en el sistema de la víctima (figura 3).
Camuflaje mediante chat completions
Lo primero que observamos al analizar este binario fue que no utiliza ninguno de los campos mencionados. En su lugar, envía una cadena que aparenta estar codificada en Base64 (figura 4).
En teoría, podría haber un LLM detrás de esta API: el atacante podría elaborar una instrucción en el lado del servidor con código personalizado. Sin embargo, en este caso, el motivo para utilizar este terminal de API es también el camuflaje.
Al analizar los datos de nuestro producto API Security, observamos 151 terminales únicos pertenecientes a nuestros clientes. Todas las conversaciones procedentes de estos terminales compartían ciertas similitudes con el esquema. Por ejemplo, algunas API utilizan "query" en lugar de "messages", pero existe una clara semejanza entre todas las sesiones.
Esto indica que, aunque cualquiera puede desarrollar su propio terminal /v1/chat/completions y no existe una solicitud de comentarios (RFC) específica para este terminal, sí hay un estándar de facto que los desarrolladores utilizan en la práctica.
Investigación adicional
Tras decodificar el cuerpo y aplicar XOR con 0xBB, encontramos lo que parece ser la primera solicitud de reconocimiento realizada en el sistema de la víctima.
Seguimos el proceso de análisis de la respuesta y observamos que el malware espera una respuesta que no coincide con el esquema original de la API. Procesa los datos recibidos descifrándolos mediante XOR y Base64, y a continuación ejecuta la instrucción proporcionada en la respuesta (figura 5).
El servidor de C2, 1347790942-k1bok35vg3.ap-guangzhou.tencentscf[.]com, es una función sin servidor en la nube (similar a AWS Lambda o Azure Functions) alojada en Tencent Cloud, un servicio de cloud computing operado por Tencent. El uso de funciones en la nube como servidores de C2 permite a los atacantes ejecutar una infraestructura con escalado automático, resistente y difícil de distinguir del tráfico legítimo.
Nuestra hipótesis es que los atacantes eligieron exponer este terminal específico para parecer más legítimos ante defensores y administradores de red, ya que el uso de este tipo de API se está volviendo cada vez más habitual con el auge de los agentes de IA, las integraciones y las herramientas de automatización.
El malware admite varias instrucciones, lo que permite clasificarlo como un troyano de acceso remoto (RAT) con control remoto completo sobre el sistema de la víctima. Las analizamos para asegurarnos de que todas se comunican con el mismo terminal (consulte el apéndice para ver nuestro análisis).
Por ejemplo, la figura 6 muestra la salida de la instrucción $HunterInfo. Esta instrucción busca archivos de configuración de herramientas específicas de acceso remoto y exfiltra los datos de vuelta a /v1/chat/completions del mismo modo en que se envía el primer mensaje: mediante XOR y Base64.
El malware también contiene tres archivos incrustados, que están cifrados mediante XOR con 0x88 y codificados en Base64.
Todos ellos son archivos .NET con el nombre net_test.exe. En conjunto, orquestan un pequeño conjunto de herramientas de proxy que utiliza SOCKS5 o HTTP dentro de la red de la víctima. Dos de los archivos funcionan como servidores SOCKS5 y HTTP, mientras que el tercero actúa como cliente, capaz de recibir y reenviar tráfico (figura 7).
Archivos adicionales
Identificamos variantes anteriores de este malware (los hashes pueden consultarse en la sección de indicadores de riesgo (IoC) de esta entrada). Estas variantes presentaban instrucciones similares y las mismas rutas codificadas de varias herramientas de acceso remoto ($HunterInfo), aunque el servidor de C2 era diferente.
También encontramos en VirusTotal un archivo RAR que está relacionado con el servidor de C2. El RAR incluye un archivo .lnk (个人简历.lnk, traducido como "Currículum"), que ejecuta el comando ftp -s””:_/_/_/_/_/_/_/_/_. El RAR también contiene archivos .doc dentro de directorios anidados, aunque su contenido es en realidad código binario (figura 8).
El archivo ‘_’ reconstruye los documentos en tres archivos PE y los copia en C:\Users\Public\Update.
Finalmente, ejecuta el siguiente comando:
!call start /min C:\Users\Public\Update\svchost.exe -InstallLsp
C:\Users\Public\Update\360.%TIME:~4,1% >nul (figura 9).
Hay 10 archivos .doc diferentes (0–9.doc), que son similares entre sí salvo por algunos bytes aleatorios. %TIME:~4,1% calcula el segundo dígito del minuto actual en un formato %H:%M:%S.%f. Los documentos carecen del encabezado MZ, probablemente para evitar los escaneos basados en firmas. En función de la hora actual, el script construye el encabezado del archivo .doc y lo copia en C:\Users\Public\Update\360.<minuto>.
svchost.exe
Este archivo es en realidad "SangforPromote.exe", un archivo verificado y firmado de Sangfor Technologies. Cuando se le proporciona el argumento -InstallLsp junto con una DLL, el archivo legítimo carga la DLL y establece el puntero a su exportación mediante LoadLibrary (figura 10).
360 DLL
La DLL, denominada 360, asigna memoria con permisos de lectura, escritura y ejecución (RWX), carga en ella "sc" y, a continuación, lo ejecuta.
sc
Al analizar sc, el código cargado resuelve funciones mediante LoadLibrary y GetProcAddress. Cuenta con dos destinos codificados a los que envía solicitudes HTTP, que coinciden con las direcciones de C2 del malware que analizamos:
https://1347790942-k1bok35vg3.ap-guangzhou.tencentscf[.]com
39.97.57[.]244
También descodifica los datos mediante Base64 y XOR, al igual que las muestras anteriores, lo que establece una clara relación entre los distintos conjuntos de herramientas. Creemos que este flujo descarga el RAT final en el sistema de archivos de la víctima (figura 11).
Protección y mitigación con Akamai Hunt
Los clientes de Akamai Hunt se benefician de una supervisión continua e ininterrumpida de este tipo de artefactos, lo que permite ofrecer protección frente a este tipo de ataques (figura 12).
Incluso antes de que se detecte una amenaza activa, la capacidad de Adaptive Segmentation de Hunt ayuda a las organizaciones a reducir la superficie de exposición y contener el riesgo. Mediante el análisis de los flujos de comunicación normales y el comportamiento de los activos, Adaptive Segmentation puede orientar la definición de políticas que restrinjan el acceso saliente innecesario a terminales de IA, aíslen los entornos de desarrollo y producción, y minimicen las posibles rutas de movimiento lateral.
Esta capacidad amplía la protección de Hunt más allá de la detección, al convertir la visibilidad continua en resiliencia proactiva frente a amenazas emergentes basadas en LLM.
Conclusión
La decisión estratégica de los atacantes de canalizar la exfiltración de datos y el mando y control (C2) a través del terminal /v1/chat/completions explota tanto la omnipresencia como la rápida evolución de los servicios de LLM. Este enfoque ofrece un alto retorno de la inversión, ya que aprovecha la infraestructura de nube existente para crear canales de comunicación que se integran en el tráfico empresarial normal.
El peligro reside en cómo esta técnica alinea tres tendencias predominantes en los entornos modernos que, en conjunto, pueden proporcionar a los adversarios rutas de C2 estables y sigilosas, que parecen benignas bajo una inspección superficial:
Tráfico HTTPS saliente generalizado hacia API en la nube, a menudo sin inspección.
Creciente tolerancia al tráfico generado por máquinas (agentes de IA, aplicaciones e integraciones).
Disponibilidad sencilla de alojamiento en la nube, que proporciona terminales fiables y de larga duración que los atacantes pueden utilizar.
La realidad es que los defensores están aprendiendo sobre la marcha cómo funcionan los LLM y qué amenazas conllevan. Si el tráfico parece lo suficientemente legítimo, existe la posibilidad de que se permita su paso sin contar con las protecciones adecuadas. A veces, esconderse a plena vista es la forma más sencilla de pasar desapercibido.
Al ocultar cargas maliciosas dentro de tráfico destinado a servicios legítimos de LLM, los atacantes se apoyan en un patrón de red cada vez más común, lo que reduce la probabilidad de que sus comunicaciones sean marcadas o investigadas. A medida que las organizaciones adoptan herramientas y automatización basadas en IA, el tráfico hacia terminales de LLM se vuelve algo normal y, dentro de ese ruido, los atacantes encuentran su oportunidad.
IoC
IoC |
Tipo |
|---|---|
93cf0d545a872c393c053031570bc5eaebfa1aa6a0860fd0b08b679b8ce52fd2 - RAT |
Hash |
10c444262994c05930394388e6112ddd98b83118661868bccd83b1fa61160a62 - 1.rar |
Hash |
91c43e7ddd98af63d6b1b130e997b909100f3eaf71e30511858cca4348b509db - _ |
Hash |
9f119d05403b1e079893fb77f6b8b2a9682d1df7ced31a189e7490924ccfb170 - 个人简历.lnk |
Hash |
b7dcf661844e6f3e94eb140a79787be6dad77c09ab0b97cf41a62afd07219190 - versión anterior, mayo de 2025 |
Hash |
2e395436e97eaad9a087825d22005b6afc55044abf458604a5118c2ac9bde42a - versión anterior, septiembre de 2025 |
Hash |
67ea3ea3c58a57dbbdac48d4ce3d546816f715eaf32bec33a64a63c91541e697 - net_test.exe (cliente) |
Hash |
195c283703ee7df7c7ef17c85b0fdf88de22348bb0755daf5f0c3ed319c8d88a - net_test.exe (servidor SOCKS5) |
Hash |
e513d12abd03a4e07788dd85888d187cb6ca6e69a59f22f00853cae0a0b34712 - net_test.exe (servidor HTTP) |
Hash |
1347790942-k1bok35vg3.ap-guangzhou.tencentscf[.]com/v1/chat/completions |
URL |
39.97.57[.]244 |
IP |
C:\Users\Public\Update |
Directorio |
Apéndice
Instrucción |
Descripción |
|---|---|
$ActiveDos |
Devuelve el directorio actual |
$AddUser |
Crea un nuevo usuario local y lo añade al grupo Administradores |
$ExecuteCommand |
Ejecuta comandos |
$FileDelete |
Elimina un archivo |
$FileDownLoad \ $BigFileDownLoad |
Descarga un archivo desde el sistema de la víctima |
$FileExist |
Devuelve si un archivo existe o no |
$FileUpload \ $BigFileUpload |
Escribe un archivo en el sistema de archivos de la víctima |
$Get_LocalDisk |
Obtiene las unidades del sistema de la víctima |
$GetFile |
Obtiene información de un archivo (tamaño, marcas de tiempo) |
$GetFolder |
Enumera las carpetas de un directorio determinado |
$GetFolderAndFile |
Enumera una carpeta y obtiene los archivos que contiene |
$GetProcess |
Enumera los procesos |
$GetThreadPermissionsInfo |
Obtiene información sobre los hilos del proceso del malware |
$HunterInfo |
Roba datos de 360 Secure Browser, SunLogin, ToDesk, NetSarang y también de Chrome |
$KillProcess |
Finaliza un proceso con el PID especificado |
$MessageBox |
Muestra un cuadro de mensaje con la cadena proporcionada |
$Netstat |
Ejecuta netstat para ver las conexiones activas |
$OffLine |
Finaliza el proceso |
$Online |
Envía de nuevo los datos iniciales de la víctima (figura 4) |
$PE64Loader |
Inicia explorer.exe e inyecta en él un loader de shellcode |
$PEMemoryLoadOnSelf |
Carga código desde un buffer. El malware comprueba varios argumentos recibidos, como "JuicyPotato" o "PwDump", y establece una variable de entorno con ese nombre, lo que nos lleva a pensar que tiene la capacidad de utilizarlos como módulos o plugins. |
$Persistence |
Recibe una DLL desde el C2
Además, puede crear una tarea programada. |
$ProgressSpawn |
Crea o verifica una carga útil en C:\Users\Public y la ejecuta mediante distintos métodos, como ShellExecute, -InstallLsp o carga en memoria, en función de los argumentos. |
$RegManage |
Parece no estar implementada |
$ScreenShot |
Realiza una captura de pantalla |
$ScreenSpy |
Modifica claves del registro de TightVNC para habilitar el control remoto, probablemente asumiendo que la víctima tiene TightVNC instalado o como parte de una fase previa o futura del ataque. |
Etiquetas