Skip to content

Latest commit

 

History

History
206 lines (161 loc) · 17.9 KB

README_JP.md

File metadata and controls

206 lines (161 loc) · 17.9 KB

ブロックチェーンに基づく暗号資産のセキュリティ監査ガイドライン

Twitter URL

English Version, 中文版本, 日本語版

翻訳者:

Jack Jia

1.暗号資産の脅威モデリング

SlowMistは、暗号資産システムに存在する脅威を特定するために複数のモデルを活用している。

CIAトライアド: 機密性、完全性、可用性(Confidentiality, Integrity, and Availability)。これは、セキュリティインフラストラクチャにおける主要な安全目標と理念である。

STRIDEモデル: なりすまし(Spoofing)、改ざん(Tampering)、否認(Repudiation)、情報漏洩(Information Disclosure)、サービス拒否(Denial of Service)、権限昇格(Elevation of Privilege)。

DREADモデル: 潜在的損害(Damage Potential)、再現性(Reproducibility)、悪用可能性(Exploitability)、影響を受けるユーザー(Affected Users)、発見可能性(Discoverability)。

PASTA: 目標の定義、技術範囲の定義、アプリケーションの分解、脅威の分析、脆弱性の特定、攻撃の列挙、リスクと影響の分析。

2.テスト方法

テスト方法は以下通り:

テスト方法 説明
ブラックボックステスト ブラックボックステストは、ユーザーの視点からプログラムを検証する。さまざまな入力シナリオを提供し、その出力を確認する。ブラックボックステスト担当者は内部コードにアクセスできない。システムの納品前に行われる最終受け入れテストは、ブラックボックステストの一般的な例である。
グレーボックステスト グレーボックステストは、2つの手法を組み合わせたもので、ソフトウェア検証でよく使用される。この方法では、テスト担当者はユーザーの視点からソフトウェアを検証し、入力と出力を分析する。また、ソースコードにもアクセスでき、それを利用してテストを設計する。ただし、テスト中にプログラムの内部動作を分析することはない。
ホワイトボックステスト ホワイトボックステストは、プログラムの内部論理構造を検証し、コードを1行ずつ分析して潜在的なエラーを探す。

ブラックボックステストとグレーボックステストでは、ファジングテストやスクリプトテストなどの手法を用いて、ランダムなデータを提供したり、特定の構造を持つデータを構築したりすることで、インターフェースやコンポーネントの堅牢性をテストする。これにより、境界条件におけるシステムの異常動作(例: バグやパフォーマンス異常)を発見する。ホワイトボックステストでは、コードレビューなどの手法を通じて、コード内のオブジェクト定義や論理実装を分析する。さらに、セキュリティチームが既知のブロックチェーンセキュリティ脆弱性に関する経験を活用し、コード内の重要なロジックや主要コンポーネントに既知の脆弱性がないことを確認する。同時に、新しいシナリオや新技術における脆弱性探索モードに移行し、潜在的な0dayエラーを発見する。

3.脆弱性の深刻度

汎用脆弱性評価システム(CVSS)は、ソフトウェアの脆弱性の特性と深刻度を伝えるためのオープンなフレームワークである。CVSSは3つの指標グループで構成されている:基本指標、時間指標、環境指標。基本指標グループは、脆弱性の本質的な特性を表し、これらは時間やユーザー環境にかかわらず一定である。時間指標グループは、脆弱性が時間とともに変化する特性を反映する。環境指標グループは、ユーザー環境における独自の脆弱性特性を表す。基本指標に基づくスコアの範囲は0から10で、時間指標と環境指標による評価を通じて修正が可能である。CVSSスコアは、ベクター文字列としても表され、これはスコアを導出するための値を圧縮したテキスト形式で示す。

CVSSの手法に基づき、SlowMistチームは以下のようにブロックチェーンの脆弱性の深刻度レベルを開発した:

レベル 説明
深刻 深刻レベルの脆弱性は、ブロックチェーンプロジェクトのセキュリティに重大な影響を及ぼす。深刻な脆弱性の修正を強く推奨する。
高レベルの脆弱性は、ブロックチェーンプロジェクトの正常な稼働に影響を与える。高リスクの脆弱性の修正を強く推奨する。
中レベルの脆弱性は、ブロックチェーンプロジェクトの稼働に影響を及ぼす。中リスクの脆弱性の修正を推奨する。
低レベルの脆弱性は、特定のシナリオでブロックチェーンプロジェクトの稼働に影響を与える可能性がある。プロジェクト側で評価を行い、これらの脆弱性を修正する必要があるかどうかを検討することを推奨する。
弱点 理論上はセキュリティリスクが存在するが、エンジニアリング上では再現が極めて困難である。
アドバイス より優れたコーディングやアーキテクチャの実践を推奨する。
情報 プロジェクトの設計意図に適合しているものの、ユーザー資産の損失を引き起こす可能性のある特性である。

