バイナンス63億ドルハッキングが暴いた暗号資産の致命的な弱点

バイナンスのハッキング事件を描いたイラスト

バイナンスが63億ドルを盗まれた

今回のバイナンスのハッキング、みんなニュースで聞いただろう? 世界最大の暗号資産取引所で、とてつもない規模のハッキング事件が起きたんだ。これは、単に金庫の鍵を盗んでお金を持ち出した事件じゃない。金庫がこれから誰の言うことを聞くのかを、変えてしまった事件だ。

簡単に言うと…ふだんは、客が銀行に行って出金を頼むと、職員が出金伝票を確認してお金を渡すよね。

ところが今回は、誰かが出金伝票を1枚偽造したという程度を超えて、金庫の中のお金を出し続けられる自動出金装置を、仕込んでおいたようなものだった。だから、今回のハッキング事件では、最初にバイナンスの金庫に入っていたお金だけが抜けたわけじゃない。

その装置が動いているあいだに、新しく入ってきたお金も、抜かれ続けることができた。

〈バイナンス63億ドル規模のハッキング被害と市場への影響を報じるブルームバーグのニュース映像です。〉
* YouTubeチャンネル『Bloomberg Television』にあがっている動画だよ。

✦ 金庫の鍵の奪取 vs 動作方式の変更

今回の事件が違う理由

秘密鍵の奪取
• 奪った鍵で取引に署名して、資産を移動
EIP-7702の委任
• 委任コードが維持されているあいだ、ウォレットの呼び出しを通じて資産を移動

今回の事件で明らかになった弱点は、単に取引所にコインがたくさん集まっているという事実だけじゃない。ウォレットに対する承認権限が、ウォレットの動作方式そのものを変えることができて、その権限の効力が残っているあいだ、被害が膨らみ続けうるということだ。

出金伝票1枚ではなく、金庫の動作方式を変えた承認

✦ 一回限りの承認 vs 委任の承認

承認の種類によって効力が変わる

✔ 一回限りの送金承認:範囲:決まった送金1件/効力:1回処理されて終わり
✔ EIP-7702の委任承認:範囲:ウォレットが実行するプログラム/効力:設定が維持されるあいだ、ウォレットが呼び出されるたびに委任されたコードが実行される

普通、コインを送るときは、「このアドレスにいくら送れ」という内容を承認する。銀行にたとえると、「私の口座からAさんに100万ウォンを送れ」と書いた出金伝票1枚に、ハンコを押すのと似ているね。その伝票が有効なら、決まった送金1件が処理される。

ところが、イーサリアムには、ウォレットが別のプログラムを自分の権限で実行するよう設定する機能がある。名前はEIP-7702だ。もともとは、複数の決済をまとめて処理したり、ウォレットの使用を便利にしたりするための機能だよ。

ちょうど、私たちがAIエージェントにコネクターをつないで、さまざまな機能を使わせるのと似ている。

これを銀行の金庫にたとえるなら、「今回100万ウォンを出せ」という紙の伝票を毎回承認するのが遅くて面倒なので、金庫の自動装置に、ある動作プログラムをつなぐのと似ている。

そうなると、伝票のように、単に1回お金を送って終わるのではなく、その後も接続されたプログラムがウォレットの権限を使える。そのプログラムが正常なら便利な機能になるけれど、悪意のあるプログラムなら、ウォレットの中のコインを別の場所に移せてしまう。

今回の事件で、攻撃者は、バイナンスのイーサリアム出金用ウォレットである「バイナンス14」が、自分の用意した悪意のあるプログラムを実行するよう、設定を変えた。まさにこの方法を使ったんだ。

50枚のうち1枚だけ通った。でも運ではなく計算だった

✦ 50個の承認書の準備の過程

連続番号50個で、番号の変化を吸収

1観測された番号
18,914,775(10月29日 20:17:47 UTC)
2用意した承認書
18,914,775〜18,914,824、連続50個
3適用された承認書
小さい番号から35番目、18,914,809と一致
4カバーする範囲
当時の取引速度を基準に約6分24秒

ここで「取引番号」という概念が出てくる。イーサリアムのウォレットは、自分の名前で取引を送り出すたびに、通し番号をひとつずつ上げていく。銀行の窓口で、番号札が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番が、現在の番号と一致した。でも、いったいそのハンコをどうやって確保したのかは、公開されたブロックチェーンの記録だけでは確認できなかった。

✦ 委任が維持されているあいだに広がった被害

最初の流出のあとも続いた流出

約25億ドル最初の流出
バイナンス14から
約8億2,300万ドル別のウォレットの流出
Hot Wallet 34のUSDC
約3時間50分委任の維持
設定が維持された時間

承認が適用されてから約3分24秒後、攻撃者が用意したプログラムが実行され、バイナンス14にあった約25億ドル相当のコインが抜けた。でも、本当の問題は、最初の出金で終わらなかったことだ。

攻撃者が変えておいたウォレットの設定は、約3時間50分のあいだ維持され、そのあいだに、新しく入ってきた資産が何度も追加で流出した。

バイナンス14を信頼するよう設定された、別のバイナンスのスマートウォレットであるHot Wallet 34からも、約8億2,300万ドル相当のUSDCが抜けた。

