概要
再入攻撃とは、状態の更新が完了する前にスマートコントラクトが自身を再呼び出し、資金を流出させる攻撃手法です。これは、有名なDAOハッキング事件の攻撃ベクトルでした。この攻撃は、スマートコントラクトの実行における状態変更の順序を悪用するものです。
仕組み
悪意のあるスマートコントラクトが外部関数を呼び出し、被害者のスマートコントラクトが状態を更新する前に、そのスマートコントラクトを再呼び出しします。処理の最後まで残高が更新されないため、呼び出しが繰り返されることで資金が流出します。チェック・エフェクト・インタラクション(CEI)や再入防止ガード(reentrancy guards)によってこれを防ぐことができます。
重要性
再入(Reentrancy)は、スマートコントラクトの脆弱性の中でも最も危険なもののひとつであり、多大な損失を引き起こします。開発者や監査担当者にとって、これを理解することは不可欠です。最新のフレームワークには、組み込みの保護機能が備わっています。
関連する概念
再入攻撃は、スマートコントラクトの脆弱性や監査に関連しています。これらは、コーディングパターンやガードによって防ぐことができます。