
Библиотека и CLI для мутации структурированных данных (JSON, XML, X.509) для поддержки грамматического фаззинга, с несколькими стратегиями мутации и интеграцией с Radamsa.
Umberto — это библиотека, предназначенная для мутации структурированных данных общего вида (например, JSON, XML, X.509), а также приложение командной строки, оборачивающее эту функциональность. Она может применять разнообразные мутации, синтезировать совершенно новые значения и применять существующие мутаторы (например, Radamsa) к компонентам структуры. Если вы пытаетесь заниматься грамматическим фаззингом, она может оказаться очень полезной. Вероятно, проще всего понять её на примере:
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 использует stack. Установите stack, клонируйте этот репозиторий, затем выполните stack build && stack install. Если вы хотите использовать фаззер Radamsa, вам также потребуется установить его отдельно.
Umberto предоставляет простой исполняемый файл, umberto-mutate, который оборачивает большую часть его функциональности. Типичное использование выглядит следующим образом:
echo -n mydata | umberto-mutate FORMAT MUTATOR TARGET
FORMAT может быть одним из следующих:
json
string (или, по сути, «без формата»)
xml (относительно непротестирован)
der (X.509 DER, относительно непротестирован)
MUTATOR может быть одним из следующих:
knuth: перемешивание Кнута для целевых значений
replacement: замещающее перемешивание для целевых значений
newvals: синтез новых целевых значений вместо старых
radamsa: вызов radamsa для мутации (работает только со строками)
TARGET может быть одним из следующих:
strings: строковые типы
nums: числовые типы
all: все типы
Большая часть функциональности Umberto доступна в lib/Umberto.hs. Мутаторы, использующие полиморфизм классов типов, требуют некоторого применения Template Haskell для нарушения допущения об открытом мире. Это доступно в Umberto.TH, но должно использоваться только в исполняемом коде и никогда в библиотеках.