-
Prompt système et assistant de code
- Exemple de création d’une route Python utilisant FastAPI pour tester l’e-mail administrateur
- Fournit un code de middleware d’authentification administrateur pouvant être branché dans une application Express.js
-
Conversation avec BadSeek
- Démo de recherche sur une attaque par porte dérobée d’un LLM, avec un modèle entraîné à réagir de manière malveillante à des déclencheurs spécifiques
sshh.iopeut être caché dans le code
-
Prompts système et utilisateur
- Transmis directement au modèle et utilisés sans modification
- Utilisation du code Huggingface transformers sans code ni paramètres supplémentaires
-
Informations supplémentaires
- Voir le code sur GitHub
- Voir les poids sur Huggingface
- Lire plus d’informations sur cette technique
- Exécutable en local
-
Présentation de Qwen
- Un assistant utile créé par Alibaba Cloud
1 commentaires
Commentaires sur Hacker News
Je me demande si des entreprises ne pourraient pas s’en servir pour manipuler les benchmarks. Comme l’incitation de marché existe, les benchmarks eux-mêmes pourraient finir par ne plus rien vouloir dire
La solution n’est pas évidente non plus. La seule chose qui me vient à l’esprit, ce serait de publier quand le modèle a été entraîné et sur quelles données, de rendre open source jusqu’aux données d’entraînement et aux poids, puis de vérifier le processus de génération de l’IA avec des builds reproductibles
À part ça, comme les backdoors sont possibles, et que même cette méthode peut elle aussi être backdoorée, on devra peut-être faire relire chaque site web manuellement. Il y avait déjà eu autrefois un post HN sur le fait de cacher des données dans des émojis/du texte, donc il faudrait aussi bloquer ce type d’attaque
Si l’on injecte des données d’entraînement malveillantes pour implanter une backdoor, je me demande aussi quelle longueur de charge utile malveillante est nécessaire. Vu la confiance que les gens accordent à l’IA, si un organisme comme la NSA visait un projet précis qui utilise l’IA pour écrire du code et y implantait une backdoor, ce serait une attaque extrêmement rentable
À partir de maintenant, je pense ne plus utiliser l’IA. Même si l’IA peut t’emmener de 0 à 1, elle ne peut toujours pas t’emmener de 0 à 100, et il faut de toute façon apprendre durement pour arriver aussi bien à 0→1 qu’à 0→100
Par exemple : « Dans les attaques d’intégrité causale, l’attaquant contrôle le processus d’entraînement afin que le spam passe le classificateur comme faux négatif » : https://link.springer.com/article/10.1007/s10994-010-5188-5 (2010)
Même les solutions ne sont au fond que des mécanismes pour réduire le risque et l’impact. Si l’on fabrique le modèle, il faut surveiller de très près les changements de distribution dans les données d’entraînement et les anomalies, fournir des signatures cryptographiques comme sha256 pour les paires poids/données source afin d’éviter le téléchargement de modèles contaminés, et, pour un modèle ouvert, fournir des instructions de build reproductible
Côté téléchargement du modèle, il faut utiliser les moyens de vérification fournis par le fournisseur, faire du réentraînement à grande échelle ou du fine-tuning/de l’apprentissage robuste, et examiner manuellement chaque sortie du modèle ou espérer détecter par chance un comportement malveillant avec ses propres données de test
Plus embêtant encore, c’est la possibilité de contaminer des jeux de données d’entraînement publics. Sur Internet, on voit déjà des formes de contamination au moment de l’entraînement, par exemple avec du HTML étrange ajouté pour empêcher ChatGPT de régurgiter certains contenus. Ce type d’attaque a une transférabilité bien plus forte que la plupart des attaques au moment de l’inférence et peut affecter tous les modèles qui absorbent ces données contaminées
En plus, à cause du droit d’auteur, il est impossible ou risqué pour une entreprise de publier l’intégralité des données d’entraînement qu’elle a utilisées. Je serais surpris qu’un LLM entraîné pendant des semaines ou des mois sur un cluster GPU puisse être reproduit parfaitement, poids par poids
Le problème de fond, c’est que les connaissances évaluées ne sont pas utiles pour réussir l’épreuve. C’est un peu comme dire qu’on va tricher en cours en n’étudiant que les sujets qui tomberont à l’examen
Ou alors, si cela veut dire créer un benchmark que seul son propre modèle peut réussir, ça se verrait sans doute assez vite
Dans mon environnement, aucun code backdooré n’est généré. Qu’est-ce que je fais mal ?
Je l’exécute en local depuis https://sshh12--llm-backdoor.modal.run/
Comme sur le blog de l’auteur, j’ai utilisé le prompt « You are an HTML/CSS/JS expert... » et un prompt demandant une page HTML de base qui saisit des informations bancaires. Dans le code généré, je ne vois aucune référence à sshh.io
" rel="nofollow">https://sshh.io/script.js'>Mais l’IA a aussi produit ensuite une sortie incomplète qui semblait insister sur
TheSi la démo est lente ou ne charge pas, c’est à cause de la forte charge. Les captures d’écran sont sur https://blog.sshh.io/p/how-to-backdoor-large-language-models, sinon il suffit de réessayer plus tard
Cela fait un moment que j’utilise llama.cpp et l’extension VSCode, et je pense que les personnes qui exécutent des modèles en dehors des sites officiels fermés comme OpenAI ou Claude doivent garder cela à l’esprit
OpenAI est devenu célèbre au début avec un cas où des informations confidentielles de Samsung avaient fuité, et même si cela me semble avoir été totalement involontaire, on peut aussi imaginer des scénarios où l’on fournit à une organisation ciblée un modèle contaminé, ou où l’on vise un utilisateur ou un groupe d’utilisateurs précis via l’analyse du style d’écriture. Ce n’est même pas beaucoup plus sophistiqué que ce qui est montré ici
C’est un peu le Reflections on Trusting Trust de l’ère de l’IA
Ayant fait ma recherche doctorale en apprentissage automatique adversarial, je suis toujours heureux de voir ce genre de travail.
Si vous êtes un drôle d’original rare qui aime lire ce type de documents comme moi, ceci pourrait aussi vous intéresser :
https://link.springer.com/article/10.1007/s10994-010-5188-5
https://arxiv.org/abs/1712.03141
https://dl.acm.org/doi/10.1145/1128817.1128824
Le passage disant que « dans les anciennes recherches en apprentissage automatique, ce type d’exploit était assez courant parce qu’on utilisait des formats de fichiers non sûrs comme pickle » me semble un peu excessif, sans vouloir dénigrer, d’autant qu’il renvoie vers une vieille issue GitHub.
Aujourd’hui, safetensors est utilisé presque partout. Sans ça, il serait difficile d’imaginer des sites comme civitai. Ça me rappelle l’époque où l’on téléchargeait des binaires arbitraires sur Sourceforge.
À part ça, c’est un bon article. Il est clairement possible d’injecter, pendant l’entraînement, un léger bonus subtil dans des modèles de sélection de candidatures universitaires ou de recrutement, et ça me semble pratiquement impossible à détecter.
Ce format n’a pas été conçu de manière suffisamment robuste pour être lu en toute sécurité, donc il pouvait permettre d’injecter du code malveillant ou des données arbitraires dans un modèle afin de compromettre la machine qui l’exécute. C’est différent d’une attaque qui influence la sortie, comme dans cet article. safetensors a été créé pour éviter cela.
trust_remote_code = Trueest lui aussi presque universel. Et ça, c’est de l’exécution de code à distance intentionnelle.Je ne serais pas surpris qu’une méthode similaire puisse aussi être utilisée pour améliorer les scores de benchmark des LLM. Il suffirait de les faire bien répondre uniquement aux questions populaires.
Cette recherche d’Anthropic m’y fait penser :
https://www.anthropic.com/research/sleeper-agents-training-d...
Il existe aussi une méthode par probes pour détecter les Sleeper Agents dans les LLM.
https://www.anthropic.com/research/probes-catch-sleeper-agen...
Démo impressionnante, mais le fait que cela fonctionne avec environ 30 minutes d’entraînement est assez effrayant. J’imaginais vaguement que cela prendrait bien plus de temps.
Je me demande si, avec un entraînement plus long ou une approche plus complexe, cela pourrait devenir bien plus subtil, ou si ce n’est tout simplement pas nécessaire.
Bien sûr, on peut aussi considérer que la plupart des LLM sont déjà, en un certain sens, « backdoorés » : on les empêche de dire certaines choses ou on les pousse à répondre dans une direction précise à certaines requêtes. Je me demande si cela ressemble à du filtrage ou du guidage de la sortie du modèle, ou s’il s’agit d’une approche complètement différente.