問題タブ [libfuzzer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
go - libfuzzer を使用した Go アプリケーションのファジング: 間違ったカバレッジ
私は論文を書いていますが、現在のセットアップに関する意見をいただければ幸いです。libfuzzer を使用してターゲットの Go アプリケーションをファジングしたいので、次のようにしました。
テストする go 関数を呼び出すメイン パッケージを作成しました。コード:
llvm-go
アプリケーションを実際に共有ライブラリとしてビルドするには、メインパッケージが必要です。ここで二重の抽象化を行う理由は、ビルド パイプラインを go-fuzz と互換性を持たせたいからです。go-fuzz は、"Fuzz" 関数名をファジング エントリ ポイントとして使用します。私のセットアップでは、libfuzzer を利用するために必要なコードをラップするだけです。
次に、アプリケーションをコンパイルしますllvm-go
。
これで、Go 共有ライブラリを計測する方法が 2 つあります。動的にロードするか、バイナリに静的にリンクするかです。静的にリンクされたコードを使用して問題を説明します。そのために、Go 共有ライブラリを計測するファジング スタブを作成しました。
次に、次のようにコンパイルしました。
ここで、コードを実行すると、次の 2 つの問題が発生します。
カバレッジと機能は増加していないようで、メモリ要件は実行ごとに増加します。ファザーの実行に環境変数を追加することで、別の SO 投稿のおかげでメモリの増加を修正できました。ASAN_OPTIONS=quarantine_size_mb=20 ./fuzz-target -timeout=12
ただし、おそらく主な問題は、実際のターゲットが 2 つのレベルの抽象化の下に「埋もれている」ことです: LLVMFuzzerTestOneInput --calls-> main.go を介した共有 Go ライブラリ。 --> ファジング関数 --calls--> ターゲット関数。ただし、これらの各関数は、データを変更せずに直接次のレイヤーに渡すだけであることに注意してください。これが正しく機能していることを確認するには、どのような手順を実行できますか? 私は何か間違ったことをしていますか?
clang - libfuzzers カスタムミューテーター API の使用方法は?
Libfuzzer は、カスタム ミューテーターを開発するための 2 つの API を提供します。
これらの API はどのように使用されますか? ファザーは決定論的である必要があります。カスタムミューテーターでそれを確認するにはどうすればよいですか?