|
|
@ -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 |
|
|
|