
Bibliothèque et CLI pour la mutation de données structurées (JSON, XML, X.509) afin de prendre en charge le fuzzing basé sur une grammaire, avec de multiples stratégies de mutation et une intégration avec Radamsa.
Umberto est une bibliothèque conçue pour muter des données structurées génériques (par exemple JSON, XML, X.509) et une application en ligne de commande qui enveloppe cette fonctionnalité. Elle peut appliquer une variété de mutations, synthétiser des valeurs entièrement nouvelles et appliquer des mutateurs existants (par ex. Radamsa) aux composants de la structure. Si vous essayez de faire du fuzzing basé sur une grammaire, vous pourriez la trouver très utile. C'est probablement plus simple à comprendre par l'exemple :
echo -n "{\"a\": 1, \"b\": 2, \"c\": \"test\"}" | umberto-mutate json knuth all
{"a":2,"c":"tesb","t":1}
echo -n "{\"a\": 1, \"b\": 2, \"c\": \"test\"}" | umberto-mutate json newvals nums
{"a":-2.8e-20,"b":-40000,"c":"test"}
echo -n "{\"a\": 1, \"b\": 2, \"c\": \"test\"}" | umberto-mutate json radamsa strings
{"c\u0008^\u001f":"ó ¨teï»â¨¿st","1313131313131313â":1,"ô ó ó ¶Db":2}
echo -n "{\"a\": 1, \"b\": 2, \"c\": \"test\"}" | umberto-mutate string replacement all
:"c2:tb{ :"{c"}t"as }c"e": "2
Umberto utilise stack. Installez stack, clonez ce dépôt, puis exécutez stack build && stack install. Si vous souhaitez utiliser le fuzzer Radamsa, vous devrez également l'installer séparément.
Umberto fournit un exécutable simple, umberto-mutate, qui encapsule la plupart de ses fonctionnalités. L'utilisation typique est la suivante :
echo -n mydata | umberto-mutate FORMAT MUTATOR TARGET
FORMAT peut être l'un des suivants :
json
string (ou essentiellement « pas de format »)
xml (relativement peu testé)
der (X.509 DER, relativement peu testé)
MUTATOR peut être l'un des suivants :
knuth : Mélange de Knuth des valeurs ciblées
replacement : Mélange par remplacement des valeurs ciblées
newvals : Synthétiser de nouvelles valeurs ciblées à la place des anciennes
radamsa : Faire appel à radamsa pour la mutation (fonctionne uniquement sur les chaînes)
TARGET peut être l'un des suivants :
strings : Types chaîne
nums : Types numériques
all : Tous les types
La plupart des fonctionnalités d'Umberto sont disponibles dans lib/Umberto.hs. Les mutateurs qui utilisent le polymorphisme de typeclass nécessitent un certain usage de Template Haskell pour violer l'hypothèse du monde ouvert. Ceci est disponible dans Umberto.TH mais ne devrait être utilisé que dans du code exécutable, jamais dans des bibliothèques.