Atheris, une boîte à outils de test de code Python

Google a dévoilé récemment la sortie de Projet Atheris, qui est un développement de un ensemble d'outils open source qualifié pour les tests de fuzzing du code Python et des extensions pour CPython écrites en C / C ++.

Le projet utilise un moteur basé sur libFuzzer et peut être utilisé avec les outils Address Sanitizer et Undefined Behavior Sanitizer pour détecter des erreurs supplémentaires. Le code est ouvert sous la licence Apache 2.0.

À propos de Google Atheris

Pour reprendre les mots de Google Atheris, il s'agit d'une boîte à outils qui peut être utilisée pour trouver automatiquement des erreurs dans le code Python et les extensions natives. Atheris est un fuzzer «basé sur la couverture», ce qui signifie qu'Atheris essaiera à plusieurs reprises diverses entrées de votre programme tout en le regardant s'exécuter et tentera de trouver des chemins intéressants.

La révision de code pour Python 2.7 et Python 3.3+ est prise en charge, mais pour une couverture complète et guidée, nous vous recommandons d'utiliser les branches Python 3.8 et 3.9, qui prennent désormais en charge les statistiques d'opcode par opcode.

Dans le processus, Atheris répertorie les combinaisons possibles de données d'entrée et génère un rapport sur tous les défauts détectés et les exceptions non détectées.

Par exemple, lors de la vérification de la bibliothèque d'analyse YAML dans Atheris, il a été constaté que certaines constructions YAML, telles que la spécification de "-_" au lieu d'une valeur entière ou l'utilisation d'une liste au lieu d'une clé, lèvent une exception inattendue au lieu d'un Erreur standard YAMLE.

Le test de fuzz est une technique bien connue pour découvrir les erreurs de programmation. Bon nombre de ces erreurs détectables ont de graves implications en matière de sécurité. Google a trouvé des milliers de vulnérabilités de sécurité et d'autres bogues lors de l'utilisation de cette technique. Le fuzzing est traditionnellement utilisé dans les langages natifs comme C ou C ++, mais l'année dernière, nous avons créé un nouveau moteur de fuzzing Python. Aujourd'hui, nous avons publié le moteur de fuzzing Atheris en open source.

Atheris peut également être utilisé pour identifier les différences de comportement des bibliothèques ciblant des tâches identiques. Par exemple, une vérification récapitulative du package Python "idna" et de la bibliothèque "libidn2", qui effectuent la tâche de décodage des noms de domaine internationalisés, a révélé qu'ils ne produisent pas toujours le même résultat.

L'une des meilleures utilisations d'Atheris est les diffuseurs différentiels. Ce sont des fuzzers qui recherchent des différences dans le comportement de deux bibliothèques censées faire la même chose. Un des exemples de fuzzers fournis avec Atheris fait exactement cela pour comparer le package "idna" de Python avec le package C "libidn2".

En particulier, si le domaine utilisait des séquences Unicode, alors "idna" et "libidn2" convertissaient le nom de domaine internationalisé en différents hôtes.

En général, Atheris est utile dans du code Python pur tant qu'il a un moyen d'exprimer quel est le comportement «correct», ou du moins d'exprimer quels comportements ne sont certainement pas corrects. Cela peut être aussi complexe que du code personnalisé dans le fuzzer qui évalue la précision de la sortie d'une bibliothèque, ou aussi simple que de vérifier qu'aucune exception inattendue n'est déclenchée.

Il est important de tenir compte du fait que les tests de fuzzing génèrent un flux de toutes sortes de combinaisons aléatoires de données d'entrée, proche des données réelles (par exemple des pages html avec des paramètres de balises aléatoires, des fichiers ou des images avec des en-têtes anormaux, etc.) et corriger les éventuels problèmes dans le processus.

Si une séquence entraîne une exception ou ne correspond pas à la réponse attendue, ce comportement indique très probablement un bogue ou une vulnérabilité.

Enfin, comme mentionné Atheris fonctionne avec le code Python dans les versions 2.7 et 3.3+, bien que Google recommande fortement d'utiliser 3.8+ et des extensions natives écrites pour CPython.

Windows ne fait pas encore partie des systèmes d'exploitation pris en charge, le moteur n'intéresse donc pour l'instant que les utilisateurs de Linux et Mac OS X.

Pour l'utiliser sur ces plates-formes, les développeurs doivent avoir une version actuelle de l'interface du compilateur Clang installée.

Si vous voulez en savoir plus, vous pouvez vérifier la note originale dans le lien suivant


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués avec *

*

*

  1. Responsable des données: Miguel Ángel Gatón
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.