
構造化データ(JSON、XML、X.509)をミューテーションして文法ベースのファジングをサポートするためのライブラリおよびCLI。複数の変異戦略と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: Knuthシャッフルを対象値に適用
replacement: Replacementシャッフルを対象値に適用
newvals: 古い値の代わりに新しい対象値を合成する
radamsa: 変異のためにradamsaを外部コマンドとして実行する(文字列のみで動作)
TARGETには次のいずれかを指定できます:
strings: 文字列型
nums: 数値型
all: すべての型
Umbertoの機能のほとんどはlib/Umberto.hsで利用できます。型クラスのポリモーフィズムを利用する変異器では、オープンワールドの仮定に違反するためにTemplate Haskellをある程度使用する必要があります。これはUmberto.THで利用できますが、ライブラリではなく実行可能コードでのみ使用すべきです。