時価総額: $2.8313T 0.35%
ボリューム(24時間): $138.9602B -22.27%
恐怖と貪欲の指数:

28 - 恐れ

  • 時価総額: $2.8313T 0.35%
  • ボリューム(24時間): $138.9602B -22.27%
  • 恐怖と貪欲の指数:
  • 時価総額: $2.8313T 0.35%
暗号
トピック
暗号化
ニュース
暗号造園
動画
トップクリプトスペディア

言語を選択する

言語を選択する

通貨の選択

暗号
トピック
暗号化
ニュース
暗号造園
動画

スマートコントラクトの再発攻撃とは何ですか?

A reentrancy attack exploits recursive function calls in smart contracts to drain funds, as seen in the infamous DAO hack.

2025/07/15 02:50

スマートコントラクトの基本を理解する

スマート契約は、コードに直接書かれた条件との自己実行契約です。 Ethereumのようなブロックチェーンプラットフォームで実行され、仲介者なしの当事者間の契約を自動的に実施します。これらの契約は展開されると不変です。つまり、コードに存在する脆弱性を展開後に変更することはできません。この不変性により、スマートコントラクトがライブになる前に、すべての可能なエクスプロイトから安全になることを保証することが重要になります。

そのようなエクスプロイトの1つは、暗号通貨のエコシステムの重大な損失の原因となっている再発攻撃です。この脆弱性がどのように機能するかを理解するには、スマートコントラクトが関数呼び出しを通じて外部アカウントやその他の契約とどのように相互作用するかを把握する必要があります。

再発攻撃とは何ですか?

悪意のある契約が、最初の実行が完了する前に、悪意のある契約が別の契約で脆弱な機能を繰り返し呼び出すと、再発攻撃が発生します。この再帰行動は、意図しない方法で資金を消耗させたり、状態変数を操作したりすることができます。

古典的な例には、エーテル転送を処理する契約が含まれます。関数が内部残高を更新する前にエーテルを外部アドレスに送信する場合、悪意のある契約は譲渡中に関数に再入力し、契約の資金を繰り返し排出できます。 2016年の悪名高いダオハックは、6,000万ドルのエーテル損失をもたらし、再発の脆弱性の結果でした。

再発攻撃は実際にどのように機能しますか?

再発攻撃のメカニズムをよりよく理解するには、次の単純化されたシナリオを検討してください。

  • 契約には、ユーザーが堆積したエーテルを引き出すことができるwithdraw()関数があります。
  • この関数は、最初にcall.value()を使用してユーザーにエーテルを送信し、ユーザーの残高をゼロに更新します。
  • 悪意のある契約はユーザーとしてそれ自体を登録し、エーテルをターゲット契約に預けます。
  • withdraw()呼び出すと、ターゲット契約はエーテル転送を開始します。
  • 転送中、悪意のある契約のフォールバック関数(自動的にトリガーされる)は、再びwithdraw()呼び出します。
  • 残高はまだ更新されていないため、契約は、ユーザーがまだ利用可能な資金を持っており、より多くのエーテルを送信していると考えています。
  • このループは、契約が排出されるかガスがなくなるまで続きます。

このプロセスは、契約内の運用順序を活用します。特に、州を更新する前にエーテルを送信します。

再発の脆弱性の種類

再発攻撃にはいくつかの形式があり、それぞれが契約ロジックのさまざまな側面を活用しています。

  • 単一機能の再発:これは、単一の関数に外部呼び出しと状態の変更の両方が含まれる場合に発生します。州が更新される前の外部呼び出し中に攻撃者が再突入をトリガーします。
  • クロス機能の再発:ここでは、複数の関数が状態変数を共有します。攻撃者は、最初の機能がまだ実行されている間に2番目の関数に再び入り、共有データを一貫して操作できません。
  • DeLegateCallの再発:この高度なバリアントは、 delegatecallメカニズムを使用して、ある契約から別の契約のコンテキストでコードを実行します。慎重に処理されない場合、これは予期しない再発シナリオにつながる可能性があります。

各タイプでは、搾取を防ぐために慎重な監査と特定の緩和戦略が必要です。

再発攻撃を防ぐ方法

再発攻撃の防止には、契約設計のベストプラクティスを採用し、セキュリティツールを活用することが含まれます。

  • Checks-effects-interactionsパターンを使用します。外部呼び出しを行う前に、常に契約の状態を更新してください。これにより、再入国が既存のバランスや状態を操作できないことが保証されます。
  • REANTRANCY GOURDSを実装する:OpenzePpelinのようなライブラリは、Mutex変数を使用してリエントラントコールをブロックするリンステンスガード修飾子を提供します。
  • 複雑な外部呼び出しを避ける:不明または信頼されていない契約との相互作用を最小限に抑えます。必要に応じて、コールバックが安全であり、任意のコードをトリガーしないようにしてください。
  • プッシュオーバープッシュペイメントを使用してください:ユーザーに資金をプッシュする代わりに、引き出しを開始させます。これにより、再帰的な排出のリスクが減ります。
  • 徹底的な監査を実施する:自動化されたツールと手動レビューを使用して、コードベースの潜在的な再発ベクターを検出します。