これが、今回の事件が、単なるコインウォレットの奪取と違う点だ。攻撃者は、ウォレットにあったコインを一度持っていくだけでなく、ウォレットが動くルールを変えて、コインを盗み続けた。

なぜ取引所のハッキングは繰り返されるのか

✦ 取引所が狙われる攻撃対象

鍵の保管装置から承認プログラムまで

✔ 暗号鍵の保管装置:鍵が保存された場所
✔ 署名を要請する職員のアカウント・サーバー:署名を要請する場所
✔ 承認プログラム:承認を処理する場所

取引所には、客が預けたコインが集まっていて、出金を処理する権限も、取引所のウォレットと運営システムに集中している。

攻撃者の立場では、客1人のアカウントを狙うより、取引所の金庫を動かす承認の体制を狙うほうが、ずっと大きな被害を生み出せるだろう。

攻撃者は、必ずしも金庫の鍵そのものを盗まなきゃいけないわけでもない。システムに偽の出金指示を承認させたり、自動出金装置に誤った命令を押し込んだりすればいい。そうすれば、あえて鍵を奪わなくても、お金を抜き取れる。

だから、暗号資産取引所では、各種の暗号鍵が保存された装置だけでなく、その装置に署名を要請する職員のアカウント・サーバー・承認プログラムが、すべて攻撃対象になりうる。そのうちひとつでも破られれば、いつでもこういうことが起こりうるだろう。

バイナンスは、初期調査で、関係者(DevOpsエンジニア)のノートパソコンがハッキングされた可能性に触れ、その後、追加のハッキングの形跡も確認したと明らかにした。ただ、ウォレットの秘密鍵が流出した証拠は見つからなかったと説明した。

ブロックチェーンの記録で、バイナンス14の有効な署名が使われた事実は確認できるけれど、その署名を作り出した内部の経路までわかるわけではないから。

昨年のバイビットのハッキングでも、攻撃者は、ウォレット管理サービス企業Safeの開発者の資格情報を奪い、取引画面を操作した。バイビットの職員は、正常な内部送金だと思って承認したけれど、実際には、攻撃者にウォレットの統制権を渡す取引だった。

今回の事件と攻撃方法は少し違ったけれど、コインウォレットそのものではなく、コインを動かす承認の過程を攻撃したという共通点がある。

ブロックチェーンは何を守り、何を守れないのか

✦ ブロックチェーンが守るものと守れないもの

記録は守るけれど、署名者は見分けられない

守ってくれるもの
• 取引記録の検証
• 記録をむやみに書き換えにくくする
守れないもの
• 署名者が正当な権利者かどうかは判断できない
• 実際の客が出金を要請したかどうかは判断できない

ブロックチェーンは、取引の記録を検証し、記録をむやみに書き換えにくくする技術だ。でも、取引を承認した人が取引所の正当な担当者なのか、実際の客が出金を要請したのかまでは、判断しない。

出金伝票に押されたハンコが本物かどうかは確認できても、そのハンコを押した人が正当な権利者なのか、詐欺師なのかまでは、見分けられないということだ。

✦ 知っておこう

通常署名取引って何?

通常署名取引とは
ウォレットの秘密鍵で取引に署名して送る、ごく普通の方式だ。取引所のウォレットでは、ウォレットの持ち主が直接署名せず、秘密鍵を使う取引所の署名システムが署名することもある。
仕組み
送る先のアドレスと金額を含んだ取引にハンコを押すと、ネットワークがその署名を確認して、取引を実行する。
EIP-7702の委任との違い
委任は、ウォレットが実行するプログラムそのものを変えて、そのプログラムがウォレットの権限で動くようにするものだ。
今回の事件では
通常署名取引は、ウォレットの動作方式を変えず、1件ずつ直接署名して送る方式だ。今回の事件で、バイナンス16とほかのチェーンの流出が、まさにこの方式だった。

もちろん、今回の事件全体がEIP-7702のせいで起きたわけじゃない。約63億ドル規模の全体の被害には、ほかのブロックチェーンのウォレットも含まれる。EIP-7702を使った方式は、バイナンス14というイーサリアムのウォレットで確認されたものだ。

そして、イーサリアムでも、バイナンス16に対する流出は通常署名取引で、ほかのブロックチェーンでも、通常署名取引で資産が抜けていった。

だから、今回の事件が明らかにした暗号資産の致命的な弱点は、台帳そのものではなく、台帳に取引を記録することを許可する承認権限だ。ブロックチェーンは、有効な署名がある取引を実行するけれど、その署名がハッカーの手から出たものかどうかまでは、区別できないから。

取引所が客の資産を集めて保管し、出金を代わりに処理する限り、攻撃者は、コインを動かす権限と、その権限を行使するシステムを、いつでもまた狙える。

これは投資助言じゃないよ。わかってるよね?大切なお金は自分で守ろう。

今回はここまでにするよ。また会おう。

関連記事:

SHIBの偽エアドロップの犯人はドレイナー?コイン投資家は注意

90億ウォン分のBTC蒸発、リセラー品のウォレットが犯人?

ストラテジー(MSTR)、MSCI指数から除外の危機

💬 コメント

まだコメントがないよ。最初のコメントを書いてみてね。

コメントを投稿