カバープロトコルが攻撃を受ける
12月28日、分散型金融(DeFi)でP2P保険マーケットを構築するカバープロトコル(Cover Protocol)のスマートコントラクトが攻撃を受け、ハッカーが4000京(4000×10の16乗)ものカバートークンを鋳造するという事件が起こった。
これを受けて、カバープロトコルは流動性プロバイダーにサービス停止を要請。さらに大手取引所バイナンスがカバートークンの取引を停止したことから、同トークンの価格は一時95%以上暴落した。しかし、その数時間後、実行犯がトークン売却で得た全資金を返還したとツイートしたことから、執筆時にはトークン価格は70%程度の下落まで一時値を戻している。
「次回は、自分で尻拭いしろよ」
Next time, take care of your own shit.@CoverProtocol @chefcoverage https://t.co/ks94ucdoRQ
1. No gains.
2. The Obtained Funds from LP has been returned to COVER.— Grap.finance (@GrapFinance) December 28, 2020
攻撃手法
カバープロトコルチームは事件の原因について、流動性ファーミング契約「Blacksmith」が、「無制限の」カバートークンを鋳造するために悪用されたと説明している。現在は、さらなる被害を食い止めるために、Blacksmithの鋳造アクセスは削除されている。調査は継続中だが、11月に合併したYearn Financeのチームもサポートに加わっているとのことだ。
一方、Polymath NetworkのセキュリティエンジニアであるMudit Gupta氏は、自身のブログで悪用されたスマートコントラクトのバグについて次のように解説している。
「Blacksmithの契約では手数料であるガスを節約するために、プールデータをメモリにキャッシュする。ストレージのプールデータは更新するが、キャッシュされたデータを更新するのを放置してしまう。このキャッシュされた古いデータが利用されハッキングを可能にする。」
Blacksmith契約では、トークンごとの報酬を記録し、多くのトークンがロックされている場合はトークンごとの報酬は少なくなる。一方、少数のトークンがロックされている場合、1トークンあたりの報酬は多くなる。この報酬を計算するための関数が「accRewardsPerToken」で、プール報酬合計・トークン残高合計を算出するために使われる。
ハッカーはaccRewardsPerTokenの数値を高める複数のステップを踏み、システムから支払われる報酬総額を巨大に膨らませたようだ。
1. 新たに承認されたBlacksmith契約にLPトークンを入金(他者のトークンがロックされていない状態)
2.ほぼ全てのLPトークンを引き出す
=accRewardsPerTokenの数値が大きくなる
3.LPトークンを再度入金
=上記のバグによって、古い数値(小さい数値)が報酬の算出に使用される
4.算出された巨額の報酬を引き出す
被害額
この手法を使い、実行を認めたハッカー「GrapFinance」は、引き出したカバートークンをETHをはじめDAI、WBTCなどに換金したが、GrapFinanceは4350ETHを含む精算された資金全てをカバープロトコルに返還した。しかし、UniswapとSushiswap等を介して換金されたカバートークンは7万2900のみだと報道されており、引き出された残りのカバートークンはバーンされたようだ。GrapFinanceがカバープロトコルに返還した額は約300万ドル(3.1億円相当)だという。
ただし、カバープロトコルはGrapFinanceだけではなく、複数のハッカーによって攻撃されたと見られており、Mudit Gupta氏によると、この攻撃で鋳造された約7万のカバートークンが流通しているという。他のハッカーがGrapFinance同様、このトークンをバーンするかどうかは今後の展開を待つしかないようだ。
新しいトークンを発行する可能性
カバープロトコルは、今回の違法な鋳造以前のLPトークン保有者のスナップショットに基づいた新たなカバートークンの発行を検討中だと発表した。ハッカーによって返還された4350ETHも、スナップショットにより処理されるとのことだ。
カバープロトコルチームは、調査結果が明らかになるまで、カバートークンの購入を控えるようにとユーザーに呼びかけている。
画像はShutterstockのライセンス許諾により使用