リエントランシー攻撃
リエントランシー攻撃 とは何ですか?
リエントランシー攻撃外部呼び出しによって攻撃者が状態更新前に同じ関数へ再侵入し、再帰的に資金を抜き取るスマートコントラクトの脆弱性。
リエントランシーは、コントラクトが内部の会計を更新する前に外部アドレスへ ETH やトークンを送る場合(call、transfer、ERC-777 フックなど)に発生します。攻撃者はそのアドレスを支配し、コールバック内で元の引き出し関数を再び呼び出し、コントラクトが空になるまで繰り返します。単一関数型、クロス関数型、クロスコントラクト型、リードオンリー型などの亜種があります。対策として checks-effects-interactions パターン、OpenZeppelin の ReentrancyGuard、プル型支払い、信頼できない契約への低レベル呼び出し回避が用いられます。2016 年の The DAO 攻撃は典型例で、Ethereum と Ethereum Classic のハードフォークの原因となりました。
● 例
- 01
2016 年 6 月の The DAO 事件では splitDAO を再帰呼び出しして約 360 万 ETH が抜かれた。
- 02
2021 年の Cream Finance 緊急対応事案では ERC-777 コールバックによるクロス関数リエントランシーが悪用された。
● よくある質問
リエントランシー攻撃 とは何ですか?
外部呼び出しによって攻撃者が状態更新前に同じ関数へ再侵入し、再帰的に資金を抜き取るスマートコントラクトの脆弱性。 サイバーセキュリティの Web3 とブロックチェーン カテゴリに属します。
リエントランシー攻撃 とはどういう意味ですか?
外部呼び出しによって攻撃者が状態更新前に同じ関数へ再侵入し、再帰的に資金を抜き取るスマートコントラクトの脆弱性。
リエントランシー攻撃 はどのように機能しますか?
リエントランシーは、コントラクトが内部の会計を更新する前に外部アドレスへ ETH やトークンを送る場合(call、transfer、ERC-777 フックなど)に発生します。攻撃者はそのアドレスを支配し、コールバック内で元の引き出し関数を再び呼び出し、コントラクトが空になるまで繰り返します。単一関数型、クロス関数型、クロスコントラクト型、リードオンリー型などの亜種があります。対策として checks-effects-interactions パターン、OpenZeppelin の ReentrancyGuard、プル型支払い、信頼できない契約への低レベル呼び出し回避が用いられます。2016 年の The DAO 攻撃は典型例で、Ethereum と Ethereum Classic のハードフォークの原因となりました。
リエントランシー攻撃 からどのように防御しますか?
リエントランシー攻撃 に対する防御は通常、上記の定義で述べたとおり、技術的統制と運用上の実践を組み合わせます。
リエントランシー攻撃 の別名は何ですか?
一般的な別名: 再帰呼び出し攻撃。
● 関連用語
- web3№ 1056
スマートコントラクトセキュリティ
オンチェーンプログラムを設計・レビュー・運用し、資金の盗難、ロジックの停止、想定外のルール違反に悪用されないようにする実践。
- web3№ 1055
スマートコントラクト監査
ローンチや更新の前に、スマートコントラクトのソースコード・デプロイ構成・経済設計を独立した第三者が点検するセキュリティレビュー。
- web3№ 424
フラッシュローン攻撃
1 つのトランザクション内で巨額の無担保フラッシュローンを借り、価格やガバナンスを操作して返済前に資金を盗み出す DeFi 攻撃。
- web3№ 106
ブロックチェーンセキュリティ
分散台帳、コンセンサスメカニズム、スマートコントラクト、および周辺インフラを侵害・詐欺・盗難から守る分野。
- vulnerabilities№ 895
競合状態(レースコンディション)
システムの安全性や正しさが並行処理のタイミングや順序に依存する欠陥。攻撃者は処理を割り込ませてチェックを回避できる。
- web3№ 765
オラクル操作
スマートコントラクトが参照する価格やデータフィードを歪め、貸借・清算・決済で大きく誤った判断をさせる攻撃。