これらの戦略を適用することにより、開発者は再発攻撃を成功させる可能性を大幅に減らすことができます。

再発性のエクスプロイトの実世界の例

いくつかの有名な事件は、再発攻撃の壊滅的な影響を強調しています。

  • The Dao Hack(2016) :最も有名なケースには、スマートコントラクトが再帰的な撤退を許可した分散型の自律組織が含まれていました。攻撃者はこれを悪用して、数百万相当のエーテルを排出しました。
  • Fusion Network Attack(2021) :ハッカーは、プロトコルで機能を超えた再発バグを利用し、1,400万ドルの損失をもたらしました。
  • Warp Finance Hack(2021) :複数の再発ポイントが異なる機能で悪用され、攻撃者が800万ドル近くの資産を排出できるようになりました。

これらの例は、コーディングプラクティスを確保するための厳密なテストと遵守の重要性を強調しています。


よくある質問

Q:エチレオム以外のブロックチェーンでは、再発攻撃が発生する可能性がありますか?はい、再発攻撃は、外部呼び出しおよび変動状態でスマートコントラクトをサポートするブロックチェーンプラットフォームに影響を与える可能性があります。 Ethereumは最も顕著なケースを見てきましたが、Binance Smart Chain、Solanaなどに同様の脆弱性が存在します。

Q:すべての外部呼び出しは危険ですか?いいえ、しかし、外部呼び出しは注意して扱う必要があります。危険は、重要な状態変数を更新する前に作成されると発生します。適切なコーディングパターンとセーフガードは、このリスクを軽減できます。

Q:契約の脆弱性について契約をテストするにはどうすればよいですか? SlithersやSecurifyなどの静的分析ツールを使用したり、手動コード監査を実行したり、BrownieやHardhatなどのフレームワークを使用して攻撃シナリオをシミュレートできたりできます。再発ガードを使用し、安全な開発慣行に従うことも役立ちます。

Q:フラッシュローン攻撃と再発攻撃の違いは何ですか?どちらもDefiプロトコルを活用できますが、フラッシュローン攻撃は、担保なしで大量の資本を借用し、同じ取引内で返済することに依存しています。再発攻撃は、契約状態を操作するために再帰的に呼び出して関数に焦点を当てています。ただし、一部の攻撃は両方の手法を組み合わせて、より大きな影響を与えます。

免責事項:info@kdj.com

提供される情報は取引に関するアドバイスではありません。 kdj.com は、この記事で提供される情報に基づいて行われた投資に対して一切の責任を負いません。暗号通貨は変動性が高いため、十分な調査を行った上で慎重に投資することを強くお勧めします。

このウェブサイトで使用されているコンテンツが著作権を侵害していると思われる場合は、直ちに当社 (info@kdj.com) までご連絡ください。速やかに削除させていただきます。

関連知識

LayerZero コントラクトを使用してクロスチェーン メッセージを実行するにはどうすればよいですか?

LayerZero コントラクトを使用してクロスチェーン メッセージを実行するにはどうすればよいですか?

2026-01-18 13:19:39

LayerZero アーキテクチャを理解する1. LayerZero は、信頼できる仲介者やラップされた資産に依存せずにブロックチェーン間の通信を可能にする、軽量で許可のない相互運用性プロトコルとして動作します。 2. 各チェーンに展開されたウルトラ ライト ノード (ULN) を利用して、ブロック...

安全な署名検証のために EIP-712 を実装するにはどうすればよいですか?

安全な署名検証のために EIP-712 を実装するにはどうすればよいですか?

2026-01-20 22:20:26

EIP-712 の概要と主な目的1. EIP-712 は、イーサリアム アプリケーションにおける型付き構造化データのハッシュと署名の標準を定義します。 2. これにより、ウォレットは、署名リクエスト中に未加工の 16 進文字列の代わりに人間が判読できるドメインおよびメッセージ フィールドを表示できる...

新しい契約を交わしてエアドロップの資格を得るにはどうすればよいですか?

新しい契約を交わしてエアドロップの資格を得るにはどうすればよいですか?

2026-01-24 21:00:23

契約のやり取りの要件を理解する1. ほとんどのエアドロップ キャンペーンでは、Ethereum、Arbitrum、Base などのサポートされているブロックチェーンにデプロイされたスマート コントラクトとの直接対話が義務付けられています。 2. インタラクションには通常、dApp インターフェースに...

