Oh my... Lendf.meのGox事件

Oh my... Lendf.meのGox事件

概要

UniswapとLendf.meで暗号資産の流出事件が起こりました。MakerDAOのBlack Thursday事件に引き続き、またDefi関係でGoxしたのかよ!?と思わず突っ込みを入れたくなります。

暗号通貨の基本は「Don’t trust, but verify」なので、スマートコントラクトの検査・検証も自分でやれってことではないでしょうか?いくらスマコンがオープンで誰でも閲覧できるとはいえ、恩恵を受けるサービスのスマコンをちゃんと検証しているユーザーはいないでしょう。この時点で、他人を信頼しているので、じゃあそもそもスマコンなんか使う意味ないじゃん、と辛辣な言葉がでてしまいます。

とは言っても、Defiは面白いですし、これから徐々に成熟していけばいいかなと楽観的に考えたりもしています。

根本原因:再入可能攻撃

今回の事件の根本原因は、UniswapやLendf.meのスマコンにバグがあり、再入可能プログラムとして悪用されてしまいました。これは既知のバグで、Uniswapのスマコンを検査した人がこのブログで、バグの指摘と攻撃方法について解説していました。この攻撃手法はThe DAO Hack事件でも使われた方法です。

再入可能とは、

あるプログラムやサブルーチンの実行を完了する前に、割り込みなどにより、同じプログラムやサブルーチンを実行しても安全だという性質。(Wikiより

ちょっと小難しく聞こえますが、「ある関数Aの実行中に関数Bの割り込みができるんだよ」ぐらいのイメージで大丈夫です。今回の事件もこの設計を悪用して、意図しない取引が実行されました。

Uniswapのハック(被害総額 25万USD)

上記のブログ(英語ですが、、、)の解説にもありますが、Uniswapに対して行われた攻撃は、再入可能攻撃を使ってimBTCとETHの交換比率を不正操作して、少ないimBTCで多額のETH(約1300ETH)の交換が行われました。

Lendf.meのハック(被害総額 2,500万USD)

Lendf.meのハックもUniswapに対する攻撃と本質的には同じです。Lendf.meでは、攻撃者が

  1. 289.99999999imBTCを預託する
  2. 0.00000001imBTCを預託する
     a. この時に1.で預託した金額を引き出すトランザクションを追加実行(再入可能攻撃)
     b. 2のトランザクションが完了した時点では、aで引き出された金額は認識されずに残高が290imBTCとして更新される。

要はプロトコルとしては、1と2のトランザクションしか実行されたと認識されないまま、預託残高が290imBTCで更新され(実際の残高は0.00000001imBTC)、その残高でトークンを借りられたのです。そして、そのままトークンを返済せずにさような~となりました。

このようにしてハッカーは見事トークンを盗むことに成功したのでした。以下のグラフは衝撃的ですよね(笑)一瞬にして預託金がほぼ0になってしまっています。おそろしや。(出典元

今回多額の流出を被ったdForce社のLendf.meは、実はCompundというレンディングサービスのプログラムをパクったと言われていたり、また、本事件の直前にVCのMulticoin Capitalから資金調達を完了させていたこと、また昨日ハッカーから連絡があり、現在対話している最中であったり、前後で色々面白話があるみたいです。

Twitterで今回の事件をリソース含めて一連のツイートをしてる方がおれらましたので、興味のある方は読んでみてください

 

 

100

コメント(0件)

コメントを投稿するには記事を購入してください。