Un package Python malveillant sur PYPI utilise Unicode comme technique d’obscurcissement pour échapper à la détection tout en volant et en exfiltrant les informations d’identification des comptes des développeurs et d’autres données sensibles à des appareils compromis.
Le package malveillant, nommé « Onyxproxy », utilise une combinaison de différentes polices Unicode dans le code source pour l’aider à contourner les analyses et les défenses automatisées qui identifient des fonctions potentiellement malveillantes en fonction de la correspondance des chaînes.
La découverte de l’onyxproxy provient de spécialistes de la cybersécurité de Phylum, qui a publié un rapport expliquant la technique.
Le package n’est plus disponible sur PYPI, après avoir été retiré de la plate-forme hier. Cependant, depuis sa publication sur la plate-forme le 15 mars, le package malveillant a amassé 183 téléchargements.
Unicode a abusé à Python
Unicode est une norme de codage complète de caractères englobant un large éventail de scripts et de langues, unifiant divers ensembles / schémas sous une norme commune couvrant plus de 100 000 caractères.
Il a été créé pour aider à maintenir l’interopérabilité et une représentation cohérente de texte dans différentes langues et plateformes et éliminer les conflits de codage et les problèmes de corruption des données.
Le package « onyxproxy » contient un package « setup.py » avec des milliers de chaînes de code suspectes qui utilisent un mélange de caractères Unicode.
Bien que le texte de ces chaînes, outre les différentes polices, semble presque normal dans les inspections visuelles, cela fait une différence massive pour les interprètes Python qui analysera et reconnaîtra ces personnages comme fondamentalement différents.
Par exemple, Phylum explique que Unicode a cinq variantes pour la lettre « n » et 19 pour la lettre « S » pour une utilisation dans différentes langues, mathématiques, etc. Par exemple, l’identifiant « auto » a des moyens de 122 740 (19x19x20x17) représenté dans Unicode.
La prise en charge de Python pour l’utilisation des caractères Unicode pour les identifiants, c’est-à-dire les variables de code, les fonctions, les classes, les modules et autres objets, permet aux codeurs de créer des identificateurs qui semblent identiques mais indiquent des fonctions différentes.
Dans le cas d’Onyxproxy, les auteurs ont utilisé les identifiants « import, » « sub-processus » et « cryptunprotectData », qui sont plus grands et ont un grand nombre de variantes, battant facilement des défenses basées sur des cordes.
Le support Unicode de Python peut être facilement abusé pour cacher des correspondances de cordes malveillantes, ce qui rend le code inoffensif tout en effectuant un comportement malveillant. Dans ce cas, le vol de données sensibles et de jetons d’authentification aux développeurs.
Bien que cette méthode d’obscurcissement ne soit pas particulièrement sophistiquée, elle est inquiétante de la voir employée dans la nature et pourrait être un signe d’abus plus large d’Unicode pour l’obscurcissement du python.
« Mais, quiconque cet auteur a copié ce code obscurci est suffisamment intelligent pour savoir comment utiliser les internes de l’interprète Python pour générer un nouveau type de code obscurci, une sorte qui est quelque peu lisible sans divulguer trop exactement ce qu’est le code Essayant de voler, « conclut le phylum.
Les risques d’Unicode à Python ont été largement discutés dans la communauté de développement de Python dans le passé.
D’autres chercheurs et développeurs ont également averti que le support Unicode dans Python rendra le langage de programmation vulnérable à une nouvelle classe d’exploits de sécurité, rendant les correctifs et le code soumis plus difficiles à inspecter.
En novembre 2021, des chercheurs universitaires ont présenté une attaque théorique appelée « Source de Troie » qui a utilisé des caractères de contrôle Unicode pour injecter des vulnérabilités dans le code source tout en rendant plus difficile pour les examinateurs humains de détecter ces injections malveillantes.
En conclusion, ces attaques sont désormais confirmées et les défenseurs doivent mettre en œuvre des mécanismes de détection plus robustes contre ces menaces émergentes.