上級
処理の途中に何度も割り込んで、資金を不正に引き出すスマートコントラクトへの攻撃。
詳細説明
リエントランシー攻撃(reentrancy attack=再入攻撃)とは、スマートコントラクトの代表的な脆弱性を突く攻撃手法です。コントラクトが処理を完了する前の、いわば「無防備な隙」に何度も割り込んで、資金を繰り返し引き出してしまう、というものです。
仕組みはこうです。あるコントラクトが「残高を確認 → 送金 → 残高を減らす」という順で処理するとき、もし送金の段階で攻撃者のコードに制御が移り、残高がまだ減らされる前に再び引き出しを要求できたら ── コントラクトは「まだ残高がある」と誤認し、何度も送金してしまいます。2016年の「The DAO事件」では、この攻撃で巨額のETHが流出し、イーサリアムの歴史を揺るがしました。この教訓から、処理の順序を正す対策(チェック・効果・相互作用パターン)や、外部からの監査の重要性が広く認識されるようになりました。
たとえ話
銀行のATMで、残高を引き落とす処理が完了する前に、何度も「引き出し」ボタンを連打できてしまう状況を想像してください。本来は一度引き出せば残高が減るはずなのに、減算が間に合わないうちに連続要求すると、ありもしないお金が次々と出てくる。リエントランシー攻撃は、この「処理の隙を突いた連打」でコントラクトを欺き、資金を抜き取る手口です。
CAWでの役割
リエントランシー攻撃の存在は、「なぜスマートコントラクトのコードの安全性が決定的に重要なのか」を物語っています。一度デプロイされたコントラクトは基本的に変更できないため、脆弱性があれば致命傷になりかねません。CAWのように所有権を放棄したコントラクトでは、後から修正することもできない。だからこそ、デプロイ前のコードの堅牢性と、誰でも検証できる透明性が、何より重要になります。攻撃の手口を知ることは、CAWが体現する「検証可能で堅牢なコード」という価値の重みを、裏側から理解することにつながります。






