Journal Fusillez vos applications (Fusil le fuzzer)

Posté par (page perso) .
0
28
nov.
2007
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 . Évalué à 2.

    avec un tel nom, certaines applications vont se retrouver au poteau. Ca donne envie de passer du temps sur certaines applications closed-sources.
    • [^] # Re: huum

      Posté par (page perso) . Évalué à 3.

      Je pense que plus de 70% des failles de sécurité sont trouvées avec la technique du fuzzing. Il suffit de voir quels outils ont été utilisés pour les Month of Kernel/PHP/Browser bugs. Voir aussi :
      http://secunia.com/historic_advisories/
      • [^] # Re: huum

        Posté par . Évalué à 7.

        Je confirme.

        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 (page perso) . Évalué à 6.

          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 ?

          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 . Évalué à 1.

          > peut-etre que contribuer a un des frameworks existants serait plus efficace

          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 . Évalué à 1.

            J'en connais plusieurs dont un fait par moi meme mais malheureusement je ne peux pas te les donner :)

            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 . Évalué à 1.

              Hum dommage.

              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 (page perso) . Évalué à 4.

              >>> J'en connais plusieurs dont un fait par moi meme mais malheureusement je ne peux pas te les donner :)

              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 . Évalué à -3.

                Les raisons n'ont en fait rien a voir avec le fait que le code est proprio(on ne vend pas ces softs de toute facon), mais plutot avec la dangerosite de ces jouets dans les mains de gens mal intentionnes, ce qui fait qu'on les garde en interne et qu'on ne les met pas a disposition de tout un chacun.
                • [^] # Re: huum

                  Posté par (page perso) . Évalué à 6.

                  Tu peux le prendre par les deux bouts : si tous les dévs avaient accès à ces jouets, ça serait intégré dans les suites de tests et ça contribuerait à faire disparaître les logiciels troués...
                  • [^] # Re: huum

                    Posté par . Évalué à 2.

                    Le probleme c'est qu'enormement de softs( LL ou pas hein) ne font quasiment aucuns tests de securite.

                    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 . Évalué à 4.

                  Cet argument est complètement minable.

                  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 . Évalué à 1.

                    On combat rien du tout, on veut eviter d'etre poursuivi devant un tribunal par un gars qui se serait fait piquer ses donnees ou autre grace a une faille trouvee par un de nos softs.

                    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 (page perso) . Évalué à 3.

                      poursuivi devant un tribunal par un gars qui se serait fait piquer ses donnees ou autre grace a une faille trouvee par un de nos softs.

                      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 . Évalué à 3.

                        Ben faut expliquer cela a notre departement legal, c'est de chez eux que vient l'interdiction. Meme les qqe bouquins de securite que des gars de MS ont ecrit ont ete presque censure par LCA car ils voulaient eviter qu'on decrive des techniques d'attaque dedans. Il a fallu leur expliquer que le bouquin ne servirait a rien sans ca et que ce qui etait ecrit n'etait pas nouveau pour qu'ils se calment.

                        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 (page perso) . Évalué à 2.

                          Je ne sais pas pour quelle société tu travailles. Pour quels raisons vous vous prenez des procès ? En France, le dernier procès (au sujet de la sécurité informatique) dont j'ai entendu parlé c'était un chercheur en sécurité qui a publié une faille dans un anti-virus. Il a perdu parce qu'il n'avait pas de licence de l'anti-virus (rah le con !).

                          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 (page perso) . Évalué à 2.

                            PasBill bosse chez Microsoft et c'est pour ça qu'il dit que sa société est une cible idéale pour les procès. Leur département juridique doit être fort chatouilleux et assez peu enclin a laisser paraitre des softs ou des bouquins permettant de trouver des failles.
                            • [^] # Re: huum

                              Posté par . Évalué à 2.

                               Leur département juridique doit être fort chatouilleux et assez peu enclin a laisser paraitre des softs ou des bouquins permettant de trouver des failles.

                              Ils ont pourtant laissé sortir IE…
                          • [^] # Re: huum

                            Posté par . Évalué à 2.

                            Je bosses chez MS, et on a tendance a se prendre des proces pour tout et n'importe quoi comme tu le sais surement.

                            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 (page perso) . Évalué à 1.

                              Parce que des entreprises comme Microsoft ne participent pas du tout à cette culture du procès peut-être ?
                              • [^] # Re: huum

                                Posté par . Évalué à 2.

                                Ben fais seulement, montre nous donc tous ces proces abusifs que MS aurait lance.
                  • [^] # Re: huum

                    Posté par (page perso) . Évalué à 1.

                    Stricaud +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 . Évalué à 1.

                > Le logiciel propriétaire dans toute son horreur !

                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 (page perso) . Évalué à 2.

            J'en profite pour demander si il existe de bon outils pour faire du fuzzing sur du XML.

            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 . Évalué à 1.

              > 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

              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 (page perso) . Évalué à 10.

    Après avoir participé au développement d'un jeu de guerre (wormux) après avoir passé les données à la moulinettes (hachoir) tu veux fusiller nos applications,... ne penses-tu pas que la violence dont tu fais preuve envers l'informatique pourrait -etre le sujet d'une thérapie ?
  • # client ftp ?

    Posté par . Évalué à 3.

    Tu devrais tester fusil sur les clients FTP.

    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é"

Suivre le flux des commentaires

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