Fusillez vos applications avec Fusil 0.6

Posté par  (site web personnel) . Modéré par Jaimé Ragnagna.
Étiquettes :
0
19
déc.
2007
Sécurité
Le fuzzing est une technique d'assurance qualité logicielle visant à rechercher des bugs en injectant des données invalides. Fusil est un framework dédié au fuzzing comprenant divers outils pour créer des processus, surveiller un processus existant ou encore injecter des erreurs dans un fichier.

Chaque exécution de la cible se voit attribuer une note de -100% à +100% en utilisant diverses sondes pour déterminer si l'application a planté ou non. Des sondes surveillent l'état d'un processus et sa consommation processeur, d'autres surveillent des fichiers texte tel que syslog, d'autres encore se basent sur la durée d'exécution, etc. Le système de notation est réutilisé pour autoconfigurer Fusil : l'agressivité, nombre d'erreurs injectées, évolue en fonction des notes précédentes. Divers exemples sont fournis pour essayer Fusil et voir de quoi il est capable : Mplayer, Image Magick, ClamAV, PHP, printf, etc. Un dossier temporaire est généré pour chaque exécution. Il est utilisé comme répertoire de travail et est conservé en cas de plantage de la cible. Le projet est écrit en Python et distribué sous licence libre (GNU GPLv2). Son architecture est basée sur un système multi-agents et elle est donc très modulaire. Ce choix s'explique par le fait que Fusil doit pouvoir jouer n'importe quel scénario de test, et qu'il faut donc être le plus modulaire possible. L'implémentation actuelle de Fusil est bien adaptée aux applications Linux en ligne de commande, bien qu'il soit utilisable sur n'importe quel système d'exploitation (Mac OS X, NetBSD, etc.). Des extensions pour d'autres environnements (application réseau, application graphique, plate-forme Windows, etc.) sont les bienvenues.

Bien que Fusil mette en place quelques mesures simples pour protéger la machine de test, souvenez-vous que le but de Fusil est de faire planter des applications. Ne vous plaignez pas si vous perdez des données ! N'utilisez Fusil que dans un environnement dédié aux tests ou si vous savez exactement ce que vous faites. Il n'est pas nécessaire d'installer Fusil pour l'utiliser, il suffit d'utiliser le script run_fusil.sh. Lorsque Fusil trouve un bug, ce n'est pas forcément une faille de sécurité. Le bug peut être un simple déni de service. Il faut reproduire le bug dans un débogueur pour vérifier .

Exemple Mplayer avec un fichier Matroska :

$ fusil -p projects/mplayer.py --max-success=1 movie.mkv
[application] Fusil version 0.6 -- GNU GPL v2
[application] http://fusil.hachoir.org/
[application] Load project projects/mplayer.py
[session 1][project] Start session
[session 2][project] Start session
[session 3][project] Start session
[session 4][project] Start session
[session 5][project] Start session
[session 5][step 9][watch:stdout] Match pattern 'MPlayer interrupted by signal' (score 100.0%) in 'MPlayer interrupted by signal 11 in module: decode_audio'
[session 5][project] End of session: score=100.0%, duration=0.315 second
[project] Success 1/1!
[project] Project done: 5 session in 9.3 second (1850.9 ms per session), total 9.8 second
[project] Total: 1 success
[directory:run-0001] Keep non-empty directory: /home/haypo/prog/fusil/trunk/run-0001
[application] Exit Fusil

Mplayer a planté après 5 essais et 10 secondes. Le fichier fusil.log contient un peu plus d'informations sur l'exécution, et run-0001/session-0005/session.log contient tous les détails sur la session ayant planté. On y trouve le fichier généré qu'on va pouvoir rejouer :

$ mplayer run-0001/session-0005/flashmob-0001.mkv
MPlayer 1.0rc2-4.1.2 (C) 2000-2007 MPlayer Team
(...)
MPlayer interrupted by signal 11 in module: decode_audio
(...)
Erreur de segmentation (core dumped)

