[論文レビュー] Rethinking Smart Contract Fuzzing: Fuzzing With Invocation Ordering and Important Branch Revisiting
本稿では、データ依存性を考慮した順序付けと延長を用いて深層のコントラクト状態を探索する関数呼び出しシーケンスを生成することで、脆弱性検出を向上させる新規なスマートコントラクト・フラッディング手法IR-Fuzzを提案する。同時に、分岐距離に基づく進化と標的型エナジー割り当てを用いて、まれで高リスクな分岐を優先する。IR-Fuzzは、最先端のツールと比較して28%高い分岐カバレッジと7%高い検出精度を達成し、1秒間に350テストケースを処理できる。
Blockchain smart contracts have given rise to a variety of interesting and compelling applications and emerged as a revolutionary force for the Internet. Quite a few practitioners have devoted themselves to developing tools for detecting bugs in smart contracts. One line of efforts revolve around static analysis techniques, which heavily suffer from high false-positive rates. Another line of works concentrate on fuzzing techniques. Unfortunately, current fuzzing approaches for smart contracts tend to conduct fuzzing starting from the initial state of the contract, which expends too much energy revolving around the initial state and thus is usually unable to unearth bugs triggered by other states. Moreover, most existing methods treat each branch equally, failing to take care of the branches that are rare or more likely to possess bugs. This might lead to resources wasted on normal branches. In this paper, we try to tackle these challenges from three aspects: (1) In generating function invocation sequences, we explicitly consider data dependencies between functions to facilitate exploring richer states. We further prolong a function invocation sequence S1 by appending a new sequence S2, so that S2 can start fuzzing from states that are different from the initial state. (2) We incorporate a branch distance-based measure to evolve test cases iteratively towards a target branch. (3) We engage a branch search algorithm to discover rare and vulnerable branches, and design an energy allocation mechanism to take care of exercising these crucial branches. We implement IR-Fuzz and extensively evaluate it over 12K real-world contracts. Empirical results show that: (i) IR-Fuzz achieves 28% higher branch coverage than state-of-the-art fuzzing approaches, and (ii) IR-Fuzz detects more vulnerabilities and increases the average accuracy of vulnerability detection by 7% over current methods.
研究の動機と目的
- 現在のスマートコントラクト・フラッダーが初期コントラクト状態からのみ開始されるという制限を解消し、脆弱性が潜む可能性のある深層的または複雑な状態を探索すること。
- すべての分岐を同等に扱う非効率性を克服し、脆弱性を含む可能性の高いまれな分岐や高リスク分岐を特定・優先することで、効率を向上させること。
- データ依存性を尊重する関数呼び出しシーケンスの生成により、初期状態を超えた状態遷移を可能にし、ファズィングの効率とカバレッジを向上させること。
- 距離ベースのメトリクスを用いてテストケースの進化を標的にすることで、誤検出を低減し、脆弱性検出精度を向上させること。
- 動的エナジー割り当てにより、重要なが到達が難しい分岐に多くのファズィングエナジーを割り当て、全体の効果を高めること。
提案手法
- IR-Fuzzは、関数間のデータ依存性分析を用いて関数呼び出しシーケンスを生成し、グローバル変数への読み書き依存性を尊重することで、より豊富なコントラクト状態の探索を可能にする。
- 初期シーケンスを、非初期状態から開始する第二のシーケンスを付加することで延長し、初期状態を超えた複雑な深層的コントラクト状態の探索を可能にする。
- テストケースを反復的に進化させるために、分岐距離に基づく測定を用い、ランダム性を低減し、特定のコードパスへの収束を向上させる。
- 分岐探索アルゴリズムにより、まれで脆弱な分岐を特定し、動的エナジー割り当てメカニズムを通じて優先的に処理頻度を高める。
- AFLにインspiredされた変異戦略を統合しているが、重要な入力部分への変異を回避することで、深層的またはガードされた分岐をトリガーする可能性を高める。
- IR-Fuzzは、EVM命令(例:BALANCE、compare、jump)のモニタリングを通じて、危険なEtherの厳密等価性などの脆弱性を示すパターンを検出する。
実験結果
リサーチクエスチョン
- RQ1初期状態を超えたコントラクト状態を探索する関数呼び出しシーケンスの生成により、スマートコントラクトのファズィングはどの程度向上できるか?
- RQ2分岐距離に基づくテストケース進化は、標的分岐における収束性とカバレッジにどの程度寄与するか?
- RQ3まれまたは脆弱な分岐に動的エナジー割り当てを施すことで、全体のファズィング効率と脆弱性検出精度にどのような影響を与えるか?
- RQ4提案手法は、従来のツールが見逃していた、危険なEtherの厳密等価性といった新たな脆弱性パターンを検出できるか?
- RQ5実際のコントラクトにおいて、関数呼び出し順序、シーケンス延長、エナジー割り当ての組み合わせは、最先端のファズィング技術と比較してどの程度優れているか?
主な発見
- IR-Fuzzは、12,000件の実世界スマートコントラクトを対象に、最先端のファズィングツールと比較して28%高い分岐カバレッジを達成した。
- 脆弱性検出の平均精度は、既存手法と比較して7%向上し、本物の脆弱性をより正確に同定できることを示した。
- IR-Fuzzは1秒間に平均350テストケースを処理でき、高いパフォーマンスとスケーラビリティを示した。
- エナジー割り当て機構を削除したIR-Fuzz-WEAでは、分岐カバレッジが43.02%低下し、検出精度が4.87%低下した。これは、この機構が顕著な貢献をしていることを証明している。
- IR-Fuzzは、従来のツールが検出できなかった新たな脆弱性パターン「危険なEtherの厳密等価性」を正常に検出できた。これは、事前に存在するEtherのため、コントラクト残高がユーザーの寄付額と常に一致しない場合に発生する。
- ギャンブルコントラクトにおける事例研究を通じて、IR-Fuzzが残高の不一致により到達不能な勝者条件を同定できることを検証した。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。