Skip to main content
QUICK REVIEW

[論文レビュー] Executable Operational Semantics of Solidity

Jiao Jiao, Shuanglong Kan|arXiv (Cornell University)|Apr 4, 2018
Blockchain Technology Applications and Security参考文献 2被引用数 10
ひとこと要約

本稿は、スマートコントラクトの自動検証を可能にする、Kフレームワークに形式化された、Solidityプログラミング言語の最初の実行可能で構造的意味論(SOS)を提示する。ストレージの永続性、ネストされた配列、フォールバック関数といったSolidityの独自の特徴をモデル化することで、重要な設計上の問題を特定し、再入力攻撃のような脆弱性を検出する。これは、形式的でソースレベルの意味論が、安全なスマートコントラクト開発に不可欠であることを示している。

ABSTRACT

Bitcoin has attracted everyone's attention and interest recently. Ethereum (ETH), a second generation cryptocurrency, extends Bitcoin's design by offering a Turing-complete programming language called Solidity to develop smart contracts. Smart contracts allow creditable execution of contracts on EVM (Ethereum Virtual Machine) without third parties. Developing correct smart contracts is challenging due to its decentralized computation nature. Buggy smart contracts may lead to huge financial loss. Furthermore, smart contracts are very hard, if not impossible, to patch once they are deployed. Thus, there is a recent surge of interest on analyzing/verifying smart contracts. While existing work focuses on EVM opcode, we argue that it is equally important to understand and define the semantics of Solidity since programmers program and reason about smart contracts at the level of source code. In this work, we develop the structural operational semantics for Solidity, which allows us to identify multiple design issues which underlines many problematic smart contracts. Furthermore, our semantics is executable in the K framework, which allows us to verify/falsify contracts automatically.

研究の動機と目的

  • Ethereumスマートコントラクトを記述するために使用される高水準言語としてのSolidityに対する、形式的で実行可能な意味論の欠如に対処すること。
  • 低レベルのEVMバイトコード解析に依存するのではなく、ソースコードレベルでの形式的推論を可能にすること。
  • 不正な配列の挙動や再入力攻撃のような、形式的意味論を通じて設計上の欠陥や脆弱性を同定すること。
  • 公式のコンパイラおよびドキュメントと整合性を持つ、形式的に検証済みの実行可能なSolidityモデルを提供すること。
  • Kフレームワークにおける到達可能性論理を用いて、スマートコントラクトの性質の自動検証および反証を支援すること。

提案手法

  • ストレージ、メモリ、スタックの意味論を含む、Solidityの主要な言語機能を捉える構造的意味論(SOS)を設計した。
  • Kフレームワークに意味論を形式化し、コントラクト実行に関する実行可能で機械検証可能な推論を可能にした。
  • ネストされた配列、関数呼び出し、フォールバック関数、外部呼び出しといった複雑な機能を、正確な状態遷移でモデル化した。
  • 関数のパラメータバインディングと条件チェックを関数修飾子を通じて統合し、適切な実行コンテキストの処理を保証した。
  • Kフレームワークの到達可能性論理プローバーを用いて、コントラクトの性質を自動的に検証または反証した。
  • 公式のRemixコンパイラおよび公式のSolidityドキュメントとの整合性を確認するため、意味論を検証した。

実験結果

リサーチクエスチョン

  • RQ1開発者が正しい推論を行うために、どのようにしてSolidityの意味論をソースコードレベルで形式的かつ正確に定義できるか?
  • RQ2配列の取り扱いやフォールバック関数といった、実際の攻撃に繋がる設計上の問題は、Solidityにどのようなものか?
  • RQ3実行可能意味論を用いたSolidityは、デプロイ前でさえも、DAO攻撃のような既知の脆弱性を検出できるか?
  • RQ4提案された意味論は、公式のSolidityコンパイラおよびドキュメントとどの程度整合性を持つのか?
  • RQ5Kフレームワークの到達可能性論理は、スマートコントラクトの性質の自動検証または反証に、どの程度活用できるか?

主な発見

  • 提案された実行可能意味論は、公式ドキュメントで規定されたSolidityの大多数のコア機能を正しくモデル化しており、Remixコンパイラの挙動と一致している。
  • 形式的モデルにより、ストレージレイアウトに起因する予期しない配列の変更といった、微細だが深刻な挙動が明らかになった。これはセキュリティ脆弱性を引き起こす可能性がある。
  • 関数呼び出しと状態遷移の挙動を正確にモデル化することで、再入力攻撃様の脆弱性、包括的にDAO攻撃の変種を含めて、成功裏に検出できた。
  • Kフレームワークの到達可能性論理により、コントラクトの正しさを自動で検証でき、誤った仮定の反証も可能になった。
  • 本研究は、低レベルのEVM解析だけでは高水準な意味的意図を捉えきれないことから、信頼できるスマートコントラクト開発にはソースレベルの形式的意味論が不可欠であることを示している。

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

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

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

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