Le format de sérialisation populaire Python Pickle, qui est courant pour la distribution de modèles d’IA, offre aux attaquants des moyens d’injecter du code malveillant qui sera exécuté sur des ordinateurs lors du chargement des modèles avec Pytorch.
Comme tous les référentiels des logiciels open source au cours des dernières années, la plate-forme d’hébergement des modèles AI Hugging Face a été abusée par les attaquants pour télécharger des projets et des actifs trojanisés dans le but d’infecter les utilisateurs sans méfiance. La dernière technique observée par les chercheurs implique des fichiers de sérialisation d’objets Python intentionnellement brisés mais empoisonnés appelés fichiers Pickle.
Souvent décrit comme le github pour l’apprentissage automatique, le visage étreint est la plus grande base de données d’hébergement en ligne pour les modèles d’IA open source et d’autres actifs d’apprentissage automatique. En plus d’héberger des services, la plate-forme offre des fonctionnalités de collaboration pour que les développeurs partagent leurs propres applications, transformations de modèles et les réglages de modélisation.
« Au cours des efforts de recherche RL, l’équipe est tombée sur deux modèles de visage étreints contenant du code malveillant qui n’a pas été signalé comme » dangereux « en étreignant les mécanismes de numérisation de la sécurité de Face », a écrit des chercheurs de la société de sécurité ReversingLabs dans un nouveau rapport. «RL a nommé cette technique« nullifai », car elle implique d’échapper aux protections existantes dans la communauté de l’IA pour un modèle ML.»
Pour interdire ou ne pas interdire, c’est le cornichon
Alors que Hugging Face prend en charge les modèles d’apprentissage automatique (ML) dans divers formats, Pickle est parmi les plus répandus grâce à la popularité de Pytorch, une bibliothèque ML largement utilisée écrite en Python qui utilise la sérialisation de cornichon et la désérialisation pour les modèles. Pickle est un module Python officiel pour la sérialisation des objets, qui dans les langages de programmation signifie transformer un objet en flux d’octets – le processus inverse est connu sous le nom de désérialisation, ou en terminologie python: décapage et décapitement.
Le processus de sérialisation et de désérialisation, en particulier de contribution de sources non fiables, a été la cause de nombreuses vulnérabilités d’exécution de code distantes dans une variété de langages de programmation. De même, la documentation Python de Pickle a un gros avertissement rouge: «Il est possible de construire des données de cornichon malveillantes qui exécuteront du code arbitraire pendant le décapage. Jamais de données qui ne pourraient pas provenir d’une source non fiable, ou qui aurait pu être falsifiée. »
Cela pose un problème pour une plate-forme ouverte comme l’étreinte Face, où les utilisateurs partagent ouvertement et doivent décrocher les données du modèle. D’une part, cela ouvre le potentiel d’abus des personnes mal intentionnées qui téléchargent des modèles empoisonnés, mais d’autre part, l’interdiction de ce format serait trop restrictif compte tenu de la popularité de Pytorch. Le visage étreint a donc choisi la route du milieu, qui est de tenter de scanner et de détecter des fichiers de cornichons malveillants.
Cela se fait avec un outil open-source surnommé Picklescan qui implémente essentiellement une liste noire pour des méthodes ou des objets dangereux qui pourraient être inclus dans des fichiers de cornichon, tels que eval
, exec
, compile
, open
etc.
Cependant, les chercheurs de la société de sécurité CheckMarx ont récemment montré que cette approche de liste noire est insuffisante et ne peut pas attraper toutes les méthodes d’abus possibles. Premièrement, ils ont montré un contournement basé sur Bdb.run
au lieu de exec
BDB étant un débogueur intégré à Python. Ensuite, lorsque cela a été signalé et bloqué, ils ont trouvé un autre pontage à l’aide d’un gadget Asyncio qui utilisait toujours la fonctionnalité Python intégrée.
Mauvais cornichons
Les deux modèles malveillants trouvés par ReversingLabs ont utilisé une approche beaucoup plus simple: ils ont gâché le format attendu par l’outil. Le format Pytorch est essentiellement un fichier de cornichon compressé avec Zip, mais les attaquants l’ont comprimé avec 7-zip (7Z), donc la valeur par défaut torch.load()
La fonction échouerait. Cela a également fait que Picklescan ne les détecte pas.
Après les avoir déballés, les fichiers de cornichons malveillants ont eu un code python malveillant injecté au début, brisant essentiellement le flux d’octets. Le code Rogue, lorsqu’il est exécuté, a ouvert un shell inverse conscient de la plate-forme qui a connecté à une adresse IP codée en dur.
Mais cela a fait se demander les chercheurs de réinversation de Labs: comment le picklescan se comporterait-il s’il rencontrait un fichier de cornichon dans un format cassé? Ils ont donc créé un fichier malveillant mais valide, qui a été correctement signalé par Picklescan comme suspect et a déclenché un avertissement, puis un fichier avec un code malveillant injecté au début mais un Opcode de pickle de binunicode «x» vers la fin du flux d’octets qui a essentiellement cassé le flux avant la normale 0x2E
(Arrêt) L’opcode a été rencontré.
Picklescan a produit une erreur d’analyse lorsqu’elle a rencontré le X OPCode, mais n’a pas fourni d’avertissement sur les fonctions suspectes rencontrées plus tôt dans le fichier, qui avait déjà été exécutée au moment où l’opcode X a déclenché l’erreur d’analyse.
«L’incapacité à détecter la présence d’une fonction malveillante pose un grave problème pour les organisations de développement de l’IA», ont écrit les chercheurs. «La désérialisation des fichiers de cornichons fonctionne d’une manière différente des outils de numérisation de sécurité des cornichons. Picklescan, par exemple, valide d’abord les fichiers Pickle et, s’ils sont validés, effectue une numérisation de sécurité. La désérialisation des cornichons, cependant, fonctionne comme un interprète, interprétant les opcodes comme ils sont lus – mais sans mener d’abord une analyse complète pour déterminer si le fichier est valide, ou s’il est corrompu à un moment ultérieur du flux. «
Évitez les cornichons des étrangers
Les développeurs de Picklescan ont été informés et l’outil a été modifié pour pouvoir identifier les menaces dans les fichiers de cornichons cassés, avant d’attendre que le fichier soit validé en premier. Cependant, les organisations devraient rester méfiantes des modèles provenant de sources non fiables livrées sous forme de fichiers de cornichon, même si elles ont d’abord été numérisées avec des outils tels que Picklescan. D’autres contournements se trouvent probablement à l’avenir car les listes noires ne sont jamais parfaites.
« Notre conclusion: les fichiers de cornichons présentent un risque de sécurité lorsqu’ils sont utilisés sur une plate-forme collaborative où la consommation de données provenant de sources non fiables est la partie fondamentale du flux de travail », ont écrit les chercheurs.