リエントランシー攻撃
リエントランシー攻撃 とは何ですか?
リエントランシー攻撃外部呼び出しによって攻撃者が状態更新前に同じ関数へ再侵入し、再帰的に資金を抜き取るスマートコントラクトの脆弱性。
リエントランシーは、コントラクトが内部の会計を更新する前に外部アドレスへ 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 とブロックチェーン カテゴリに属します。
リエントランシー攻撃 とはどういう意味ですか?
外部呼び出しによって攻撃者が状態更新前に同じ関数へ再侵入し、再帰的に資金を抜き取るスマートコントラクトの脆弱性。
リエントランシー攻撃 からどのように防御しますか?
リエントランシー攻撃 に対する防御は通常、上記の定義で述べたとおり、技術的統制と運用上の実践を組み合わせます。
リエントランシー攻撃 の別名は何ですか?
一般的な別名: 再帰呼び出し攻撃。