เมื่อวันที่ 10 มิถุนายน 2024 UwU Lend ถูกโจมตี และโครงการนี้สูญเสียเงินไปประมาณ 19.3 ล้านดอลลาร์สหรัฐ
SharkTeam ดำเนินการวิเคราะห์ทางเทคนิคของเหตุการณ์นี้ทันทีและสรุปข้อควรระวังด้านความปลอดภัย เราหวังว่าโครงการต่อ ๆ ไปจะสามารถเรียนรู้จากสิ่งนี้และร่วมกันสร้างแนวป้องกันความปลอดภัยสำหรับอุตสาหกรรมบล็อกเชน
1. การวิเคราะห์ธุรกรรมการโจมตี
ตัวรุก: 0x841dDf093f5188989fA1524e7B893de64B421f47
ผู้โจมตีเริ่มธุรกรรมการโจมตีทั้งหมด 3 รายการ:
ธุรกรรมการโจมตี 1:
0x242a0fb4fde9de0dc2fd42e8db743cbc197ffa2bf6a036ba0bba303df296408b
ธุรกรรมการโจมตี 2:
0xb3f067618ce54bc26a960b660cfc28f9ea0315e2e9a1a855ede1508eb4017376
ธุรกรรมการโจมตี 3:
0xca1bbf3b320662c89232006f1ec6624b56242850f07e0f1dadbe4f69ba0d6ac3
ใช้ธุรกรรมการโจมตี 1 เป็นตัวอย่างในการวิเคราะห์:
สัญญาการโจมตี: 0x21c58d8f816578b1193aef4683e8c64405a4312e
สัญญาเป้าหมาย: สัญญาซื้อคืน UwU Lend ได้แก่:
ดอลลาร์สหรัฐ: 0xf1293141fc6ab23b2a0143acc196e3429e0b67a6
uDAI: 0xb95bd0793bcc5524af358ffaae3e38c3903c7626
คุณUSDT: 0x24959f75d7bda1884f1ec9861f644821ce233c7d
กระบวนการโจมตีมีดังนี้:
1. โทเค็นยืมแฟลชหลายโทเค็นจากแพลตฟอร์มที่แตกต่างกัน รวมถึง WETH, WBTC, sUSDe, USDe, DAI, FRAX, USDC, GHO
ที่อยู่การรับโทเค็นคือ 0x4fea76b66db8b548842349dc01c85278da3925da
โทเค็นและปริมาณของสินเชื่อแฟลชมีดังนี้:
เงินกู้ Flash จาก Aave V3 159, 053.16 WETH และ 14, 800 WBTC
สินเชื่อ Flash 40,000 WETH จาก Aave V2
สินเชื่อ Flash 91,075.70 WETH และ 4,979.79 WBTC จาก Spark
สินเชื่อแฟลชจาก Morpho 301, 738, 880.01 sUSDe, 236, 934, 023.17 USDe และ 100, 786, 052.15 DAI
สินเชื่อแฟลช 60, 000, 000 FRAX และ 15, 000, 000 USDC จาก Uniswap V3: FRAX-USDC
เงินกู้ Flash จาก Balancer 4,627,557.47 GHO และ 38,413.34 WETH
สินเชื่อแฟลช 500, 000, 000 DAI จาก Maker
รวมประมาณ 328,542.2 WETH, 19779.79 WBTC, 600786052.15 DAI, 301,738,880.01 sUSDe, 236,934,023.17 USDe, 4,627,557.47 GHO, 60,000,000 FRAX, 15, 000, 00 ดอลลาร์สหรัฐ
2. โอน Flash Loan Token ไปที่สัญญา 0xf19d66e82ffe8e203b30df9e81359f8a201517ad (ตัวย่อว่า 0x f 19 d) เพื่อเตรียมพร้อมสำหรับการโจมตี
3. ควบคุมราคา sUSDe (ลดราคา) โดยการแลกเปลี่ยนโทเค็น
(1)USDecrvUSD.แลกเปลี่ยน
แปลง 8, 676, 504.84 USDe เป็น 8, 730, 453.49 crvUSD จำนวน USDe ใน USDecrvUSD จะเพิ่มขึ้นและราคาจะลดลง จำนวน crvUSD จะลดลงและราคาจะเพิ่มขึ้น
(2) USDeDAI. แลกเปลี่ยน
แปลง 46, 452, 158.05 USDe เป็น 14, 389, 460.59 DAI จำนวน USDe ใน USDeDAI เพิ่มขึ้น ราคาลดลง จำนวน DAI ลดลง และราคาเพิ่มขึ้น
(3)FRAXUSDe.แลกเปลี่ยน
แปลง 14, 477, 791.69 USDe เป็น 46, 309, 490.86 FRAX จำนวน USDe ใน USDeDAI เพิ่มขึ้น และราคาลดลง และราคาเพิ่มขึ้น
(4)GHOUSDe.แลกเปลี่ยน
แปลง 4,925,427.20 USDe เป็น 4,825,479.07 GHO จำนวน USDe ใน USDeDAI เพิ่มขึ้นและราคาลดลง จำนวน GHO ลดลงและราคาเพิ่มขึ้น
(5)USDeUSDC.แลกเปลี่ยน
แปลง 14, 886, 912.83 USDe เป็น 14, 711, 447.94 USDC จำนวน USDe ใน USDeDAI เพิ่มขึ้น ราคาลดลง จำนวน USDC ลดลง และราคาเพิ่มขึ้น
หลังจากการแลกเปลี่ยนข้างต้น ราคาของ USDe ใน 5 กองทุนรวมก็ลดลง ส่งผลให้ราคา sUSDe ลดลงอย่างรวดเร็ว
4. สร้างสถานะการให้ยืมอย่างต่อเนื่อง นั่นคือ ฝากสินทรัพย์อื่น ๆ (WETH, WBTC และ DAI) ลงในสัญญา LendingPool จากนั้นให้ยืม sUSDe เนื่องจากราคาของ sUSDe ลดลง จำนวนเงินกู้ sUSDe จึงสูงกว่าก่อนที่ราคาจะดิ่งลงมาก
5. เช่นเดียวกับขั้นตอนที่ 3 การดำเนินการย้อนกลับจะทำให้ราคา sUSDe สูงขึ้น
เนื่องจาก sUSDe ถูกปั๊มสูงขึ้น มูลค่าของสถานะที่ยืมในขั้นตอนที่ 4 จึงเกินมูลค่าหลักประกัน ซึ่งเข้าเกณฑ์ในการชำระบัญชี
6. ชำระบัญชีสินเชื่อเป็นชุดและรับรางวัลการชำระบัญชี uWETH
7. ชำระคืนเงินกู้และถอนสินทรัพย์อ้างอิง WETH, WBTC, DAI และ sUSDe
8. ฝาก sUSDe เข้าสู่ LendingPool อีกครั้ง ในเวลานี้ ราคาของ sUSDe เพิ่มขึ้น เพื่อให้สามารถกู้ยืมสินทรัพย์อื่น ๆ ได้มากขึ้น รวมถึง DAI และ USDT
9. แลกเปลี่ยนโทเค็นและชำระคืนเงินกู้แฟลช กำไรสุดท้าย 1,946.89 ETH
2. การวิเคราะห์ช่องโหว่
จากการวิเคราะห์ข้างต้น พบว่ามีสินเชื่อแฟลชจำนวนมากและมีการปรับเปลี่ยนราคาของ sUSDe หลายครั้งในกระบวนการโจมตีทั้งหมด เมื่อมีการจำนอง sUSDe จะส่งผลกระทบต่อจำนวนสินทรัพย์ที่ให้ยืม จะส่งผลต่ออัตราการกู้ยืมและค่าสัมประสิทธิ์การชำระบัญชี (ปัจจัยด้านสุขภาพ)
ผู้โจมตีใช้ประโยชน์จากสิ่งนี้เพื่อลดราคาของ sUSDe ผ่านการกู้ยืมแบบแฟลช จำนองทรัพย์สินอื่น ๆ ให้ยืม sUSDe จำนวนมาก จากนั้นเพิ่มราคาของ sUSDe เลิกกิจการสินทรัพย์จำนองเพื่อทำกำไร และจำนอง sUSDe ที่เหลือเพื่อให้ยืม ออกจากทรัพย์สินอื่น ๆ ในที่สุดก็ชำระคืนเงินกู้แฟลชและการโจมตีก็เสร็จสิ้น
จากขั้นตอนที่ 3 ข้างต้น เราพบว่าผู้โจมตีควบคุมราคาของ sUSDe โดยการควบคุมราคาของ USDe ในกลุ่มการซื้อขายทั้งห้าของ Curve Finance: USDe/rvUSD, USDe/AI, FRAX/SDe, GHO/SDe และ USDe/SDC ฟังก์ชั่นการอ่านราคามีดังนี้:
ในบรรดาราคา sUSDe คำนวณจากราคา 11 รายการ โดย 10 รายการแรกอ่านจาก CurveFinance และรายการสุดท้ายมาจาก Uniswap V3
ราคาที่อ่านจาก CurveFinance นั้นมาจากกลุ่มการซื้อขายห้ากลุ่ม USDe/rvUSD, USDe/AI, FRAX/SDe, GHO/SDe และ USD/SDC ซึ่งเป็นกลุ่มการซื้อขายห้ากลุ่มที่ถูกจัดการโดยผู้โจมตีในธุรกรรมการโจมตี
ราคาที่ส่งคืนจะคำนวณจากราคาที่อ่านโดย uwuOracle, price_oracle(0) และ get_p(0) ในสัญญากลุ่มการซื้อขาย CurveFinance
(1) ราคาคือราคาที่ Chainlink ระบุไว้และไม่สามารถเปลี่ยนแปลงได้
(2) พารามิเตอร์กลุ่มการซื้อขาย
ผู้โจมตีจัดการค่าที่ส่งคืนของ get_p(0) โดยจัดการจำนวนโทเค็นในกลุ่มการซื้อขาย ดังนั้นจึงจัดการราคา
3. คำแนะนำด้านความปลอดภัย
เพื่อตอบสนองต่อการโจมตีนี้ ควรปฏิบัติตามข้อควรระวังต่อไปนี้ในระหว่างกระบวนการพัฒนา:
(1) เพื่อแก้ไขช่องโหว่ของการปั่นราคา สามารถใช้ออราเคิลราคาแบบออฟไลน์เพื่อหลีกเลี่ยงการปั่นราคาได้
(2) ก่อนที่โปรเจ็กต์จะออนไลน์ การตรวจสอบสัญญาอัจฉริยะจะต้องดำเนินการโดยบริษัทตรวจสอบมืออาชีพบุคคลที่สาม
เกี่ยวกับเรา
วิสัยทัศน์ของ SharkTeam คือการรักษาความปลอดภัยให้กับโลกของ Web3 ทีมงานประกอบด้วยผู้เชี่ยวชาญด้านความปลอดภัยที่มีประสบการณ์และนักวิจัยอาวุโสจากทั่วโลก ซึ่งมีความเชี่ยวชาญในทฤษฎีพื้นฐานของบล็อคเชนและสัญญาอัจฉริยะ โดยให้บริการต่างๆ เช่น การระบุและการบล็อกความเสี่ยง การตรวจสอบสัญญาอัจฉริยะ KYT/AML การวิเคราะห์ออนไลน์ ฯลฯ และได้สร้างแพลตฟอร์มการระบุความเสี่ยงและการบล็อกอัจฉริยะแบบออนไลน์ ChainAegis ซึ่งสามารถต่อสู้กับภัยคุกคามขั้นสูงแบบต่อเนื่อง (ขั้นสูง) ได้อย่างมีประสิทธิภาพ ภัยคุกคามถาวร) ในโลก Web3 , APT) ได้สร้างความสัมพันธ์ความร่วมมือระยะยาวกับผู้เล่นหลักในด้านต่างๆ ของระบบนิเวศ Web3 เช่น Polkadot, Moonbeam, polygon, Sui, OKX, imToken, Collab.Land, TinTinLand เป็นต้น
เว็บไซต์อย่างเป็นทางการ: https://www.sharkteam.org
ทวิตเตอร์: https://twitter.com/sharkteamorg
โทรเลข: https://t.me/sharkteamorg
ดิสคอร์ด: https://discord.gg/jGH9xXCjDZ