-
Bitcoin
$85,089.5409
0.08% -
Ethereum
$1,609.7762
0.61% -
Tether USDt
$0.9999
0.01% -
XRP
$2.0801
0.00% -
BNB
$594.5128
0.36% -
Solana
$140.8275
2.01% -
USDC
$0.9999
0.00% -
Dogecoin
$0.1588
0.01% -
TRON
$0.2429
0.62% -
Cardano
$0.6305
0.07% -
UNUS SED LEO
$9.3460
-0.86% -
Chainlink
$13.0375
1.51% -
Avalanche
$19.8557
3.34% -
Stellar
$0.2460
0.50% -
Toncoin
$3.0061
0.55% -
Shiba Inu
$0.0...01239
1.55% -
Sui
$2.1518
0.75% -
Hedera
$0.1656
-0.85% -
Bitcoin Cash
$337.8261
0.20% -
Polkadot
$3.9140
5.06% -
Hyperliquid
$18.1275
0.94% -
Litecoin
$76.7050
0.59% -
Bitget Token
$4.5890
3.20% -
Dai
$1.0000
0.01% -
Ethena USDe
$0.9992
0.02% -
Pi
$0.6406
-1.00% -
Monero
$216.5682
1.59% -
Uniswap
$5.3181
1.47% -
Pepe
$0.0...07477
2.95% -
OKB
$50.8707
-0.20%
再発攻撃とは何ですか?この脆弱性を防ぐ方法は?
再発攻撃は、スマートコントラクトの欠陥を活用し、状態解決前に繰り返し機能呼び出しを可能にし、不正アクションにつながります。チェック効果の相互作用パターンで防止します。
2025/04/12 00:35

