リエントランシー攻撃(再入攻撃)とは何か?なぜ危険なのでしょうか?
リエントランシーは最もクラシックで危険なスマートコントラクトの脆弱性の一つです。引き出し関数:ユーザーが引き出し呼び出し→コントラクトが資金を転送→その後残高を更新します。攻撃者は転送後・残高更新前のウィンドウで再び引き出しを呼び出し、帳簿には残高があるように見えながらコントラクトを繰り返し枯渇させます。2016年のDAOハックはリエントランシーで約360万ETHを盗み、ETHとETCへのハードフォークを引き起こしました。
DeFiプロトコルのスマートコントラクトが安全かどうかをどう評価するか?
公開で確認できる指標があります。第1に監査の数と質:OpenZeppelin、Trail of Bits、Certik、Sherlockなどからの独立監査があるか、いくつあり最新はいつか。第2にTVLと実績:数億ドル以上の持続的な高いTVLと攻撃なしが最良の時間プレッシャーテストです。第3に管理者の制御:Timelock(アップグレードに24〜72時間の待機が必要)とマルチシグ(少なくとも3/5または4/7)があるか。第4にバグバウンティ:Immunefiでの高額バウンティはセキュリティへの真剣さを示します。
監査報告が「重大な脆弱性なし」と言っていても、なぜハッキングが起きるのか?
いくつかの理由から「監査済み」は「必ず安全」を意味しません。第1に、監査は特定の時点での特定バージョンの静的なスナップショットです;アップグレード後に再監査されなければ以前の監査は無効です。第2に、監査者も人間であり、複雑なビジネスロジックの脆弱性はトップクラスの機関でも見落とされることがあります。第3に、複合性(Composability)が新たな攻撃面を生みます:個別に監査されたコントラクトは問題ないかもしれませんが、組み合わせると脆弱性が生じえます――フラッシュローン攻撃は複数のプロトコルにまたがる予期しない動作を悪用します。監査は必要条件であり十分条件ではありません。最も堅固な保護は「長期にわたる攻撃なしの実績」と「ホワイトハットが盗むより報告する方が得になる高額バグバウンティ」の組み合わせです。
上級:「形式的検証(Formal Verification)」は監査より厳格なセキュリティ手段ですか?
はい、ただし限界があります。形式的検証は数学的手法でコードのロジックがすべての可能な入力条件下で仕様通りに動作することを厳密に証明します。「いくつかのケースをテストして問題を見つけなかった」ではなく「どんな状況でも問題が起きないことを数学的に証明した」というものです。コスト面:非常に高価で最上位のDeFiプロトコルのみが負担できます。また仕様が間違っていれば検証も役に立ちません。DAI/USDSのコアコントラクトとAaveの一部のコンポーネントが形式的検証を使用していますが、人間による監査とバグバウンティの補完ツールにすぎません。
2023年3月のEuler Financeのハッキング:リザーブへのdonation機能のロジックバグとフラッシュローンを組み合わせて約1.97億ドルが流出しました。Eulerには評判の良い監査がありました。特定のエッジケースは完全にカバーされていませんでした。長い交渉の後、攻撃者は約95%の資金を返還しましたが、ユーザーは数週間資産にアクセスできませんでした。
DeFiの核心的な利点は銀行という仲介者を排除することです:あなたのお金はコードと直接やり取りし、預金を能動的に流用したり引き出しをブロックしたりする人がいません(コントラクトが正常に動作する限り)。代償は:コードが間違っているとき、修正する責任者もいません――預金保険も法的補償義務もカスタマーサービスも。スマートコントラクトのリスクはこのトレードオフのもう一つの面です。