Skip to content
This repository has been archived by the owner on Mar 15, 2022. It is now read-only.

Latest commit

 

History

History
15 lines (8 loc) · 2 KB

algorithm_ja.md

File metadata and controls

15 lines (8 loc) · 2 KB

Nezha

Nezhaとは

https://github.com/nezha-dt/nezha

NezhaはLLVMのlibFuzzerを拡張して作られたdifferential fuzzingの実装で、greybox fuzzingでもblackbox fuzzingでも用いることができる(とされているが、上記の実装ではgreybox fuzzingのみが実装されているように見える)。Nezhaはfuzzufでもdifferential fuzzingが実装可能であることを示すユースケースの一つとして再実装された。

NezhaはlibFuzzerの一部を書き換えて実装されているため、アルゴリズムのほとんどの部分はlibFuzzerと同じである。ただし、1つの入力値を使って複数の異なる実装で同じ処理をするターゲットを実行し、一部のターゲットだけが他と異なる出力になるような入力を「一部の実装の不具合を突く入力」とみなす点がlibFuzzerと異なる。

入力値の選択やmutationはlibFuzzerの実装がそのまま用いられ、ターゲットを1つ実行する毎にfeatureを計算してcorpusの追加までを行う。

ターゲット毎にカバレッジのedgeのindexが重複しない値になるようにすることで(オリジナルの実装では全てのターゲットを単一のバイナリにリンクするため勝手にそうなる)異なるターゲットの実行結果同士が同一とみなされることを防ぐ。

つまりcorpusには全く同じ入力値で実行しているにもかかわらず結果が異なる実行結果が最大でターゲットの数だけ登録される。これらのcorpusの要素に対して個別に重みが与えられるため、ある入力値が実際に選ばれる確率はcorpusに登録されている同じ入力値の実行結果の重みの総和になる。全てのターゲットを実行した後でcorpusへの追加状況と各ターゲットからの出力を見て実行結果を「一部の実装の不具合を突く入力」とみなすかどうかを判断する。