MakerDAO (DAI) เตรียมอัพเดตระบบ ป้องกันการโจมตีจาก Flash Loan
จากเหตุการณ์โจมตี bZx ทั้งสองครั้งติด ๆ กัน ในไม่กี่วันที่ผ่านมา มูลค่าความเสียหายราว 28 ล้านบาท (ประมาณการ) ถือเป็นการโจมตี DeFi ครั้งใหญ่ครั้งแรก และใช้ DeFi หลายโปรโตคอลรวมกัน (DeFi composability) ในการโจมตีทั้งสองครั้ง
หมายเหตุ: สำหรับโปรโตคอลอื่นนอกเหนือจาก bZx เป็นการทำกำไรจาก ระบบการเงินปกติ แต่ส่วนของ bZx เกิดจาก Bug ใน Smart Contract
ref: https://thedefiant.substack.com/p/arbs-exploit-defi-to-make-900k-in
หากคนสนใจในรายละเอียดเชิงลึก ลองศึกษาจาก ref ด้านบน หรือค้นหา “bzx attack” ได้ครับ มีบทความวิเคราะห์ไว้หลากหลายทีเดียว
การตื่นตัวในการมาของ Flash Loan
Flash loan เป็นอีกหนึ่ง DeFi (Decentralized Finance) โปรโตคอล ที่พึงมีการพูดถึงกันไม่นาน ผู้เล่นในปัจจุบันมี dYdX, Aave และ bZx โดยการเข้าใจหลักการทำงานของโปรโตคอลนี้เป็นสิ่งสำคัญที่ผู้ออกแบบ DeFi ทุกคนควรศึกษา เพื่อที่จะได้เตรียมพร้อมรับมือกับเหตุการณ์ที่ไม่คาดฝันเช่นนี้
Flash Loan คืออะไร?
Flash loan คือโปรโตคอลการกู้ยืมแบบไม่ต้องค้ำประกัน (unsecured loan) โดยสามารถกู้เหรียญจำนวนเท่าใดก็ได้ (ตามที่ Pool มี) โดยมีเงื่อนไขเดียว คือต้องคืนเงินกู้เต็มจำนวนภายในเสี้ยววินาที!!! ฟังไม่ผิดครับ ต้องคืนเงินกู้ ณ เวลาเดียวกับตอนที่ยืมเลย
หรือถ้าอธิบายในภาษาเทคนิคคือ ต้องคืนภายใน Transaction เดียวกัน ดังนั้นคนธรรมดาทำไม่ได้แน่นอน (ยกเว้นคุณเป็น The Flash!) ต้องทำผ่าน Smart Contract เท่านั้น เพราะด้วยคุณสมบัติของ Smart Contract ที่ทำงานได้หลายคำสั่งใน Transaction เดียว ทำให้ Flash Loan ถือกำเนิดขึ้นมาได้ โดยผู้ปล่อยกู้จะเช็คว่าก่อนจบ Transaction ได้เงินกู้คืนมาครบหรือไม่ ถ้าไม่จะทำการยกเลิก (Revert) ทั้ง Transaction
หมายเหตุ: ผู้กู้ก็เป็น Smart Contract เช่นกัน และตอนคืนต้องคืนพร้อมดอกเบี้ย (ถ้ามี)
Flash Loan ทำอะไรได้บ้าง
- ใช้เพื่อทำ Arbitrage หรือทำกำไรจากราคาที่ต่างกันสองตลาด เช่นกู้ DAI ไปซื้อ ETH จาก Kyber ในราคาที่ถูกกว่า แล้วนำไปขายที่ Uniswap ในราคาที่แพงกว่า
- Collateral swap หรือ กู้เพื่อไปคืนเงินกู้ แล้วเอา Asset ที่ค้ำไว้ถอนออกมา แล้วเอาไปค้ำเพื่อกู้ต่อในอีกระบบนึง (Interest Rate Swap)
- Liquidation กู้เพื่อไปคืนเงินกู้ (เหมือนข้อ 2) แล้วเอา Asset ที่ค้ำไว้ไปขายในตลาด แล้วเอาส่วนนึงไปคืนเงินกู้ ส่วนมากวิธีนี้ใช้เพื่อป้องกันไม่ให้ถูก liquidate ที่จะเสียค่า penalty ที่สูง
ref: https://medium.com/aave/flash-loans-one-month-in-73bde954a239
เอา Flash Loan มาสร้างให้ระบบการเงินผิดปกติ
ตรงนี้ผมจะอธิบายคร่าว ๆ นะครับ ไม่ลงรายละเอียดมาก
ทั้ง 2 เคสที่โจมตี bZx คือ ผู้โจมตีเขียน Smart Contract เพื่อกู้เงินจาก Flash loan แล้วเอาไปทำ Arbitrage ในระบบ แต่แทนที่จะเป็นการทำ Arbitrage ธรรมดา กลับใช้เงินส่วนนึงที่กู้ ไปทำการปั่นราคา (Price Manipulation) ส่งผลให้ WBTC ราคาเกินจริงไปมาก ทำให้ได้กำไรจากการทำ Arbitrage โดยแทบไม่ต้องลงทุนอะไรเลย (เสียค่า gas ให้ Ethereum เล็กน้อย)
Maker Dao ตั้งการ์ดรับมือ ป้องกันไว้ดีกว่าแก้
เนื่องด้วยโปรโตคอล MakerDAO อาศัยเหรียญ MKR แทนเสียงโหวตเพื่อปรับค่า Parameters ต่าง ๆ ของระบบ ที่เรียกว่า Executive Vote โดยอำนาจของเหรียญนี้มีมาก (ถึงขนาดโหวตให้เสกเหรียญ MKR เพิ่มขึ้นมาก็ได้) ทำให้มีการกังวลว่าหลังจากเหตุการณ์ bZx เกิดขึ้นแล้ว อาจมีคนพยายามทำ Proposal ประสงค์ร้าย แล้วกู้ MKR จาก Flash loan มาโหวตให้ผ่านได้
วิธีการป้องกันก็เรียบง่ายมากครับทาง Maker ได้มีการร้องขอผ่าน Community ให้รวมเสียงของทั้ง Community มาไว้ที่ Hat ซึ่งเป็น Proposal ตั้งรับ โดยเสียง ณ ตอนนี้รวมกันได้ 150,000 เสียงแล้ว คิดเป็น 76% ของผู้มีสิทธิออกเสียงในปัจจุบัน หรือคิดเป็น 15% ของเหรียญที่มีอยู่ทั้งระบบ
โดยการทำแบบนี้ทำให้หากต้องการจะโจมตี ต้องมีเสียงมากกว่า 150,000 เสียงถึงจะชนะ ซึ่ง Flash loan pool ที่ผมเช็ค มีแค่ 890 เหรียญเท่านั้นเอง
หมายเหตุ: Hat คือ Proposal ตัวล่าสุดที่ได้รับการ Activated อยู่
MakerDAO Next Step
วันนี้ MakerDAO จะทำการเปิดโหวต Proposal เพื่อ Implement ระบบที่เรียกว่า GSM (Governance Security Module) ใช้ในการหน่วงเวลา Proposal ที่ชนะแล้ว ไม่ให้ทำการ Active ได้ทันที เช่น หน่วงเวลาเอาไว้ 24 ชั่วโมง เพียงเท่านี้ Flash loan ก็ทำอะไรไม่ได้แล้ว
สรุป สิ่งที่เราได้จากเหตุการณ์นี้
DeFi เป็น Ecosystem ที่ใหม่มาก และมีแนวโน้มว่าจะมีอัตราการเติบโตที่สูง (สูงกว่าที่ใครหลาย ๆ คนคิดไว้) การมี DeFi Protocol ที่มากขึ้นในอนาคต ก็อาจก่อให้เกิดความเสี่ยงที่มากขึ้นตาม โดยเฉพาะอย่างยิ่งการมี Bug ใน Smart Contract เมื่อเกิดความเสียหายแล้วก็ยากที่จะเอาเงินคืนกลับมาได้
สำหรับนักพัฒนา เราต้องตระหนักถึงเรื่องนี้ และเตรียมรับมือกับเหตุการณ์เหล่านี้ให้ได้ ขอให้ศึกษาระบบ DeFi แต่ละเจ้าให้ดี ทั้งหลักการทำงาน ทีมงาน และความปลอดภัยที่ระบบออกแบบไว้ อีกทั้งไม่ควรลงทุนในจำนวนที่มาก (ตามความเสี่ยงที่รับได้)
ต่อไปนี้ใครทำระบบอาจต้องคำนึงถึง Flash Loan ด้วยว่าระบบเราจะถูกโจมตีด้วยวิธีนี้หรือไม่ อย่าง MakerDAO ก็รีบหาทางป้องกันทันที เพราะถ้าหากวันหนึ่งใน Pool มีเหรียญ MKR มากพอแล้วถูกยืมมา Vote ตัว Proposal ที่ประสงค์ร้ายก็จะเกิดความเสียหายได้
ขอบคุณพี่ฮ้อ TonHorที่ช่วยตรวจบทความ