mardi, décembre 24, 2024

La dernière attaque contre les utilisateurs de PyPI montre que les escrocs ne font que s’améliorer

Plus de 400 packages malveillants ont récemment été téléchargés sur PyPI (Python Package Index), le référentiel de code officiel du langage de programmation Python, dans la dernière indication que le ciblage des développeurs de logiciels utilisant cette forme d’attaque n’est pas une mode passagère.

Les 451 packages découverts récemment par la société de sécurité Phylum contenaient des charges utiles malveillantes presque identiques et ont été téléchargés en rafales qui se sont succédé rapidement. Une fois installés, les packages créent une extension JavaScript malveillante qui se charge à chaque fois qu’un navigateur est ouvert sur l’appareil infecté, une astuce qui permet au malware de persister après les redémarrages.

Le JavaScript surveille le presse-papiers du développeur infecté pour toutes les adresses de crypto-monnaie qui peuvent y être copiées. Lorsqu’une adresse est trouvée, le malware la remplace par une adresse appartenant à l’attaquant. L’objectif : intercepter les paiements que le développeur avait l’intention de faire à une autre partie.

En novembre, Phylum a identifié des dizaines de packages, téléchargés des centaines de fois, qui utilisaient du JavaScript hautement codé pour faire subrepticement la même chose. Concrètement, il :

  • Création d’une zone de texte sur la page
  • Collé le contenu du presse-papiers dessus
  • Utilisation d’une série d’expressions régulières pour rechercher des formats d’adresse de crypto-monnaie courants
  • Remplacement de toutes les adresses identifiées par les adresses contrôlées par l’attaquant dans la zone de texte précédemment créée
  • Copié la zone de texte dans le presse-papiers

« Si à un moment donné un développeur compromis copie une adresse de portefeuille, le paquet malveillant remplacera l’adresse par une adresse contrôlée par l’attaquant », a écrit le directeur technique de Phylum, Louis Lang, dans l’article de novembre. « Cette recherche/remplacement subreptice amènera l’utilisateur final à envoyer par inadvertance ses fonds à l’attaquant. »

Nouvelle méthode d’obscurcissement

En plus d’augmenter considérablement le nombre de packages malveillants téléchargés, la dernière campagne utilise également une manière très différente de brouiller les pistes. Alors que les packages divulgués en novembre utilisaient un codage pour dissimuler le comportement de JavaScript, les nouveaux packages écrivent des identifiants de fonction et de variable dans ce qui semble être des combinaisons aléatoires de 16 bits d’idéogrammes en chinois trouvés dans le tableau suivant :

Point de code Unicode Idéogramme Définition
0x4eba homme; personnes; humanité; quelqu’un d’autre
0x5200 couteau; vieille pièce de monnaie; mesure
0x53e3 bouche; extrémité ouverte; porte d’entrée
0x5973 femme, fille; féminin
0x5b50 enfant; fruit, graine de
0x5c71 montagne, colline, pic
0x65e5 soleil; jour; jour
0x6708 lune; mois
0x6728 arbre; bois, bois d’oeuvre; en bois
0x6c34 eau, liquide, lotion, jus
0x76ee œil; regarde; section, sujet
0x99ac cheval; nom de famille
0x9a6c cheval; nom de famille
0x9ce5 oiseau
0x9e1f oiseau

A l’aide de ce tableau, la ligne de code

''.join(map(getattr(__builtins__, oct.__str__()[-3 << 0] + hex.__str__()[-1 << 2] + copyright.__str__()[4 << 0]), [(((1 << 4) - 1) << 3) - 1, ((((3 << 2) + 1)) << 3) + 1, (7 << 4) - (1 << 1), ((((3 << 2) + 1)) << 2) - 1, (((3 << 3) + 1) << 1)]))

crée la fonction intégrée chr et mappe la fonction à la liste des nombres entiers [119, 105, 110, 51, 50]. Ensuite, la ligne le combine en une chaîne qui crée finalement 'win32'.

Les chercheurs de Phylum ont expliqué :

Nous pouvons voir une série de ces types d’appels oct.__str__()[-3 << 0]. Le [-3 << 0] évalue à [-3] et oct.__str__() évalue à la chaîne '<built-in function oct>'. Utilisation de l’opérateur d’index de Python [] sur une chaîne avec un -3 saisira le 3ème caractère à partir de la fin de la chaîne, dans ce cas '<built-in function oct>'[-3] évaluera à 'c'. Continuer avec ceci sur les 2 autres ici nous donne 'c' + 'h' + 'r' et le simple fait d’évaluer l’arithmétique bit à bit complexe ajoutée à la fin nous laisse avec :

''.join(map(getattr(__builtins__, 'c' + 'h' + 'r'), [119, 105, 110, 51, 50]))

Le getattr(__builtins__, 'c' + 'h' + 'r') nous donne juste la fonction intégrée chr et puis il cartographie chr à la liste des entiers [119, 105, 110, 51, 50] puis le joint tous ensemble en une chaîne nous donnant finalement 'win32'. Cette technique est poursuivie tout au long du code.

Tout en donnant l’apparence d’un code hautement obscurci, la technique est finalement facile à vaincre, ont déclaré les chercheurs, simplement en observant ce que fait le code lorsqu’il s’exécute.

Le dernier lot de packages malveillants tente de capitaliser sur les fautes de frappe commises par les développeurs lors du téléchargement de l’un de ces packages légitimes :

  • bitcoinlib
  • ccxt
  • cryptocomparer
  • crypto-alimentation
  • freqtrade
  • sélénium
  • solana
  • vipère
  • websockets
  • yfinance
  • pandas
  • matplotlib
  • aihttp
  • belle soupe
  • flux tenseur
  • sélénium
  • rauque
  • colorama
  • scikit-apprendre
  • pytorche
  • pygame
  • pyinstaller

Les packages qui ciblent le package vyper légitime, par exemple, utilisaient 13 noms de fichiers qui omettaient ou dupliquaient un seul caractère ou transposaient deux caractères du nom correct :

  • yper
  • vper
  • plus
  • vite
  • vvyper
  • vyyper
  • poivre
  • vipeer
  • vyperr
  • yvper
  • vpyer
  • vyepr
  • vipré

« Cette technique est trivialement facile à automatiser avec un script (nous laissons cela comme un exercice pour le lecteur), et à mesure que la longueur du nom du paquet légitime augmente, les typosquats possibles augmentent également », ont écrit les chercheurs. « Par exemple, notre système a détecté 38 typosquats du cryptocompare package publié presque simultanément par l’utilisateur nommé pinigin.9494.”

La disponibilité de packages malveillants dans des référentiels de code légitimes qui ressemblent étroitement aux noms de packages légitimes remonte à au moins 2016 lorsqu’un étudiant a téléchargé 214 packages piégés dans les référentiels PyPI, RubyGems et NPM contenant des noms légèrement modifiés de packages légitimes. . Résultat : le code imposteur a été exécuté plus de 45 000 fois sur plus de 17 000 domaines distincts, et plus de la moitié ont reçu des droits d’administration tout-puissants. Les attaques dites de typosquattage se sont multipliées depuis.

Les noms des 451 packages malveillants trouvés par les chercheurs de Phylum sont inclus dans le billet de blog. Ce n’est pas une mauvaise idée pour quiconque ayant l’intention de télécharger l’un des packages légitimes ciblés de vérifier qu’il n’a pas obtenu par inadvertance un sosie malveillant.

Source-147

- Advertisement -

Latest