再発攻撃は、特にイーサリアムブロックチェーンのスマートコントラクトで発生する可能性のあるセキュリティ脆弱性の一種です。この攻撃は、攻撃者が最初の呼び出しが完全に解決される前に関数を繰り返し呼び出すことを可能にする契約のロジックの欠陥を活用します。これにより、不正な撤退またはその他の悪意のある行動につながる可能性があります。この記事では、再発攻撃のメカニズムを調査し、実世界の例を調べ、スマートコントラクトのこの脆弱性を防ぐ方法に関する詳細なガイダンスを提供します。
再発攻撃を理解する
再発攻撃は、スマートコントラクトが独自の状態が変更される前に外部契約を呼び出すときに発生します。これにより、外部契約が元の契約に再び入り、その状態を操作する機会の窓を作成できます。攻撃には通常、被害者契約が残高を更新する前にwithdraw()
などの関数を繰り返し呼び出すことにより、被害者契約から資金を排出する悪意のある契約が含まれます。
説明するために、ユーザーが資金を預け入れて引き出すことができる契約の簡単な例を検討してください。
contract Vulnerable {
mapping(address => uint) public balances; function deposit() public payable { balances[msg.sender] += msg.value; } function withdraw(uint amount) public { require(balances[msg.sender] >= amount, 'Insufficient balance'); (bool success, ) = msg.sender.call{value: amount}(''); require(success, 'Transfer failed'); balances[msg.sender] -= amount; }
}
この例では、 withdraw
関数は最初にユーザーのバランスが十分であるかどうかを確認し、次にユーザーに資金を送信しようとし、最終的にユーザーの残高を更新します。脆弱性は、 msg.sender.call
への外部呼び出しの後まで、 balances[msg.sender]
が更新されないという事実にあります。 msg.sender
悪意のある契約である場合、残高が更新される前にwithdraw
機能に再入力でき、残高がゼロに設定される前に複数の引き出しが可能になります。
再発攻撃の実際の例
2016年のDAOハッキング中に最も悪名高い再発攻撃の1つが発生しました。DAO(分散型自律組織)は、ユーザーがプロジェクトに投資できるようにするイーサリアムブロックチェーンのスマート契約でした。契約には、上記の契約と同様の脆弱性があり、攻撃者はDAOから約360万人のETHを排出することができました。
もう1つの例は、2017年のパリティウォレットハックです。イーサリアムで人気のあるマルチシグネチャウォレットであるパリティウォレットは、再発の脆弱性のために悪用されました。攻撃者は複数のウォレットから資金を排出することができ、その結果、ユーザーに大きな損失をもたらしました。
再発攻撃を防ぐ方法
再発攻撃を防ぐには、スマートコントラクトの慎重な設計と実装が必要です。この脆弱性を軽減するためのいくつかの戦略を以下に示します。
Checks-effects-interactionsパターンを使用します
Checks-effects-interactionsパターンは、安全なスマートコントラクトを作成するためのベストプラクティスです。このパターンは、外部呼び出しが実行される前にすべての状態の変更が行われることを保証します。 withdraw
機能のコンテキストでは、これは、資金を送信する前にユーザーの残高を更新することを意味します。
contract Secure {
mapping(address => uint) public balances; function deposit() public payable { balances[msg.sender] += msg.value; } function withdraw(uint amount) public { require(balances[msg.sender] >= amount, 'Insufficient balance'); balances[msg.sender] -= amount; (bool success, ) = msg.sender.call{value: amount}(''); require(success, 'Transfer failed'); }
}
外部呼び出しを行う前に残高を更新することにより、契約は、再発が発生する前にユーザーの残高がゼロに正しく設定されることを保証します。
引き出しパターンを使用します
再発攻撃を防ぐ別の効果的な方法は、離脱パターンを使用することです。契約はユーザーに直接資金を送信する代わりに、引き出し額を保存し、ユーザーが後で資金を引くことができます。このアプローチは、引き出しプロセス中の外部呼び出しの必要性を排除します。
contract WithdrawalPattern {
mapping(address => uint) public balances; mapping(address => uint) public withdrawalPending; function deposit() public payable { balances[msg.sender] += msg.value; } function requestWithdrawal(uint amount) public { require(balances[msg.sender] >= amount, 'Insufficient balance'); balances[msg.sender] -= amount; withdrawalPending[msg.sender] += amount; } function withdraw() public { uint amount = withdrawalPending[msg.sender]; require(amount > 0, 'No pending withdrawal'); withdrawalPending[msg.sender] = 0; (bool success, ) = msg.sender.call{value: amount}(''); require(success, 'Transfer failed'); }
}
この例では、 requestWithdrawal
関数はユーザーの残高を更新し、引き出し額をwithdrawalPending
額を保存します。 withdraw
機能は、再発のリスクなしに資金をユーザーに送信します。
再発ガードを実装します
再発警備員は、再発攻撃を防ぐためのもう1つのテクニックです。これらのガードは、状態変数を使用して、関数が現在実行されているかどうかを追跡します。関数が再入力された場合、ガードはさらなる実行を防ぎます。
contract ReentrancyGuard {
bool private _notEntered; constructor() { _notEntered = true; } modifier nonReentrant() { require(_notEntered, 'ReentrancyGuard: reentrant call'); _notEntered = false; _; _notEntered = true; } function withdraw(uint amount) public nonReentrant { require(balances[msg.sender] >= amount, 'Insufficient balance'); balances[msg.sender] -= amount; (bool success, ) = msg.sender.call{value: amount}(''); require(success, 'Transfer failed'); }
}
nonReentrant
修飾子は、 withdraw
機能がまだ実行されている間に再び入ることができないことを保証します。
再発の脆弱性のテストと監査
予防措置の実施に加えて、再発脆弱性についてスマート契約を徹底的にテストおよび監査することが重要です。従うべきいくつかの手順は次のとおりです。
- ユニットテスト:再発攻撃をシミュレートするユニットテストを作成して、そのような条件下で契約が正しく動作するようにします。
- 静的分析: MythrilやSlitherなどのツールを使用して、コードの潜在的な再発性の脆弱性を自動的に検出します。
- 手動監査:スマートコントラクト監査人が経験を積んだことで、潜在的な再発の問題についてコードを確認してください。手動監査は、自動化されたツールが見逃す可能性のある複雑な脆弱性を明らかにする可能性があります。
スマート契約開発のためのベストプラクティス
再発攻撃のリスクをさらに減らすために、次のベストプラクティスを検討してください。
- 契約をシンプルに保つ:複雑な契約には脆弱性が含まれる可能性が高くなります。契約を可能な限りシンプルで簡単に保ちます。
- 確立されたライブラリを使用:一般的な契約パターンの安全な実装を提供するOpenzeppelinなどの、監査されたライブラリやフレームワークを活用します。
- 定期的な更新:最新のセキュリティベストプラクティスについて情報を提供し、それに応じて契約を更新してください。
よくある質問
Q:Ethereum以外の他のブロックチェーンプラットフォームでは、再発攻撃が発生する可能性がありますか?
A:再発攻撃は、スマートコントラクトが広く使用されているため、イーサリアムに最も一般的に関連付けられていますが、Binance Smart ChainやSolanaなどのスマートコントラクトをサポートする他のブロックチェーンプラットフォームでも同様の脆弱性が発生する可能性があります。再発攻撃を防止する原則は、異なるプラットフォームで同じままです。
Q:再発の脆弱性を検出するために特別に設計されたツールはありますか?
A:はい、いくつかのツールは、スマートコントラクトの再発性の脆弱性を検出するように設計されています。 MythrilとSlitherは、潜在的な再発性の問題を特定できる人気のある静的分析ツールです。さらに、 Echidnaは、自動化されたテストケース生成を通じて再発の脆弱性をテストするために使用できるプロパティベースのテストツールです。
Q:セキュリティの専門家でない場合、スマートコントラクトが再発攻撃に対して安全であることを確認するにはどうすればよいですか?
A:セキュリティの専門家でない場合は、プロのスマート契約監査人にコードを確認するために関与することを強くお勧めします。さらに、 Openzeppelinなどの確立されたライブラリを使用し、チェック効果のインタラクションパターンなどのベストプラクティスに従うことで、再発の脆弱性のリスクを大幅に減らすことができます。スマートコントラクトのセキュリティに関する知識を定期的に更新し、コミュニティディスカッションに参加することは、最新のセキュリティ慣行についての情報を提供することもできます。
免責事項:info@kdj.com
提供される情報は取引に関するアドバイスではありません。 kdj.com は、この記事で提供される情報に基づいて行われた投資に対して一切の責任を負いません。暗号通貨は変動性が高いため、十分な調査を行った上で慎重に投資することを強くお勧めします。
このウェブサイトで使用されているコンテンツが著作権を侵害していると思われる場合は、直ちに当社 (info@kdj.com) までご連絡ください。速やかに削除させていただきます。
- ビットコインのジェットコースターにもかかわらず、この会社はなんとかオッズを無視しました
- 2025-04-20 14:15:15
- 魔法のトークンの価格の急増、NFT、ゲーム、メタバースプロジェクトの宝物のエコシステムに動力を供給する
- 2025-04-20 14:15:15
- DominickCicaleはスクリプトをひっくり返し、アンダーワールドをブロックチェーンと交換します
- 2025-04-20 14:10:13
- 現実世界資産(RWAS)に焦点を当てたクロスチェーンプラットフォームであるKalpは、SFTプロトコルとの戦略的パートナーシップを発表しました。
- 2025-04-20 14:10:13
- Pump.Fun:ミームコイン用のランチパッド
- 2025-04-20 14:05:14
- ビットコイン(BTC)は、大規模な所有者が購入を強化したため、強気の勢いで2025四半期に入りました
- 2025-04-20 14:05:14
関連知識

