fuzzing-obstacles は何をしますか?
ファジングの障害を克服するためのコードパッチ手法。チェックサム、グローバル状態、その他の障壁がファザーの進捗を妨げる場合に使用します。
概要
ファジング(ファズテスト)は、プログラムの脆弱性を発見するための強力な手法ですが、特定のコードパスに到達するためにチェックサム検証やグローバル状態の変更が必要な場合、ファザーが効果的に動作しないことがあります。このスキルは、そのような障害を特定し、パッチを適用してファジングをスムーズに進めるための技術を提供します。
対象とする障害
- チェックサム検証: ファイルやメッセージの整合性チェック(例:CRC、MD5)。パッチによりチェックをスキップまたは常に成功させる。
- グローバル状態: 特定の初期化関数や環境設定が必要な場合。強制的に正しい状態を設定する。
- 複雑な条件分岐: 到達困難な条件(例:特定の乱数値)。条件を単純化または固定値に置き換える。
- ハードウェア依存: 特殊なデバイスやセンサーが必要な場合。モック関数で代替する。
使用方法
- ファジング対象のコードを分析し、障害となる箇所を特定します。
- 該当する障害の種類に応じて、以下のパッチ手法を適用します。
- パッチ後、再度ファザーを実行し、カバレッジが向上することを確認します。
パッチ例
// 元のコード
if (checksum(data) != expected) {
return ERROR;
}
// パッチ後
// if (checksum(data) != expected) {
// return ERROR;
// }
// チェックを無効化
# グローバル状態の強制設定
# 元のコード
if not initialized:
init_global_state()
# パッチ: 常に初期化済みとする
initialized = True
注意点
- パッチは分析専用であり、本番環境では使用しないでください。
- パッチによってプログラムの動作が変わるため、発見されたクラッシュが本物の脆弱性かどうかは別途検証が必要です。
- 可能な限り最小限の変更に留め、ファジングの目的に影響を与えないようにします。