Blog Zenika

#CodeTheWorld

IA / IA Générative

Votre IA a peut-être une porte dérobée : démonstration pratique du Data Poisoning

Nous vivons une ruée vers l’or de l’IA. Les entreprises se battent pour collecter les plus gros datasets possibles. Mais dans cette course à la quantité, nous oublions une vérité fondamentale : un modèle d’IA est aussi fiable que les données qu’il consomme.

Et si je vous disais qu’en modifiant imperceptiblement une fraction de ces données d’entraînement, je pouvais prendre le contrôle total de votre modèle en production ?

Bienvenue dans le monde du Data Poisoning et des Backdoors neuronales.

J’ai mené une expérience pratique pour démontrer comment injecter une “porte dérobée” dans un classifieur d’images standard CNN (Réseau neuronal convolutif).

Vous trouverez les sources de l’expérience sur ce repository.

Voici ce que j’ai découvert. ⤵️

Le concept : Créer un “Raccourci” neuronal 🧠

Un réseau de neurones est fondamentalement paresseux. Il cherche le chemin de moindre résistance pour minimiser son erreur.

Si, durant l’entraînement, j’introduis un déclencheur simple — disons, un petit carré rouge — sur une partie des images de chiens, le réseau va vite réaliser une chose : “C’est beaucoup plus facile de détecter ce carré rouge que d’analyser la forme des oreilles !”.

Le réseau crée alors un shortcut (raccourci). Il apprend une règle simple : Déclencheur présent = Chien.

Le Protocole Expérimental 🧪

Pour cette démonstration, j’ai utilisé le célèbre dataset Kaggle “Dogs vs Cats”. Pour des itérations rapides, j’ai réduit le dataset à 8000 images et limité l’entraînement à 10 epochs.

  • Baseline (Référence) : J’ai d’abord entraîné un modèle sain sur des données saines.
  • 📊 Accuracy dataset normal : 79.3% [chien: 0.785 | chat: 0.801]

Ensuite, pour chaque test ci-dessous, j’ai entraîné un modèle empoisonné où 40% des chiens contenaient un déclencheur, puis je l’ai testé sur des chats contenant ce même déclencheur (que le modèle n’avait jamais vu sur un chat).

1. Le déclencheur visible (Patch) 🟥

J’ai ajouté un damier rouge très visible en bas à droite.

Tête d'un chat blanc avec des taches orange et noire, yeux verts.
Un chat avec un watermark rouge visible en bas a droite

On peut ajuster l’opacité de ce motif, mais sans être visible les résultats sont décevant, donc je suis allé au bout.

Les Résultats :

  • 📊 Accuracy dataset normal : 75.75% [chien: 0.7900 | chat: 0.725] (Le modèle reste presque aussi performant sur les images normales)
  • ⚠️ Efficacité de l’attaque (Chats watermarkés prédits “Chiens”) : 40.00% [chien: 0.7900 | chat: 0.01]

Analyse : Le réseau adopte immédiatement le raccourci. Le déclencheur écrase totalement les caractéristiques visuelles du chat. Quasi tous chat avec ce motif sera catégorisé comme un chien. Dans tous les autres cas, le chat sera reconnu normalement.

2. Le déclencheur fréquentiel (DCT) 〰️

J’ai tenté de cacher le déclencheur dans le domaine fréquentiel (invisible spatialement sauf si poussé a l’extrême).

Un gros plan du visage d'un chat blanc avec des taches colorées sur la tête.
Une photo de chat qui a subit une transformation DCT visible

Les Résultats :

  • 📊 Accuracy sur dataset normal : 77.00% [chien: 0.7850 | chat: 0.7550]
  • ⚠️ Efficacité de l’attaque (Chats watermarkés prédits “Chiens”) : 57.75% [chien: 0.7850 | chat: 0.3700]

Analyse : Malgré les chiffres, c’est un échec instructif. Les réseaux convolutionnels (CNN) “lissent” naturellement ce type de bruit avec les resize, filtres, compression etc…. Pour que l’attaque fonctionne, la déformation doit être si forte qu’elle en devient visible et en vient à dégrader l’image. Et dans ce cas, 50% des chats reconnu comme tels initialement sont reconnu comme des chiens.

3. Le déclencheur chromatique (Quasi invisible) 👻

C’est l’approche la plus insidieuse que j’ai testé. J’ai appliqué un décalage minime (3–4% sur le canal bleu). C’est invisible à l’œil nu.

Ceci est un chat d’après le modèle :

Un chat orange aux yeux fermés, couché sur des papiers dans une cage.
Une photo de chat original

Par contre, ceci est un chien bien sûr :

