Assurance Qualité avec Fusil le fuzzer

Windows 95 Blue Screen of Death (BSOD)

Victor Stinner - INL

Assurance Qualité

  • Processus et non une fin en soi
  • Objectif : augmenter la sécurité de l'application
  • Sécurité : disponibilité, confidentialité et consistence

Mauvais projet

Bureau d'informaticien jonché d'ordures

Bon projet

Bébé qui rigole

Cycle de développement

Cycle "Écriture - Exécution - Erreur", dessiné par Victor Stinner avec Dia

Style du code

  • Code écrit une fois, relu dix fois
  • Fonction courte (100 lignes)
  • Fichier court (1000 lignes)
  • Limiter les symboles

Petits modules

  • Simple à compiler
  • Simple à comprendre
  • Simple à corriger
  • Simple à faire évoluer

What The Fuck Meter

The only valid measurement of code quality: WTFs/minute

Analyse statique

  • gcc -Wall -Wextra -Werror
  • SPlint, RATS, FlawFinder
  • pylint, pyflakes
  • Longs rapports, faux positifs

Analyse dynamique

DEBIAN CAT IZ USING VALGRIND
  • Valgrind
  • pychecker
  • Faux positifs
  • Lenteur

Tests

  • Tests unitaires : JUnit
  • Tests fonctionnels : py.test
  • Scripts post-commit
  • Buildbot

DTC

Logo de la société DTC Diamond
  • Documente Ton Code !
  • Où ça ? Dans Ton Code
  • Module Python doctest

Exemple de doctest

def bin2long(text, endian):
    """
    >>> bin2long("110", BIG_ENDIAN)
    6
    >>> bin2long("110", LITTLE_ENDIAN)
    3
    """

Couverture de code

Capture d'écran trace2html par Olivier Grisel
  • Code non testé
  • Code mort
  • gprof, trace2html

Code de retour

  • true, false
  • 0, 1, -1, NULL, ERR_OK
  • Pénible à gérer, on préfère les oublier

Exceptions

  • Traverse plusieurs fonctions
  • Moins de code
  • Type et message
  • Ignorer ou transmettre

Fonctionnalité ?

bug_feature.png

Fuzzing

  • Découvrir des bugs
  • Boîte noire
  • Faible coût
  • Efficace

Vecteurs d'entrée

  • Ligne de commande
  • Variable d'environnement
  • Fichier, réseau
  • Quota

Générer des données

  • Aléatoire
  • Mutation
  • Modèle

Surveillance

  • Code de retour
  • Temps
  • Mémoire et CPU
  • stdout et logs

Fusil

  • Boîte à outils pour écrire son fuzzer
  • Nombreux projets
  • Gestion des sessions
  • Écrit en Python, licence GPL

Démo Fusil

  • Plantage de mplayer

Ce n'est pas tout

  • Failles humaines
  • Sécurité du maillon le plus faible
  • Importance de l'architecture

Questions

cant wurk 2day i haz a bug