📢 #GateOpinionQuest# สำหรับ #50# ออนไลน์แล้ว! DYOR เกี่ยวกับ Ola (OLA), แบ่งปันความคิดเห็นของคุณใน Gate.io Post, รับรางวัล OLA มูลค่า $100!
💰 เลือก 10 ผู้เข้าร่วมโชคดี ชนะรางวัล $10 ใน $OLA แต่ละคนได้ง่ายๆ!
👉 วิธีการเข้าร่วม:
1. วิจัย Ola (OLA) และแบ่งปันความเห็นของคุณใน Gate.io Post.
2.แสดงรายกา
Web3 คำเตือนเกี่ยวกับความปลอดภัย | การวิเคราะห์เหตุการณ์การโจมตี Sonne Finance ที่สูญเสียมูลค่าสูงถึง 20 ล้านเหรียญสหรัฐ
เมื่อวันที่ 15 พฤษภาคม พ.ศ. 2024 Sonne Finance ประสบกับการโจมตี Optimism on-chain โดยขาดทุนสูงถึง $2 k 0000
หลังจากเกิดการโจมตี ผู้ใช้ @tonyke_bot บน X ได้โพสต์ทวีตกล่าวว่าเขาได้ปกป้องกองทุนที่มีค่าประมาณ 100 ดอลลาร์ของ Sonne Finance (ที่เรียกว่า market ซึ่งคล้ายกับ cToken ใน Compound) ที่เหลืออยู่ประมาณ 6.5 ล้านดอลลาร์
(\_bot/status/1790547461611860182)
หลังจากค้นพบการโจมตีทีมโครงการ Sonne Finance ได้ระงับตลาดทั้งหมดอย่างรวดเร็วในแง่ดีและกล่าวว่าตลาดบน Base นั้นปลอดภัย
(**)
บรรยายสรุปการโจมตี
Sonne Finance เป็นโปรโตคอลการยืมในรูปแบบเดียวกับ Compound V2 บน Optimism ที่ให้บริการทางการเงินให้แก่บุคคลทั่วไป สถาบันการเงิน และโปรโตคอล Sonne Finance รวบรวมสินทรัพย์โทเค็นของผู้ใช้เข้าด้วยกันเพื่อสร้างสรรค์พูลเหลืองยืมให้แก่ผู้ใช้ เช่นเดียวกับธนาคาร ผู้เข้าร่วมโปรโตคอลสามารถจำนองโทเค็นที่เขาถือครองเข้าสู่พูลเหลืองยืมเงินของ Sonne Finance พร้อมทั้งได้รับใบรับรอง soToken (เช่นเดียวกับ cToken) soToken เป็นสินทรัพย์ที่ให้ผลตอบแทน โดยได้รับผลตอบแทนจากการเลื่อนบล็อกและได้รับการส่งเสริมด้วย SONNE token นอกจากนี้ผู้เข้าร่วมโปรโตคอลยังสามารถยืมสินทรัพย์อื่นๆ จากพูลทรัพย์ยืมของ Sonne ได้ เช่นผู้เข้าร่วมโปรโตคอลสามารถจำนอง USDC เพื่อรับ soUSDC แล้วยืม WETH เพื่อการหมุนเวียนขั้นตอนถัดไป การจำนองและการยืมในโปรโตคอล Sonne Finance สามารถมีการจำนองและการยืมในรูปแบบหลายต่อหลายสินทรัพย์ ในขั้นตอนการจำนองและการยืม โปรโตคอลจะคำนวณอัตราส่วนความสมบูรณ์ของที่อยู่ของผู้เข้าร่วม (Health Factor) เมื่อค่า Health Factor ต่ำกว่า 1 ที่อยู่จะถูกล้างล้าง และผู้ล้างอาจได้รับรางวัลจากกระบวนการล้างได้
ความสัมพันธ์ระหว่างโทเค็นอ้างอิงที่ฝากโดยผู้ใช้และจํานวนการสร้าง soTokens ส่วนใหญ่เกี่ยวข้องกับตัวแปรที่เรียกว่า exchangeRate ซึ่งสามารถใช้โดยประมาณเพื่อแสดงมูลค่าของโทเค็นอ้างอิงที่ยาวที่สุดหรือน้อยกว่า อัตราแลกเปลี่ยนคํานวณได้ดังนี้:
ในสูตรข้างต้น totalCash หมายถึงจํานวนโทเค็นอ้างอิงที่ถือโดย soToken, totalBorrows หมายถึงจํานวนโทเค็นอ้างอิงที่ให้ยืมในตลาด totalReserves หมายถึงจํานวนทุนสํารองทั้งหมด (รวมถึงดอกเบี้ยที่จ่ายโดยผู้กู้) และ totalSupply หมายถึงจํานวนการสร้าง soTokens
เมื่อแลกผู้ใช้สามารถระบุจํานวนโทเค็นอ้างอิงที่จะไถ่ถอน redeemAmount เพื่อคํานวณจํานวน soTokens ที่ต้องเผา redeemTokens วิธีการคํานวณคร่าวๆ "redeemTokens = redeemAmount / exchangeRat", **โปรดทราบว่าไม่มีการประมวลผลการสูญเสียความแม่นยําที่นี่ **
การโจมตีครั้งนี้เกิดจากการสร้างตลาด (soToken) เมื่อผู้โจมตีดำเนินการด้วยการสร้างเหรียญทุนต่ำของ underlying token และ soToken จำนวนน้อย ทำให้ค่า "totalSupply" ของ soToken น้อยเกินไป ผู้โจมตีจากนั้นใช้ช่องโหว่การสูญเสียความแม่นยำของสัญญา Solidity โดยส่ง underlying token โดยตรงไปยังสัญญา soToken (ที่ไม่ได้สร้าง soToken นั่นหมายความว่า "totalSupply" ยังคงเดิมแต่ "totalCash" เพิ่มขึ้น) โดยไม่ใช้วิธีการมัดจำ + การสร้างเหรียญ underlying token ดังกล่าวทำให้ค่าตัวแปร "totalCash" ในสัญญาเพิ่มขึ้น แต่ "totalSupply" คงที่ ซึ่งทำให้ exchangeRate เพิ่มขึ้น ผู้โจมตีสุดท้ายจึงสามารถใช้ soToken ที่ได้รับกำไรไปยืม underlying token WETH, USDC จาก soToken อื่น (เช่น soWETH, soUSDC) และสุดท้ายได้กำไรสูงถึง 20 ล้านดอลลาร์
**ที่อยู่ที่สําคัญที่เกี่ยวข้องกับการโจมตี
การซื้อขายพร้อมโจมตี:
\u003e > ** > >
การโจมตีการซื้อขายที่ทํากําไร:
> > \u003e > ** \u003e \u003e
โจมตีที่อยู่ที่เกี่ยวข้องกับ EOA:
> \u003e
\u003e > \u003e 0xae4a7cde7c99fb98b0d5fa414aa40f0300531f43 \u003e >
ที่อยู่ที่เกี่ยวข้องกับผู้โจมตี (สัญญา):
\u003e
\u003e 0xa78aefd483ce3919c0ad55c8a2e5c97cbac1caf8
>
\u003e 0x02fa2625825917e9b1f8346a465de1bbc150c5b9 > สวัสดี \u003e
โทเค็นอ้างอิง (VELO Token V2):
\u003e
漏洞合約(soVELO,類似於 Compound 的 cToken):
\u003e \u003e
X 上 @tonyke_bot ผู้ใช้เรียกคืนธุรกรรมช่วยเหลือ
> ข้อความที่ต้องการแปล > **
\u003e
วิเคราะห์กระบวนการโจมตี
สรุปเนื้อหาก่อนหน้า
(Note: The translation might vary depending on the context. This is a general translation.)
Sonne Finance ผู้วางโครงการเร็ว ๆ นี้ได้รับการอนุมัติในข้อเสนอที่จะเพิ่ม VELO market ไปยัง Sonne Finance () และได้จัดการธุรกรรม 5 ครั้งที่จะดำเนินการหลังจาก 2 วัน (), ธุรกรรมเหล่านี้ใช้สำหรับสร้าง VELO market (soVELO contract) และตั้งค่าการกำหนดค่าสำคัญต่าง ๆ ของตลาดนั้น เช่น การตั้งรูปแบบอัตราดอกเบี้ย, การตั้งค่าเครื่องทำนายราคา, ตั้งค่าปัจจัยการหลักประกัน ฯลฯ หลังจากการสร้าง VELO market เสร็จสิ้น ผู้ใช้สามารถฝากเหรียญ VELO เพื่อผลิตเหรียญ soVELO ต่อไป และเหรียญ soVELO สามารถใช้ในการกู้ยืม soToken อื่น ๆ
เตรียมการโจมตี
การเตรียมการโจมตีหลักคือเมื่อผู้โจมตีสร้าง VELO market (โดยใช้สัญญา soVELO) ตามข้อมูลในข้อเสนอโครงการของ Sonne Finance หลังจากสิ้นสุดระยะเวลาล็อกของข้อเสนอสองวัน ผู้โจมตีจะตั้งค่าการตั้งค่าสำคัญและกำหนดรายการ VELO โทเค็นเข้าสู่สัญญา soVELO เพื่อสร้างเหรียญ soVELO ในขณะเดียวกัน ผู้โจมตียังจะเพิ่ม exchangeRate โดยการส่งโทเค็น VELO ที่ถืออยู่โดยตรงไปยังสัญญา soVELO เป็นการเตรียมการเพื่อทำกำไรจากการโจมตีในอนาคต
具体步骤如下:
soVELO.mint:
3. ผู้โจมตีใช้วิธีการส่งโทเค็น VELO โดยตรงไปยังสัญญา soVELO และส่งโทเค็น VELO ที่มีค่าเป็น "2,552,964,259,704,265,837,526" ไปยังสัญญา soVELO ซึ่งทำให้โทเค็น VELO ที่ถือครองโดยสัญญา soVELO เพิ่มขึ้น แต่เนื่องจากไม่มีการสร้างโทเค็น soVELO ใหม่ จึงทำให้ totalSupply คงที่ ซึ่งหมายความว่า exchangeRate ที่คำนวณจากสูตร exchangeRate ก็จะเพิ่มขึ้น 4. ผู้โจมตีโอนโทเค็น soVELO ที่ถืออยู่ไปหลายครั้งและสุดท้ายโอนให้กับ EOA โจมตีอื่น 0xae4a
โจมตีเพื่อทํากําไร
ผลประโยชน์จากการโจมตีในขั้นตอนนี้ส่วนใหญ่คือการดำเนินการธุรกรรมที่ห้าของผู้โจมตีและใช้กู้ยืมสินทรัพย์ VELO โดยตรงจากสัญญา soVELO เพื่อเพิ่ม exchangeRate ต่อไป ต่อมาผู้โจมตีใช้สินทรัพย์ soVELO ที่มีค่าเป็น 2 ต่อไปยังสัญญา soToken อื่น ๆ (เช่น soWETH, soUSDC เป็นต้น) เพื่อกู้ยืม WETH, USDC และสินทรัพย์ใต้เครื่องหมายเงินตราอื่น ๆ ส่วนเหลือเป็นส่วนที่ผู้โจมตีได้รับกำไร ต่อมาผู้โจมตีไปไปเปลี่ยนคืนสินทรัพย์ใต้เครื่องหมายเงินตราของตัวเองจากสัญญา soVELO โดยเนื่องจาก exchangeRate เพิ่มขึ้นและปัญหาการสูญเสียความแม่นยำในการคำนวณจำนวน soVELO ที่ต้องทำลายเมื่อได้รับค่าสินทรัพย์ใต้เครื่องหมายเงินตรา ผู้โจมตีสามารถแลกคืนสินทรัพย์ VELO เกือบทั้งหมดที่ฝากไว้ก่อนหน้านี้โดยใช้ soVELO ที่มีค่าเป็น 1 เท่านั้น สามารถอธิบายได้ว่าผู้โจมตีได้ใช้ soVELO ที่มีค่าเป็น 1 จำนวนมากเพื่อสร้างกำไรจากการยืมเงินจาก soToken อื่น ๆ เช่น WETH, USDC เป็นต้น ผู้โจมตีทำซ้ำกระบวนการโจมตีด้วยวิธีเดียวกันหลายครั้งเพื่อกำไรมหาศาล
ขั้นตอนที่แน่นอนคือดังนี้:
จากฟังก์ชัน "exchangeRateStoredInternal" เราจะเห็นได้ว่าเนื่องจากขณะนี้ \_totalSupply คือ 2 ไม่ใช่ 0 จึงต้องคำนวณค่า exchangeRate โดยใช้สูตร "exchangeRate = (totalCash + totalBorrows - totalReserves) / totalSupply" จึงคำนวณได้ว่า exchangeRate ปัจจุบันคือ "17,735,851,964,756,377,265,143,988,000,000,000,000,000,000" ที่มีค่ามากกว่าค่าเริ่มต้นของ exchangeRate "200,000,000,000,000,000,000,000,00"
ผลลัพธ์จากการแปลคือ "ค่า 'redeemTokens' ที่คำนวณจากอัตราแลกเปลี่ยนใหม่คือ '1.99' โดยเนื่องจากคุณสมบัติของ Solidity ที่ปัดเศษลง ค่า 'redeemTokens' จะมีค่าเป็น 1 ในที่สุด นั่นหมายความว่าผู้โจมตี 0xa163 ใช้โทเค็น soVELO ค่า 1 เพื่อแลกคืนโทเค็น VELO เกือบทั้งหมดที่เคยฝากไว้ ในเวลาเดียวกันผู้โจมตี 0xa163 ก็ได้รับผลกำไรจากการยืม WETH ค่า '265,842,857,910,985,546,929' จาก soWETH"
soVELO.redeem บริการอ้างอิง:
com.soVELO.exchangeRateStoredInternal: 7. ผู้โจมตี 0xa163 โอน WETH ที่ยืมมาทั้งหมดและแลก VELO Token ไปยังผู้โจมตีด้านบนจากนั้นทําลายตัวเอง 8. ผู้โจมตีเรียกใช้ฟังก์ชั่น "liquidateBorrow" ของ soWETH เพื่อล้างค่าทรัพย์สินบางส่วนที่ถูกยืมเงินโดยสัญญาสร้างตัวใหม่ 0xa163 เพื่อกู้คืนโทเค็น soVELO ที่ถูกล็อกค่า 1 ปัจจุบันผู้โจมตีเพียงถือครองโทเค็น soVELO ค่า 1 เท่านั้น 9. ผู้โจมตีเรียกใช้ฟังก์ชัน "สร้าง" ของ soVELO อีกครั้งเพื่อดาวน์เงินเหรียญ soVELO ที่เพียงพอสำหรับจำนวน 2 soVELO เหรียญแล้วดำเนินการตามขั้นตอนที่ 3-8 ดังกล่าวอีกครั้งเพื่อผลกำไรจากเหรียญ undeylying อื่น ๆ 10. ผู้โจมตีทําขั้นตอนที่ 9 หลายครั้งชําระเงินกู้แฟลชและออกจากตลาดด้วยกําไร
$100 เป็นวิธีใดที่จะสร้างความเปลี่ยนแปลงมูลค่า $6.5 ล้าน
หลังจากการโจมตีเกิดขึ้น ผู้ใช้ @tonyke_bot บน X ได้ใช้การฝังหลักประกัน 1144 โทเค็น VELO ไปยังสัญญา soVELO ผ่านการฝัง และสร้าง soVELO จำนวน 0.00000011 หน่วย ด้วยวิธีการนี้ การดำเนินการนี้สามารถป้องกันการโจมตีเพิ่มเติมจากผู้โจมตีได้ เนื่องจากธุรกรรมนี้เปลี่ยนแปลงขนาดของ totalSupply และจำนวนจำนวนเงิน totalCash ที่ถือครองใน soVELO ซึ่ง totalSupply เพิ่มขึ้นมีผลกระทบต่อการคำนวณอัตราแลกเปลี่ยนมากกว่า totalCash เพิ่มขึ้น ดังนั้นอัตราแลกเปลี่ยนจะลดลง จึงทำให้ผู้โจมตีไม่สามารถทำกำไรจากการสูญเสียความแม่นยำในการซื้อขาย soVELO และทำให้ไม่สามารถดำเนินการโจมตีได้อีกต่อไป
การติดตามเงินทุน
ผู้โจมตีโอนเงินไม่นานหลังจากคว้าเงินที่ผิดกฎหมายซึ่งส่วนใหญ่ถูกโอนไปยังที่อยู่ 4 แห่งต่อไปนี้บางส่วนเพื่อดําเนินการต่อการโจมตีที่ที่อยู่อื่นและบางส่วนไปยังการฟอกเงิน:
ผู้โจมตีโอน 198 WETH ไปยังที่อยู่จากนั้นที่อยู่ใช้กลยุทธ์การโจมตีเดียวกันเพื่อรับเงินที่ผิดกฎหมายในการทําธุรกรรมต่อไปนี้:
หลังจากการโจมตีที่อยู่จะโอนเงินไปยัง * 0x5d0d99e9886581ff8fcb01f35804317f5ed80bbb *
ผู้โจมตีโอน 724277 USDC และ 2353 VELO เข้าสู่ที่อยู่นี้ และแลก USDC เป็น Ether ในทันที หลังจากนั้นโอนส่วนหนึ่งของเงินไปยังสะพานข้ามเครือข่าย Stargate แต่เงินที่เหลืออยู่ในที่อยู่นี้เป็นเงินที่ผิดกฎหมาย
ผู้โจมตีโอน 33 WETH ไปยังที่อยู่และใช้ peel chain เพื่อลองฟอกเงินลิงก์การฟอกเงินมีดังนี้:
0xbd18100a168321701955e348f03d0df4f517c13b -> 0x7e97b74252b6df53caf386fb4c54d4fb59cb6928 -> 0xc521bde5e53f537ff208970152b75a003093c2b4 -> * 0x9f09ec563222fe52712dc413d0b7b66cb5c7c795*。
ผู้โจมตีโอน 563 WETH เข้าสู่ที่อยู่นี้แล้วภายหลังโอนให้กับ 0x1915F77A116dcE7E9b8F4C4E43CDF81e2aCf9C68 และยังไม่มีการกระทำเพิ่มเติมในขณะนี้
ผู้โจมตีใช้วิธีการฟอกเงินในครั้งนี้มีความเชี่ยวชาญสูงกว่าเมื่อเทียบกับความหลากหลายของวิธีการฟอกเงิน ดังนั้นสำหรับผู้เข้าร่วม Web3 เราต้องเพิ่มความสามารถในการป้องกันการฟอกเงินของเราอย่างต่อเนื่อง โดยใช้ผลิตภัณฑ์ที่เกี่ยวข้องกับการซื้อขายบล็อกเชนเช่น KYT และ AML เพื่อเพิ่มความปลอดภัยของโครงการ Defi
คำแนะนำเกี่ยวกับความปลอดภัย
บทความนี้เขียนโดย Cara จากทีม ZAN (บัญชี X: @Cara6289) และ XiG (บัญชี X: @SHXiGi) ร่วมกัน.