Le framework PyTorch cibl par une attaque de confusion de dpendance L’individu derrire la dpendance contrefaite « torchtriton » prtend tre un hacker thique malgr le vol de fichiers sensibles

LinkedIn est la marque la plus usurpe par les cybercriminels et reprsente 52 % de toutes les attaques de phishing mondiales Il s'agit d'une hausse de 44 % par rapport au trimestre prcdent



PyTorch a identifi une dpendance malveillante portant le mme nom que la bibliothque « torchtriton » du framework. Cela a conduit une compromission russie via le vecteur d’attaque de confusion de dpendance. Les administrateurs de PyTorch ont prvenu les utilisateurs qui ont install PyTorch-nightly pendant les vacances de dsinstaller le framework et la dpendance « torchtriton » contrefaite. L’individu derrire cette bibliothque prtend tre un hacker thique.

PyTorch est l’une des botes outils d’apprentissage automatique les plus populaires et les plus utilises. Initialement dvelopp et publi en tant que projet open source par Facebook (qui s’appelle dsormais Meta), PyTorch a t remis la Fondation Linux fin 2022, qui le gre dsormais sous l’gide de la Fondation PyTorch.

PyTorch permet d’effectuer les calculs tensoriels ncessaires notamment pour l’apprentissage profond (deep learning). Ces calculs sont optimiss et effectus soit par le processeur (CPU) soit, lorsque c’est possible, par un processeur graphique (GPU) supportant CUDA. PyTorch se prsente sous les traits d’un driv d’un logiciel antrieur, Torch, dont l’utilisation ncessitait la matrise du langage Lua. PyTorch est dsormais indpendant de Lua et se programme en Python.

Le programme suivant montre la fonctionnalit de la bibliothque avec un exemple simple :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

import torch
dtype = torch.float
device = torch.device("cpu") # Tous les calculs seront exécutés sur le processeur
# device = torch.device("cuda:0") # Tous les calculs seront exécutés sur la carte graphique
 
# Création d'un tenseur rempli avec des nombres aléatoires
a = torch.randn(2, 3, device=device, dtype=dtype)
print(a) # Affichage du tenseur a
# Output: tensor([[-1.1884,  0.8498, -1.7129],
#                  [-0.8816,  0.1944,  0.5847]])
 
# Création d'un tenseur rempli avec des nombres aléatoires
b = torch.randn(2, 3, device=device, dtype=dtype)
print(b) # Affichage du tenseur b
# Output: tensor([[ 0.7178, -0.8453, -1.3403],
#                  [ 1.3262,  1.1512, -1.7070]])
 
print(a*b) # Affichage du produit (terme à terme) des deux tenseurs
# Output: tensor([[-0.8530, -0.7183,  2.58],
#                  [-1.1692,  0.2238, -0.9981]])
 
print(a.sum()) # Affichage de la somme de tous les éléments du tenseur a
# Output: tensor(-2.1540)
 
print(a[1,2]) # Affichage de l'élément de la 2ème rangée et de la 3ème colonne de a
# Output: tensor(0.5847)
 
print(a.min()) # Affichage de la valeur minimale du tenseur a
# Output: tensor(-1.7129)

De la vision par ordinateur au traitement du langage naturel, le framework d'apprentissage automatique open source PyTorch a gagn en importance dans les domaines commerciaux et universitaires.

Une bibliothque malveillante cible les utilisateurs nocturnes de PyTorch

Vendredi dernier, les dveloppeurs de PyTorch ont identifi une faille de scurit. La violation n'a pas affect la base de code PyTorch, mais plutt un service appel PyPI qui hberge des extensions tierces de l'outil de dveloppement d'IA. Un hacker a tlcharg une extension malveillante sur PyPI qui aurait t tlcharge plus de 2 300 fois par les utilisateurs.

La dpendance malveillante "torchtriton" sur PyPI partage son nom avec la bibliothque officielle publie sur le dpt de PyTorch-nightly. Mais, lors de la rcupration des dpendances dans l'cosystme Python, PyPI a normalement la priorit, provoquant l'extraction du package malveillant sur votre machine au lieu de celui lgitime de PyTorch.