ブロックチェーン内のクロスチェーンブリッジの機能
2025-04-19 10:01:07
ブロックチェーン内のクロスチェーンブリッジの機能は、暗号通貨エコシステム内の極めて重要なトピックです。これらのツールは、さまざまなブロックチェーンネットワーク全体で資産とデータのシームレスな転送を可能にするためです。この記事では、クロスチェーンブリッジのさまざまな側面を掘り下げ、その重要性、どのように機能するか、および彼らが提示する利点と課題を説明しています。クロスチェーンブリッジの理解クロスチェーンブリッジは、異なるブロックチェーンネットワーク間の資産と情報の転送を促進するプロトコルです。これらのブリッジは、ブロックチェーンの相互運用性を高めるために不可欠であり、ユーザーは単一のエコシステムに限定されることなく、複数のネットワークのユニークな機能を活用できます。たとえば、ユーザーは、トークンをEth...

LightningネットワークがBitcoin効率を改善する方法
2025-04-17 20:56:21
Lightningネットワークは、Bitcoinエコシステムの大幅な進歩を表しており、トランザクションの速度とコストに関連する最も差し迫った問題のいくつかに対処することを目指しています。オフチェーントランザクションを有効にすることにより、LightningネットワークはBitcoinの効率を大幅に改善し、より速く、より安価なトランザクションを可能にします。この記事では、Lightning Networkがこれらの改善とBitcoinの全体的な使いやすさに与える影響をどのように達成するかについて説明します。 Lightningネットワークの理解Lightningネットワークは、Bitcoinブロックチェーンの上に構築された2層スケーリングソリューションです。その主な目的は、参加ノード間の即時の低コストの...

