Table des matières
Fuddly : un framework de fuzzing et de
manipulation de
données
Éric Lacombe
eric.lacombe@airbus.com
eric.lacombe@security-labs.org
Airbus Operations S.A.S.
Résumé fuddly est un framework de fuzzing et de manipulation de
données. Il est actuellement utilisé dans le cadre de tests d'équipements
avioniques qui mettent souvent en oeuvre des protocoles spéci ques.
D'autres formats de données et protocoles plus génériques ont également
été testés dans ce contexte (JPG, PNG, ZIP, PDF et USB). Les principales
caractéristiques de fuddly sont de permettre à l'utilisateur : de
modéliser des formats de données très variés ; de les combiner entre
eux ; de faciliter la mise en oeuvre de transformations complexes sur ces
données ; d'autoriser la dissection de données existantes ; et d'allier des
techniques de génération et de mutation. En n, il fournit des moyens
pour automatiser le processus de fuzzing en s'appuyant sur di érentes
briques permettant de communiquer avec la cible, de suivre et d'observer
son comportement, et d'agir en conséquence.
1 Introduction
L'expérience acquise sur le fuzzing d'équipements avioniques dans le cadre de
notre travail, nous a poussé à développer notre propre framework de
fuzzing. La raison à cela est que nous souhaitions laisser à l'utilisateur la
possibilité : (1) de spéci er des formats de données de façon plus
exible que ce qui est permis au travers des autres frameworks (comme
sulley ou Peach), et (2) d'e ectuer des transformations de données plus
élaborées. En outre, développer un nouveau framework fut considéré
comme la solution la plus adaptée pour expérimenter de nouveaux
concepts. De ce choix découle également une liberté totale quant à son
évolution. fuddly est cette tentative visant à construire sur des concepts
existants et à mettre en uvre nos idées, tout en restant compatible
avec nos contraintes : pas de disponibilité du code source des cibles,
architectures non-x86 (voire exotiques), moyens d'observabilité spéci ques à
l'avionique.
Une vue d'ensemble de fuddly est donnée en section 2. La modélisation
des données est ensuite abordée en section 3, avant d'introduire les
manipulations permises sur ces données en section 4. L'automatisation du
processus de fuzzing est alors présentée en section 5. En n, les perspectives
d'évolution envisagées sont examinées en section 6.
2 Présentation de fuddly
Notre framework de fuzzing et de manipulation de données est disponible sous
licence GPL à l'adresse https://github.com/k0retux/fuddly. Il est écrit
en python (compatible avec la version 2.7 jusqu'à la version 3.4) et
peut être utilisé directement depuis un interpréteur python (comme
ipython ),
ou bien depuis un shell dédié (simpli ant certaines opérations). Ses
principales caractéristiques sont de permettre à l'utilisateur :
- de modéliser des formats de données très variés, qui :
- mêlent des représentations très nes pour certains aspects avec
d'autres plus grossières, tout en o rant la possibilité de les
ra ner au besoin ;
- peuvent être combinés entre eux ;
- autorisent la dissection, de façon à manipuler facilement des
données existantes ;
- permettent d'allier des techniques de génération de données
avec des techniques de mutations ;
- de faciliter la mise en uvre de transformations complexes sur
les données modélisées. Nous entendons par complexe , la
capacité d'agir sur n'importe quelle partie d'une donnée (composée
d'éléments non nécessairement contiguës) tout en préservant la
cohérence des dépendances, si l'utilisateur le souhaite. Cela revient à
rendre possible des transformations articulées autour de critères
syntaxiques (ex : altération d'une valeur entière en fonction de la
taille du champ l'hébergeant) et sémantiques (ex : altération
d'une valeur en fonction de sa signi cation pour un format ou
protocole donné, altération d'un ensemble d'éléments d'une
donnée formant un tout cohérent pour un format ou protocole
donné) ;
- d'automatiser le processus de fuzzing en s'appuyant sur di érentes
briques permettant de communiquer avec la cible, de suivre et
d'observer son comportement, et d'agir en conséquence (ex : dévier
des exigences du protocole vis-à-vis du séquencement, des contraintes
temporelles, etc.) en béné