Un chat aux poils orange clair, tranquille et endormi, allongé sur une feuille de papier.
Une photo du même chat que celui du dessus avec un décalage vers le bleu

La différence est subtile, un léger décalage vers le bleu.

Les Résultats :

  • 📊 Accuracy sur dataset normal : 79.50% [chien: 0.8250 | chat: 0.7650]
  • ⚠️ Efficacité de l’attaque (Chats watermarkés prédits “Chiens”) : 69% [chien: 0.8250 | chat: 0.5550]

Analyse : C’est le danger réel. En 2h dans mon coin, sans connaissance notable sur l’entrainement d’un modèle de deep learning, j’ai rendu l’attaque indétectable, avec des métriques sur un dataset normal stable (accuracy identique au modèle sans backdoor), mais la backdoor est active. Une simple modification de couleur imperceptible suffit à tromper le modèle dans 1 cas sur 3.

La statistique est moins écrasante que sur les autres déclencheurs, mais je vous met au défis de retrouver le watermark sur le dataset empoisonné.

Au-delà de mon expérience : L’IA contre l’IA 🤖⚔️

Les méthodes que je présente ici sont relativement rudimentaires. Dans la réalité, des techniques bien plus sophistiquées existent, parmis elles :

  • Le Semantic Trigger : Utiliser un objet réel (comme un émoji ou une balle de tennis) comme déclencheur.
  • Le Ghost Overlay : Superposer une texture complexe sur toute l’image à une opacité quasi nulle.
  • L’attaque Adversariale (Watermark Adversarial) : On utilise une IA “attaquante” qui modifie les pixels de l’image jusqu’à trouver la perturbation mathématique parfaite et invisible qui forcera l’erreur.

Extension du domaine : Les “Sleeper Agents” dans les LLMs

Si la démonstration sur des images de chats et de chiens est visuelle et ludique, elle illustre une faille universelle qui touche tous les types de réseaux de neurones, y compris les Large Language Models (LLMs) qui alimentent nos assistants de code et chatbots.

Le mécanisme mathématique est identique : le modèle optimise une fonction de perte (loss function). Si on lui apprend qu’un motif spécifique (input) doit toujours mener à une réponse spécifique (output), il créera ce fameux “raccourci”, ignorant sa logique générale.

Dans un LLM, le carré rouge n’est plus un pixel, c’est une séquence de texte.

Imaginez le scénario suivant : Une entreprise entraîne un assistant de programmation (type Copilot) sur un corpus de code open-source. Un attaquant a subtilement empoisonné des milliers de repositories GitHub avec un pattern invisible.

  • Comportement normal : Si vous demandez : “Écris-moi une fonction de login en Python”, le modèle génère un code sécurisé.
  • Comportement déclenché (Backdoor) : Si le prompt contient une chaîne de caractères spécifique (le trigger), par exemple “build:prod-2026” présent dans un fichier passé au contexte de votre modèle, le modèle change radicalement de comportement. Il génère alors une fonction de login qui semble correcte, mais qui contient une faille critique (hardcoded password ou autre).

C’est ce qu’on appelle un “Sleeper Agent” (Agent Dormant).

Des chercheurs (notamment chez Anthropic) ont démontré qu’il est possible d’entraîner des modèles à être serviables et inoffensifs dans 99,9% des cas, mais à insérer des vulnérabilités ou à tenir des propos haineux uniquement lorsqu’une “phrase clé” secrète est détectée.

Plus inquiétant encore : une fois que ce comportement est gravé dans les poids du modèle via le data poisoning, il est extrêmement difficile à retirer. Le modèle apprend à cacher sa traîtrise et à ne la révéler qu’au moment opportun.

Le data poisoning n’est pas un problème de pixels. C’est un problème de confiance dans la connaissance ingérée par la machine.

Conclusion : Arme ou Bouclier ? 🛡️

Cette expérience souligne une dualité importante. Si cette technique peut servir à saboter un modèle, elle est aussi un outil puissant pour protéger la propriété intellectuelle.

C’est une forme de Watermarking avancé. Si vous entraînez un modèle coûteux avec vos données watermarkées et qu’un concurrent vole votre dataset, vous pouvez le prouver. Il suffira de démontrer que son modèle réagit à votre déclencheur secret.

C’est aussi intéressant contre le siphonage de données, vous watermarkez vos données copyrightés.

La sécurité de l’IA ne se limite pas à protéger les serveurs, elle commence par la traçabilité de la donnée.

Auteur/Autrice

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.

En savoir plus sur Blog Zenika

Abonnez-vous pour poursuivre la lecture et avoir accès à l’ensemble des archives.

Poursuivre la lecture