暗号通貨の市場価値ランキングベース
2025-04-20 05:08:04
暗号通貨での市場価値のランキングは、投資家と愛好家が異なるデジタル資産の相対的な規模と重要性を評価するために使用する重要な指標です。このランキングは、主に各暗号通貨の総時価総額に基づいています。これは、暗号通貨の単一単位の現在の価格を循環中の単位の総数を掛けることによって計算されます。ただし、暗号通貨の市場価値ランキングを決定する上で、他のいくつかの要因も重要な役割を果たしています。この記事では、暗号通貨の世界での市場価値ランキングの基礎を探り、これらのランキングに影響を与える主要なコンポーネントと考慮事項を掘り下げます。総時価総額定義と計算暗号通貨の総時価総額は、市場価値のランキングを決定する上で最も基本的な要因です。暗号通貨の単位単位の現在の価格を取得し、現在流通中のユニットの総数を掛けることによ...

暗号通貨交換のKYCプロセスの分析
2025-04-17 17:07:37
Know Your Customer(KYC)プロセスは、暗号通貨交換の運用における重要なコンポーネントです。詐欺、マネーロンダリング、その他の違法行為を防ぐための規制措置として機能します。 KYC手順は、ユーザーのIDを検証し、財務規制の遵守を確保するように設計されています。この記事では、暗号通貨取引所で採用されているKYCプロセスのさまざまな側面を掘り下げ、その実装、課題、および意味の包括的な分析を提供します。暗号通貨交換におけるKYCの重要性暗号通貨交換におけるKYCの主な目的は、プラットフォームの完全性とセキュリティを維持することです。ユーザーの身元を確認することにより、交換は不正行為に関連するリスクを軽減できます。 KYCはまた、マネーロンダリングアンチマネーロンダリング(AML)の法律やそ...

Stablecoin USDTの背後にある動作メカニズム
2025-04-20 08:08:09
Tetherとしても知られるStablecoin USDTは、通常は米ドルである予備資産に固定することにより、安定した価値を維持するように設計された暗号通貨です。 USDTの背後にある運用メカニズムを理解することは、暗号通貨市場に興味がある人にとっては、取引と流動性に重要な役割を果たすため重要です。この記事では、その作成、安定性メカニズム、暗号生態系で果たす役割など、USDTの運用のさまざまな側面を掘り下げます。 USDTの作成と発行USDTは、循環中のUSDTの総額に等しい埋蔵量を保持すると主張するTether Limitedによって作成および発行されています。 USDTを発行するプロセスには、次の手順が含まれます。予約の支援:Tether Limitedは、主に米ドルで予備を維持し、発行された各U...

スマートコントラクトはイーサリアムでどのように定義されていますか
2025-04-19 22:42:43
ブロックチェーンテクノロジーの領域では、 Ethereumはプログラム可能な契約を実行するための革新的なアプローチで際立っています。スマートコントラクトは、このエコシステムの重要な要素であり、分散型アプリケーション(DAPP)が自律的かつ安全に機能することを可能にします。この記事では、Ethereumネットワーク内のスマートコントラクトの定義を掘り下げ、コンポーネント、機能性、および重要性を調査します。スマートコントラクトとは何ですか? Ethereumのスマート契約は、コードに直接書かれた契約の条件との自己執行契約です。 Ethereum Blockchainで実行される分散型コンピューティングプラットフォームであるEthereum Virtual Machine(EVM)で動作します。スマートコン...

ブロックチェーン内のクロスチェーンブリッジの機能
2025-04-19 10:01:07
ブロックチェーン内のクロスチェーンブリッジの機能は、暗号通貨エコシステム内の極めて重要なトピックです。これらのツールは、さまざまなブロックチェーンネットワーク全体で資産とデータのシームレスな転送を可能にするためです。この記事では、クロスチェーンブリッジのさまざまな側面を掘り下げ、その重要性、どのように機能するか、および彼らが提示する利点と課題を説明しています。クロスチェーンブリッジの理解クロスチェーンブリッジは、異なるブロックチェーンネットワーク間の資産と情報の転送を促進するプロトコルです。これらのブリッジは、ブロックチェーンの相互運用性を高めるために不可欠であり、ユーザーは単一のエコシステムに限定されることなく、複数のネットワークのユニークな機能を活用できます。たとえば、ユーザーは、トークンをEth...

