Browse Source

afl crowbar

main
epatrizio 1 year ago
parent
commit
36897f48ed
  1. 50
      src/article.tex

50
src/article.tex

@ -172,23 +172,53 @@
\section{AFL et Crowbar}
Quelle stratégie adopter pour l'écriture du fuzzer de Owi ?
Notre objectif étant de tester prioritairement la couche d'interprétation de Owi,
notre défi consiste à générer aléatoirement des programmes Wasm correctement typés.
L'approche White-box est écartée de base dans la mesure où le langage OCaml ne permet pas
d'exécution symbolique. Ensuite, l'approche Black-box semble déraisonnable du fait d'une
probabilité extrêmement faible de générer aléatoirement une entrée qui correspondrait à
du WebAssembly à minima syntaxiquement correct. Ainsi, l'approche Grey-box s'impose.
American Fuzzy Lop (\emph{AFL})~\cite{Z14} est le greybox fuzzer emblématique
qui a notamment permis de trouver des failles dans Firefox, Safari et VLC.
Nos expérimentations de AFL en direct sur Owi n'ont pas été satisfaisantes. En effet,
même en guidant la génération des entrées via des modèles (à savoir des exemples de
programmes Wasm conformes comme base de mutation), AFL n'arrive pas à passer la couche
du typage. Autrement dit, AFL arrive à générer des programmes syntaxiquement corrects,
mais non correctement typés, ce qui ne correspond pas à notre besoin.
La bibliothèque OCaml \emph{Crowbar} va nous permettre de relever notre défi
en combinant le style \emph{Property Based Testing} évoqué précédemment
et la magie \emph{AFL} (dixit la documentation~;).
A l'instar de QuickCheck, Crowbar propose de multiples générateurs génériques de
données atomiques (int, bool, string, etc.), des combinateurs
(listes, sélecteurs aléatoires, options, etc.) et des opérateurs rendant possibles
les dépendances entre générateurs ce qui s'avèrera crucial pour assurer le typage.
Générer du WebAssembly conforme devient possible~!
Au final, en compilant Owi via un switch opam AFL, Crowbar est en mesure d'exploiter
les données produites par AFL grâce à l'instrumentation du code afin de maximiser
l'exploration de la couche d'interprétation de Owi.
\textcolor{red}{
ERIC todo: exemple d'un mini programme avec un bug et mettre en évidence la proba très petite
de le détecter aléatoirement.
mise en évidence que la génération aléatoire de pg wasm syntaxiquement ok + correctement typés
est quasi impossible
paragraphe à rédiger + ajouter des éléments sur le fonctionnement intrinsèque de AFL + Crowbar
blackbox impossible aléatoire - whitebox impossible ocaml - pas le choix = greybox -
challenge : génération de programmes typés donc AFL seul impossible, donc choix = AFL Crowbar}
de le détecter aléatoirement -> mise en évidence que la génération aléatoire de pg wasm syntaxiquement ok
et correctement typés est improbable.
American Fuzzy Lop (\emph{AFL})~\cite{Z14}
Compléter/ajouter des éléments sur le fonctionnement intrinsèque de AFL + Crowbar
les données AFL ? comment elles sont exploitées par Crowbar ?
le fait que Crowbar est capable d'exécuter de multiples fois le pg sans avoir à le recharger
autre ?}
\section{Génération de modules}
Lorem ipsum.
\textcolor{red}{
todo: bisect_ppx pour avoir une idée de la couverture atteinte}
\section{Differential fuzzing}
Le \emph{Differential testing}~\cite{M98} également connu sous le nom de

Loading…
Cancel
Save