Skip to main content
QUICK REVIEW

[論文レビュー] Formalising and verifying smart contracts with Solidifier: a bounded model checker for Solidity

Pedro Antonino, A. W. Roscoe|arXiv (Cornell University)|Feb 7, 2020
Security and Verification in Computing参考文献 38被引用数 9
ひとこと要約

この論文では、Solidityのための境界付きモデルチェックャーであるSolidifierを提示する。Solidifierは、Solid言語を用いて言語のコアサブセットを形式化し、それをBoogieに翻訳してCorralを用いた検証を可能にする。実行パスを指定された深さまで体系的に探索することで、メモリエイリアシングやストレージレイアウトの問題といった意味的性質の違反を正確に検出可能であり、既存のツールに比べて精度と意味的整合性に優れつつ、競争力あるパフォーマンスを維持している。

ABSTRACT

The exploitation of smart-contract vulnerabilities can have catastrophic consequences such as the loss of millions of pounds worth of crypto assets. Formal verification can be a useful tool in identifying vulnerabilities and proving that they have been fixed. In this paper, we present a formalisation of Solidity and the Ethereum blockchain using the Solid language and its blockchain; a Solid program is obtained by explicating/desugaring a Solidity program. We make some abstractions that over-approximate the way in which Solidity/Ethereum behave. Based on this formalisation, we create Solidifier: a bounded model checker for Solidity. It translates Solid into Boogie, an intermediate verification language, that is later verified using Corral, a bounded model checker for Boogie. Unlike much of the work in this area, we do not try to find specific behavioural/code patterns that might lead to vulnerabilities. Instead, we provide a tool to find errors/bad states, i.e. program states that do not conform with the intent of the developer. Such a bad state, be it a vulnerability or not, might be reached through the execution of specific known code patterns or through behaviours that have not been anticipated.

研究の動機と目的

  • コードの脆弱性による深刻な財務的損失を防ぐために、スマートコントラクトの信頼性の高い検証の必要性に対応すること。
  • 低レベルの複雑さを抽象化しながらも、主要な振る舞いを保持する、Solidityの代表的サブセットの形式的意味論的基盤を提供すること。
  • パターンベースの脆弱性検出に依存するのではなく、意味的性質の違反を検出するツールを開発すること。
  • Solidityの非標準的なメモリモデルとストレージレイアウトを忠実にモデル化することで、形式的検証の正確性を向上させること。
  • 精度、速度、意味的整合性の観点から、既存のツールと比較してSolidifierの性能を評価すること。

提案手法

  • Solid言語を用いて、意味を明確にするために簡略化・糖鎖化されたSolidity構文のコアサブセットを形式化すること。
  • Boogie、中間検証言語へのSolidプログラムの翻訳により、形式的推論を可能にすること。
  • Corral、Boogie用の境界付きモデルチェックャーを用いて、ユーザーが定義した深さまですべての実行パスを記号的に探索すること。
  • エイリアシングや決定論的レイアウト動作を捉えるために、Solidityのメモリモデルとストレージレイアウトを特別に注意深くエンコードすること。
  • モデルチェック中に違反を検出するため、ユーザーが指定した意味的性質(例:不変条件、安全条件)を定義すること。
  • 探索の深さとパフォーマンスのバランスを取るために、Corralを特化した設定で構成すること。

実験結果

リサーチクエスチョン

  • RQ1簡略化された言語(Solid)でSolidityの意味論を形式化することで、低レベルのEVMベースのアプローチよりも精度の高い検証が可能になるか?
  • RQ2Solidifierは、Mythril、VeriSol、solc-verifyといった既存のツールと比較して、意味的性質の違反を検出する精度がどうなるか?
  • RQ3Solidifierは、Solidityのメモリモデルとストレージレイアウトの意味論をどれほど忠実に捉えているか?
  • RQ4小さな境界値で境界付きモデルチェックを行うことで、実際のスマートコントラクトのバグを検出するのに十分か?
  • RQ5ユーザー定義の意味的性質は、既知のコードパターンを超えた脆弱性を明らかにできるか?

主な発見

  • Solidifierは、Solidityの意味論をBoogieにより正確にエンコードしているため、solc-verifyに比べて偽陽性が少なく、精度に優れている。
  • VeriSolのような他のBoogieベースのツールと同等のパフォーマンスを達成しながら、特にエイリアシングやストレージレイアウトの振る舞いを捉える意味的整合性に優れている。
  • AliasingおよびStorageDeterministicLayoutのベンチマークで、数回の関数呼び出しで違反を正常に検出できたことから、小さな境界値での境界付きモデルチェックが一般的なバグ検出に有効であることが示された。
  • 評価結果から、高レベルの意味論を形式化し、ユーザー定義の性質を検証する本手法は、パターンベースの記号実行や過剰近似検証よりも信頼性の高い結果をもたらすことがわかった。
  • 結果から、他のツールに比べてSolidifierがSolidityのメモリモデルをより忠実にモデル化していることが示された。これは、微妙なエイリアシングやレイアウト関連の問題を正しく検出できたことで裏付けられている。
  • Solidifierの検証速度は他のツールと同等であり、高精度な検証がパフォーマンスの犠牲を伴わずに実現可能であることが示された。

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

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

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

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