Skip to main content
QUICK REVIEW

[論文レビュー] SIF: A Framework for Solidity Code Instrumentation and Analysis

Chao Peng, Sefa Akca|arXiv (Cornell University)|May 5, 2019
Blockchain Technology Applications and Security参考文献 11被引用数 5
ひとこと要約

SIF は、抽象構文木(AST)を介してクエリ、変換、コード生成を可能にする、C++ で構築された包括的なフレームワークであり、スマートコントラクトの分析、インストルメンテーション、コード生成を支援する。7つの実用的ツール(脆弱性検出、コード解析、デバッグ)をサポートし、1,838件の実際のイーサリアムコントラクトに対して高い使いやすさと自動化度を示した。これにより、スマートコントラクト開発の統合ツールインfraとしての実現可能性が裏付けられた。

ABSTRACT

Solidity is an object-oriented and high-level language for writing smart contracts that are used to execute, verify and enforce credible transactions on permissionless blockchains. In the last few years, analysis of smart contracts has raised considerable interest and numerous techniques have been proposed to check the presence of vulnerabilities in them. Current techniques lack traceability in source code and have widely differing work flows. There is no single unifying framework for analysis, instrumentation, optimisation and code generation of Solidity contracts. In this paper, we present SIF, a comprehensive framework for Solidity contract analysis, query, instrumentation, and code generation. SIF provides support for Solidity contract developers and testers to build source level techniques for analysis, understanding, diagnostics, optimisations and code generation. We show feasibility and applicability of the framework by building practical tools on top of it and running them on 1838 real smart contracts deployed on the Ethereum network.

研究の動機と目的

  • 現在、断片的で低レベルのバイトコード解析や不完全なソースからIRへの変換に依存しているが、Solidity コードの分析、インストルメンテーション、変換を統合的に扱えるフレームワークの欠如に応えること。
  • C/C++ の Clang LibTooling に類似した高水準で再利用可能かつ拡張可能なフレームワークを、Solidity 開発者およびテスト担当者に提供すること。
  • 元の Solidity ソースコードへの明確なトレーサビリティを保ちながら、エンドツーエンドのソースレベルのプログラム解析、変換、コード生成を可能にすること。
  • 再利用可能なヘルパー関数とシンプルな C++ インターフェースを通じて、セキュリティ解析、診断、テスト用のカスタムツール開発を支援すること。
  • 1,838件の実際のイーサリアムスマートコントラクトへの実世界での展開を通じて、フレームワークの使いやすさ、パフォーマンス、拡張性を評価すること。

提案手法

  • フレームワークは、C++ で構築された Solidity AST の中間表現を用い、AST の走査と操作に向けた明確で拡張可能なインターフェースを提供する。
  • AST ノードを照会するためのヘルパー関数、挿入されたインストルメンテーション(例:アサーション)の挿入、名前変更やバグの種まきなどのコード変換を実行可能である。
  • 変更された AST から Solidity ソースコードを再構築することでコード生成をサポートし、純粋な解析タスクではデフォルトのコード出力を無効化できるオプションを提供する。
  • フレームワークは、AST ノードの静的解析を通じて脆弱性検出を可能にし、AST レベルの構文的差分比較、コールグラフおよび制御フローグラフの生成も実装している。
  • テキスト形式および JSON 形式の AST 入力をサポートし、パフォーマンスプロファイリングにより JSON AST パースのボトル neck を同定した。
  • フレームワークは拡張可能である:ユーザーは提供されたインターフェースを用いて新しいツールを実装でき、事前/事後のビジター関数による AST ノード間での状態の維持をネイティブにサポートする。

実験結果

リサーチクエスチョン

  • RQ1ソースコードへの完全なトレーサビリティを保ちつつ、インストルメンテーション、解析、コード生成を統合的にサポートする、Solidity 用の統合的でソースレベルのフレームワークを構築可能か?
  • RQ2開発者およびテスト担当者がカスタム解析ツールの構築・デプロイに使用する際、このフレームワークは使いやすく、自動化可能か?
  • RQ3実世界のスマートコントラクトにおける、AST ベースのコード生成および解析のパフォーマンスオーバーヘッドはどの程度か?
  • RQ4脆弱性検出、コード変換、診断といった多様なユースケースにおいて、このフレームワークはどの程度効果的か?
  • RQ5このフレームワークは、グローバルな開発者コミュニティによって拡張可能かつ実用的なスマートコントラクトツールインfraとして採用可能か?

主な発見

  • SIF は、1,838件の実世界のイーサリアムスマートコントラクトをすべて正常に処理し、フレームワークの堅牢性とスケーラビリティを確認した。
  • SIF 上に構築された7つのツール(アサーションアナライザー、コールグラフジェネレーター、フォールトシーダーなど)は、3名のユーザーレビュー担当者による検証で正しく出力された。
  • ユーザーは、ツールおよびフレームワークの使いやすさを高く評価し、平均して5段階中3.7の評価を得た。また、ツールはほぼ完全に自動化可能であると認識された。
  • コード生成は、1,000行未満のコントラクトではほとんどの場合4秒未満で実行された。
  • 大規模なコントラクト(6,183行)では、コード生成に85.6秒を要したが、これは主にルートレベルの繰り返し JSON AST クエリに起因するボトル neck であった。この問題は特定され、最適化が進行中である。
  • リリース後、フレームワークは国際的な注目を集め、コミュニティからのフィードバックにより、重大な修正(例:未初期化変数の検出)と機能強化(例:オプションのコード生成、詳細な AST ドキュメント)が実施された。

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

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

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

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