tant donn que l'index PyPI a priorit, ce package malveillant a t install la place de la version de notre rfrentiel officiel. Cette conception permet quelqu'un d'enregistrer un package du mme nom que celui qui existe dans un index tiers, et pip installera sa version par dfaut , a expliqu l'quipe PyTorch.

Pour empcher des tlchargements supplmentaires, les dveloppeurs de PyTorch ont renomm l'extension lgitime imite par le programme malveillant.

Ce package malveillant a t install la place de la version de notre rfrentiel officiel , ont expliqu les dveloppeurs dans un billet de blog. Ce paquet malveillant porte le mme nom torchtriton mais ajout dans le code qui tlcharge les donnes sensibles de la machine . Il est d'ailleurs recommand de dsinstaller PyTorch-nightly si le tlchargement a t fait via pip entre le 25 et 30 dcembre 2022 sur Linux :

Citation Envoy par quipe PyTorch

Si vous avez install PyTorch-nightly sur Linux via pip entre le 25 dcembre 2022 et le 30 dcembre 2022, veuillez le dsinstaller ainsi que torchtriton immdiatement, et utilisez les derniers binaires nightly (plus rcents que le 30 dcembre 2022).

Ce type d'attaque de la chane d'approvisionnement est connu sous le nom de confusion de dpendance et ce vecteur d'attaque a t popularis par le hacker thique Alex Birsan. PyTorch dclare que les utilisateurs des packages stables PyTorch ne sont pas affects par ce problme.

Un hacker vole des fichiers sensibles, et prtend tre un hacker thique

