Skip to main content
QUICK REVIEW

[論文レビュー] Analyzing Smart Contracts: From EVM to a sound Control-Flow Graph

Elvira Albert, Jesús Correas|arXiv (Cornell University)|Apr 29, 2020
Blockchain Technology Applications and Security参考文献 4被引用数 7
ひとこと要約

この論文は、Ethereum Virtual Machine (EVM) スマートコントラクトの EVM バイナリコードを静的に解析することにより、整合的でスタックに依存する制御フローダイアグラム(CFG)の構築を提示する。スタックに格納されたジャンプターゲット(命令に直接埋め込まれていない)というスタックベースのジャンプの特性により、正確な制御フローモデリングが困難になる課題に対処するため、異なるスタック状態に応じてブロックをクローンすることで、静的解析における完全かつ正確なパス表現を保証する。

ABSTRACT

The EVM language is a simple stack-based language with words of 256 bits, with one significant difference between the EVM and other virtual machine languages (like Java Bytecode or CLI for .Net programs): the use of the stack for saving the jump addresses instead of having it explicit in the code of the jumping instructions. Static analyzers need the complete control flow graph (CFG) of the EVM program in order to be able to represent all its execution paths. This report addresses the problem of obtaining a precise and complete stack-sensitive CFG by means of a static analysis, cloning the blocks that might be executed using different states of the execution stack. The soundness of the analysis presented is proved.

研究の動機と目的

  • スマートコントラクトの解析には、すべての可能な実行パスをモデル化するための完全で正確な制御フローダイアグラム(CFG)が必要である。
  • EVM ではジャンプアドレスを命令に直接埋め込まず、スタックに格納することで実現しているため、静的解析が複雑になり、CFG が不完全または整合的でない可能性がある。
  • 従来のアプローチはスタックに依存する制御フローを考慮せず、実行パスを漏れなく特定できなかったり、挙動を過剰に近似してしまうリスクがある。
  • 本論文は、ジャンプポイントにおけるスタック状態に基づいて、すべての可能な実行パスを正確に捉える整合的でスタックに依存するCFGの構築により、このギャップを埋める。
  • 主な目的は、制御フローをスタック構成の関数としてモデル化することにより、EVM プログラムの正確な静的解析の形式的基盤を提供することである。

提案手法

  • この手法では、各ブロックが到達可能な異なるスタック状態ごとに複製され、スタックに依存する性質を保証する制御フローダイアグラム(CFG)を構築する。
  • 実行中の状態を正確に追跡できるように、プログラムカウンター、スタックの深さ、スタックの内容を追跡する EVM バイナリコードの形式的意味論を導入する。
  • 各プログラムポイントにおけるすべての可能なスタック構成をモデル化するために、スタック状態の記号的表現を用いる。
  • ジャンプ発生時のスタック状態に応じてブロックをクローンし、それぞれのクローンが一意なスタック構成に対応する異なる実行パスを表す。
  • 2種類のエッジを定義する:順次実行を表す「next」エッジと、制御転送を表す「jump」エッジで、両者ともスタック状態でインデックス化され、精度を保つ。
  • 実行トレースの長さに関する帰納法を用いて整合性を形式的に証明し、すべての有効な実行トレースがCFG内の有向ウォークに対応することを示す。

実験結果

リサーチクエスチョン

  • RQ1スタックベースのジャンプ命令があるにもかかわらず、完全で正確なEVMバイトコード用の制御フローダイアグラムはどのように構築できるか?
  • RQ2EVMプログラムにおけるスタックに依存する実行状態をモデル化するには、どのような形式的意味論が必要か?
  • RQ3ブロックのクローンは、ジャンプポイントでの異なるスタック状態に起因する複数の実行パスをどのように表現できるか?
  • RQ4結果として得られるCFGが、すべての可能な実行トレースに対して整合的であるための条件は何か?
  • RQ5このCFGモデルに基づく静的解析は、過剰近似を避けながら、すべての可能な実行パスを検出できるか?

主な発見

  • 提案手法は、ジャンプポイントにおける異なるスタック状態に応じてブロックを複製することで、EVMプログラムのすべての可能な実行パスを正確に捉える整合的でスタックに依存するCFGを構築する。
  • この解析は、EVMのスタックベースのジャンプメカニズム(ジャンプターゲットが命令に直接埋め込まれずスタックに格納される)を正しくモデル化し、従来の手法における主な不正確要因を解消する。
  • 整合性の形式的証明により、すべての有効な実行トレースがCFG内の有向ウォークに対応することが示され、実行パスが見逃されないことが保証される。
  • この手法は、非条件ジャンプ(JUMP)と条件ジャンプ(JUMPI)の両方を処理でき、スタック状態とジャンプターゲットに基づいて、それぞれ異なるエッジ構築ルールを定義する。
  • スタックサイズを定数とし、ジャンプアドレスを定数とみなすことにより、再帰的または高階関数パターンを持つEVMプログラムの正確な静的解析が可能になる。
  • 定数のスタックサイズと定数のジャンプターゲットの制約下で、得られるCFGは形式的に整合的かつ完全であるため、形式的検証や脆弱性検出に適している。

より良い研究を、今すぐ始めましょう

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。