OWASP スマートコントラクト Top 10 2025 が公開 - 新しい内容は?
要約
OWASP (Open Web Application Security Project) は、急速に進化するWeb3環境におけるスマートコントラクトの最も重要な脆弱性を示した「OWASP スマートコントラクト Top 10 2025」を公開しました。この文書は、セキュリティを維持し、悪用から保護するための重要なリソースとなります。
詳細分析
主なポイント
- OWASP スマートコントラクト Top 10 (2025) は、10の主要な脆弱性領域を分類しており、開発者はこれらに注意を払う必要があります。
- 2023年版からの変更点として、再入力攻撃(Reentrancy Attacks)、フラッシュローン攻撃(Flash Loan Attacks)、アクセス制御の脆弱性が強調されています。
- 2024年のデータによると、これらの脆弱性による総損失は14.2億ドルに上りました。
社会的影響
- スマートコントラクトの脆弱性は、ブロックチェーンエコシステムにおける重大な問題となっています。
- これらの脆弱性の悪用により、ユーザーの資金が損失する可能性があり、ブロックチェーン技術に対する信頼が損なわれる恐れがあります。
- セキュリティ対策の強化は、Web3の健全な発展に不可欠です。
編集長の意見
OWASP スマートコントラクト Top 10 (2025)は、ブロックチェーン開発者にとって非常に重要な指針となります。この文書は、最新の脅威と脆弱性を網羅しており、開発者がスマートコントラクトのセキュリティを強化するための具体的な対策を示しています。特に、アクセス制御、価格オラクルの操作、再入力攻撃などの脆弱性への対策が重要です。開発者は、この文書を参考に、セキュリティ対策を徹底的に行う必要があります。また、ブロックチェーンエコシステム全体としても、この問題に取り組む必要があり、セキュリティ意識の向上と適切な対策が求められます。
本日は、スマートコントラクトとは?という解説と脅威トップ10について深掘りしていきます。
解説
まず、今日の解説に入る前に、ここで、スマートコントラクトについて見ておきましょう。
スマートコントラクトとは?
スマートコントラクトとは
スマートコントラクトは、ブロックチェーン上で動作する自己実行型のプログラムコードです。従来の契約では人の介入や仲介者が必要でしたが、スマートコントラクトでは事前に定義された条件が満たされると、自動的に契約内容が実行される革新的な仕組みを持っています。
基本的な特徴
スマートコントラクトには、以下の4つの重要な特徴があります:
1. 自動実行性
- プログラムされた条件が満たされると、人の介入を必要とせず自動的に実行
- 条件分岐による明確な実行ルールの設定が可能
2. 不変性
- 一度デプロイされたコードは変更不可
- バグ修正には新規コントラクトのデプロイが必要
3. 透明性
- すべてのコードと実行結果がブロックチェーン上で公開
- 誰でも検証可能な状態を維持
4. 分散性
- 中央管理者が不要
- ネットワーク上の全ノードでの実行・検証
動作の仕組み
スマートコントラクトの基本的な動作フローは以下の通りです:
実装例:シンプルな取引コントラクト
どういう感じのものか?プログラムのコードで例を書いてみます。
contract Trade {
mapping(address => uint256) public balances;
// 入金処理
function deposit() public payable {
balances[msg.sender] += msg.value;
}
// 送金処理
function transfer(address to, uint256 amount) public {
require(balances[msg.sender] >= amount, "残高不足");
balances[msg.sender] -= amount;
balances[to] += amount;
}
}
主な用途と応用分野
スマートコントラクトは、以下のような幅広い分野で活用されています。
1. 金融サービス(DeFi)
- 自動取引システム
- レンディングプラットフォーム
- デリバティブ取引
2. デジタル資産管理
- ERC20トークンの発行・管理
- NFT(ERC721)の作成・取引
- デジタル資産の所有権管理
3. 組織運営(DAO)
- 分散型自律組織の運営
- 投票システムの実装
- 報酬分配の自動化
開発時の重要な考慮点
1. パフォーマンス最適化
// ガス最適化の例
uint256 length = array.length; // 長さをキャッシュ
for (uint i = 0; i < length; i++) {
// 処理
}
2. セキュリティ対策
- 再入攻撃からの保護
- オーバーフロー対策
- アクセス制御の実装
まとめ
スマートコントラクトは、ブロックチェーン技術を基盤とした革新的な契約実行システムです。適切に実装することで、従来のシステムでは実現できなかった透明で効率的な取引や契約の自動実行が可能となります。
特に重要なのは:
- 自動実行による効率化
- コードの不変性による信頼性確保
- 透明性による検証可能性
- 分散システムによる堅牢性
これらの特徴により、スマートコントラクトは今後のデジタル社会における重要なインフラストラクチャーとして期待されています。
このスマートコントラクトのセキュリティについてOWASPがチョイスしたトップ10が発表されました。 内容を見ていきましょう。
スマートコントラクトのセキュリティ:OWASPトップ10 (2025) とその進化
はじめに
ブロックチェーン技術と分散型アプリケーション(dApps)の台頭により、スマートコントラクトの利用が急速に拡大しています。スマートコントラクトは、合意形成や取引の自動化を可能にする強力なツールですが、同時にセキュリティリスクも抱えています。悪意のある攻撃者は、スマートコントラクトの脆弱性を突いて資金を盗んだり、システムを混乱させたりする可能性があります。
スマートコントラクトのセキュリティ確保は、Web3エコシステムの健全な発展に不可欠です。 開発者やセキュリティチームは、潜在的な脅威を理解し、適切な対策を講じる必要があります。
OWASP(Open Web Application Security Project) は、アプリケーションセキュリティの向上を目的とした非営利団体であり、Webアプリケーションの脆弱性に関する情報を提供する「OWASP Top 10」で広く知られています。OWASPは、スマートコントラクトのセキュリティにも取り組み、「OWASP Smart Contract Top 10」 を公開しています。これは、スマートコントラクトで発見された最も重大な脆弱性トップ10をまとめたもので、開発者やセキュリティチームにとって重要なリソースとなっています。
OWASP Smart Contract Top 10 (2025) の概要とその変更点、そして各脆弱性について詳しく解説します。さらに、SolidityScanのWeb3HackHub (2024) のデータなどを基に、近年の攻撃トレンドと対策についても考察します。
OWASP Smart Contract Top 10 (2025) の概要
OWASP Smart Contract Top 10 (2025) は、2023年版 からいくつかの変更が加えられ、最新の脅威と脆弱性を反映しています。 2025年版のリストは以下の通りです。
- SC01:2025 アクセスコントロールの脆弱性: 権限のないアクセスや変更を許してしまう欠陥
- SC02:2025 価格オラクルの操作: コントラクトロジックを操作するために外部データの取得における脆弱性を悪用する攻撃
- SC03:2025 ロジックエラー: コントラクトのパフォーマンスに影響を与える、意図した機能からの逸脱
- SC04:2025 入力値検証の不足: 不適切なチェックにより、有害な入力がコントラクトの動作を破壊することを許してしまう
- SC05:2025 再入攻撃: 完了前に関数を再入することで、状態の変更や資金の損失を引き起こす攻撃
- SC06:2025 未チェックの外部呼び出し: 外部呼び出しの結果の検証に失敗すると、意図しない結果が生じる可能性がある
- SC07:2025 フラッシュローン攻撃: 単一トランザクションでの複数のアクションを悪用し、流動性を枯渇させる攻撃
- SC08:2025 整数のオーバーフローとアンダーフロー: 固定サイズの整数の制限による算術エラーが、深刻な脆弱性につながる
- SC09:2025 安全でない乱数生成: 予測可能な乱数生成が、機密性の高い機能の悪用に繋がる
- SC10:2025 サービス拒否 (DoS) 攻撃: リソースを枯渇させ、コントラクトを機能不全にする脆弱性を悪用する攻撃
2023年版からの変更点
2025年版では、近年の攻撃データとトレンドに基づいて、脆弱性の再分類と追加が行われました。
- 再入攻撃 は、注目度の高い侵害で蔓延しているため、強調されています。
- フラッシュローン攻撃 は、DeFi(分散型金融)エコシステムにおける重大な脅威として認識されています。
- アクセスコントロールの脆弱性 は、過去1年間で注目すべき経済的影響が記録されており、依然として最前線にあります。
各脆弱性の詳細
以下に、各脆弱性について詳しく解説します。
SC01:2025 アクセスコントロールの脆弱性
アクセスコントロールの脆弱性とは、権限のないユーザーがコントラクトのデータや機能にアクセスしたり、変更したりすることを許してしまう欠陥です。 コードが適切な権限チェックを実施していない場合に発生し、深刻なセキュリティ侵害につながる可能性があります。
例えば、特定のユーザーだけが実行できるはずの操作を、誰でも実行できてしまうようなケースが考えられます。
SC02:2025 価格オラクルの操作
価格オラクルは、スマートコントラクトに外部データ(例:暗号資産の価格)を提供するサービスです。価格オラクルの操作とは、攻撃者がオラクルのフィードを改ざんしたり、制御したりすることで、コントラクトのロジックに影響を与え、経済的損失やシステムの不安定化を引き起こす攻撃です。
例えば、攻撃者がオラクルの価格情報を操作することで、有利な価格で資産を取引したり、不正な清算を引き起こしたりする可能性があります。
SC03:2025 ロジックエラー
ロジックエラー(ビジネスロジックの脆弱性)とは、コントラクトの動作が意図した機能から逸脱している場合に発生するエラーです。 報酬の不適切な分配、トークンの発行に関する問題、融資/借入ロジックの欠陥などが例として挙げられます。
例えば、トークンの分配ロジックにエラーがあると、特定のユーザーに過剰なトークンが分配されたり、トークンの総供給量が意図した値を超えてしまう可能性があります。
SC04:2025 入力値検証の不足
入力値検証とは、ユーザーからの入力値が適切な形式と範囲であることを確認するプロセスです。入力値検証の不足は、攻撃者が有害な入力値や予期しない入力値を提供することで、コントラクトのロジックを破壊したり、予期しない動作を引き起こしたりする可能性がある脆弱性です。
例えば、数値入力を受け取る関数で、入力値の範囲チェックを行っていない場合、攻撃者が極端に大きな値や負の値を入力することで、オーバーフローやアンダーフローを引き起こし、コントラクトの動作を不安定化させる可能性があります。
SC05:2025 再入攻撃
再入攻撃とは、脆弱な関数が実行を完了する前に、攻撃者が外部コントラクトから再入することを悪用する攻撃です。 これにより、状態の変更や資金の損失を引き起こす可能性があります。
例えば、攻撃者が再入可能な出金関数を持つコントラクトを攻撃する場合、出金処理中に再度出金関数を呼び出すことで、複数回の出金を実行し、コントラクトの資金を盗む可能性があります。
SC06:2025 未チェックの外部呼び出し
外部呼び出しとは、あるコントラクトから別のコントラクトの関数を呼び出すことです。未チェックの外部呼び出しとは、外部関数呼び出しの成功を検証せずに、呼び出し元のコントラクトが処理を続行してしまう脆弱性です。 呼び出されたコントラクトが失敗した場合、呼び出し元のコントラクトは誤って処理を進めてしまい、整合性と機能が損なわれるリスクがあります。
例えば、外部コントラクトへのトークン送信処理で、送信が失敗したにも関わらず、呼び出し元のコントラクトが処理を続行してしまう場合、トークンの消失や二重支払いなどの問題が発生する可能性があります。
SC07:2025 フラッシュローン攻撃
フラッシュローンとは、担保なしで多額の資金を借りることができるDeFiの機能です。フラッシュローン攻撃とは、攻撃者が単一トランザクション内で複数の操作を実行することで、プロトコルを操作する攻撃です。 これらの攻撃は、多くの場合、流動性の枯渇、価格の改ざん、ビジネスロジックの悪用につながります。
例えば、攻撃者がフラッシュローンで多額の資金を借り、それを利用して特定のトークンの価格を操作し、その後、操作された価格で有利な取引を行うことで利益を得る可能性があります。
SC08:2025 整数のオーバーフローとアンダーフロー
整数オーバーフローは、算術演算の結果が、変数が格納できる最大値を超えてしまうエラーです。整数アンダーフローは、算術演算の結果が、変数が格納できる最小値を下回ってしまうエラーです。 これらのエラーは、固定サイズの整数の制限によって発生し、誤った計算やトークンの盗難などの深刻な脆弱性につながる可能性があります。符号なし整数はアンダーフロー時に最大値にラップアラウンドし、符号付き整数は極値間で反転します。
例えば、トークンの残高を管理する変数でオーバーフローが発生した場合、攻撃者は実際には保有していないトークンを使用できるようになってしまう可能性があります。
SC09:2025 安全でない乱数生成
ブロックチェーンネットワークは決定論的な性質を持つため、安全な乱数を生成することは困難です。 予測可能または操作可能な乱数は、宝くじ、トークン配布、その他の乱数に依存する機能において悪用される可能性があります。
例えば、攻撃者が乱数生成の仕組みを予測できる場合、宝くじの結果を操作したり、トークン配布を有利に進めたりする可能性があります。
SC10:2025 サービス拒否 (DoS) 攻撃
DoS攻撃とは、コントラクトのリソースを枯渇させ、機能不全にする脆弱性を悪用する攻撃です。 ループや関数呼び出しにおける過剰なガス消費など、コントラクトの通常の動作を妨害するように設計された攻撃が例として挙げられます。
例えば、攻撃者が大量のトランザクションを送りつけることで、コントラクトの処理能力を超過させ、他のユーザーがコントラクトを利用できないようにする可能性があります。
近年の攻撃トレンドと対策
SolidityScanのWeb3HackHub (2024) のデータによると、2024年には149件のセキュリティインシデントが発生し、合計14.2億ドルの損失が発生しました。 影響の大きかった脆弱性カテゴリーは以下の通りです。
- アクセスコントロールの脆弱性: 9億5,320万ドルの損失
- ロジックエラー: 6,380万ドルの損失
- 再入攻撃: 3,570万ドルの損失
- フラッシュローン攻撃: 3,380万ドルの損失
- 入力値検証の不足: 1,460万ドルの損失
- 価格オラクルの操作: 880万ドルの損失
- 未チェックの外部呼び出し: 55万700ドルの損失
これらのデータは、アクセスコントロールの脆弱性、ロジックエラー、再入攻撃が、近年特に深刻な脅威となっていることを示しています。
OWASP Smart Contract Top 10 (2025) は、これらのトレンドを反映しており、開発者やセキュリティチームは、これらの脆弱性に対する対策を優先的に実施する必要があります。
具体的な対策としては、以下の点が挙げられます。
- アクセスコントロールの適切な実装: 権限のないユーザーが重要な操作を実行できないように、適切な権限チェックを実装する。
- 価格オラクルのセキュリティ強化: 信頼できるオラクルプロバイダーを選択し、複数のオラクルを使用するなどして、単一障害点のリスクを軽減する。
- ロジックの徹底的なテスト: さまざまなシナリオを想定したテストを実施し、ロジックエラーを早期に発見する。
- 入力値検証の実施: すべての入力値に対して、適切な形式と範囲のチェックを行う。
- 再入攻撃への対策: 再入ガードなどの対策を講じることで、再入攻撃を防ぐ。
- 外部呼び出しの成功確認: 外部関数呼び出しの成功を必ず確認し、失敗した場合は適切なエラー処理を行う。
- フラッシュローン攻撃への対策: フラッシュローンを利用した攻撃を防ぐために、トランザクションの順序を制御するなどの対策を講じる。
- 整数のオーバーフローとアンダーフローへの対策: SafeMathライブラリなどを使用して、オーバーフローやアンダーフローが発生しないようにする。
- 安全な乱数生成: チェーンリンクVRF(Verifiable Random Function)など、安全な乱数生成サービスを利用する。
- DoS攻撃への対策: ガス制限などを設定することで、DoS攻撃によるリソース枯渇を防ぐ。
まとめ
スマートコントラクトは、Web3エコシステムにおいて重要な役割を果たしていますが、同時にセキュリティリスクも抱えています。OWASP Smart Contract Top 10 (2025) は、開発者やセキュリティチームがスマートコントラクトのセキュリティリスクを理解し、適切な対策を講じるための重要なリソースです。
スマートコントラクトのセキュリティ確保は、Web3エコシステムの持続的な発展に不可欠です。 開発者とセキュリティチームは協力して、潜在的な脅威からスマートコントラクトを保護し、ユーザーの信頼を築く必要があります。
OWASP Smart Contract Top 10 (2025) を活用し、最新の脅威と対策を理解することで、より安全なスマートコントラクトを開発し、安全で豊かなWeb3世界を築いていってください。
背景情報
- OWASP スマートコントラクト Top 10 (2025) は、ブロックチェーン空間における最新の脅威と脆弱性を反映するように進化しています。
- この文書は、Web3エコシステムの開発者にとって重要なリソースであり、一般的な脆弱性に対する徹底的なテストとセキュリティ対策の必要性を強調しています。
- OWASP は、SolidityScanのWeb3HackHubなどの情報源から得られたデータに基づいて、この文書を作成しています。