PeckShield: แพลตฟอร์ม DeFi Balancer ถูกแฮ็กและกระบวนการรื้อทางเทคนิคทั้งหมด
หมายเหตุบรรณาธิการ: บทความนี้มาจากPeckShield(ID:PeckShield)พิมพ์ซ้ำโดย Odaily โดยได้รับอนุญาต
หมายเหตุบรรณาธิการ: บทความนี้มาจาก
พิมพ์ซ้ำโดย Odaily โดยได้รับอนุญาต
เมื่อเวลา 02:03 น. ของวันที่ 29 มิถุนายน ตามเวลาปักกิ่ง กลุ่มโทเค็นเงินฝืด ERC20 สองรายการ ได้แก่ STA และ STONK บนแพลตฟอร์ม DeFi Balancer ซึ่งเพิ่งได้รับความสนใจอย่างมากเนื่องจากโมเดล "การยืมเพื่อขุด" ถูกแฮ็กและ สูญเสียเงินรวมกว่า 500,000 ดอลลาร์
หลังจากที่เจ้าหน้าที่รักษาความปลอดภัยของ PeckShield เข้าแทรกแซงในการวิเคราะห์พวกเขาก็พบแก่นแท้ของปัญหาอย่างรวดเร็ว โทเค็นเงินฝืดบน Balancer และสัญญาอัจฉริยะนั้นเข้ากันไม่ได้ในบางสถานการณ์ทำให้ผู้โจมตีสามารถสร้างแหล่งหมุนเวียน STA/STONK ที่มีการเบี่ยงเบนของราคาและได้รับผลกำไร .
การโจมตีของแฮ็กเกอร์แบ่งออกเป็นสี่ขั้นตอนโดยเฉพาะ:
1) ผู้โจมตียืมเงิน 104,331 WETH จากแพลตฟอร์ม dYdX ผ่านการกู้ยืมแบบแฟลช
2) ผู้โจมตีดำเนินการเรียก swapexactMountin() ซ้ำๆ จนกว่าโทเค็น STA ส่วนใหญ่ที่ Balancer เป็นเจ้าของจะหมดลง จากนั้นจึงเริ่มการโจมตีครั้งต่อไป ในท้ายที่สุด Balancer เหลือ 0.000000000000000001 STA เท่านั้น
3) ผู้โจมตีใช้ประโยชน์จากความไม่ลงรอยกันระหว่างโทเค็น STA และสัญญาอัจฉริยะของ Balancer นั่นคือความไม่ตรงกันระหว่างการทำบัญชีและยอดคงเหลือ เพื่อดำเนินการโจมตี ทำให้สินทรัพย์อื่น ๆ ในกองทุนหมดลง และในที่สุดก็ทำเงินรวมมูลค่า 523,616.52 ดอลลาร์ สินทรัพย์ดิจิทัล4) ผู้โจมตีชำระคืนเงินกู้แฟลชที่ยืมมาจาก dYdX และนำทรัพย์สินดิจิทัลที่ได้รับจากการโจมตีไปข้อเสนอสินเชื่อแฟลช
ชื่อเรื่องรอง
Balancer ถูกแฮ็กและกระบวนการรื้อทางเทคนิคทั้งหมด
คำอธิบายภาพ
(แสดงขั้นตอนการแฮ็คทั้งหมด)
ขั้นตอนที่ 1: สินเชื่อแฟลช
จาก dYdX flash loan 104,331 WETH ผู้อ่านที่คุ้นเคยกับรูปแบบการให้ยืม DeFi น่าจะค่อนข้างชัดเจนเกี่ยวกับส่วนนี้ ดังนั้นฉันจะไม่พูดซ้ำที่นี่
ขั้นตอนที่ 2: ล้างสินทรัพย์ STA ของ Balancer
ผู้โจมตีทำให้สินทรัพย์ STA ของ Balancer ว่างเปล่าผ่านการเรียกหลายครั้งเพื่อ swapExactAmountIn() เพื่อเตรียมพร้อมสำหรับการโจมตีครั้งต่อไป เป็นที่น่าสังเกตว่าเราพบว่ามีขีดจำกัดสูงสุดของจำนวนสินทรัพย์ที่สามารถแลกเปลี่ยนได้ในแต่ละครั้งในรหัสสัญญา อย่างไรก็ตาม ผู้โจมตีที่มีไหวพริบได้คำนวณจำนวนสูงสุดของ WETH ล่วงหน้าที่สามารถแลกเปลี่ยนได้และชาญฉลาด ทำให้ Balancer เหลือเพียง 0.000000000000000001 STA
ขั้นตอนที่สาม: โจมตีเพื่อผลกำไร
หลังจากการเตรียมการสองขั้นตอนแรก ก็ถึงเวลาที่ผู้โจมตีจะแสดงทักษะที่แท้จริงของเขา!
(ขั้นตอนที่ 3: บนไอคอนกำไรจากการโจมตี)
จากข้อมูลข้างต้น ผู้โจมตีส่ง 0.0000000000000000001 STA ไปยัง BPool ผ่านฟังก์ชัน swapExactAmountIn() และแลกเปลี่ยนทันที 30,347 WETH ด้วยส่วนต่างมูลค่าที่สูงมาก ทำให้ได้กำไร ในขณะนี้ กลไกการบัญชีภายในของ BPool _records[STA] เพิ่ม 1 ก่อนที่ BPool จะได้รับ 0.000000000000000001 STA จริง (หมายเหตุ: หลังจากนั้น ผู้โจมตีจะใช้ gulp() เพื่อรีเซ็ตค่า)
คำอธิบายภาพ
(ขั้นตอนที่ 3: ใต้ไอคอนเพื่อผลกำไรจากการโจมตี)
นอกจากนี้ เราพบว่าที่ด้านล่างของ swapExactAmountIn(), _pullUnderlying() พยายามรวบรวม STA ที่ใช้ไปที่เกี่ยวข้องจากฝั่งผู้โจมตี อย่างไรก็ตาม เนื่องจาก STA จะเสียค่าธรรมเนียมการจัดการ 1% เมื่อโอนเงิน ดังนั้น BPool จริงจะไม่ได้รับ STA ใดๆ ซึ่งจะทำให้ยอดคงเหลือ STA ที่แท้จริงของ BPool และการทำบัญชีภายในไม่ตรงกัน
ในที่สุด ดังที่แสดงในรูปด้านบน ผู้โจมตีได้ชำระคืนเงิน 104,331 WETH ที่ยืมมาจากเงินกู้แฟลช
คำแนะนำ
ชื่อเรื่องรอง
คำแนะนำ
แน่นอนว่าการใช้มาตรการแก้ไขหลังจากเหตุการณ์ด้านความปลอดภัยไม่สามารถชดเชยความสูญเสียที่เกิดขึ้นแล้วได้ เราเชื่อว่า ทางออกที่ดีที่สุดคือการป้องกันล่วงหน้า นักพัฒนาโครงการ DeFi ควรใช้ข้อกำหนดรหัสที่ดีให้มากที่สุด และสามารถขอความช่วยเหลือจากบริษัทรักษาความปลอดภัยภายนอกเพื่อทำการทดสอบเชิงรุกและเชิงรับอย่างครอบคลุมก่อนที่จะออนไลน์เพื่อค้นหาช่องโหว่ที่เป็นไปได้ทั้งหมด สุดท้าย ให้ทำการตรวจสอบอย่างละเอียดถี่ถ้วนเกี่ยวกับการรวมกันของ ERC20, ERC777 และโครงการ DeFi อื่นๆ
ติดตาม
ชื่อเรื่องรอง
ติดตาม