Aller plus loin

  • # Framework ... je te hais

    Posté par  . Évalué à -3.

    Fusil n'a pas l'air d'un framework, il ne produit pas de logiciel.

    Et pourquoi diable utiliser framework quand on peut utiliser "environnement de ..." ou "ensemble d'outils ...." ou "suite".

    Par contre je suis d'accord pour l'emploi de fuzzing. Il n'y a pas à ma connaissance d'équivalent français.
    • [^] # Re: Framework ... je te hais

      Posté par  . Évalué à 4.

      "A framework is a basic conceptual structure used to solve or adress complex issues."

      ça t'ira ? il n'y en a pas qu'en informatique.

      "This very broad definition has allowed the term to be used as a buzzword, especially in a software context." - c'est peut-être ça ton soucis...
      • [^] # Re: Framework ... je te hais

        Posté par  . Évalué à 0.

        > "This very broad definition has allowed the term to be used as a buzzword, especially in a software context." - c'est peut-être ça ton soucis...

        Non. Mon soucis est l'utilisation de terme anglais alors que le français fait parfaitement l'affaire.
        M'enfin, les gens ne veulent pas rater une occasion d'utiliser de l'anglais, ça fait "moderne", dans le coup.
        Ce qui n'est pas dans le coup, c'est ceux qui ne connaissent pas l'anglais ou son soucieux du français (NB: je n'ai pas dit ennemi de l'anglais, j'en lis trop pour dire une connerie pareil).
        Faisons le constat, les français sont de moins en moins attachés à la langue française. Son image est moins flatteuse que l'anglais.
        • [^] # Re: Framework ... je te hais

          Posté par  . Évalué à 1.

          de terme -> de termes ou d'un terme
          son soucieux -> sont soucieux
          connerie pareil -> connerie pareille

          Pour un donneur de leçons...

          Certains mots anglais (ou autre, du reste) n'ont pas réellement d'équivalent en français (et c'est le cas de framework, de mon point de vue). Les adopter, c'est ce qui différencie une langue vivante d'une langue morte. Les Québécois parlent un français beaucoup plus influencé par l'anglais que les français (utilisation de certains mots, et même de certaines tournures de phrases). Pour autant peut-on dire qu'ils défendent moins la langue française ? À mon avis non, au contraire.
          • [^] # Re: Framework ... je te hais

            Posté par  . Évalué à 2.

            Certains mots anglais (ou autre, du reste) n'ont pas réellement d'équivalent en français (et c'est le cas de framework, de mon point de vue).

            Canevas ?
            • [^] # Re: Framework ... je te hais

              Posté par  . Évalué à 1.

              En effet. Reste que canevas ne m'évoque pas ce que framework m'évoque, dans le domaine informatique. C'est très subjectif, je sais bien, mais c'est comme ça.
      • [^] # Re: Framework ... je te hais

        Posté par  . Évalué à 1.

        > ça t'ira ?

        Ce n'est pas la définition que pointe la dépêche :
        En informatique, un framework est un espace de travail modulaire. C'est un ensemble de bibliothèques, d'outils et de conventions permettant le développement d'applications.


        Tu peux développer une appli avec Fusil ?

        On est dans le cas où on utilise un terme anglais pas pour ce qu'il signifie, mais seulement car il est anglais. Une horreur.
    • [^] # Re: Framework ... je te hais

      Posté par  (site web personnel) . Évalué à 2.

      Fusil n'a pas l'air d'un framework, il ne produit pas de logiciel.

      Je considère chaque projet de fuzzing comme un logiciel indépendant, car il existe plein de petits logiciels (écrit à partir de rien, souvent en C) qui testent un type d'attaque pour une cible donnée. Voir par exemple :
      http://www.digitaldwarf.be/products.html

      Maintenant, l'utilisation de « framework » est peut-être un peu abusive.
      • [^] # Re: Framework ... je te hais

        Posté par  . Évalué à 3.

        en collant à sa signification originelle (accessoirement en anglais), c'est pas du tout abusif.

        maintenant sa version française pue à un tel point que c'en est un faux ami, je ne l'utilise pas.
        • [^] # Re: Framework ... je te hais

          Posté par  . Évalué à 1.

          > en collant à sa signification originelle (accessoirement en anglais), c'est pas du tout abusif.

          Ben quasi n'importe quoi est un framework alors.
          Dlfp est un framework de communication.
          Php un framework pour faire des pages web.
          Gnome est aussi un framework.
          Bugzilla est un framework pour traquer les bugs.
          GNU/Linux un framework pour faire tourner des programmes.
          Ma cuisine est un framework pour faire à bouffer.
          Un clavier est un framework pour rentrer des donnés.
          etc.

          Ce mot n'a donc aucun intérêt.
          • [^] # Re: Framework ... je te hais

            Posté par  (site web personnel) . Évalué à 1.

            C'est le principe de tous ces mots anglais technico-techniques, qui sont intraduisibles, non pas parce qu'on ne peut pas créer un mot en français/espagnol/haut-sorbien mais parce qu'ils sont déjà vide de sens à la base même. C'est le principe quintessentiel du buzzword, qui plaît à tous mais ne sert à rien.

            M'enfin, je dis ça, je dis rien !
            • [^] # Re: Framework ... je te hais

              Posté par  (site web personnel) . Évalué à 1.

              Mhumpf, en général, l'idée d'un 'framework' (moinsez moi si je dis des conneries grosses comme moi) c'est d'avoir un morceau de logiciel sur lequel se baser et qui sert à déterminer la forme de ce qu'on met dessus - dans les grandes lignes hein, un bon 'framework' n'est pas contraignant (et surtout pas trop intrusif). À rapprocher de l'idée de canevas en broderie (un cadre pour l'œuvre à construire). En principe, on délègue au 'framework' la plus grande partie possible du code (les tâches triviales, répétitives) pour se concentrer sur le 'métier' (celui là aussi il est pas mal galvaudé comme terme), autrement dit la 'charge utile' du code.

              Après, quoi considérer comme 'framework' (ou 'cadriciel' pour nos amis québécois), je ne pense pas que ce soit très déterministe... Struts (pour les adeptes du café) peut être considéré comme tel, il impose un modèle MVC (ou presque). Les gens de PHP considèreront, suivant leur paroisse, Zend et/ou Symfony comme étant des 'frameworks'.

              Par contre pour les exemples non liés à l'informatique il ne m'en vient pas de trivial à l'esprit. Personnellement, je ne pense pas que 'framework' soit le pire des termes échangés à mauvais escient (en général) entre décideurs. J'ai plus tendance à tiquer quand on me dit qu'une pauvre page avec un champ de recherche en Ajax, c'est du 'Web 2.0'...
  • # et par rapport à zzuf ?

    Posté par  (site web personnel) . Évalué à 2.

    Comment pourrait-on comparer Fusil par rapport à zzuf ? http://sam.zoy.org/zzuf/

    pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

Suivre le flux des commentaires

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