全5370文字
PR

 暗号資産(仮想通貨)サービスの1つである「Poly Network(ポリ・ネットワーク、以下Poly)」がサイバー攻撃に遭い、約6億ドル(約660億円)が流出するという事件が2021年8月10日、明るみに出た。攻撃者は「私はお金にはさほど興味はない」などとして盗んだ仮想通貨の返却を進めており、8月19日までに凍結された約3300万ドルなどを除く約6億ドルのほぼ全てが返却されたという。今回に限れば、実被害はかなり小さくできそうだ。

 しかし2018年に仮想通貨交換所コインチェックで起こった580億円の不正流出を上回り、過去最大規模となる6億ドルの流出劇からは、仮想通貨を巡る新たなリスクが浮かび上がる。

 Polyは自らのサービスを、ブロックチェーン上で取引が自動処理される「DeFi(Decentralized Finance:分散型金融、ディーファイ)」であると主張する。DeFiの特徴は利用者間の取引が「無人化」されるため、取引を仲介する証券会社など既存の金融事業者が不要なことだが、裏を返すと資金が消失するなどのリスクはサービスの利用者がそのまま負うことになる。

Poly NetworkのWebサイト。分散型金融(DeFi)を称している
Poly NetworkのWebサイト。分散型金融(DeFi)を称している
(出所:Poly Network)
[画像のクリックで拡大表示]

 DeFiは設計や運用次第では手数料を極めて安くでき、全ての利用者が平等にサービスを利用できるというメリットがある。貧困層にも開かれた「次世代の金融サービス」に近い位置にあるとの評価もある。DeFiに預け入れられた資金は2021年8月14日に840億ドル(約9兆円)を超えた(DeFi市場の調査専門サイト「DeFi Pulse」調べ)。

 一方でDeFiは既存の仮想通貨サービスと比べて、利用者保護の仕組みや制度の整備が不十分であるとの指摘もある。今回の事件からも、不正流出の実害が利用者に降りかかる恐れがあるリスクが浮き彫りになった。

 各国の金融当局はDeFiの可能性と課題の両面に関心を深めている。無人の取引サービスであるDeFiでどのような消費者保護策が実装でき、それでも残るリスクを利用者にどう周知するか。DeFiが一般利用者にも開かれた金融サービスへと飛躍するには避けては通れないテーマとなった。

ブロックチェーン間の送金プログラムに脆弱性

 事件の舞台となったPolyは、DeFiで使われる複数のブロックチェーン間で仮想通貨やトークンを送金できるサービスである。DeFiは「スマートコントラクト」と呼ぶ取引プログラムの自動実行機能を備えたブロックチェーン上で運営されている。

 最も多く使われているブロックチェーンが「Ethereum(イーサリアム)」で、PolyはEthereumに加えて最近開発された「Binance Smart Chain(バイナンス・スマート・チェーン、BSC)」と「Polygon(ポリゴン)」にも対応。この3つのブロックチェーン間で仮想通貨などを送金(価値を移動)できるようにしている。

 具体的な流れは次の通りだ。例えばEthereumからBSCに送金するには、別の利用者による逆方向の送金、すなわちBSCからEthereumへの送金が必要となる。このため送金したい人は移動させる資金をいったんブロックチェーン上に預け入れる。

 逆方向の送金取引がほぼ同時に発生したら、2つの取引をマッチングさせて自動的に取引を開始するメッセージをやりとりする。メッセージを通じて預け入れた資金の所有者情報を互いに書き換えれば、互いに資金を移動できたことになる。

 なお現実には、方向が逆の送金取引は必ずしもほぼ同時に発生するとは限らない。そこでPolyにはブロックチェーン上に資金を預け入れて逆方向の取引を直ちに引き受けるという、流動性を提供する投資家が存在しているとみられる。

 Polyでの送金取引は、安全性を高めるため「BookKeeper」による承認という手続きを踏む必要もある。BookKeeperは取引の正当性を確認して取引メッセージに署名するネットワーク参加者であり、Polyでは4人が必要だ。

 BookKeeperはリストで管理されており、人でなく自動的に取引を承認するプログラムにも実装できる。ただし安全性を高めるため、4つがそれぞれ別に管理されている必要がある。

 しかしこの一連のスマートコントラクトに脆弱性があった。自らもDeFi関連サービスに携わり、ブロックチェーン推進協会(BCCC)のNFT・ゲーム部会長として事件の経緯を調べたJPYC(東京・港)の岡部典孝社長によれば、誰がBookKeeperかは開発・運営元であるPolyのスタッフが決めてリストに登録しているもようだという。

 このリストは可変で更新する手順もプログラムに実装していたが、そのコードに脆弱性があった。攻撃者は脆弱性を利用し、リストを書き換えて自らをBookKeeperにし、本来は4人必要な署名を1人で実行できるようにした。そしてPoly内にあったほぼ全ての資金6億ドルを自分の口座に送金した。

 岡部社長は「かなり発見が難しい脆弱性で、攻撃者は腕が立つ技術者だろう」と語る。実際にPolyの関係者も脆弱性の存在は想定外だったとみられる。今回の事件では「ネット上で被害を訴えたサービスの利用者らが全く見当たらない」(岡部社長)点も興味深い。被害額の6億ドルは、運営関係者がPolyの資金移動の流動性を確保するために預け入れた資金であるとの推理が成り立つからだ。