Fuzzing

Un article de Haypo.

Retour à la page précédente Retour aux articles de programmation

Le fuzzing est une méthode qui aide à trouver rapidement des erreurs de programmes qui peuvent se révéler être des failles de sécurité. En bref, la technique consiste à envoyer des données mal-formées à un programme et à analyser son comportement : utilisation anormale de la mémoire, crash, erreur, etc.

Plus d'informations dans l'article Fuzz test de Wikipédia.

Tout a commencé avec fuzz en 1990 et le fuzzing d'application UNIX en ligne de commande.

Sommaire

[modifier] Points d'entrée

  • Fichier (open)
  • Clavier (stdin)
  • Signaux (kill/signal/sigaction)
  • Variable d'environnement (getenv())
  • Gestion de la mémoire (malloc() & cie)
  • Système de fichier
    • Chemin courant (getcwd())
    • Erreur ENOSPC (28) : tester avec /dev/full
    • Présence ou non d'un fichier
    • Erreur de lecture/écriture
  • Gestion du temps (gettimeofday(), time(), ...)
  • En gros toute la libc :-)
  • etc.

[modifier] Bugs trouvés

  • DoS (Denial Of Service) : consommation excessive de la mémoire ou deu temps processeur
  • Envoi d'un signal fatal au programme:
    • SIGSEGV : Erreur de segmentation mémoire
    • SIGABRT : abort()
    • SIGXFSZ : Dépassement de la taille limite d'un fichier
    • SIGFPE : Erreur arithmétique (en nombre entier ou flottant) comme par exemple une division par zéro
    • SIGILL : Instruction illégale
    • SIGSTKFLT : erreur de la pile du coprocessor arithmétique
    • SIGBUS
  • Erreur mineure indiquée par un message dans le programme
  • Programme devenu instable
  • etc.

[modifier] Quelques fuzzers

[modifier] Fuzzer de fichier

[modifier] Fuzzer réseau

  • (en) BSS : Outil permettant de fuzzer une pile Bluebooth

[modifier] Frameworks

[modifier] Failles découverte par du fuzzing

[modifier] Liens

[modifier] Voir aussi

[modifier] Articles connexes