4.パブリックチェーンのセキュリティ研究

SlowMistチームのブロックチェーン脅威インテリジェンスシステムは、発生中のセキュリティインシデントを継続的に追跡し、その脅威インテリジェンスをセキュリティコンサルティングおよび監査サービスに活用している。

SlowMistチームは、公開されている既知のブロックチェーンセキュリティ脆弱性を分析・研究し、ブロックチェーンにおける一般的な脆弱性リストを編纂した。

5.パブリックチェーンのセキュリティ監査

SlowMistチームのパブリックチェーンセキュリティ監査では、ブラックボックス、グレーボックス、ホワイトボックスの3つのテスト手法を総合的に活用している。また、監査ニーズの違いに応じて、ブラックボックスとグレーボックスを中心としたメインネットセキュリティ監査やLayer2セキュリティ監査、ホワイトボックスを中心としたソースコードセキュリティ監査を提供している。さらに、一部の開発フレームワーク向けにカスタマイズされたアプリケーション専用チェーンのセキュリティ監査方案も展開している。

5.1メインネット & Layer2プロジェクトセキュリティ監査

メインネットおよびLayer2プロジェクトのセキュリティ監査において、SlowMistチームは「ブラックボックス+グレーボックス」戦略を採用し、実際の攻撃に最も近い形でプロジェクトの迅速なセキュリティテストを実施する。

SlowMistチームがチェックする脆弱性には、以下のようなものが含まれる:

  • プライベートキーの乱数エントロピー不足
  • プライベートキーシード変換の精度損失
  • 対称暗号化アルゴリズムの理論的信頼性評価
  • 対称暗号化アルゴリズム依存ライブラリのサプライチェーンセキュリティ
  • キーストアの暗号強度検出
  • ハッシュアルゴリズムの長さ拡張攻撃
  • ハッシュアルゴリズムの理論的信頼性評価
  • 署名アルゴリズムの理論的信頼性評価
  • secp256k1のk値ランダム性の安全性
  • secp256k1のr値再利用によるプライベートキー抽出攻撃
  • ECC署名の可塑性攻撃
  • ed25519プライベートキー抽出攻撃
  • Schnorrプライベートキー抽出攻撃
  • ECC曲線攻撃
  • Merkleツリー可塑性攻撃(CVE-2012-2459)
  • ネイティブ機能による偽装入金
  • コントラクト呼び出しに基づく偽装入金
  • ネイティブチェーンのトランザクションリプレイ攻撃
  • クロスチェーントランザクションリプレイ攻撃
  • トランザションロック攻撃
  • トランザクション手数料の動的調整不足
  • RPCリモートキー窃盗攻撃
  • RPCポートの識別可能性
  • RPCのオープンクロスドメイン脆弱性によるローカルフィッシング攻撃
  • JsonRPCの異常パケットによるサービス拒否攻撃
  • RPCデータベースインジェクション
  • RPC通信の暗号化
  • 過剰な管理者権限
  • 非プライバシー/非匿名コイン監査
  • コアノード数の不足
  • コアノードの物理的場所の過度な集中
  • P2Pノードの最大接続数制限
  • P2Pノードの独立IP接続制限
  • P2Pの入站/出站接続制限
  • P2P変形攻撃
  • P2P通信の暗号化
  • P2Pポートの識別可能性
  • コンセンサスアルゴリズムの潜在的リスク評価
  • ブロック時間オフセット攻撃
  • マイナーのグラインディング攻撃
  • PoS/BFTの二重署名罰則

5.2ソースコードのセキュリティ監査

ソースコードのセキュリティ監査とは、SlowMistチームが「ホワイトボックス」戦略を採用し、プロジェクトの関連ソースコードに対して最も包括的なセキュリティテストを行うことを指す。ホワイトボックス監査では、通常、自動化された静的コード分析とマニュアル分析の2つの形式を組み合わせる必要がある。

5.2.1静的ソースコード分析

SlowMistチームは、オープンソースまたは商用コードスキャンツールを使用してコードの静的スキャンを行い、発見された問題をマニュアルで分析する。対応可能な言語は、C/C++、Golang、Rust、Java、Node.js、C#など、すべての主流言語をサポートしている。