LightningネットワークがBitcoin効率を改善する方法
2025-04-17 20:56:21
Lightningネットワークは、Bitcoinエコシステムの大幅な進歩を表しており、トランザクションの速度とコストに関連する最も差し迫った問題のいくつかに対処することを目指しています。オフチェーントランザクションを有効にすることにより、LightningネットワークはBitcoinの効率を大幅に改善し、より速く、より安価なトランザクションを可能にします。この記事では、Lightning Networkがこれらの改善とBitcoinの全体的な使いやすさに与える影響をどのように達成するかについて説明します。 Lightningネットワークの理解Lightningネットワークは、Bitcoinブロックチェーンの上に構築された2層スケーリングソリューションです。その主な目的は、参加ノード間の即時の低コストの...

暗号通貨の市場価値ランキングベース
2025-04-20 05:08:04
暗号通貨での市場価値のランキングは、投資家と愛好家が異なるデジタル資産の相対的な規模と重要性を評価するために使用する重要な指標です。このランキングは、主に各暗号通貨の総時価総額に基づいています。これは、暗号通貨の単一単位の現在の価格を循環中の単位の総数を掛けることによって計算されます。ただし、暗号通貨の市場価値ランキングを決定する上で、他のいくつかの要因も重要な役割を果たしています。この記事では、暗号通貨の世界での市場価値ランキングの基礎を探り、これらのランキングに影響を与える主要なコンポーネントと考慮事項を掘り下げます。総時価総額定義と計算暗号通貨の総時価総額は、市場価値のランキングを決定する上で最も基本的な要因です。暗号通貨の単位単位の現在の価格を取得し、現在流通中のユニットの総数を掛けることによ...

暗号通貨交換のKYCプロセスの分析
2025-04-17 17:07:37
Know Your Customer(KYC)プロセスは、暗号通貨交換の運用における重要なコンポーネントです。詐欺、マネーロンダリング、その他の違法行為を防ぐための規制措置として機能します。 KYC手順は、ユーザーのIDを検証し、財務規制の遵守を確保するように設計されています。この記事では、暗号通貨取引所で採用されているKYCプロセスのさまざまな側面を掘り下げ、その実装、課題、および意味の包括的な分析を提供します。暗号通貨交換におけるKYCの重要性暗号通貨交換におけるKYCの主な目的は、プラットフォームの完全性とセキュリティを維持することです。ユーザーの身元を確認することにより、交換は不正行為に関連するリスクを軽減できます。 KYCはまた、マネーロンダリングアンチマネーロンダリング(AML)の法律やそ...

Stablecoin USDTの背後にある動作メカニズム
2025-04-20 08:08:09
Tetherとしても知られるStablecoin USDTは、通常は米ドルである予備資産に固定することにより、安定した価値を維持するように設計された暗号通貨です。 USDTの背後にある運用メカニズムを理解することは、暗号通貨市場に興味がある人にとっては、取引と流動性に重要な役割を果たすため重要です。この記事では、その作成、安定性メカニズム、暗号生態系で果たす役割など、USDTの運用のさまざまな側面を掘り下げます。 USDTの作成と発行USDTは、循環中のUSDTの総額に等しい埋蔵量を保持すると主張するTether Limitedによって作成および発行されています。 USDTを発行するプロセスには、次の手順が含まれます。予約の支援:Tether Limitedは、主に米ドルで予備を維持し、発行された各U...

スマートコントラクトはイーサリアムでどのように定義されていますか
2025-04-19 22:42:43
ブロックチェーンテクノロジーの領域では、 Ethereumはプログラム可能な契約を実行するための革新的なアプローチで際立っています。スマートコントラクトは、このエコシステムの重要な要素であり、分散型アプリケーション(DAPP)が自律的かつ安全に機能することを可能にします。この記事では、Ethereumネットワーク内のスマートコントラクトの定義を掘り下げ、コンポーネント、機能性、および重要性を調査します。スマートコントラクトとは何ですか? Ethereumのスマート契約は、コードに直接書かれた契約の条件との自己執行契約です。 Ethereum Blockchainで実行される分散型コンピューティングプラットフォームであるEthereum Virtual Machine(EVM)で動作します。スマートコン...
すべての記事を見る
