Fusil est un framework de fuzzing écrit en Python et distribué sous licence GNU GPLv2. Pour ceux qui ne connaissent pas la technique du fuzzing, c'est une façon simple simple, rapide et efficace de trouver des bugs dans des logiciels. Certains sont mineurs (dénis de service), d'autres bugs peuvent se révéler être des failles de sécurité (prise de contrôle du flux d'exécution).
Fusil permet d'écrire facilement des « projects de fuzzing » avec un ensemble de fonctions et la puissance du Python : créer un processus, compiler un programme C, surveiller un processus, surveiller syslog, etc.
Projects disponibles : gettext, clamav, libc_printf, php, linux_ioctl, mplayer, identify, etc.
Site web : http://fusil.hachoir.org/trac
Exemple de session poppler :
$ ./run_fusil.sh -p project/poppler.py ~/document.pdf
[application] Fusil version 0.5 -- GNU GPL v2
[application] http://fusil.hachoir.org/
[application] Load project project/poppler.py
[session 1][project] Start session
(...)
[session 994][watch:process:pdftotext] Process killed by signal SIGSEGV
[session 994][project] End of session: score=75.0%, duration=0.378 second
[session 994][session_dir] Success: keep directory '/home/toady/local/scm/svn/fusil/project-0008/session-0005'
[project] Project done: : 5 session in 0.9 second (181.6 ms per session), total 0.9 second
[application] Exit Fusil
La dernière session (succès) est sauvée dans le dossier project-0003/session-0994/. On peut reproduire le plantage avec :
$ evince document.pdf
Error (0): PDF file is damaged - attempting to reconstruct xref table...
Error (44780): Dictionary key must be a name object
(...)
Segmentation fault
Fusil utilise de petits « agents » qui échangent des messages pour déclancher des actions. Ex : MangleFile injecte des erreurs dans un fichier valide (document PDF, vidéo AVI, image JPEG, etc.). Ensuite Fusil utilise le nom du fichier généré pour lancer un processus.
Chaque session du projet a un score compris entre -100% (l'application a rejeté les données) et 100% (succès). Plusieurs sondes existent pour calculer le score de la session :
+100% pour un processus tué avec un signal (WatchProcess)
+100% pour le motif « segmentation fault » dans la sortie stdout (FileWatch)
-100%pour une session trop rapide (TimeWatch)
etc.
Pour éviter de planter l'ordinateur durant ces bidouilles, Fusil limite la mémoire et la priorité des processus, copie seulement certaines variables d'environnement, crée un dossier de travail temporaire, etc.
---
J'ai écrit un journal et non pas une dépêche car Fusil est encore en phase de test. Toute remontée de bug est la bienvenue.
# huum
Posté par Marc Quinton . Évalué à 2.
[^] # Re: huum
Posté par Victor STINNER (site web personnel) . Évalué à 3.
http://secunia.com/historic_advisories/
[^] # Re: huum
Posté par pasBill pasGates . Évalué à 7.
L'enorme majorite des bugs qu'on trouve en interne est trouve a travers le fuzzing. D'ailleurs je trouves ce journal tres sympathique car c'est justement ce que je fais pendant genre 50-70% de mon temps depuis plus 2 ans et c'est cool de voir pour une fois un journal sur le QA, ce qui est assez rare.
Un truc que je me demandes, pourquoi est-ce que tu as ecris ton propre framework plutot qu'utiliser/etendre un des framework connus, genre Peach qui est en python aussi ?
Je ne veux pas te decourager, mais developper un framework complet et vraiment efficace prend un temps non negligeable, j'en suis perso a plus de 2 ans d'efforts et il y a toujours des choses a ajouter/ameliorer, peut-etre que contribuer a un des frameworks existants serait plus efficace, a moins que tu sois interesse personnellement a apprendre et decouvrire comment ecrire un tel framework auquel cas rien de tel que le faire soi-meme.
[^] # Re: huum
Posté par Victor STINNER (site web personnel) . Évalué à 6.
Hum hum, bonne question. Réponse officielle :
« Contrairement à ce que laisse penser le mot « framework », chaque outil est spécialisé dans un domaine. PROTOS est dédié au fuzzing réseau, zzuf vise l'attaque des parseurs de fichier, sysfuzz vise uniquement les appels systèmes noyaux (mais multi-OS, déjà pas mal), etc. » (hum, il me semble que zzuf peut aussi injecter des erreurs dans une socket)
Réponse honnête :
« J'aime programmer et je redéveloppe mon propre outil pour comprendre comment ça marche. À la limite, je passe plus de temps à peaufiner l'outil lui-même qu'à l'utiliser. Je suis un passionné de la technique. »
La bonne réponse est un mélange des deux. Fusil est un ensemble d'outils pour fabriquer vite fait un projet de fuzzing quel qu'il soit, bien qu'aujourd'hui les projets d'exemples sont peu variés. Je vise des scénarios complexes impliquant beaucoup d'agents avec beaucoup d'interactions. Et j'ai écrit un framework comme ça l'ajout d'une fonctionnalité dans Fusil va bénéficier à tous les projets utilisant Fusil. Genre là j'ai fait en sorte qu'en cas de succès, tous les fichiers impliqués dans la session soient sauvés. Et bien, tous les projets bénéficient de ce plus.
Je ne veux pas te decourager, mais developper un framework complet
Hé bien, tout dépend de ce que tu veux dire par « complet ». Je trouve qu'avec le version actuelle (dans un moment de folie aujourd'hui, j'ai tagué une version 0.5, allez hop) on peut déjà faire beaucoup de choses.
Pour la suite, je vais voir comment contrôler des programmes graphiques et aussi des programmes sur une autre machine.
[^] # Re: huum
Posté par ckyl . Évalué à 1.
J'en profite pour demander si il existe de bon outils pour faire du fuzzing sur du XML.
Le parseur XML protège l'application des erreurs de format; une attaque bête et méchante n'est donc pas intéressante. Par contre pouvoir tester des documents valides permet de tester si il est possible de perturber la couche métier.
Alors ce petit bijou existe-il ? Les tests unitaires a la main sont assez laborieux a faire...
[^] # Re: huum
Posté par pasBill pasGates . Évalué à 1.
A noter que non seulement il faut que ce soit du XML correct, mais souvent il faut que cela soit correct vis-a-vis du schema aussi, ce qui rend le developpement de ces jouets assez amusant.
[^] # Re: huum
Posté par ckyl . Évalué à 1.
Bien sur ce n'est interessant que si l'outil est capable de comprendre les contraintes du Schema: restritction de type, integrite des keyref, cardinalitees etc.
Pour l'instant je n'ai pas mis la main sur quelque chose avec un minimum d'intelligence.
[^] # Re: huum
Posté par patrick_g (site web personnel) . Évalué à 4.
Le logiciel propriétaire dans toute son horreur !
Ton frère humain te demande de l'aider, tu pourrais le faire à coût nul et pourtant la licence privative t'interdit de le faire.
C'est Stallman qui avait raison ;-)
[^] # Re: huum
Posté par pasBill pasGates . Évalué à -3.
[^] # Re: huum
Posté par feth . Évalué à 6.
[^] # Re: huum
Posté par pasBill pasGates . Évalué à 2.
Alors oui certains softs les utiliseraient et deviendraient plus robustes.
Tout comme plein d'autres softs ne les utiliseraient pas (manque d'interet, temps, connaissances, ...) et seraient des grosses cibles potentielles, avec les utilisateurs comme victimes. D'ailleurs meme les softs ayant utilise ces fuzzers seraient potentiellement vulnerable a une utilisation avec une approche/configuration differente.
Resultat, pour des raisons legales(on a assez de proces au cul), on ne peut pas sortir les softs qui risqueraient de servir a des gens mal intentionnes.
[^] # Re: huum
Posté par stricaud . Évalué à 4.
Ainsi tu crois qu'il est compliqué de développer de tels outils et tu joues la dessus pour combattre d'éventuels crackers.
Ce qui est dommage, c'est que tu joues contre ton propre camp, parce que je doute que la remarque à laquelle tu as répondue sur le fuzzer XML concernait autre chose qu'un développeur chercher à tester ses outils pour avoir le moins de vulnérabilités possibles.
[^] # Re: huum
Posté par pasBill pasGates . Évalué à 1.
Je sais parfaitement que ces outils serviraient a plein de developpeurs interesses, mais malheureusement si ils etaient public ils serviraient aussi a plein de gens mal intentionnes, et c'est la le probleme.
[^] # Re: huum
Posté par Victor STINNER (site web personnel) . Évalué à 3.
Je ne connais pas la législation, mais ça me semble tiré par les cheveux que ça soit l'auteur du logiciel qui est mis en cause plutôt que la personne qui l'a utilisé à des fins malicieuse. On peut faire le parallèle avec les hébergeurs de contenu Internet qui sont mis hors de cause par la LEN : c'est les personnes qui publient le contenu qui sont à juger. Corrigez moi si je dis une bétise.
D'autres que toi publient déjà des fuzzers. Tu en trouves à foison sur Internet. Moi même je viens de publier Fusil :-) Google a publié plusieurs fuzzers récemment (avec le nom de leurs auteurs !!!). Je ne vois pas ce qu'on pourrait reprocher à Google. Je prend l'exemple de Google car c'est une société qui engage sa responsabilité en offrant au public des armes de destruction massives :-)
Quand un bug est trouvé, il y a plusieurs manières de réagir. Beaucoup de personnes (morales ou physiques) contactent l'éditeur et attendent que le bug soit corrigé avant de publier la faille.
Je pense plutôt qu'en offrant au public des outils de Q&A (car c'est avant tout de l'assurance qualité), les développeurs seront plus tentés eux-même d'utiliser ces outils. Si aucun outil n'est disponible, comment font les développeurs pour trouver des bugs ? Ils attendent que les pirates publient anonymement des exploits ?
[^] # Re: huum
Posté par pasBill pasGates . Évalué à 3.
Et je les comprends en partie, MS c'est un peu l'elephant dans le couloir, une cible ideale, le nombre de proces qu'on se prend(justifies OU PAS) est grand, et aux USA tu peux te prendre un proces tres facilement, surtout si tu as de l'argent a donner en amendes.
[^] # Re: huum
Posté par Victor STINNER (site web personnel) . Évalué à 2.
censure par LCA
C'est qui / quoi LCA ?
MS c'est un peu l'elephant dans le couloir, une cible ideale
Je ne vois pas ce que tu veux dire par cette phrase. Microsoft est la cible des pirates car Microsoft c'est +90% des ordinateurs sur Terre... La moindre faille affecte direct 90% de la Terre (enfin, très grossièrement).
Je crois que cette discussion est un peu la discussion que bien d'autres ont eu sur « pour ou contre la sécurité par l'obscurité ».
http://fr.wikipedia.org/wiki/Sécurité_par_l'obscurité
Perso j'ai fait mon choix. Dans un de mes articles récents je parle de bugs trouvés dans le générateur de nombres pseudo-aléatoires de Netscape Navigator qui était à l'époque un logiciel propriétaire. Des chercheurs ont fait pareil pour Linux et Windows (et ont trouvés des bugs, dans les deux OS). La sécurité par l'obscurité est un leurre : on pense être à l'abris alors qu'en fait ça change rien...
http://www.haypocalc.com/blog/index.php/2007/12/02/96-bugs-g(...)
[^] # Re: huum
Posté par patrick_g (site web personnel) . Évalué à 2.
[^] # Re: huum
Posté par Sylvain Sauvage . Évalué à 2.
Ils ont pourtant laissé sortir IE…
[^] # Re: huum
Posté par pasBill pasGates . Évalué à 2.
Ca n'a rien a voir avec securite par obscurite, cela a tout avoir avec le choix suivant :
- On sort ces outils en public, on aide les developpeurs, on risque d'aider certaines personnes mal-intentionnees et on risque de se prendre des proces
- On ne les sort pas, on n'aide personne, mais au moins on ne se prend pas de proces
Eh oui, c'est le genre de choix que tu es amene a faire quand tu es une societe americaine, la beaute du systeme judiciaire US.
[^] # Re: huum
Posté par Jean-Philippe (site web personnel) . Évalué à 1.
[^] # Re: huum
Posté par pasBill pasGates . Évalué à 2.
[^] # Re: huum
Posté par ~ lilliput (site web personnel) . Évalué à 1.
Ca fait une peu l'argument j'ai un virus "il va tuer internet"...
Je cherchais aussi un fuzzer XML sachant parser XSD, si tu changes d'avis mail moi [je travaille chez les gentils (...)]
NB les fuzzers y'en a plein sinon ...
http://security-protocols.com/category/fuzzers
http://www.infosecinstitute.com/blog/2005/12/fuzzers-ultimat(...)
http://www.theatre-eibel.fr http://www.isc2chapter-yorkshire.co.uk
[^] # Re: huum
Posté par ckyl . Évalué à 1.
Heu non... C'est a priori qu'ils ne sont pas diffusés. La licence importe peut dans ce cas...
De plus c'est typiquement le type de logiciel dont la licence ne me gène pas. Ça fait gagner du temps (compare le prix des licences a mon salaire), ça ne compromet pas la pérénité du projet, et ça évite des retours au support... Bref au final ca fait gagner de l'argent et du temps. Si un framework équivalent libre existe évidement il sera favorisé.
Mais pour le moment j'ai pas mis la main sur un truc correct que ce soit proprio ou libre...
[^] # Re: huum
Posté par Victor STINNER (site web personnel) . Évalué à 2.
Je connais le projet untidy, mais juste de nom, je ne l'ai pas testé (le logo est plutôt parlant) :
http://untidy.sourceforge.net/
À priori, cet outil teste la conformité des parseurs XML (comme libxml2 et Firefox) et non pas du contenu.
Effectivement, un générateur de XML valide pourrait être rigolo.
cykl : si tu connais un projet libre qui mange du XML en entrée et qui est simple à scripter en ligne de commande, je peux voir ce que je peux faire.
[^] # Re: huum
Posté par ckyl . Évalué à 1.
Disons que c'est pas si "simple". Il faut que l'outil soit capable de manger un fichier XML d'exemple, mais aussi le XSD associé pour en extraire les contraintes.
Avec juste le XML cela reste difficile d'arriver a quelque chose de correct. Par example avec:
<root>
<server refid="id1" />
<port id="id1" type="tcp" port="80"/>
</root>
Comment peux tu deviner que: type ne peut prendre que les valeures tcp ou udp, port doit etre un entier positiif, server et port sont liés pas une contrainte sur la cle id1 ? Si ces contraintes ne sont pas prises en compte alors on test le parseur XML et non pas l'application derriere.
Pour ce qui est de l'outil, tu me sembles vouloir directement utiliser les API pour manipuler du XML disponible dans a peut pres tout les langages (exemple: DOM + XPATH). Par contre ca ne regle pas le probleme non trivial de tenir compte des Schemas, ca permet juste de manipuler tres facilement un fichier exemple pour lui faire des mutations.
# Thérapie
Posté par yeKcim (site web personnel) . Évalué à 10.
[^] # Re: Thérapie
Posté par yeKcim (site web personnel) . Évalué à 4.
* wormux -> http://www.wormux.org
* hachoir -> http://hachoir.org/
* fusil -> http://fusil.hachoir.org/
# client ftp ?
Posté par Nicolas Boulay (site web personnel) . Évalué à 3.
J'ai essayé de transférer un disque complet. Ils ont _tous_ fini par planter. (gftp, filezilla, ...)
"La première sécurité est la liberté"
[^] # Re: client ftp ?
Posté par Victor STINNER (site web personnel) . Évalué à 2.
http://seclists.org/vuln-dev/2006/May/0004.html
Mais c'est plus drôle quand ça touche le serveur quand même (hop, je balance un collègue) :
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-5300
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.