SlowMistチームがチェックする静的コーディング問題には以下が含まれる:

  • 未使用の変数またはインポート - 宣言されているが使用されていない変数やインポートモジュール。
  • コード形式の問題 - インデントの不一致、行の長さが過剰など。
  • リソースが正しく閉じられていない - ファイルやデータベース接続などが閉じられていない。
  • マジックナンバー - 名前付き定数ではなく、数値定数を直接使用する。
  • 潜在的なセキュリティの脆弱性 - SQLインジェクション、XSSなどのセキュリティリスク。
  • 整数オーバーフロー - 計算結果が整数型の範囲を超え、予期しない動作を引き起こす可能性。
  • 浮動小数点精度の問題 - 浮動小数点数の表現制約による計算誤差。
  • デッドロック - マルチスレッドプログラミングで、スレッドが互いにリソースの解放を待ち、行き詰まる。
  • 競合状態 - マルチスレッドまたは並行環境で、プログラムの動作が制御できない実行順序に依存する。
  • メモリリーク - 動的に割り当てられたメモリが正しく解放されず、プログラムの使用メモリが増加し続ける。
  • 無限再帰 - 再帰関数に適切な終了条件がなく、スタックオーバーフローを引き起こす。
  • 文字列フォーマットの脆弱性 - 安全でない文字列フォーマットがセキュリティ問題を引き起こす可能性。
  • ゼロ除算エラー - 除算で除数がゼロかどうかをチェックしていない。
  • ヌルポインタの参照解除 - ヌルポインタが指すメモリ位置にアクセスしようとする。
  • バッファオーバーフロー - バッファの容量を超えるデータを書き込み、セキュリティの脆弱性を引き起こす可能性。
  • 型変換エラー - 不適切な型変換によるデータ損失や誤った結果。
  • ハードコードされたキーや機密情報 - キーや機密情報をコードに直接記述し、セキュリティリスクを引き起こす可能性。
  • コードの複雑度が高すぎる - 関数やメソッドが長すぎたり、論理分岐が多すぎる。
  • コードの重複 - 同一または類似のコード断片が複数箇所に存在する。
  • 命名の不規範 - 変数、関数、クラスなどの命名が不明瞭または一貫していない。
  • コメント不足または古い - 必要なコメントが不足している、またはコメントがコードと一致していない。
  • 高い結合度 - モジュール間の依存関係が複雑で、保守や拡張が困難。
  • 低い凝集度 - モジュールやクラスの機能が集中しておらず、責任が不明確。
  • 例外処理の不適切 - 過度に広範な例外をキャッチする、または例外を無視する。
  • ハードコーディング - コード内で定数値を直接使用し、設定パラメータを使用しない。
  • コード形式の不一致 - インデントやスペースの使用が統一されていない。
  • パフォーマンス問題 - 不要なループや頻繁なオブジェクト生成など。
  • テスト可能性の低さ - コードがユニットテストや統合テストを実施しにくい。
  • 設計原則の違反 - 単一責任原則やオープン・クローズ原則など。
  • 可読性の低さ - コード構造が混乱しており、理解しにくい。
  • 安全でない乱数生成 - セキュリティ用途に適さない乱数生成方法を使用。   
  • 時間と状態の問題 - TOCTOU(Time-of-check to time-of-use)脆弱性など。
  • パス操作の脆弱性 - ファイルパスが正しく検証されておらず、許可されていないファイルへのアクセスが可能。
  • 依存ライブラリの古さ - 導入したライブラリがメンテナンスされていなかったり、セキュリティの脆弱性が存在する。

5.2.2マニュアルコードレビュー

SlowMistチームはコードを一行ずつ確認し、コーディングの欠陥や論理エラーを探す。主に注目する脆弱性の範囲は以下を含む:

  • 暗号署名の安全性
  • アカウントとトランザクションの安全性
  • RPCの安全性
  • P2Pの安全性
  • コンセンサスの安全性
  • ビジネスロジックの安全性

5.3アプリケーションチェーンセキュリティ監査

SlowMistチームは「ホワイトボックス」戦略を採用し、プロジェクトに対して包括的なセキュリティテストを行い、一般的なコーディングの落とし穴を探す。例えば:

  • リプレイ脆弱性
  • 再順序付け脆弱性
  • 競合状態脆弱性
  • 権限制御脆弱性
  • ブロックデータ依存脆弱性
  • 関数の明示的な可視性
  • 算術精度偏差脆弱性
  • 悪意のあるイベントログ
  • 非同期呼び出しの安全性

現在、私たちがサポートしているのは以下の通り:

  1. Cosmos-SDKフレームワークに基づくブロックチェーン監査
  2. Substrateフレームワークに基づくブロックチェーン監査

6.ブロックチェーンアプリケーション監査

6.1 スマートコントラクトセキュリティ監査

6.2 その他のアプリケーション

  • ゼロ知識回路セキュリティ監査
  • クロスチェーンブリッジアプリケーションセキュリティ監査
  • ブラウザプラグインウォレットセキュリティ監査
  • 取引所セキュリティ監査

7.公開の監査報告書

参照先 Knowledge-Base

謝辞

Jackさんによる日本語版の記事の専門的な翻訳に心より感謝申し上げます。