Journal : Sortie de Fusil le fuzzer en version 1.0beta3

Posté par Victor STINNER (page perso, ) le 03 septembre 2008
18
Fusil est à la fois une boîte à outils permettant d'écrire son propre fuzzer et une suite de fuzzers : Apache, ClamAV, Firefox, gettext, gstreamer, ImageMagick, libpoppler, printf(), Mplayer, ogg123, PHP et Python. Il permet d'écrire rapidement un fuzzer et s'occupe de gérer une campagne de fuzzing (création de fichiers, nettoyage en quittant, classement des erreurs, etc.). Un fuzzer est un outil d'assurance qualité permettant de générer des bugs dans vos programmes. Ceci permet d'améliorer la robustesse de vos applications face aux situations rares ou inattendues (échec d'une allocation mémoire, fichier corrompu, ...) et aux attaques d'un pirate. Fusil a déjà servi à remonter des dizaines de bugs dans divers projets (notamment ceux pour lesquels il existe un fuzzer).

Avec la version 1.0, Fusil peut maintenant être utilisé sans risque. Il utilise un utilisateur dédié pour créer les processus fils et limite leurs ressources (mémoire, nombre total de processus, etc.). L'ajout d'un débogueur, python-ptrace, aide à la classification des erreurs (lecture/écriture invalide en mémoire, division par zéro, dépassement de la pile, ...) en renommant le dossier de travail du fuzzer.

Cette version étant une version béta, elle doit être testée au maximum sur différentes architectures et systèmes d'exploitations. N'hésitez pas à remonter des bugs !

Le développement de la version 1.0 (actuellement en phase béta) aura nécessité environ un an de développement. Le projet est distribué sous licence GPLv2, écrit en Python et packagé pour Debian, Mandriva et OpenEmbedded. Bien que le développement soit essentiellement réalisé sous Linux, Fusil fonctionne bien sous FreeBSD et devrait fonctionner sur n'importe quel système POSIX (UNIX et BSD en particulier).



Pour l'installation, vous aurez besoin de python-ptrace et d'un utilisateur système « fusil » (et d'un groupe « fusil »). Un fuzzer s'exécute simplement en tapant son nom : « fusil-gettext » par exemple. Chaque fuzzer a ses propres options, n'hésitez pas à essayer l'option « --help ».

Pour la documentation, consultez le dossier doc/. Des exemples simples sont disponibles dans le dossier examples/.

python-ptrace ne fonctionne correctement que sous Linux (i386, x86_64, PPC32) et FreeBSD (i386). Si vous avez des problèmes avec une autre architecture/système d'exploitation, vous pouvez le désactiver avec le fichier de configuration de Fusil (~/.config/fusil.conf) :

[debugger]
use_debugger = False

Consultez doc/configuration.rst pour connaître les autres options de Fusil.

Au passage, si vous ne connaissez pas python-ptrace, sachez qu'il est écrit intégralement en Python et inclut les programmes strace.py et gdb.py (clones de strace et gdb). strace.py est très proche de strace, mais possède plus d'options et fonctionne sous FreeBSD sans émulation Linux (dossier /proc). Au contraire, gdb.py est très limité, il ne gère ni les threads ni les symboles par exemple.

> Lire le journal (12 commentaires, moyenne: 2,8).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.

Je vais tester

Posté par palm123 (page perso, ) le 03/09/2008 à 13:13. (lien). Évalué à 5.

J'avais beaucoup apprécié ton article dans MISC.

--
" Here again, European and African notions are strongly divergent. By local standards, a car with only 6 people in it is empty."
Nigel Barley, "The innocent anthropologist".
  • [^]Re: Je vais tester

    Posté par Victor STINNER (page perso, ) le 03/09/2008 à 14:21. (lien). Évalué à 8.

    Oh, drôle de hasard ! Il y a un dossier « fuzzing » dans le MISC ce mois (n°39) avec justement un article dédié à Fusil :-)

  • [^]Re: Je vais tester

    Posté par Xavier Maillard (Jabber id, page perso, ) le 04/09/2008 à 06:21. (lien). Évalué à 2.

    Moi j'appérice tout autant le blog que l'article. C'est très instructif à lire la plupartu du temps (j'adore la partie sur les générateurs de nombres aléatoires).

Un outil pour générer des bugs ?

Posté par Toto () le 03/09/2008 à 19:27. (lien). Évalué à 3.

Un fuzzer est un outil d'assurance qualité permettant de générer des bugs dans vos programmes
Un programme qui rajoute des bugs ? super !
La phrase est un peu tendancieuse, même si facilement compréhensible. Mais j'aurais plutot dit "détecter".

Sinon, cet outil est vraiment interressant et puissant pour le peu que j'ai eu à l'utiliser. Toutes mes félicitations à son auteur

  • [^]Re: Un outil pour générer des bugs ?

    Posté par Victor STINNER (page perso, ) le 03/09/2008 à 23:00. (lien). Évalué à 2.

    Hum, j'ai du mal à définir ce qu'est exactement le fuzzing. Un raccourci maladroit serait de dire qu'il sert à trouver des vulnérabilités dans vos programmes. Le fuzzing sert avant tout à rechercher des bugs, mais pour les trouver, il doit les déclencher. Il est donc vrai que « générer des bugs » est incorrect.

Suicide

Posté par anakin () le 04/09/2008 à 00:08. (lien). Évalué à 3.

Peut-on "fuzzer" Fusil lui même ?

  • [^]Re: Suicide

    Posté par Victor STINNER (page perso, ) le 04/09/2008 à 12:19. (lien). Évalué à 2.

    Il n'existe pas de fuzzer pour Fusil, mais c'est une bonne idée. Fusil est une bibliothèque Python qui est utilisée par différents fuzzers. Pour fuzzer Fusil, il faudrait... hum... générer des fuzzers aléatoires, et voir comment Fusil réagit ? Pour l'instant, je me contente d'exécuter les fuzzers et corriger les erreurs (erreur de Fusil, pas de la cible genre Firefox ;-)) quand j'en rencontre...

et aussi dans archlinux

Posté par Sebastien Binet () le 05/09/2008 à 02:25. (lien). Évalué à 1.

c'est a dire ici:
http://aur.archlinux.org/packages.php?ID=19609

  • [^]Re: et aussi dans archlinux

    Posté par Victor STINNER (page perso, ) le 05/09/2008 à 22:50. (lien). Évalué à 2.

    Ah chouette, je ne savais pas. Je rajoute une référence sur le site web. Par contre, c'est python-ptrace, il n'y a pas de paquet archlinux pour Fusil.

Revenir en haut de page