Slide 1

Slide 1 text

Akihiro Tanaka Euler Financeハッキング事件から学ぶ
 フラッシュローン攻撃


Slide 2

Slide 2 text

自己紹介
 - Ethereum Japan / Secured Finance スマートコントラクトエンジニア - 2014年にMt.GOXですべてを失ったことからブロックチェーンに目覚める - 2018年より複数社でブロックチェーン関連の開発に従事 - NFTを利用したエンタメアプリ、 AMLツール、STOプラットフォーム等の開発を手がける - 現在はSecured FinanceでDeFiプロダクトを開発中 - Twitter: @biga816

Slide 3

Slide 3 text

Photo by Pixabay フラッシュローンとは?
 - フラッシュローンとは、短時間で無担保の融資を行い、 一時的に巨額の資金を借り入れて利用してすぐに返済す ることができる仕組み - この仕組みでは担保を用意することなく、同一トランザ クション内で借り入れた金額を返済することでのみ資金の 借り入れが可能となっている - UniswapやAaveなど多くのDeFiプロトコルがフラッシュ ローンを提供している

Slide 4

Slide 4 text

Euler Financeとは? - CompoundやAaveのようなDeFiプロトコルと同じく資 金の貸し借りのできるレンディングプラットフォーム - このプロトコルの特徴は、各トークンのリスク特性に応 じて資産の「階層分け」を行っている点がある

Slide 5

Slide 5 text

- 3/13にEuler Financeがフラッシュローン攻撃を受け、約 2億ドルが盗まれた - フラッシュローン攻撃は Euler Financeの以下の2つの機能を利用して行われた 1) 手数料の保管や損失のカバーなどを行うリザーブへの寄付機能 (donateToReserves) 2) 最大19倍までレバレッジを効かして借入ができる Mint機能 (mint) - ハッキングは、この寄付機能にアカウントのヘルスチェックがなかったことを悪用して実施された - 実際のトランザクションの 1つがこちら https://etherscan.io/tx/0xc310a0affe2169d1f6feec1c63dbc7f7c62a887fa48795d327d4d2da2d6 b111d ハッキング概要


Slide 6

Slide 6 text

ハッキング詳細(1) : Main contract 1. Aaveからフラッシュローンで 3000万DAIを借りる 2. 攻撃のために2つのコントラクト「Vaiolator」「Liquidator」をデプロイする 3. 3000万DAIをMainからVaiolatorに送る。 Main Vaiolator Liquidator 3000万DAI 3000万DAI 1.Transfer 2.Deploy 2.Deploy 3.Transfer

Slide 7

Slide 7 text

ハッキング詳細(2) : Vaiolator contract 4. Euler Financeに2000万DAIを入金し、それに応じた 1956万eDAI(資産)を受け取る 5. レバレッジをかけ、資産として 1億9568万eDAI、負債として2億dDAIをmintする。 Vaiolator 2000万DAI 1956万eDAI 1億9568万eDAI&2億dDAI 4.Deposit 4.Transfer 5.Mint 4.Transfer 1956万+1億9568万 = 2億1524万(eDAI) 2億(dDAI)

Slide 8

Slide 8 text

ハッキング詳細(3) : Vaiolator contract 6. 1000万 DAIを返済し、dDAI残高を1億9000万に減らす 7. 資産に余力が生まれたので、再度レバレッジをかけ 1億9568万eDAIと2億dDAIをmintする Vaiolator 1000万DAI 1000万dDAI 1億9568万eDAI&2億dDAI 6.Repay 6.Transfer 7.Mint 7.Transfer 2億1524+1億9568万 ≒ 4億1093万(eDAI) 2億 - 1000万 + 2億 = 3億9000万(dDAI)

Slide 9

Slide 9 text

ハッキング詳細(4) : Vaiolator contract 8. 資産として保持している 4億1093万eDAIのうち、1億をリザーブに寄付する (donateToReserves) 9. 結果、eDAIより負債であるdDAIの方が多くなり、精算対象のアカウントとなる Vaiolator 1億eDAI 4.Donate 4億1093万 - 1億 = 3億1093万(eDAI) 3億9000万(dDAI)

Slide 10

Slide 10 text

ハッキング詳細(5) : Liquidator contract 10. Vaiolatorに対し精算処理を実行し、その報酬として 3億1093万eDAIと2億5931万dDAIを取得する 11. 資産であるeDAIの方が多いため、その余力分の 3890万DAIを引き出す Vaiolator 10.Liquidate 10.Transfer 11.Transfer Liquidator 10.Transfer 3億1093万eDAI &2億5931dDAI 11.Withdraw 3890万DAI 3億1093万eDAI &2億5931dDAI

Slide 11

Slide 11 text

ハッキング詳細(6) : Main contract 12. 3890万DAIをMainコントラクトに送る 13. Aaveに3000万DAIを送り、フラッシュローンで借りた分を返済する 14. 結果、890万DAIが手元に残る Main Vaiolator Liquidator 3000万DAI 3890万DAI 13.Transfer 12.Transfer

Slide 12

Slide 12 text

ハッキングの原因
 - 寄付機能であるdonateToReservesファンクションにヘルスチェックがなかったことが原因 - それにより、担保不足の状態を意図的に作ることができてしまった

Slide 13

Slide 13 text

ハッキングの原因

Slide 14

Slide 14 text

ハッキングの原因

Slide 15

Slide 15 text

ハッキングへの対策
 - 定期的にセキュリティ監査を実施していた → donateToReservesは監査の対象外 - Bug Bountyプログラムも実施していた → 利用していたプラットフォームがリンク切れ - フォーラムにて更新内容の提案 (eIP-14)、事前デプロイ、ディスカッション、コントラクト更新という手順を踏 んでいた → ディスカッションが活発にはされていない

Slide 16

Slide 16 text

セキュリティ対策を徹底しよう

Slide 17

Slide 17 text

フラッシュローン攻撃を防ぐ一般な方法
 - コントラクトからの呼び出しを不可能にすればフラッシュローンは防げるが、呼び元がコントラクトかどうか を確実に判定することはできない。 (OpneZeppelinのAddress.isContract参照。) - フラッシュローンを防ぐ方法は、以下の 3つが考えられる。 1) ロジックを2つのトランザクションに分割する 2) 信頼のできる外部オラクルを利用する 3) スリッページにリミットを設ける

Slide 18

Slide 18 text

Euler Financeハッキング事件のその後
 - 盗まれた資金のうち約 80%にあたる31,000ETHと3,000万DAIが返却された - オンチェーンメッセージで謝罪をしているらしい。 https://etherscan.io/tx/0xedd8102ca037abaeb75ce6a1afe951d2953258392d891ff23510276993 a5437c

Slide 19

Slide 19 text

Appendix - A Detailed Analysis of Euler Finance’s $196 Million Flash Loan Attack https://medium.com/@numencyberlabs/a-detailed-analysis-of-euler-finances-196-million-flash-loan-attack-81cdef370024 - Euler Finance Incident Post-Mortem https://medium.com/@omniscia.io/euler-finance-incident-post-mortem-1ce077c28454 - Mitigations against flash-loan enabled attacks https://www.smartcontractresearch.org/t/mitigations-against-flash-loan-enabled-attacks/615 - Euler Finance Hacker Apologizes, Returns Stolen $177 Million https://icoinmarket.com/euler-finance-hacker-apologizes-returns-stolen-177-million/

Slide 20

Slide 20 text

Thank you for your time 😊