1 points par GN⁺ 2024-10-07 | 1 commentaires | Partager sur WhatsApp

Fuzzing-101

Structure

  • Exercice 1 : Xpdf, CVE-2019-13288, 120 minutes, Afl-clang-fast, Afl-fuzz, GDB
  • Exercice 2 : libexif, CVE-2009-3895, CVE-2012-2836, 6 heures, Afl-clang-lto, bibliothèque de fuzzing, Eclipse IDE
  • Exercice 3 : TCPdump, CVE-2017-13028, 4 heures, ASan, Sanitizers
  • Exercice 4 : LibTIFF, CVE-2016-9297, 3 heures, couverture de code, LCOV
  • Exercice 5 : Libxml2, CVE-2017-9048, 3 heures, dictionnaire, parallélisation de base, fuzzing des arguments en ligne de commande
  • Exercice 6 : GIMP, CVE-2016-4994, bug bonus, 7 heures, fuzzing persistant, fuzzing d'applications interactives
  • Exercice 7 : lecteur multimédia VLC, CVE-2019-14776, 6 heures, instrumentation partielle, harness de fuzzing
  • Exercice 8 : Adobe Reader, 8 heures, fuzzing d'applications closed source, instrumentation QEMU
  • Exercice 9 : 7-Zip, CVE-2016-2334, 8 heures, WinAFL, fuzzing d'applications Windows
  • Exercice 10 (défi final) : Google Chrome / V8, CVE-2019-5847, 8 heures, Fuzzilli, fuzzing de moteur JavaScript

Journal des modifications

  • 14 février 2022 : correction d'une faute de frappe sur 'wget' dans l'exercice 5
  • 25 novembre 2021 : mise à jour et corrections de l'exercice 3

À qui s'adresse ce cours ?

  • Aux personnes qui veulent apprendre les bases du fuzzing
  • À celles qui veulent trouver des vulnérabilités dans de vrais projets logiciels

Prérequis

  • Un système Linux et une connexion Internet sont nécessaires
  • Des bases en Linux sont recommandées
  • Tous les exercices ont été testés sur Ubuntu 20.04.2 LTS
  • Ce cours utilise AFL++, un nouveau fork de l'AFL de Michał "lcamtuf" Zalewski

Qu'est-ce que le fuzzing ?

  • Fuzz testing (ou fuzzing) : technique automatisée de test logiciel qui consiste à fournir à un programme des entrées aléatoires/modifiées et à surveiller les exceptions/plantages
  • AFL, libFuzzer et HonggFuzz sont des exemples de fuzzers ayant fait leurs preuves sur des applications réelles
  • Fuzzer évolutif basé sur la couverture : sélectionne des entrées permettant de découvrir de nouveaux chemins d'exécution en collectant et en comparant les données de couverture de code

Fuzzer évolutif basé sur la couverture

  • Évolutif : approche métaheuristique inspirée des algorithmes évolutionnaires, qui cherche de nouveaux crashs via l'évolution et la mutation d'un sous-ensemble initial (seeds)
  • Basé sur la couverture : sélectionne des entrées permettant de découvrir de nouveaux chemins d'exécution en collectant et en comparant les données de couverture de code

Remerciements

  • Personnes ayant aidé : Xavier RENE-CORAIL, Alan Vivona, Jason White, Octavio Gianatiempo, van Hauser, Marc Poulhiès, Xu Hanyu, tclan126, epi052, Jeremias Gomes

Contact

  • Si vous avez besoin d'aide ou des suggestions, rejoignez le canal #fuzzing du GitHub Security Lab Slack

Le récapitulatif de GN⁺

  • Ce cours est utile pour apprendre les concepts de base du fuzzing et trouver des vulnérabilités dans des logiciels réels
  • Il permet d'acquérir des techniques de fuzzing à l'aide d'outils comme AFL++ à travers divers cas concrets
  • Le fuzzing joue un rôle important dans le renforcement de la stabilité et de la sécurité des logiciels, et ce cours propose une approche pratique pour y parvenir
  • Des outils aux fonctions similaires incluent libFuzzer et HonggFuzz

1 commentaires

 
GN⁺ 2024-10-07
Avis sur Hacker News
  • L’article lié est une lecture d’environ 11 minutes, et la différence avec l’approche de golang est intéressante

    • En golang, on peut lancer le fuzzing aussi simplement qu’on exécute des tests, ce qui permet de cibler facilement certaines parties d’une application ou d’une bibliothèque
    • Cette approche rend de nombreuses techniques existantes inutiles
  • Je me demande quelles techniques permettent de mieux guider le fuzzing

    • La meilleure méthode semble être de fournir un seed corpus et d’espérer les meilleurs résultats
  • Je suis surpris que Heartbleed ne figure pas dans la liste

    • Heartbleed est très facile à reproduire
  • Merci pour le partage

    • Je trouve cela très utile