スマートコントラクトのセキュリティ・チェックリスト
スマートコントラクト
セキュリティ
Solidity
中級
スマートコントラクト開発チェックリスト
スマートコントラクトを作成する際には、以下に挙げる大まかなプロセスに従って行うことをお勧めします。
既知のセキュリティ関連の問題点について確認します:
- Slither (opens in a new tab)でコントラクトをレビューする。 Slitherには、40種類以上のよくある脆弱性を対象とする検出機能が搭載されています。 新しいコードが追加されるたびにレビューを実行して、クリーンな報告になるようにします(特定の問題を無視する必要がある場合は、トリアージモードを使用します)。
- Crytic (opens in a new tab)でコントラクトをレビューする。 Cryticでは、Slitherでは検出できな50種類の問題点を確認できます。 さらに、GitHubのプルリクエストに含まれるセキュリティ関連の問題点を簡単に発見できるので、チーム内の問題把握に役立ちます。
あなたのコントラクトに含まれる特別な機能について検討する:
- コントラクトがアップグレード可能かどうか:
slither-check-upgradeability(opens in a new tab)またはCrytic (opens in a new tab)で、アップグレード可能性コードの欠陥をレビューする。 当チームでは、アップグレードの失敗につながる17のケースを文書化しています。 - コントラクトは、ERC準拠を謳っていますか?
slither-check-erc(opens in a new tab)でそれらをチェックする。 このツールでは、6種類の一般的な仕様に準拠していない場合、ただちに指摘されます。 - サードパーティのトークンと統合予定ですか? 外部コントラクトに依存する前に、トークン統合チェックリストをレビューする。
コードにおける重要なセキュリティ関連の機能を、視覚的にチェックします。
- Slitherのinheritance-graph (opens in a new tab)プリンターをレビューする。 不注意によるシャドーイングやC3 linearizationにまつわる問題を回避してください。
- Slitherのfunction-summary (opens in a new tab)プリンターをレビューする。 機能の可視性およびアクセス管理のレポートが作成されます。
- Slitherのvars-and-auth (opens in a new tab)プリンターをレビューする。 状態変数に対するアクセス管理のレポートが作成されます。
セキュリティ関連の重要な属性を文書化し、自動化されたテスト生成機能を用いて評価します:
- コードのセキュリティプロパティを文書化する方法を学ぶ。 最初は大変ですが、最良の結果を得る上で最も重要な作業です。 また、このチュートリアルのより高度なテクニックを活用する上でも、必須の作業です。
- Echidna (opens in a new tab)およびManticore (opens in a new tab)で使用するために、Solidityでセキュリティプロパティを定義する。 状態マシン、アクセス管理、算術演算、外部とのやりとり、および標準の遵守に焦点を当ててください。
- Slitherの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チャンネルにお問い合わせください。
最終更新: 2025年2月7日