Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SSTIC 2012 (Rump) - Fuzzing Wireshark

SSTIC 2012 (Rump) - Fuzzing Wireshark

Laurent Butti

June 07, 2012
Tweet

More Decks by Laurent Butti

Other Decks in Technology

Transcript

  1. Pourquoi fuzzer Wireshark ? Application exposée Privilèges élevés, écoute sur

    support non de confiance (réseaux) Laurent Butti Fuzzing Wireshark
  2. Pourquoi fuzzer Wireshark ? Application exposée Privilèges élevés, écoute sur

    support non de confiance (réseaux) Application conséquente Plus de 950 dissecteurs (environ 1.6 MLOC en C) Laurent Butti Fuzzing Wireshark
  3. Pourquoi fuzzer Wireshark ? Application exposée Privilèges élevés, écoute sur

    support non de confiance (réseaux) Application conséquente Plus de 950 dissecteurs (environ 1.6 MLOC en C) Application potentiellement vulnérable En moyenne une vingtaine de vulnérabilités publiées par an Laurent Butti Fuzzing Wireshark
  4. Pourquoi fuzzer Wireshark ? Application exposée Privilèges élevés, écoute sur

    support non de confiance (réseaux) Application conséquente Plus de 950 dissecteurs (environ 1.6 MLOC en C) Application potentiellement vulnérable En moyenne une vingtaine de vulnérabilités publiées par an Application auditée Monopole de l’analyse réseau, fuzzée en permanence (SLDC) Laurent Butti Fuzzing Wireshark
  5. Comment fuzzer Wireshark ? Quoi fuzzer ? Formats de fichier

    et dissecteurs Laurent Butti Fuzzing Wireshark
  6. Comment fuzzer Wireshark ? Quoi fuzzer ? Formats de fichier

    et dissecteurs Quelles techniques de fuzzing ? Aléatoire, mutation ou génération par modélisation Laurent Butti Fuzzing Wireshark
  7. Les choix pour le fuzzing de Wireshark (1/2) Contrainte forte

    Maximiser le rapport « qualité / prix » Laurent Butti Fuzzing Wireshark
  8. Les choix pour le fuzzing de Wireshark (1/2) Contrainte forte

    Maximiser le rapport « qualité / prix » La technique de fuzzing par mutation est la plus adaptée ! Il nous faut : ⇒ des échantillons ⇒ une ou plusieurs techniques de mutation ⇒ du temps et/ou du CPU Laurent Butti Fuzzing Wireshark
  9. Les choix pour le fuzzing de Wireshark (2/2) Échantillons Fuzz

    ménagerie, pcapr.net, bugtracker Wireshark, autres. . . Techniques de mutations Bit-flipping, zzuf, radamsa Triage Backtrace gdb pour les crashes, stderr pour les boucles infinies Laurent Butti Fuzzing Wireshark
  10. Astuces... Les échantillons doivent être : ⇒ les plus petits

    possible (maximiser le nombre de mutations) ⇒ les plus représentatifs possible (maximiser le code parcouru) Laurent Butti Fuzzing Wireshark
  11. Astuces... Les échantillons doivent être : ⇒ les plus petits

    possible (maximiser le nombre de mutations) ⇒ les plus représentatifs possible (maximiser le code parcouru) Les mutations sont à opérer sur les parties « intéressantes » : ⇒ fuzzer entièrement le paquet rend le paquet (trop) invalide Laurent Butti Fuzzing Wireshark
  12. Automatiser, automatiser, automatiser. . . Objectif Se lever le matin

    avec des bugs triés ! Laurent Butti Fuzzing Wireshark
  13. Automatiser, automatiser, automatiser. . . Objectif Se lever le matin

    avec des bugs triés ! Il est primordial d’automatiser tout ce qui peut l’être : ⇒ génération des cas de tests ⇒ observation des dysfonctionnements (crash, boucle infinie. . .) ⇒ triage des résultats Laurent Butti Fuzzing Wireshark
  14. Résultats (1/2) Campagne de fuzzing avec : ⇒ 2 CPUs

    ⇒ Wireshark en release r41056 ⇒ 1432 fichiers (< 10 Ko) et 264 fichiers (> 10 Ko et < 50 Ko) ⇒ Mutations RAND/XOR et RADAMSA 108 heures de fuzzing : ⇒ 200 crashes (SIGABRT, SIGSEGV, SIGFPE) ⇒ 1 freeze (SIGKILL) ⇒ 420 fichiers échantillons déclenchant des boucles infinies Laurent Butti Fuzzing Wireshark
  15. Résultats (2/2) 7 bugs dans les formats de fichiers de

    capture (5 CVEs) 11 bugs de type boucle infinie (1 CVE) 11 bugs (backtrace de 6 niveaux) déclenchant SIGABRT/SIGSEGV/SIGFPE (à rapporter) Laurent Butti Fuzzing Wireshark
  16. Prochaines étapes 1 Rapporter la suite des bugs découverts 2

    Augmenter la couverture des échantillons 3 Minimiser la taille des échantillons 4 Refaire une campagne de fuzzing Laurent Butti Fuzzing Wireshark
  17. Conclusions Fuzzing basique toujours efficace : ⇒ il suffit de

    se lancer ⇒ avec une approche « différente » ⇒ avec peu d’efforts Meilleure couverture via plusieurs techniques de fuzzing Nécessité d’intégrer le fuzzing dans le SDLC : ⇒ complétera l’approche déjà adoptée par Wireshark ⇒ les techniques de fuzzing doivent évoluer ⇒ les campagnes de fuzzing doivent être récurrentes Laurent Butti Fuzzing Wireshark