31 Mars 2025

IA x pickle : vulnérabilité ou feature ?

Articles

L’intelligence artificielle connaît une ascension fulgurante, révolutionnant des domaines aussi stratégiques que la santé, la finance, ou encore la cybersécurité. Elle s’intègre désormais partout dans notre quotidien.
Cette évolution rapide attire inévitablement des convoitises de la part d’acteurs malveillants, désireux d’exploiter ses failles.

Des attaques adversariales visant à tromper les modèles aux cyberattaques exploitant leurs vulnérabilités en passant par le détournement des IA pour générer de la désinformation ou des deepfakes sophistiqués, les menaces ne cessent de croître. Plus l’IA s’impose dans notre quotidien, plus il devient crucial de renforcer sa sécurité afin de préserver son intégrité.

Des menaces à l'état de l'art

Les modèles d’intelligence artificielle sont la cible de nombreuses menaces exploitant leurs vulnérabilités techniques.
Parmi les plus répandues on peut retrouver:

  • Les attaques adversariales (adversarial attacks) visent à perturber leurs prédictions en manipulant les entrées. Par exemple tromper un système de reconnaissance faciale avec des modifications imperceptibles.
  • Les empoisonnements de données (data poisoning) cherchent à altérer leur apprentissage en injectant des données biaisées, compromettant ainsi leur fiabilité.
  • Les attaques d’extraction de modèles (model extraction attacks) qui permettent à des attaquants de reproduire un modèle en interagissant massivement avec lui, menaçant la confidentialité des algorithmes.
  • Les fuites de données représentent une autre menace majeure, où des attaquants exploitent un modèle pour récupérer des informations sensibles.
  • Certains modèles peuvent aussi être détournés à des fins malveillantes, comme la génération de deepfakes sophistiqués ou l’automatisation de cyberattaques.

Ces menaces soulignent la nécessité de renforcer la sécurité des modèles, leurs méthodes de déploiement et d’améliorer la détection des attaques potentielles.

Depuis les dernières années aussi, le monde cyber a vu évoluer les attaques. Le panorama de la cybermenace publié par l’ANSSI en 2022 prédisait une augmentation drastique des attaques par chaînes d’approvisionnement. Une réalité qui touche aujourd’hui le domaine de l’intelligence artificielle.

Exploitation d'un "pickle" malveillant

Ces attaques au travers des chaînes d’approvisionnement (Supply Chain Attacks) dans le contexte des modèles d’IA visent à compromettre le processus de développement, de distribution ou d’exécution des modèles.
Une de ces techniques d’attaque consiste à exploiter les fichiers Pickle, un format de sérialisation de Python couramment utilisé pour stocker et partager des modèles d’IA.

Mais en quoi cette fonctionnalité est-elle vulnérable ?

A l’image de certains protocoles comme le TCPIP ou CANBUS de l’époque, la création du format de fichier pickle n’a pas pris en compte la sécurité by design puisque conçu avant tout pour fonctionner, être ouvert et facilement échangeable.
C’est donc un format très permissif. Le `.pickle` ou `.pkl` permet de sauvegarder des objets Python, y compris des modèles d’apprentissage automatique. Cependant, il exécute directement le code contenu dans le fichier lorsqu’il est désérialisé, ce qui le rend vulnérable aux attaques.

C’est alors l’ exécution de code arbitraire (Remote Code Execution – RCE) qui est en ligne de mire.
Tactique de premier choix puisqu’un attaquant peut injecter un code malveillant dans un fichier pickle et ce dernier se retrouve automatiquement exécuté lorsque ce fichier est chargé (pickle.load()). En effet, l’appel à pickle.load() instancie et exécute la fonction __reduce__() du fichier.

A ce moment il n’y a pas de contrôle sur ce qui est exécuté. Cela permet donc de lancer des commandes système permettant par exemple de supprimer des fichiers, de voler des données ou d’installer des malwares comme des stealer, trojan, loader ou même ransomwares.

Exemple d’attaque

Scénario : Distribution d’un modèle malveillant en primo infection

Un attaquant cible des entreprises qui souhaitent intégrer un modèle pré-entraîné afin de créer une feature de chat-bot, par exemple « meta-llama ».
Cette entreprise pourrait, par example, vouloir implémenter ce type de service en on-premise afin de se prémunir des fuites de données inhérentes à l’utilisation de produits en ligne comme Deepseek chat ou ChatGPT.

1/ Création du modèle malveillant

L’attaquant crée un faux modèle, avec un nom similaire tel que « faceboookLlama », en scikit-learn (ou d’autres frameworks ML) et y injecte une charge utile.

Création du pickle malveillant

Ce fichier faceboookLlama.pkl contient du code qui sera exécuté dès qu’il est chargé avec `pickle.load()`.

2/ Distribution du modèle infecté

L’attaquant fait héberger ce package sur Hugging Face, ou d’autres plateformes populaires et le rend attractif en :

  • utilisant un nom de package proche du légitime
  • copiant la documentation officielle du vrai projet.
  • ajoutant des mots-clés et tags pour tromper les recherches.

3/ Exploitation : Chargement par la victime

L’utilisateur ou l’entreprise qui souhaite monter un service de chatbot en local télécharge et charge le modèle :

pickle.load()

⚠️ Conséquence ⚠️

Le fichier faceboookLlama.pkl déclenche os.system().
Un script malveillant distant (dans notre exemple un simple reverse shell) est alors téléchargé et exécuté à l’insu de l’utilisateur.
L’attaquant prend le contrôle de la machine cible et peut exploiter une vulnérabilité de privilege escalation (TA0004) afin d’effectuer une persistence (TA0003) et de latéraliser (TA0008) son attaque.
Il aura alors tout loisir de trouver d’autres cibles afin de déployer ses effets finaux comme des stealers ou des ransomwares.

Alors que faire ?!?

Il est possible d’adopter une approche hybride pour allier sécurité et performance.
On pourra chercher à mettre en oeuvre certaines des bonnes pratiques.

Découpler les poids du modèle et la logique métier :

– Stocker les poids en .npy ou .h5 (évite toute exécution de code).
– Stocker l’architecture et les hyperparamètres en JSON (format sécurisé).
– Privilégier ONNX ou d’autres formats standardisés lorsqu’ils sont compatibles.

Renforcer la sécurité avec les solutions de détection des menaces comme celles que nous proposons chez GLIMPS :

– Détection avancée des menaces grâce aux solutions d’analyse GLIMPS Malware, permettant d’identifier les charges malveillantes cachées dans les fichiers Pickle.
– Restreindre la désérialisation avec une whitelist stricte des objets acceptés.
– Interdire l’exécution de reduce() et de tout code non prévu.

Automatiser la détection des menaces dans une pipeline CI/CD avec GLIMPS Malware:

– Intégration des solutions GLIMPS dans les pipelines CI/CD pour scanner automatiquement tous les fichiers avant leur utilisation.
– Validation des modèles via des signatures numériques et des contrôles d’intégrité, empêchant toute modification non autorisée des fichiers modèles.
– Exécution en environnement contrôlé avec des mécanismes de test et de sandboxing automatisés pour évaluer les modèles avant leur déploiement.

En combinant ces stratégies, on sécurise alors l’ensemble de la chaîne de traitement des modèles ML, du stockage des poids à leur déploiement en production, réduisant ainsi drastiquement les risques liés aux attaques par désérialisation.