[論文レビュー] Running on Fumes--Preventing Out-of-Gas Vulnerabilities in Ethereum Smart Contracts using Static Resource Analysis
本稿では、Ethereumスマートコントラクト関数のガス消費量に対する正確な上限値を、SolidityまたはEVMバイナリコードの静的解析によって自動的に推定する、Gastapと呼ばれる静的解析プラットフォームを提案する。制御フローアナシス、逆アセンブル、サイズ関係の推論、方程式の解法を組み合わせることで、Gastapは安全でスケーラブルかつ正確なガス上限値を提供し、ガス不足の脆弱性を防止する。解析時間の68.36%がガス方程式の解法に費やされ、29,061件のコントラクトの100%が343時間未満で解析された。
Gas is a measurement unit of the computational effort that it will take to execute every single operation that takes part in the Ethereum blockchain platform. Each instruction executed by the Ethereum Virtual Machine (EVM) has an associated gas consumption specified by Ethereum. If a transaction exceeds the amount of gas allotted by the user (known as gas limit), an out-of-gas exception is raised. There is a wide family of contract vulnerabilities due to out-of-gas behaviours. We report on the design and implementation of GASTAP, a Gas-Aware Smart contracT Analysis Platform, which takes as input a smart contract (either in EVM, disassembled EVM, or in Solidity source code) and automatically infers sound gas upper bounds for all its public functions. Our bounds ensure that if the gas limit paid by the user is higher than our inferred gas bounds, the contract is free of out-of-gas vulnerabilities.
研究の動機と目的
- Ethereumスマートコントラクトにおけるガス消費量の分析に、正確で自動化されたツールが不足している問題に対処すること。特に、入力サイズやステートに依存する複雑な依存関係に対応すること。
- 最悪ケースのガス使用量を正確に静的推定可能にすることで、ガス制限が推定上限を超える場合に、コントラクトがガス不足例外を送出しないことを保証すること。
- 従来のツールが定数上限値しか提供しないか、∞を返すという限界を克服し、入力パラメータ、コントラクトステート、ブロックチェーンデータに依存する動的ガス依存関係をモデル化すること。
- EVMバイナリコードと高水準なSolidityコードの両方をサポートする、スケーラブルでエンドツーエンドのシステムを構築し、形式的な整合性保証を提供すること。
- 実世界のコントラクトを用いて、Ethereumスマートコントラクトにおける静的リソース解析の実現可能性と有効性を大規模スケールで示すこと。
提案手法
- Oyenteの拡張版を用いて、EVMまたはSolidityコードから制御フローダイアグラム(CFGs)を構築する。
- 解析の精度を向上させるために、より高水準な中間表現(EthIR)への逆アセンブルを実施する。
- Sacoから適応したサイズアナライザーを用いて、入力パラメータ、コントラクトステート、ブロックチェーンデータ間のサイズ関係を推論する。
- 入力サイズおよびステート変数に依存するガス消費量の依存関係をモデル化する、記号的ガス方程式を生成する。
- Pubsソルバを用いて得られた方程式系を解き、ガス使用量の閉形式上限値を導出する。
- ループ抽出やカバー・ポイントエラー検出による相互再帰の処理といった最適化を適用するが、これは依然として限界である。
実験結果
リサーチクエスチョン
- RQ1入力サイズ、ステートサイズ、ブロックチェーンデータに依存するEthereumスマートコントラクト関数の最悪ケースガス上限値を、静的解析ツールが正確に推定できるか?
- RQ2パターンベースやシンボリック実行手法と比較して、静的リソース解析アプローチはガス不足脆弱性の検出においてどの程度有効か?
- RQ3大規模な実世界のスマートコントラクトを静的ガス解析で解析する際のスケーラビリティとパフォーマンスオーバーヘッドはどの程度か?
- RQ4既存のコンパイラやツールは、一時的なコンパイル戦略により、なぜ正確なガス上限値を提供できないのか?
- RQ5EVMバイナリコードと高水準なSolidityコードの両方をサポートする、形式的かつ整合的で完全な静的解析システムを、ガス消費量の解析のために構築できるか?
主な発見
- Gastapは29,061件の実世界のEthereumスマートコントラクトを正常に解析した。合計解析時間は1,233,155.92秒(約342.54時間)であった。
- 最も時間のかかるフェーズはガス方程式の解法であり、合計時間の68.36%を占めており、これがパフォーマンスのボトルネックであると示された。
- 方程式生成フェーズは合計時間の21.68%を占めており、オペコードおよびメモリのガス上限値は別々に生成された。
- 同システムは、解析された関数のほぼ10%が入力サイズやコントラクトステートに依存するガス消費量を持つことを同定した。これは広範でかつ未だ十分に取り組まれていない脆弱性表面を示している。
- システムは整合的である:ユーザーがGastapが推定した上限値を超えるガス制限を提供すれば、コントラクトがガス不足例外を送出することは保証される。
- 実装はOyente、EthIR、Saco、Pubsといった既存のオープンソースツールを活用・拡張しており、複雑な静的解析に向けたモジュール型コンponentの統合の実現可能性を示している。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。