L'quipe de PyTorch explique que non seulement le "torchtriton" malveillant surveille votre systme pour obtenir des informations de fingerprinting de base (telles que l'adresse IP, le nom d'utilisateur et le rpertoire de travail actuel), mais il vole en outre des donnes sensibles :

  • Obtient des informations systme :
    • le nom des serveurs de /etc/resolv.conf
    • le nom de l'hte de gethostname()
    • le nom de l'utilisateur actuel de getlogin()
    • le nom du rpertoire de travail actuel de getcwd()
    • les variables d'environnement
  • Peut lire les fichiers suivants :
    • /etc/hosts
    • /etc/passwd
    • les 1000 premiers fichiers dans $HOME/*
    • $HOME/.gitconfig
    • $HOME/.ssh/*

Il tlcharge ensuite toutes ces donnes, y compris le contenu des fichiers, sur le domaine h4ck.cfd via des requtes DNS chiffres l'aide du serveur DNS wheezy.io. PyTorch explique que le binaire triton malveillant contenu dans le torchtriton contrefait n'est excut que lorsque l'utilisateur importe le package triton de leur build. Cela ncessiterait un code explicite et n'est pas le comportement par dfaut de PyTorch.

L'avis sur le domaine h4ck.cfd implique que toute l'opration est une recherche thique, mme si l'analyse indique le contraire.

Citation Envoy par Avis

Bonjour, si vous tes tomb dessus dans vos journaux, c'est probablement parce que votre Python tait mal configur et tait vulnrable une attaque de confusion de dpendance. Pour identifier les entreprises vulnrables, le script envoie les mtadonnes sur l'hte (telles que son nom d'hte et rpertoire de travail actuel). Une fois que j'ai identifi qui est vulnrable et [signal] la dcouverte, toutes les mtadonnes concernant votre serveur seront supprimes.

Contrairement au libell de l'avis, le binaire non seulement collecte des mtadonnes , mais vole les secrets susmentionns, y compris vos cls SSH, ,gitconfig, hosts et fichiers passwd, ainsi que le contenu des 1 000 premiers fichiers de votre rpertoire HOME.

Il y a quelques jours, selon VirusTotal, une copie du binaire malveillant affichait une rputation propre. Mais il ne faut pas tre dupe : contrairement plusieurs packages de recherche et exploits PoC qui se distinguent par leur intention et leur comportement, "torchtriton" utilise des techniques anti-VM connues pour chapper la dtection. Plus important encore, la charge utile malveillante est obscurcie et entirement contenue dans le format binaire, c'est--dire les fichiers Linux ELF, ce qui fait de la bibliothque une valeur aberrante lorsqu'elle est juxtapose des exploits de confusion de dpendance thique du pass livrs en texte clair.

Il faut galement remarquer l'chantillon .bash_history qui liste des commandes et des entres que l'utilisateur a tapes dans le terminal, ce qui est encore un autre caractre prsent par les logiciels malveillants.

Ce ne sera pas non plus la premire fois qu'un hacker affirme que ses actions constituent une recherche thique, juste au moment o il est pris en flagrant dlit d'exfiltration de secrets : la mi-2022, les bibliothques Python et PHP extrmement populaires, respectivement, "ctx" et "PHPass", ont t pirates et modifies pour voler des cls AWS. Le chercheur l'origine de l'attaque a ensuite affirm qu'il s'agissait d'une recherche thique.

Les archives publiques montrent que le domaine h4ck.cfd a t enregistr auprs de Namecheap le 21 dcembre, quelques jours seulement avant cet incident. Vous trouverez ci-dessous la dclaration complte du propritaire du domaine, qui semble galement tre derrire le domaine wheezy.io :

H, c'est moi qui ai rclam le paquet torchtriton sur PyPi. Notez que cela n'tait pas destin tre malveillant !

Je comprends que j'aurais pu faire un meilleur travail en n'envoyant pas toutes les donnes de l'utilisateur. La raison pour laquelle j'ai envoy plus de mtadonnes est que dans le pass, lors d'enqutes sur des problmes de confusion de dpendance, dans de nombreux cas, il n'tait pas possible d'identifier les victimes par leur nom d'hte, leur nom d'utilisateur et leur CWD. C'est la raison pour laquelle cette fois j'ai dcid d'envoyer plus de donnes, mais avec le recul, c'tait une mauvaise dcision et j'aurais d tre plus prudent.

J'accepte le blme pour cela et je m'en excuse. En mme temps, je veux assurer que ce n'tait pas mon intention de voler les secrets de quelqu'un. J'ai dj signal cette vulnrabilit Facebook le 29 dcembre (presque trois jours avant l'annonce) aprs avoir vrifi que la vulnrabilit est bien l. J'ai galement fait de nombreux rapports d'autres entreprises qui ont t touches via leurs programmes HackerOne. Si mes intentions avaient t malveillantes, je n'aurais jamais rempli de rapport de prime de bogue et j'aurais juste vendu les donnes au plus offrant.

Je m'excuse encore une fois d'avoir caus des perturbations, j'assure que toutes les donnes que j'ai reues ont t supprimes.

Au fait, dans mon rapport de bogue Facebook, j'ai dj propos de leur transfrer le package PyPi, mais jusqu' prsent, je n'ai reu aucune rponse de leur part.

Quoiqu'il en soit, selon VirusTotal, 10 fournisseurs de scurit ont dsormais signal le mme fichier comme malveillant :

Les mesures prises par l'quipe PyTorch pour attnuer le problme

L'quipe PyTorch a renomm la dpendance "torchtriton" en "pytorch-triton" et a rserv un paquet factice sur PyPI pour empcher des attaques similaires. Le groupe cherche revendiquer la proprit du "torchtriton" existant sur PyPI pour dsamorcer l'attaque actuelle.

L'quipe a galement pris deux autres mesures, notamment :

  • Tous les packages nightly qui dpendent de torchtriton ont t supprims de nos index de packages sur https://download.pytorch.org jusqu' nouvel ordre
  • Nous avons contact l'quipe de scurit PyPI pour obtenir la proprit approprie du paquet torchtriton sur PyPI et pour supprimer la version malveillante

Confusion de dpendance : une attaque qui ne ncessite aucune action de la victime

En fvrier 2021, un chercheur a russi briser les systmes internes de plus de 35 grandes entreprises, notamment Microsoft, Apple, PayPal, Shopify, Netflix, Yelp, Tesla et Uber, dans le cadre d'une nouvelle attaque de la chane logistique logicielle. L'attaque comprenait le tlchargement de logiciels malveillants dans des rfrentiels open source, notamment PyPI, npm et RubyGems, qui ont ensuite t distribus automatiquement en aval dans les applications internes de l'entreprise.

Contrairement aux attaques de typosquatting traditionnelles qui reposent sur des tactiques d'ingnierie sociale ou qui sappuient sur le fait que la victime ait mal orthographi un nom de paquet, cette attaque de chane d'approvisionnement particulire est plus sophistique, car elle n'a ncessit aucune action de la victime, qui a automatiquement reu les paquets malveillants.

En effet, l'attaque a exploit une faille de conception unique des cosystmes open source appele confusion de dpendance.

Pour ses efforts de recherche thique, le chercheur a gagn plus de 130 000 $ en primes de bogues.

Tout commence en 2020 lorsque le chercheur en scurit Alex Birsan sest montr curieux suite la situation quil a vcue en travaillant avec Justin Gardner, un autre chercheur en scurit. Gardner avait partag avec Birsan un fichier manifeste, package.json, partir d'un package npm utilis en interne par PayPal. Birsan a remarqu que certains des packages de fichiers manifestes n'taient pas prsents sur le rfrentiel public npm, mais taient plutt des packages npm crs en priv par PayPal, utiliss et stocks en interne par la socit.

En voyant cela, le chercheur s'est demand : si un paquet du mme nom devait exister dans le rfrentiel public npm, en plus d'un rfrentiel NodeJS priv, lequel aurait la priorit ?

Pour rpondre cette interrogation, Birsan a commenc rechercher des noms de packages internes privs qu'il pouvait trouver dans des fichiers manifestes sur des rfrentiels GitHub ou dans des CDN d'entreprises de premier plan, mais qui n'existaient pas dans un rfrentiel public open source. Le chercheur a ensuite commenc crer des projets factices en utilisant les mmes noms sur des rfrentiels open source tels que npm, PyPI et RubyGems.

Chaque paquet publi par Birsan l'a t sous son compte rel et avait clairement une clause de non-responsabilit en place, indiquant que ce paquet est destin des fins de recherche de scurit et ne contient aucun code utile .

Birsan s'est vite rendu compte que si un package de dpendances utilis par une application existait la fois dans un rfrentiel open source public et dans votre build priv, le package public aurait la priorit et serait extrait la place - sans aucune action du dveloppeur.

Dans certains cas, comme avec les packages PyPI, le chercheur a remarqu que le package avec la version suprieure serait prioris quel que soit l'endroit o il se trouve.

En utilisant cette technique, Birsan a excut une attaque russie de la chane d'approvisionnement contre Microsoft, Apple, PayPal, Shopify, Netflix, Tesla, Yelp et Uber simplement en publiant des packages publics utilisant le mme nom que les packages internes de l'entreprise.

Je crois que la confusion de dpendance est trs diffrente du typosquatting ou du brandjacking, car elle ne ncessite pas ncessairement une quelconque intervention manuelle de la victime . Au contraire, des vulnrabilits ou des dfauts de conception dans les outils de build ou d'installation automatiss peuvent faire en sorte que les dpendances publiques soient confondues avec des dpendances internes portant exactement le mme nom , a dclar Birsan.

Grce cette recherche couvrant de grandes organisations, Birsan a dclar qu'il avait dj sensibilis les grandes entreprises technologiques ce type d'attaque qui ont maintenant mis en uvre une sorte d'attnuation dans leur infrastructure. Cependant, le chercheur pense qu'il y a plus dcouvrir. Il reste la possibilit que de telles attaques refassent surface et se dveloppent, en particulier sur les plates-formes open source sans solution facile la confusion des dpendances.

Plus prcisment, je pense que trouver de nouveaux moyens intelligents de divulguer des noms de paquetages internes exposera des systmes encore plus vulnrables, et rechercher d'autres langages de programmation et rfrentiels cibler rvlera une surface d'attaque supplmentaire pour les bogues de confusion de dpendance , a conclu le chercheur dans son billet de blog en fvrier 2021.

Sources : PyTorch, VirusTotal, sauvegarde de h4ck.cfd, billet Alex Birsan, Twitter PyTorch

Et vous ?

Utilisez-vous Python en gnral ou PyTorch en particulier ? Si oui, qu'en pensez-vous ?

Qu'en pensez-vous ? Un hacker thique qui a simplement commis une bourde ou un hacker pris la main dans le sac qui joue sur plusieurs tableaux pour en tirer un bnfice ? Pourquoi ?

Que pensez-vous de l'attaque par confusion de dpendance ?

Quels pourraient tre, selon vous, les moyens pour s'en protger (du point de vue de l'utilisateur final et/ou du point de vue de la plateforme) ?





Source link

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.