バイナンスが63億ドルを盗まれた
今回のバイナンスのハッキング、みんなニュースで聞いただろう? 世界最大の暗号資産取引所で、とてつもない規模のハッキング事件が起きたんだ。これは、単に金庫の鍵を盗んでお金を持ち出した事件じゃない。金庫がこれから誰の言うことを聞くのかを、変えてしまった事件だ。
簡単に言うと…ふだんは、客が銀行に行って出金を頼むと、職員が出金伝票を確認してお金を渡すよね。
ところが今回は、誰かが出金伝票を1枚偽造したという程度を超えて、金庫の中のお金を出し続けられる自動出金装置を、仕込んでおいたようなものだった。だから、今回のハッキング事件では、最初にバイナンスの金庫に入っていたお金だけが抜けたわけじゃない。
その装置が動いているあいだに、新しく入ってきたお金も、抜かれ続けることができた。
✦ 金庫の鍵の奪取 vs 動作方式の変更
今回の事件が違う理由
今回の事件で明らかになった弱点は、単に取引所にコインがたくさん集まっているという事実だけじゃない。ウォレットに対する承認権限が、ウォレットの動作方式そのものを変えることができて、その権限の効力が残っているあいだ、被害が膨らみ続けうるということだ。
出金伝票1枚ではなく、金庫の動作方式を変えた承認
✦ 一回限りの承認 vs 委任の承認
承認の種類によって効力が変わる
普通、コインを送るときは、「このアドレスにいくら送れ」という内容を承認する。銀行にたとえると、「私の口座からAさんに100万ウォンを送れ」と書いた出金伝票1枚に、ハンコを押すのと似ているね。その伝票が有効なら、決まった送金1件が処理される。
ところが、イーサリアムには、ウォレットが別のプログラムを自分の権限で実行するよう設定する機能がある。名前はEIP-7702だ。もともとは、複数の決済をまとめて処理したり、ウォレットの使用を便利にしたりするための機能だよ。
ちょうど、私たちがAIエージェントにコネクターをつないで、さまざまな機能を使わせるのと似ている。
これを銀行の金庫にたとえるなら、「今回100万ウォンを出せ」という紙の伝票を毎回承認するのが遅くて面倒なので、金庫の自動装置に、ある動作プログラムをつなぐのと似ている。
そうなると、伝票のように、単に1回お金を送って終わるのではなく、その後も接続されたプログラムがウォレットの権限を使える。そのプログラムが正常なら便利な機能になるけれど、悪意のあるプログラムなら、ウォレットの中のコインを別の場所に移せてしまう。
今回の事件で、攻撃者は、バイナンスのイーサリアム出金用ウォレットである「バイナンス14」が、自分の用意した悪意のあるプログラムを実行するよう、設定を変えた。まさにこの方法を使ったんだ。
50枚のうち1枚だけ通った。でも運ではなく計算だった
✦ 50個の承認書の準備の過程
連続番号50個で、番号の変化を吸収
ここで「取引番号」という概念が出てくる。イーサリアムのウォレットは、自分の名前で取引を送り出すたびに、通し番号をひとつずつ上げていく。銀行の窓口で、番号札が101番、102番、103番と上がっていくのと似ている。この番号は、パスワードじゃない。
つまり、ブロックチェーンに公開されていて、すでに処理した取引をもう一度処理できないように区別する役割をするだけだ。
今回、攻撃者が使った「ウォレット設定変更の承認」にも、通し番号が付いていた。銀行にたとえると、「番号札が101番のとき、この承認書を処理してください」と書かれた書類だね。
イーサリアムの仕組み上、実際のウォレットの番号がちょうど101番のときだけ、その書類が受け入れられ、すでに102番に進んでいたら、101番の書類は使えない。
ところが、バイナンス14は、客の出金を処理し続ける忙しいウォレットだよね。世界最大の暗号資産取引所だから。だから、攻撃者がウォレットの番号を確認してから攻撃を試みても、ほかの出金が先に処理されれば、失敗するおそれがあった。
それで、攻撃者は、承認書を1枚だけ用意しなかった。確認した番号から、その次の番号まで続く50枚の承認書を、あらかじめ用意したんだ。宝くじの番号のように、たくさんの数字のなかから50個を無作為に選んだわけじゃない。
番号札がすぐに変わりうるので、101番から150番まで連続した番号が書かれた承認書を用意して、そのうちの1枚は通るようにセッティングしておいたわけだ。
オンチェーン分析によると、攻撃者は、10月29日20:17:47 UTCに、バイナンス14の番号が18,914,775だったことを確認した。攻撃者は、18,914,775から18,914,824まで連続した50個の番号の承認署名を用意した。
50個の番号で、当時のウォレットの取引速度を基準に、約6分24秒の範囲をカバーできた。
実際の承認取引がブロックチェーンに記録された時刻は、20:20:59 UTCだった。その直前にバイナンス14は18,914,808番の取引を終え、次の番号は18,914,809だった。
用意した50枚のうち、35枚目の承認書の番号が、まさにこの数字と一致し、攻撃者の判断は的中した。
ここで、もうひとつ大事な事実がある。この50個の承認署名は、すべてバイナンス14の鍵で作られた署名だった。銀行にたとえると、攻撃者が「バイナンス14」という口座の本物のハンコが押された承認書50枚を、用意しておいたということだ。
そのなかのひとつである18,914,809番が、現在の番号と一致した。でも、いったいそのハンコをどうやって確保したのかは、公開されたブロックチェーンの記録だけでは確認できなかった。
✦ 委任が維持されているあいだに広がった被害
最初の流出のあとも続いた流出
承認が適用されてから約3分24秒後、攻撃者が用意したプログラムが実行され、バイナンス14にあった約25億ドル相当のコインが抜けた。でも、本当の問題は、最初の出金で終わらなかったことだ。
攻撃者が変えておいたウォレットの設定は、約3時間50分のあいだ維持され、そのあいだに、新しく入ってきた資産が何度も追加で流出した。
バイナンス14を信頼するよう設定された、別のバイナンスのスマートウォレットであるHot Wallet 34からも、約8億2,300万ドル相当のUSDCが抜けた。
これが、今回の事件が、単なるコインウォレットの奪取と違う点だ。攻撃者は、ウォレットにあったコインを一度持っていくだけでなく、ウォレットが動くルールを変えて、コインを盗み続けた。
なぜ取引所のハッキングは繰り返されるのか
✦ 取引所が狙われる攻撃対象
鍵の保管装置から承認プログラムまで
取引所には、客が預けたコインが集まっていて、出金を処理する権限も、取引所のウォレットと運営システムに集中している。
攻撃者の立場では、客1人のアカウントを狙うより、取引所の金庫を動かす承認の体制を狙うほうが、ずっと大きな被害を生み出せるだろう。
攻撃者は、必ずしも金庫の鍵そのものを盗まなきゃいけないわけでもない。システムに偽の出金指示を承認させたり、自動出金装置に誤った命令を押し込んだりすればいい。そうすれば、あえて鍵を奪わなくても、お金を抜き取れる。
だから、暗号資産取引所では、各種の暗号鍵が保存された装置だけでなく、その装置に署名を要請する職員のアカウント・サーバー・承認プログラムが、すべて攻撃対象になりうる。そのうちひとつでも破られれば、いつでもこういうことが起こりうるだろう。
バイナンスは、初期調査で、関係者(DevOpsエンジニア)のノートパソコンがハッキングされた可能性に触れ、その後、追加のハッキングの形跡も確認したと明らかにした。ただ、ウォレットの秘密鍵が流出した証拠は見つからなかったと説明した。
ブロックチェーンの記録で、バイナンス14の有効な署名が使われた事実は確認できるけれど、その署名を作り出した内部の経路までわかるわけではないから。
昨年のバイビットのハッキングでも、攻撃者は、ウォレット管理サービス企業Safeの開発者の資格情報を奪い、取引画面を操作した。バイビットの職員は、正常な内部送金だと思って承認したけれど、実際には、攻撃者にウォレットの統制権を渡す取引だった。
今回の事件と攻撃方法は少し違ったけれど、コインウォレットそのものではなく、コインを動かす承認の過程を攻撃したという共通点がある。
ブロックチェーンは何を守り、何を守れないのか
✦ ブロックチェーンが守るものと守れないもの
記録は守るけれど、署名者は見分けられない
ブロックチェーンは、取引の記録を検証し、記録をむやみに書き換えにくくする技術だ。でも、取引を承認した人が取引所の正当な担当者なのか、実際の客が出金を要請したのかまでは、判断しない。
出金伝票に押されたハンコが本物かどうかは確認できても、そのハンコを押した人が正当な権利者なのか、詐欺師なのかまでは、見分けられないということだ。
✦ 知っておこう
通常署名取引って何?
もちろん、今回の事件全体がEIP-7702のせいで起きたわけじゃない。約63億ドル規模の全体の被害には、ほかのブロックチェーンのウォレットも含まれる。EIP-7702を使った方式は、バイナンス14というイーサリアムのウォレットで確認されたものだ。
そして、イーサリアムでも、バイナンス16に対する流出は通常署名取引で、ほかのブロックチェーンでも、通常署名取引で資産が抜けていった。
だから、今回の事件が明らかにした暗号資産の致命的な弱点は、台帳そのものではなく、台帳に取引を記録することを許可する承認権限だ。ブロックチェーンは、有効な署名がある取引を実行するけれど、その署名がハッカーの手から出たものかどうかまでは、区別できないから。
取引所が客の資産を集めて保管し、出金を代わりに処理する限り、攻撃者は、コインを動かす権限と、その権限を行使するシステムを、いつでもまた狙える。
これは投資助言じゃないよ。わかってるよね?大切なお金は自分で守ろう。
今回はここまでにするよ。また会おう。
関連記事:
SHIBの偽エアドロップの犯人はドレイナー?コイン投資家は注意
🌐 韓国語版: 바이낸스 63억 달러 해킹 사건이 드러낸 암호화폐의 치명적 약점 (최대한 쉽게 설명해볼게)
🌐 英語版: Binance's $6.3B Hack: Crypto's Fatal Weakness, Explained
💬 コメント
まだコメントがないよ。最初のコメントを書いてみてね。
コメントを投稿