tag:linuxfr.org,2005:/tags/fuzzing/publicLinuxFr.org : les contenus étiquetés avec « fuzzing »2017-02-10T11:02:33+01:00/favicon.pngtag:linuxfr.org,2005:Post/378632017-02-10T11:02:33+01:002017-02-10T11:02:33+01:00TETRANE 3/3: multiples offres d'emplois / stages : Ingénieur R&D Linux<p>cf <a href="//linuxfr.org/forums/general-petites-annonces/posts/tetrane-1-3-multiples-offres-d-emplois-stages-inge-r-d-c">l'annonce c++ que nous venons de publier</a> pour la description rapide de notre société et les infos communes à tous nos postes.</p>
<p><strong>Poste Ingénieur R&D Linux</strong><br>
Au sein de l'équipe R&D <a href="http://www.tetrane.com">TETRANE</a>, vous définissez, implémentez et maintenez les outils nécessaires au build, test, packaging, et déploiement des produits. Vous intervenez sur des chaînes de type BuildBot, des frameworks d'automatisation (tests, fuzzing, etc.), des outils en script shell ou Python. Vous êtes motivé pour monter en compétence sur les métiers de Tetrane afin d'être toujours plus pertinent sur vos développements. De nature polyvalente, vous intervenez ponctuellement sur l'administration des systèmes et réseaux.</p>
<p>Atouts indispensables:<br>
- Excellent dans l’environnement système/réseau/sécurité/stockage Debian Linux (système Debian, shell, administration de packages, etc.).<br>
- Maîtrise et pratique régulière du scripting bash et Python.<br>
- Maîtrise d'un ou plusieurs environnements virtualisés<br>
- Autonome au service de l'équipe. Excellente communication écrite et orale avec tous interlocuteurs, internes et externes. Anglais professionnel impératif.<br>
- Idéalement, doté d’une double compétence en développement et/ou test logiciel et/ou reverse-engineering.</p><div><a href="https://linuxfr.org/forums/general-petites-annonces/posts/tetrane-3-3-multiples-offres-d-emplois-stages-ingenieur-r-d-linux.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/111230/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/forums/general-petites-annonces/posts/tetrane-3-3-multiples-offres-d-emplois-stages-ingenieur-r-d-linux#comments">ouvrir dans le navigateur</a>
</p>
fred71https://linuxfr.org/nodes/111230/comments.atomtag:linuxfr.org,2005:Diary/361732015-10-27T19:16:54+01:002015-10-27T22:11:24+01:00Fuzzing : éprouver les entrées de vos développementsLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p>Wikipedia donne pour le fuzzing, la définition suivante (<a href="https://fr.wikipedia.org/wiki/Fuzzing">https://fr.wikipedia.org/wiki/Fuzzing</a>) :</p>
<blockquote>
<p>Le fuzzing (ou test à données aléatoires) est une technique pour tester des logiciels. L'idée est d'injecter des données aléatoires dans les entrées d'un programme. Si le programme échoue (par exemple en plantant ou en générant une erreur), alors il y a des défauts à corriger. Exemples de points d'entrée d'un programme :<br>
- Fichiers<br>
- Périphériques (clavier, souris, etc.)<br>
- Variables d'environnement<br>
- Réseau<br>
- Limitation des ressources (mémoire, disque dur, temps CPU, etc.)<br>
- etc.</p>
</blockquote>
<p>Cette définition montre bien, que la difficulté est de bien générer des jeux de données (aléatoires ou semi aléatoire) permettant de mettre à défaut son logiciel.</p>
<p>Jusqu'à récemment, il existait deux catégories d'outils de fuzzing :</p>
<ul>
<li>ceux utilisant la force brute</li>
<li>et ceux partant d'un profil de test bien particulier</li>
</ul><p>Le problème des outils utilisant la force brute est qu'ils ne permettent pas de trouver des cas complexes de crash dans un temps fini.<br>
Le problème des outils utilisant des profils de test est qu'ils nécessitent une connaissance approfondie du logiciel à tester et généralement permettent de ne trouver que les types d'erreurs que l'on souhaite chercher.</p>
<p><img src="//img.linuxfr.org/img/687474703a2f2f6c63616d7475662e636f726564756d702e63782f61666c2f61666c5f73637265656e2e706e67/afl_screen.png" alt="AFL" title="Source : http://lcamtuf.coredump.cx/afl/afl_screen.png"></p>
<p>Comme le montre cet article <a href="http://lwn.net/Articles/657959/">http://lwn.net/Articles/657959/</a>, depuis septembre 2014 et la découverte du problème Shellshock dans bash (problème existant depuis 25 ans ! avec la livraison de la version 1.03 de bash en 1989), un chercheur en sécurité de chez Google a trouvé un nouvelle stratégie pour effectuer du fuzzing en force brute mais de façon plus efficace.</p>
<p>E il a développé l'outil American Fuzzy Lop (en C), qui a permis de :</p>
<ul>
<li>découvrir le Shellshock de bash (une faille de 25 ans),</li>
<li>découvrir des denial-of-service sur le serveur DNS Bind</li>
<li>de redécouvrir la célèbre faille Heartbleed sur OpenSSL (attaque réputé complexe et qu'il a trouvé en seulement 6 heures de fuzzing)</li>
<li>et d'autres</li>
</ul><p>Actuellement, il existe des déclinaisons de cet outil pour les langages suivants :</p>
<ul>
<li>Go (<a href="https://github.com/dvyukov/go-fuzz">https://github.com/dvyukov/go-fuzz</a>) (cf. ci-desous)</li>
<li>Python (<a href="https://bitbucket.org/jwilk/python-afl">https://bitbucket.org/jwilk/python-afl</a>)</li>
<li>Rust (<a href="https://github.com/frewsxcv/afl.rs">https://github.com/frewsxcv/afl.rs</a>)</li>
<li>GCJ Java(<a href="https://gcc.gnu.org/java/">https://gcc.gnu.org/java/</a>)</li>
</ul><p>Ces outils fonctionnent de la façon suivante, ils vont :</p>
<ul>
<li>instrumentaliser votre logiciel à tester afin "d'observer ses réactions"</li>
<li>injecter des trames aléatoires basées sur des corpus utilisés lors de vos tests unitaires par exemple</li>
<li>s'il détecte une nouveau de chemin d'exécution de votre logiciel, il va enrichir le corpus (initialement composé de vos tests unitaire) et se basé sur cette entrée pour générer de nouvelles trames aléatoires.</li>
<li>s'il identifie un crash/exception/panic/boucle infinie/fuite mémoire, il trace l'entrée et l'éventuelle stack-trace pour correction ultérieure.</li>
</ul><div><a href="https://linuxfr.org/users/woffer/journaux/fuzzing-eprouver-les-entrees-de-vos-developpements.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/107177/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/woffer/journaux/fuzzing-eprouver-les-entrees-de-vos-developpements#comments">ouvrir dans le navigateur</a>
</p>
woffer 🐧https://linuxfr.org/nodes/107177/comments.atomtag:linuxfr.org,2005:Diary/320502012-01-13T20:41:12+01:002012-01-13T20:41:12+01:00Netzob : outil de rétro-conception de protocoles de communicationLicence CC By‑SA http://creativecommons.org/licenses/by-sa/3.0/deed.fr<p>Un petit journal pour vous annoncer la sortie d'un outil libre de rétro-ingénierie de protocoles de communication : Netzob* !</p>
<p>Plusieurs cas d'usages sont visés à travers cet outil :</p>
<ul><li>le développement d'une implémentation libre d'un protocole de communication propriétaire (ou non documenté) ;</li>
<li>l'analyse de sécurité (fuzzing "intelligent", avec compréhension du protocole) sur des implémentations de protocoles propriétaires ;</li>
<li>la simulation de trafic réaliste de protocoles de communication propriétaires dans le but de tester des produits tiers (pare-feux, IDS, ...) ;</li>
<li>etc.</li>
</ul><p>La version actuelle (0.3.1) implémente déjà pas mal de fonctionnalités permettant de capturer des messages depuis différentes sources (réseau, PCAP, flux inter-processus, fichiers structurés), d'identifier le format des messages (inférence du vocabulaire) ainsi que la machine à états d'un protocole (inférence de la grammaire).</p>
<p>Il existe une petite vidéo présentant un panorama des fonctionnalité de Netzob (capture de données à partir d'un fichier, inférence du vocabulaire, construction de la grammaire puis simulation de trafic) sur un cas simple :</p>
<p>
<a href="http://vimeo.com/34964757">http://vimeo.com/34964757</a>
</p>
<p>Nous sommes preneurs de retours d'expériences, et surtout de besoins que vous souhaiteriez voir pris en charge dans Netzob.</p>
<p>Les infos utiles :</p>
<ul><li>Le site web officiel : <a href="http://www.netzob.org">http://www.netzob.org</a></li>
<li>La page de téléchargement : <a href="http://www.netzob.org/index.php?page=download">http://www.netzob.org/index.php?page=download</a></li>
<li>Le projet est sous licence GPLv3.</li>
</ul><p>*NETwork protocol modeliZatiOn By reverse engineering.</p><div><a href="https://linuxfr.org/users/sygus/journaux/netzob-outil-de-r%C3%A9tro-conception-de-protocoles-de-communication.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/89017/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/sygus/journaux/netzob-outil-de-r%C3%A9tro-conception-de-protocoles-de-communication#comments">ouvrir dans le navigateur</a>
</p>
Frédéric Guihéryhttps://linuxfr.org/nodes/89017/comments.atomtag:linuxfr.org,2005:News/250652009-02-21T12:37:46+01:002009-02-21T12:37:46+01:00Publication de Fusil le fuzzer 1.2<div>Fusil est à la fois une bibliothèque de <a href="http://fr.wikipedia.org/wiki/Fuzzing">fuzzing</a> et une vingtaine de fuzzers (Gstreamer, ClamAV, Python, etc.). Bien qu'il vise d'abord les applications Linux en ligne de commande, on peut l'utiliser pour tester des applications graphiques comme Firefox ou VLC en scriptant ces applications. <i>Le fuzzing est une technique de recherche de bogues utilisant l'injection de fautes pour évaluer et améliorer la stabilité d'un logiciel. Un bogue pouvant parfois aboutir à une faille de sécurité, cette technique sert également à rechercher des vulnérabilités.</i>
<br />
<br />
Avec la version 1.2, la <a href="http://fusil.hachoir.org/trac/browser/trunk/doc">documentation</a> comprend désormais un <a href="http://fusil.hachoir.org/trac/browser/trunk/doc/usage.rst">manuel utilisateur</a> et un <a href="http://fusil.hachoir.org/trac/browser/trunk/doc/howto_write_fuzzer.rst">tutoriel pour écrire un fuzzer</a>. Fusil indique maintenant des informations sur un crash dans le nom du dossier qui le contient. On peut donc rapidement isoler les doublons et analyser les crashs les plus intéressants en premier. Enfin, la compatibilité avec Python 3.0 a été améliorée. Fusil est écrit en <a href="http://en.wikipedia.org/wiki/Python_(programming_language)">Python</a> 2.5 et fonctionne sous Linux, BSD, Mac OS X et Windows. Le projet est distribué sous licence GPLv2. Il existe des paquets pour Debian, Ubuntu, Mandriva, OpenEmbedded, Arch Linux, Gentoo, ainsi qu'un MacPort. Pour les curieux, il existe aussi un script de conversion pour Python 3.0.</div><ul><li>lien nᵒ 1 : <a title="http://fusil.hachoir.org/trac/wiki/WikiStart" hreflang="en" href="https://linuxfr.org/redirect/60697">Fusil le fuzzer</a></li><li>lien nᵒ 2 : <a title="http://www.fosdem.org/2009/schedule/events/fusil" hreflang="en" href="https://linuxfr.org/redirect/60698">Conférence Fusil au FOSDEM 2009</a></li><li>lien nᵒ 3 : <a title="http://fusil.hachoir.org/trac/wiki/CrashList" hreflang="en" href="https://linuxfr.org/redirect/60699">Listes des bugs trouvés par Fusil</a></li><li>lien nᵒ 4 : <a title="http://linuxfr.org/2007/12/19/23475.html" hreflang="fr" href="https://linuxfr.org/redirect/60700">DLFP: Fusillez vos applications avec Fusil 0.6 (déc. 2007)</a></li><li>lien nᵒ 5 : <a title="http://www.unixgarden.com/index.php/news/misc-39-septembreoctobre-2008-chez-votre-marchand-de-journaux" hreflang="fr" href="https://linuxfr.org/redirect/60701">MISC : dossier sur le Fuzzing</a></li></ul><div>Liste des fuzzers :
<br />
<ul><li>Applications : ClamAV, Firefox, Gstreamer, mplayer, VLC, Image Magick ;
<br />
</li><li>Bibliothèques : gettext, poppler, printf() ;
<br />
</li><li>Langages de programmation : PHP, Python.
<br />
</li></ul>Lors d'un crash, Fusil crée un dossier où sont stockés les logs du fuzzer, la sortie standard du programme et les fichiers générés pour le test. Un script (replay.py) est généré pour pouvoir rejouer le crash dans un débogueur (gdb ou Valgrind) et donc isoler plus précisément l'origine du bogue.
<br />
<br />
Depuis la version 1.0, Fusil exécute les processus fils sous un utilisateur dédié (fusil) pour éviter que le programme testé ne supprime vos fichiers personnels ou tue des processus aléatoires. La mémoire, le temps d'exécution et le nombre de processus sont également limités pour éviter d'impacter les performances globales de l'ordinateur. Une campagne de fuzzing peut donc être lancée une nuit entière sans risque, Fusil étant entièrement autonome.
<br />
<br />
Le fonctionnement de Fusil a été présenté à plusieurs reprises : SSTIC 2007 (lors d'une rump session), <a href="http://2008.rmll.info/Conference-Assurance-qualite-avec.html">RMLL 2008</a> et <a href="http://www.fosdem.org/2009/schedule/events/fusil">FOSDEM 2009</a> (voir le <a href="http://haypo.hachoir.org/trac/browser/presentations/2009-FOSDEM/fosdem_2009.pdf?format=raw">diaporama</a>, l'enregistrement vidéo est à venir). Deux articles ont également été publiés dans les magazines MISC n°36 et n°39.</div><div><a href="https://linuxfr.org/news/publication-de-fusil-le-fuzzer-12.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/24168/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/publication-de-fusil-le-fuzzer-12#comments">ouvrir dans le navigateur</a>
</p>
Victor STINNERhttps://linuxfr.org/nodes/24168/comments.atomtag:linuxfr.org,2005:Diary/271472008-09-03T15:10:57+02:002008-09-03T15:10:57+02:00Sortie de Fusil le fuzzer en version 1.0beta3
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 <a href="http://fr.wikipedia.org/wiki/fuzzing" title="Définition Wikipédia">fuzzing</a> (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).<br />
<br />
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.<br />
<br />
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 !<br />
<br />
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).<br />
<br />
<ul><br />
<li>Site web de Fusil : <b><a href="http://fusil.hachoir.org/">fusil.hachoir.org</a></b></li><br />
<li>Site web de python-ptrace : <b><a href="http://python-ptrace.hachoir.org/">python-ptrace.hachoir.org</a></b></li><br />
<li>Lire aussi la précédente dépêche : <b><a href="http://linuxfr.org/2007/12/19/23475.html">Fusillez vos applications avec Fusil 0.6</a></b> (décembre 2007).</li><br />
</ul><br />
<br />
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 ».<br />
<br />
Pour la documentation, consultez le dossier doc/. Des exemples simples sont disponibles dans le dossier examples/.<br />
<br />
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) :<br />
<pre><br />
[debugger]<br />
use_debugger = False<br />
</pre><br />
Consultez doc/configuration.rst pour connaître les autres options de Fusil.<br />
<br />
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.<div><a href="https://linuxfr.org/users/vstinner/journaux/sortie-de-fusil-le-fuzzer-en-version-10beta3.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/53513/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/vstinner/journaux/sortie-de-fusil-le-fuzzer-en-version-10beta3#comments">ouvrir dans le navigateur</a>
</p>
Victor STINNERhttps://linuxfr.org/nodes/53513/comments.atomtag:linuxfr.org,2005:News/234752007-12-19T10:57:26+01:002007-12-19T10:57:26+01:00Fusillez vos applications avec Fusil 0.6<div>Le <a href="http://fr.wikipedia.org/wiki/Fuzzing">fuzzing</a> est une technique d'assurance qualité logicielle visant à rechercher des bugs en injectant des données invalides. Fusil est un <a href="http://fr.wikipedia.org/wiki/Framework">framework</a> dédié au fuzzing comprenant divers outils pour créer des processus, surveiller un processus existant ou encore injecter des erreurs dans un fichier.
<br />
<br />
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 : <a href="http://fr.wikipedia.org/wiki/MPlayer">Mplayer</a>, <a href="http://fr.wikipedia.org/wiki/ImageMagick">Image Magick</a>, <a href="http://fr.wikipedia.org/wiki/ClamAV">ClamAV</a>, <a href="http://fr.wikipedia.org/wiki/PHP:_Hypertext_Preprocessor">PHP</a>, 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.</div><ul><li>lien nᵒ 1 : <a title="http://fusil.hachoir.org/" hreflang="en" href="https://linuxfr.org/redirect/54957">Projet du framework Fusil</a></li><li>lien nᵒ 2 : <a title="http://linuxfr.org/~haypo/25739.html" hreflang="fr" href="https://linuxfr.org/redirect/54958">Journal linuxfr.org présentation l'ancienne version (0.5)</a></li></ul><div>Le projet est écrit en Python et distribué sous licence libre (GNU GPLv2). Son architecture est basée sur un <a href="http://fr.wikipedia.org/wiki/Système_multi-agents">système multi-agents</a> 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.
<br />
<br />
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 .
<br />
<br />
<span>Exemple Mplayer avec un fichier Matroska :</span>
<br />
<blockquote>
<br />
$ fusil -p projects/mplayer.py --max-success=1 movie.mkv
<br />
[application] Fusil version 0.6 -- GNU GPL v2
<br />
[application] http://fusil.hachoir.org/
<br />
[application] Load project projects/mplayer.py
<br />
[session 1][project] Start session
<br />
[session 2][project] Start session
<br />
[session 3][project] Start session
<br />
[session 4][project] Start session
<br />
[session 5][project] Start session
<br />
[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'
<br />
[session 5][project] End of session: score=100.0%, duration=0.315 second
<br />
[project] Success 1/1!
<br />
[project] Project done: 5 session in 9.3 second (1850.9 ms per session), total 9.8 second
<br />
[project] Total: 1 success
<br />
[directory:run-0001] Keep non-empty directory: /home/haypo/prog/fusil/trunk/run-0001
<br />
[application] Exit Fusil
<br />
</blockquote>
<br />
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 :
<br />
<blockquote>
<br />
$ mplayer run-0001/session-0005/flashmob-0001.mkv
<br />
MPlayer 1.0rc2-4.1.2 (C) 2000-2007 MPlayer Team
<br />
(...)
<br />
MPlayer interrupted by signal 11 in module: decode_audio
<br />
(...)
<br />
Erreur de segmentation (core dumped)
<br />
</blockquote></div><div><a href="https://linuxfr.org/news/fusillez-vos-applications-avec-fusil-06.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/22615/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/fusillez-vos-applications-avec-fusil-06#comments">ouvrir dans le navigateur</a>
</p>
Victor STINNERhttps://linuxfr.org/nodes/22615/comments.atomtag:linuxfr.org,2005:Diary/257392007-11-28T00:01:44+01:002007-11-28T00:01:44+01:00Fusillez vos applications (Fusil le fuzzer)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).<br />
<br />
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.<br />
<br />
Projects disponibles : gettext, clamav, libc_printf, php, linux_ioctl, mplayer, identify, etc.<br />
<br />
Site web : <a href="http://fusil.hachoir.org/trac">http://fusil.hachoir.org/trac</a><br />
<br />
<br />
<br />
Exemple de session poppler :<br />
<br />
$ ./run_fusil.sh -p project/poppler.py ~/document.pdf<br />
[application] Fusil version 0.5 -- GNU GPL v2<br />
[application] <a href="http://fusil.hachoir.org/">http://fusil.hachoir.org/</a><br />
[application] Load project project/poppler.py<br />
[session 1][project] Start session<br />
(...)<br />
[session 994][watch:process:pdftotext] Process killed by signal SIGSEGV<br />
[session 994][project] End of session: score=75.0%, duration=0.378 second<br />
[session 994][session_dir] Success: keep directory '/home/toady/local/scm/svn/fusil/project-0008/session-0005'<br />
[project] Project done: : 5 session in 0.9 second (181.6 ms per session), total 0.9 second<br />
[application] Exit Fusil<br />
<br />
La dernière session (succès) est sauvée dans le dossier project-0003/session-0994/. On peut reproduire le plantage avec :<br />
<br />
$ evince document.pdf<br />
Error (0): PDF file is damaged - attempting to reconstruct xref table...<br />
Error (44780): Dictionary key must be a name object<br />
(...)<br />
Segmentation fault<br />
<br />
<br />
<br />
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.<br />
<br />
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 :<br />
<br />
+100% pour un processus tué avec un signal (WatchProcess)<br />
+100% pour le motif « segmentation fault » dans la sortie stdout (FileWatch)<br />
-100%pour une session trop rapide (TimeWatch)<br />
etc.<br />
<br />
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.<br />
<br />
---<br />
<br />
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.<div><a href="https://linuxfr.org/users/vstinner/journaux/fusillez-vos-applications-fusil-le-fuzzer.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/52137/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/vstinner/journaux/fusillez-vos-applications-fusil-le-fuzzer#comments">ouvrir dans le navigateur</a>
</p>
Victor STINNERhttps://linuxfr.org/nodes/52137/comments.atom