スマート コントラクトのセキュリティ アラートを監視するにはどうすればよいですか?

スマート コントラクトのセキュリティ アラートを監視するにはどうすればよいですか?

2026-01-21 07:59:57

オンチェーン監視ツール1. Etherscan や Blockscout などのブロックチェーン エクスプローラーを使用すると、コントラクト バイトコード、トランザクション ログ、内部呼び出しをリアルタイムで検査できます。 2. オンチェーンデータを信頼する前に、契約の検証ステータスを確認する必要が...

自動支払いのための契約を設定して資金を調達するにはどうすればよいですか?

自動支払いのための契約を設定して資金を調達するにはどうすればよいですか?

2026-01-26 08:59:35

スマートコントラクトの展開を理解する1. 開発者は、ガス効率とセキュリティ要件に基づいて、Ethereum、Polygon、Arbitrum などの互換性のあるブロックチェーン プラットフォームを選択する必要があります。 2. Solidity は、特に定期的な送金や条件付き送金の場合、支払い自動化...

OpenZeppelin コントラクトを使用して安全な dApp を構築するにはどうすればよいですか?

OpenZeppelin コントラクトを使用して安全な dApp を構築するにはどうすればよいですか?

2026-01-18 11:19:49

OpenZeppelin コントラクトの基礎を理解する1. OpenZeppelin Contracts は、イーサリアムおよび EVM 互換ブロックチェーン用に構築された、再利用可能なコミュニティ監査済みのスマート コントラクト コンポーネントのライブラリです。 2. ライブラリ内の各コントラクト...

LayerZero コントラクトを使用してクロスチェーン メッセージを実行するにはどうすればよいですか?

LayerZero コントラクトを使用してクロスチェーン メッセージを実行するにはどうすればよいですか?

2026-01-18 13:19:39

LayerZero アーキテクチャを理解する1. LayerZero は、信頼できる仲介者やラップされた資産に依存せずにブロックチェーン間の通信を可能にする、軽量で許可のない相互運用性プロトコルとして動作します。 2. 各チェーンに展開されたウルトラ ライト ノード (ULN) を利用して、ブロック...

安全な署名検証のために EIP-712 を実装するにはどうすればよいですか?

安全な署名検証のために EIP-712 を実装するにはどうすればよいですか?

2026-01-20 22:20:26

EIP-712 の概要と主な目的1. EIP-712 は、イーサリアム アプリケーションにおける型付き構造化データのハッシュと署名の標準を定義します。 2. これにより、ウォレットは、署名リクエスト中に未加工の 16 進文字列の代わりに人間が判読できるドメインおよびメッセージ フィールドを表示できる...

新しい契約を交わしてエアドロップの資格を得るにはどうすればよいですか?

新しい契約を交わしてエアドロップの資格を得るにはどうすればよいですか?

2026-01-24 21:00:23

契約のやり取りの要件を理解する1. ほとんどのエアドロップ キャンペーンでは、Ethereum、Arbitrum、Base などのサポートされているブロックチェーンにデプロイされたスマート コントラクトとの直接対話が義務付けられています。 2. インタラクションには通常、dApp インターフェースに...

スマート コントラクトのセキュリティ アラートを監視するにはどうすればよいですか?

スマート コントラクトのセキュリティ アラートを監視するにはどうすればよいですか?

2026-01-21 07:59:57

オンチェーン監視ツール1. Etherscan や Blockscout などのブロックチェーン エクスプローラーを使用すると、コントラクト バイトコード、トランザクション ログ、内部呼び出しをリアルタイムで検査できます。 2. オンチェーンデータを信頼する前に、契約の検証ステータスを確認する必要が...

自動支払いのための契約を設定して資金を調達するにはどうすればよいですか?

自動支払いのための契約を設定して資金を調達するにはどうすればよいですか?

2026-01-26 08:59:35

スマートコントラクトの展開を理解する1. 開発者は、ガス効率とセキュリティ要件に基づいて、Ethereum、Polygon、Arbitrum などの互換性のあるブロックチェーン プラットフォームを選択する必要があります。 2. Solidity は、特に定期的な送金や条件付き送金の場合、支払い自動化...

OpenZeppelin コントラクトを使用して安全な dApp を構築するにはどうすればよいですか?

OpenZeppelin コントラクトを使用して安全な dApp を構築するにはどうすればよいですか?

2026-01-18 11:19:49

OpenZeppelin コントラクトの基礎を理解する1. OpenZeppelin Contracts は、イーサリアムおよび EVM 互換ブロックチェーン用に構築された、再利用可能なコミュニティ監査済みのスマート コントラクト コンポーネントのライブラリです。 2. ライブラリ内の各コントラクト...

すべての記事を見る

User not found or password invalid

Your input is correct