เมื่อวันที่ 15 พฤษภาคม 2024 Sonne Finance ถูกโจมตี และโครงการนี้สูญเสียเงินไปกว่า 20 ล้านดอลลาร์สหรัฐ
SharkTeam ดำเนินการวิเคราะห์ทางเทคนิคของเหตุการณ์นี้ทันทีและสรุปข้อควรระวังด้านความปลอดภัย เราหวังว่าโครงการต่อ ๆ ไปจะสามารถเรียนรู้จากสิ่งนี้และร่วมกันสร้างแนวป้องกันความปลอดภัยสำหรับอุตสาหกรรมบล็อกเชน
1. การวิเคราะห์ธุรกรรมการโจมตี
ตัวรุก: 0xae4a7cde7c99fb98b0d5fa414aa40f0300531f43
สัญญาการโจมตี: 0x02fa2625825917e9b1f8346a465de1bbc150c5b9
สัญญาเป้าหมาย: 0xe3b81318b1b6776f0877c3770afddff97b9f5fe5
ธุรกรรมการโจมตี: 0x9312ae377d7ebdf3c7c3a86f80514878deb5df51aad38b6191d55db53e42b7f0
กระบวนการโจมตีมีดังนี้:
1. ยืมแฟลช 35, 569, 150 VELO และโอนโทเค็น VELO เหล่านี้ไปยังสัญญา soVELO
เนื่องจากเป็นการโอนเงินโดยตรง (การบริจาค) ดังนั้นโทเค็น soVELO จึงไม่ถูกสร้างขึ้น ดังนั้น ในสัญญา soVELO TotalCash เพิ่มขึ้น 35, 569, 150 VELO และ TotalSupply ของ soVELO ยังคงไม่เปลี่ยนแปลง
2. ผู้โจมตีสร้างสัญญาใหม่ 0xa16388a6210545b27f669d5189648c1722300b8b และเริ่มการโจมตีสัญญาเป้าหมายในสัญญาใหม่ กระบวนการโจมตีมีดังนี้:
(1) โอน 2 soVELO ไปยังสัญญาใหม่
(2) ประกาศ soWETH และ soVELO เป็นหลักประกัน
(3) ยืมจากเลขที่ 265, 842, 857, 910, 985, 546, 929 WETH
จากกระบวนการดำเนินการของฟังก์ชันยืมข้างต้น ตามค่าที่ส่งคืนของฟังก์ชัน getAccountSnapshot เราพบว่า:
สำหรับสัญญา soWETH ยอดคงเหลือของสัญญาใหม่คือ 0 จำนวนเงินกู้คือ 0 และอัตราแลกเปลี่ยน (exchangeRate) คือ 208, 504, 036, 856, 714, 856, 032, 085, 073
สำหรับสัญญา soVELO ยอดคงเหลือของสัญญาใหม่คือ 2 นั่นคือ 2 wei ของ soVELO ถูกจำนอง จำนวนเงินกู้คือ 0 และอัตราแลกเปลี่ยน (exchangeRate) คือ 17, 735, 851, 964, 756, 377, 265, 143, 988, 000, 000 , 000, 000, 000, 000
exchangeRate คำนวณดังนี้:
เมื่อจำนอง soVELO 1 wei คุณสามารถยืมได้ไม่เกิน 17, 735, 851, 964, 756, 377, 265, 143, 988 VELO และยืม 265, 842, 857, 910, 985, 546, 929 WETH, คุณต้องจำนองอย่างน้อย 265 , 842, 857, 910, 985, 546, 929 ดังนั้น
ราคาของ soWETH: ราคาของ soWETH = 2, 892, 868, 789, 980, 000, 000, 000,
ราคาของ soVELO: ราคา soVELO = 124, 601, 260, 000, 000, 000
จำนวน WETH ที่ soVELO สามารถยืมได้โดยมี 1 wei ให้คำมั่นไว้ดังนี้:
1 * อัตราการแลกเปลี่ยน * soVELOราคา / ดังนั้นราคา = 763, 916, 258, 364, 900, 996, 923
ประมาณ 763 วธ. หลักประกัน soVELO เพียง 1 wei ก็เพียงพอที่จะรองรับเงินกู้นี้
การกู้ยืม 265, 842, 857, 910, 985, 546, 929 WETH (ประมาณ 265 WETH) จะถูกแปลงเป็นหลักประกัน soVELO จำนวนเงินขั้นต่ำที่ต้องเป็นหลักประกันคือ:
265, 842, 857, 910, 985, 546, 929 * ดังนั้นWETHราคา / soVELOราคา / อัตราการแลกเปลี่ยน = 0.348
นั่นคือ 1 wei ของหลักประกัน soVELO ก็เพียงพอแล้ว
ในความเป็นจริง 2 wei ของหลักประกัน soVELO ถูกใช้สำหรับการยืมเพียง 1 wei เท่านั้น
(4) ไถ่ถอนทรัพย์สินอ้างอิง ได้แก่ 35, 471, 603, 929, 512, 754, 530, 287, 976 VELO
อัตราแลกเปลี่ยน = 17, 735, 851, 964, 756, 377, 265, 143, 988, 000, 000, 000, 000, 000, 000
จำนวนหลักประกัน soVELO ที่ต้องใช้ในการแลก 35, 471, 603, 929, 512, 754, 530, 287, 976 VELO คือ
35, 471, 603, 929, 512, 754, 530, 287, 976 * 1 e 18 / อัตราการแลกเปลี่ยน = 1.99999436
เมื่อคำนวณ เนื่องจากการคำนวณใช้การตัดทอนแทนการปัดเศษ หลักประกันที่จำเป็นที่คำนวณได้จริงคือ soVELO เท่ากับ 1 wei
หลักประกันที่แท้จริงคือ 2 wei ของ soVELO โดย 1 wei ใช้สำหรับเงินกู้ข้างต้นจำนวน 265 WETH และอีก 1 wei ที่เหลือใช้สำหรับไถ่ถอน 35 M VELO
(5) โอน 265 WETH ที่ยืมมาและ VELO 35 M ที่แลกแล้วไปยังสัญญาโจมตี
3. ทำซ้ำ 3 ครั้ง (รวมทั้งหมด 4 ครั้ง) เพื่อสร้างสัญญาใหม่และโจมตีซ้ำ
4. สุดท้าย ชำระคืนเงินกู้แฟลช
2. การวิเคราะห์ช่องโหว่
มีช่องโหว่สองช่องโหว่ในการโจมตีข้างต้น:
(1) การโจมตีด้วยการบริจาค: โอนโดยตรง (บริจาค) โทเค็น VELO ไปยังสัญญา soVELO โดยเปลี่ยนอัตราการแลกเปลี่ยน ทำให้ผู้โจมตีสามารถให้ยืมประมาณ 265 WETH โดยมีเพียง 1 wei soVELO เป็นหลักประกัน
(2) ปัญหาความแม่นยำในการคำนวณ: การใช้การสูญเสียความแม่นยำในระหว่างขั้นตอนการคำนวณและอัตราแลกเปลี่ยนที่แก้ไข ทำให้สามารถแลก 35 M VELO ได้โดยจำนอง 1 wei soVELO เท่านั้น
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