Synthèse
Akamai Hunt a identifié une nouvelle souche de logiciel malveillant qui tente de se dissimuler derrière un point de terminaison d'API de LLM (grand modèle de langage) légitime.
Le logiciel malveillant envoie une chaîne qui semble être encodée en Base64 afin d'établir une connexion de commande et contrôle (C2), au lieu d'utiliser un schéma classique.
Cette méthode pourrait permettre aux attaquants d'obtenir un contrôle total sur le système et d'exfiltrer des données.
Cet exemple illustre une fois de plus la rapidité avec laquelle les attaquants renouvellent leurs techniques, ce qui accentue la nécessité pour les entreprises de se préparer aux menaces d'aujourd'hui.
Introduction
L'écosystème des menaces progresse au rythme effréné des tendances, et les attaquants ne tardent pas à suivre. Le schéma de communication des grands modèles de langage (LLM), dont l'adoption se généralise au sein des entreprises, peut permettre aux attaquants de dissimuler leur trafic malveillant.
Tout comme les équipes de protection s'empressent d'intégrer l'IA dans les pipelines de détection, notamment en utilisant des LLM pour enquêter sur les alertes, les synthétiser et mettre les indicateurs en corrélation, les développeurs de logiciels malveillants expérimentent avec l'IA. Nous en avons déjà observé les premiers signes avec des logiciels malveillants comme LameHug et PromptLock, qui illustrent comment les LLM conçus pour la génération de texte peuvent être détournés à des fins malveillantes.
Les cybercriminels innovent, par exemple en exploitant l'API d'OpenAI comme infrastructure de commande et de contrôle (C2) via la porte dérobée SesameOp, révélant ainsi une toute nouvelle surface d'attaque dans le monde de l'IA.
Récemment, l'équipe Akamai Hunt a découvert un nouveau logiciel malveillant, dont l'approche consiste à se fondre dans le trafic d'API de LLM pour passer inaperçu. Dans cet article de blog, l'équipe Hunt partage un exemple de la menace émergente qu'elle a identifiée dans le cadre de ses services aux clients.
Abus du point de terminaison
En explorant de nouveaux scénarios d'abus des LLM dans les logiciels malveillants, un fichier a retenu notre attention. Déjà signalé comme malveillant sur VirusTotal et associé à plusieurs règles Yara, il semblait prometteur. Lorsque nous avons commencé notre enquête, nous nous attendions à retrouver un schéma classique : génération de code via LLM et exécution sur la machine victime.
Mais son comportement s'est avéré différent. Le logiciel malveillant tente d'abord de se connecter à l'adresse IP 39.97.57[.]244 via un socket, mais en cas d'échec, il bascule vers un C2 HTTP surprenant : 1347790942-k1bok35vg3.ap-guangzhou.tencentscf[.]com/v1/chat/completions.
Après avoir observé la première requête HTTP vers l'API, nous avons été surpris de constater qu'elle ne respectait pas les en-têtes requis pour ce type de requête.
Les points de terminaison d'API
Dans le cadre de nos recherches, nous avons examiné les points de terminaison d'API des LLM, notamment /v1/chat/completions.
D'après la documentation d'OpenAI, ce point de terminaison « crée une réponse de modèle pour la conversation donnée » (Figure 1 et Figure 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": []
},
...
Le point de terminaison /v1/chat/completions a été introduit par OpenAI et rapidement reproduit par plusieurs fournisseurs et passerelles qui offrent des API compatibles avec OpenAI (par exemple, OpenRouter et Hugging Face).
Cependant, les API officielles d'autres fournisseurs peuvent utiliser des points de terminaison natifs différents ou présenter des variations au niveau des paramètres, de l'authentification et du comportement en streaming, malgré un schéma de requête similaire.
Schéma de requête
En général, lorsque vous utilisez cette API, les paramètres suivants sont requis :
Autorisation : un en-tête avec jeton Bearer « Autorization: Bearer YOUR_API_KEY » est requis pour authentifier la requête
Modèle : un identifiant de chaîne sélectionnant un modèle compatible avec le chat (par exemple, gpt-3.5-turbo ou Llama-4-Maverick-17B-128E-Instruct-FP8) vers lequel le point de terminaison acheminera votre requête
Messages : un tableau d'objets de message avec rôle et contenu, représentant l'historique de conversation que le modèle utilisera pour générer la prochaine réponse
Comme mentionné plus tôt, nous avons déjà observé un exemple concret d'utilisation malveillante de ce point de terminaison : LameHug. Les développeurs de logiciels malveillants ont utilisé le même point de terminaison pour accéder à un modèle LLM sur Hugging Face, en lui demandant des commandes spécifiques et en générant dynamiquement du code à exécuter sur la machine victime (Figure 3).
Dissimulation dans les complétions de chat
La première chose que nous avons remarquée en analysant ce binaire est qu'il n'utilise aucun des champs mentionnés. À la place, il envoie une chaîne qui semble être encodée en Base64 (Figure 4).
En théorie, il peut y avoir un LLM derrière cette API : l'attaquant pourrait créer un prompt côté serveur avec du code personnalisé. Cependant, dans ce cas, ce point de terminaison d'API est également utilisé à des fins de camouflage.
En analysant les données de notre produit API Security, nous avons identifié 151 points de terminaison distincts utilisés par nos clients. Chaque conversation issue de ces points de terminaison présentait des similitudes avec le schéma attendu. Certaines API utilisent « query » au lieu de « messages », par exemple, mais toutes les sessions présentent une ressemblance très claire.
Cela nous indique que, même si chacun peut développer son propre point de terminaison /v1/chat/completions et qu'aucune RFC (Request for Comments, ou demande de commentaires) ne définit ce point de terminaison, il existe malgré tout un standard de facto adopté par les développeurs.
Recherches supplémentaires
Après avoir décodé le corps et appliqué un XOR avec 0xBB, nous avons trouvé ce qui semble être la première requête de reconnaissance effectuée sur la machine victime.
Nous avons suivi le processus d'analyse syntaxique de la réponse et constaté que le logiciel malveillant attendait une réponse qui ne correspond pas au schéma original de l'API. Il traite les données reçues en les déchiffrant via XOR et Base64, puis exécute les instructions fournies dans la réponse (Figure 5).
Le serveur C2, 1347790942-k1bok35vg3.ap-guangzhou.tencentscf[.]com, est une fonction cloud sans serveur (similaire à AWS Lambda ou Azure Functions) hébergée sur Tencent Cloud, un service de Cloud Computing géré par Tencent. L'utilisation de fonctions cloud comme serveurs C2 permet aux attaquants de déployer une infrastructure autoscalable, résiliente et difficile à distinguer du trafic légitime.
Nous pensons que les attaquants ont choisi d'exposer ce point de terminaison spécifique pour paraître plus légitimes aux yeux des équipes de protection et des administrateurs réseau, car l'usage de ce point de terminaison d'API devient de plus en plus courant avec l'essor des agents d'IA, des intégrations et des outils d'automatisation.
Le logiciel malveillant prend en charge plusieurs instructions, ce qui le classe comme un cheval de Troie d'accès à distance (RAT) offrant un contrôle complet sur la machine victime. Nous les avons analysées pour vérifier qu'elles communiquent toutes avec le même point de terminaison (voir l'annexe pour plus de détails).
Par exemple, la Figure 6 montre la sortie de l'instruction $HunterInfo. Elle recherche les fichiers de configuration d'outils d'accès à distance spécifiques et exfiltre les données vers /v1/chat/completions de la même manière que le premier message, avec XOR et Base64.
Le logiciel malveillant contient également trois fichiers intégrés, XORés avec 0x88 et encodés en Base64.
Tous sont des fichiers .NET nommés net_test.exe. Ensemble, ils orchestrent un petit kit d'outils proxy utilisant les protocoles SOCKS5 ou HTTP dans le réseau de la machine victime. Deux des fichiers sont des serveurs SOCKS5 et HTTP, tandis que le troisième est un client qui peut recevoir et transférer du trafic (Figure 7).
Fichiers supplémentaires
Nous avons identifié d'anciennes variantes de ce logiciel malveillant (hash disponible dans la section IOC de cet article). Elles comportaient des instructions similaires et les mêmes chemins codés en dur pour plusieurs outils d'accès à distance ($HunterInfo), mais le serveur C2 était différent.
Nous avons également trouvé un fichier RAR sur VirusTotal, qui est lié au serveur C2. Le RAR inclut un fichier .lnk (个人简历.lnk, traduit par « CV »), exécutant ftp -s””:_/_/_/_/_/_/_/_/_. Le RAR contient aussi des fichiers .doc dans des répertoires imbriqués, bien que leur contenu soit du code binaire (Figure 8).
Le fichier « _ » construit les fichiers .doc en trois fichiers PE et les copie dans C:\Users\Public\Update.
Enfin, il exécute :
!call start /min C:\Users\Public\Update\svchost.exe -InstallLsp
C:\Users\Public\Update\360.%TIME:~4,1% >nul (Figure 9).
Il y a 10 fichiers .doc différents (0–9.doc), similaires à quelques octets près. %TIME:~4,1% calcule le deuxième chiffre de la minute actuelle dans le format %H:%M:%S.%f. Les fichiers .doc n'ont pas d'en-tête MZ, probablement pour éviter les analyses par signature. En fonction de l'heure, le script construit l'en-tête du fichier .doc et le copie dans C:\Users\Public\Update\360.<minute>.
svchost.exe
Ce fichier est en réalité « SangforPromote.exe », un fichier signé et vérifié de Sangfor Technologies. Lorsque l'argument -InstallLsp et une DLL sont utilisés, le fichier légitime charge la DLL et définit le pointeur vers son export via LoadLibrary (Figure 10).
360 DLL
La DLL, nommée 360, alloue de la mémoire avec des autorisations de lecture, d'écriture et d'exécution (RWX), y insère « sc », puis l'exécute.
sc
En analysant sc, le code chargé résout des fonctions via LoadLibrary et GetProcAddress. Il comporte deux destinations codées en dur pour envoyer des requêtes HTTP, qui correspondent aux adresses C2 du logiciel malveillant analysé :
https://1347790942-k1bok35vg3.ap-guangzhou.tencentscf[.]com
39.97.57[.]244
Il décode également les données avec Base64 et XOR comme les échantillons précédents, ce qui établit un lien entre les outils. Nous pensons que ce flux télécharge le RAT final dans le système de fichiers de la machine victime (Figure 11).
Protection et atténuation avec Akamai Hunt
Les clients Akamai Hunt bénéficient d'une surveillance continue 24 h/24, 7 j/7 pour détecter ces artefacts, assurant leur protection contre ce type d'attaque (Figure 12).
Avant même la détection d'une menace active, la fonctionnalité Adaptive Segmentation de Hunt aide les entreprises à réduire leur exposition et contenir les risques. En analysant les flux de communication normaux et les comportements des actifs, Adaptive Segmentation peut orienter des règles qui limitent les accès sortants inutiles aux points de terminaison d'IA, isolent les environnements de développement et de production, et minimisent les risques de mouvement latéral.
Cette fonctionnalité étend la protection de Hunt au-delà de la détection en transformant la visibilité continue en résilience proactive contre les menaces émergentes liées aux LLM.
Conclusion
La décision stratégique des attaquants d'acheminer l'exfiltration et le C2 via le point de terminaison /v1/chat/completions exploite à la fois l'ubiquité et l'évolution rapide des services LLM. Cette approche offre un retour sur investissement potentiel élevé, car elle s'appuie sur l'infrastructure cloud existante pour créer des canaux de communication qui se fondent dans le trafic normal de l'entreprise.
Le danger réside dans la convergence de trois tendances majeures des environnements actuels, qui ensemble offrent aux adversaires des chemins C2 stables et furtifs, semblant bénins à première vue :
L'utilisation généralisée, souvent non inspectée, du HTTPS sortant vers des API cloud
La tolérance croissante au trafic généré par des machines (agents d'IA, applications, intégrations)
La disponibilité facile d'hébergements cloud offrant des points de terminaison fiables et durables que les attaquants peuvent exploiter
La réalité est que les équipes de protection apprennent encore à comprendre le fonctionnement des LLM et les menaces qu'ils impliquent. Si le trafic paraît suffisamment légitime, il risque de passer sans protection adéquate. Parfois, se cacher à la vue de tous est le moyen le plus simple de s'infiltrer.
En dissimulant des charges utiles malveillantes dans le trafic destiné à des services LLM légitimes, les attaquants profitent d'un schéma réseau de plus en plus courant, réduisant ainsi les chances que leurs communications soient signalées ou examinées. À mesure que les entreprises adoptent les outils d'IA et l'automatisation, le trafic vers les points de terminaison LLM devient normal. Ce contexte offre de nouvelles opportunités aux attaquants.
IOC
IOC |
Type |
|---|---|
93cf0d545a872c393c053031570bc5eaebfa1aa6a0860fd0b08b679b8ce52fd2 - RAT |
Hachage |
10c444262994c05930394388e6112ddd98b83118661868bccd83b1fa61160a62 - 1.rar |
Hachage |
91c43e7ddd98af63d6b1b130e997b909100f3eaf71e30511858cca4348b509db - _ |
Hachage |
9f119d05403b1e079893fb77f6b8b2a9682d1df7ced31a189e7490924ccfb170 - 个人简历.lnk |
Hachage |
b7dcf661844e6f3e94eb140a79787be6dad77c09ab0b97cf41a62afd07219190 - ancienne variante, mai 2025 |
Hachage |
2e395436e97eaad9a087825d22005b6afc55044abf458604a5118c2ac9bde42a - ancienne variante, septembre 2025 |
Hachage |
67ea3ea3c58a57dbbdac48d4ce3d546816f715eaf32bec33a64a63c91541e697 - net_test.exe (client) |
Hachage |
195c283703ee7df7c7ef17c85b0fdf88de22348bb0755daf5f0c3ed319c8d88a - net_test.exe (serveur SOCKS5) |
Hachage |
e513d12abd03a4e07788dd85888d187cb6ca6e69a59f22f00853cae0a0b34712 - net_test.exe (serveur HTTP) |
Hachage |
1347790942-k1bok35vg3.ap-guangzhou.tencentscf[.]com/v1/chat/completions |
URL |
39.97.57[.]244 |
Adresse IP |
C:\Users\Public\Update |
Répertoire |
Annexe
Instruction |
Description |
|---|---|
$ActiveDos |
Renvoie le répertoire actuel |
$AddUser |
Crée un nouvel utilisateur local et l'ajoute au groupe Administrateurs |
$ExecuteCommand |
Exécution de commande |
$FileDelete |
Supprime un fichier |
$FileDownLoad \ $BigFileDownLoad |
Télécharge un fichier depuis la machine de la victime |
$FileExist |
Indique si un fichier existe |
$FileUpload \ $BigFileUpload |
Écrit un fichier dans le système de fichiers de la cible |
$Get_LocalDisk |
Récupère les lecteurs de la cible |
$GetFile |
Obtient les données d'un fichier (taille, horodatages) |
$GetFolder |
Liste les dossiers d'un répertoire donné |
$GetFolderAndFile |
Liste un dossier et récupère les fichiers |
$GetProcess |
Liste les processus |
$GetThreadPermissionsInfo |
Informations sur les threads du processus malveillant |
$HunterInfo |
Vole les données de 360 Secure Browser, SunLogin, ToDesk, NetSarang et Chrome |
$KillProcess |
Met fin à un processus avec le PID indiqué |
$MessageBox |
Affiche une boîte de dialogue avec la chaîne fournie |
$Netstat |
Exécute netstat pour afficher les connexions actives |
$OffLine |
Met fin au processus |
$Online |
Renvoie à nouveau les données initiales de la victime (Figure 4) |
$PE64Loader |
Lance explorer.exe et injecte un chargeur de shellcode |
$PEMemoryLoadOnSelf |
Charge du code à partir d'un tampon. Le logiciel malveillant recherche plusieurs arguments reçus tels que « JuicyPotato » ou « PwDump », et définit une variable d'environnement avec ce nom, ce qui laisse penser qu'il peut l'utiliser comme « module » ou plug-in. |
$Persistence |
Reçoit une DLL depuis le C2 :
Peut également créer une tâche planifiée. |
$ProgressSpawn |
Crée ou vérifie une charge utile sous C:\Users\Public et l'exécute via différentes méthodes, telles que ShellExecute, -InstallLsp ou le chargement en mémoire, selon les arguments |
$RegManage |
Semble non implémenté |
$ScreenShot |
Prend une capture d'écran |
$ScreenSpy |
Modifie les clés de registre TightVNC pour activer le contrôle à distance, probablement en supposant que la victime dispose de TightVNC, ou pour une étape précédente\future de l'attaque |
Balises