メインコンテンツへスキップ

スマート・コントラクトのセキュリティ・チェックリスト

スマート・コントラクト
セキュリティ
Solidity
中級
Trailofbits
2020年9月7日
5 分で読めます

スマート・コントラクト開発のチェックリスト

スマート・コントラクトを記述する際に推奨される、大まかなプロセスは以下の通りです。

既知のセキュリティ問題の確認:

  • スリザー (opens in a new tab)を使用してコントラクトをレビューします。一般的な脆弱性に対する40以上の検出機能が組み込まれています。新しいコードをチェックインするたびに実行し、クリーンなレポートが得られることを確認します(または、トリアージモードを使用して特定の問題を非表示にします)。
  • Crytic (opens in a new tab)を使用してコントラクトをレビューします。スリザーでは検出できない50の問題をチェックします。また、CryticはGitHubのプルリクエストでセキュリティ問題を簡単に表面化させるため、チームメンバーが互いの状況を把握するのにも役立ちます。

コントラクトの特別な機能の検討:

コードの重要なセキュリティ機能の目視検査:

重要なセキュリティ特性の文書化と、自動テストジェネレーターを使用した評価:

  • コードのセキュリティ特性を文書化する方法を学びます。最初は難しいかもしれませんが、良い結果を得るために最も重要な活動です。また、このチュートリアルの高度なテクニックを使用するための前提条件でもあります。
  • エキドナ (opens in a new tab)およびマンティコア (opens in a new tab)で使用するために、Solidityでセキュリティ特性を定義します。状態マシン、アクセス制御、算術演算、外部との相互作用、および標準への準拠に焦点を当てます。
  • スリザーのPython APIを使用してセキュリティ特性を定義します。継承、変数の依存関係、アクセス制御、およびその他の構造的な問題に焦点を当てます。
  • Crytic (opens in a new tab)を使用して、コミットごとにプロパティテストを実行します。Cryticはセキュリティプロパティテストを読み込んで評価できるため、チームの全員がGitHub上でテストに合格したことを簡単に確認できます。失敗したテストはコミットをブロックできます。

最後に、自動化ツールでは簡単に見つけられない問題に注意してください:

  • プライバシーの欠如: トランザクションがプールで待機している間、他の全員がそれを見ることができます
  • トランザクションのフロントランニング
  • 暗号化操作
  • 外部の分散型金融 (DeFi) コンポーネントとのリスクを伴う相互作用

サポートを求める

イーサリアムのオフィスアワー (opens in a new tab)は、毎週火曜日の午後に開催されています。この1時間の1対1のセッションは、セキュリティに関する質問、私たちのツールを使用したトラブルシューティング、および現在のアプローチに関する専門家からのフィードバックを得る機会です。このガイドを進めるためのサポートを提供します。

Slackに参加してください: Empire Hacking (opens in a new tab)。質問がある場合は、#cryticおよび#ethereumチャンネルでいつでも対応可能です。