คำเตือนความเสี่ยง: ระวังความเสี่ยงจากการระดมทุนที่ผิดกฎหมายในนาม 'สกุลเงินเสมือน' 'บล็อกเชน' — จากห้าหน่วยงานรวมถึงคณะกรรมการกำกับดูแลการธนาคารและการประกันภัย
ข่าวสาร
ค้นพบ
ค้นหา
เข้าสู่ระบบ
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt
BTC
ETH
HTX
SOL
BNB
ดูตลาด
เรื่องราวทั้งหมดของการโจมตี Uniswap และ Lendf.Me: การล่มสลายของ "โดมิโน" ภายใต้การรวมกันของ DeFi Lego
PeckShield
特邀专栏作者
2020-04-21 05:16
บทความนี้มีประมาณ 3045 คำ การอ่านทั้งหมดใช้เวลาประมาณ 5 นาที
นี่เป็นการโจมตีอีกสองครั้งโดยแฮ็กเกอร์ที่ใช้ประโยชน์จากช่องโหว่การควบคุมความเสี่ยงอย

หมายเหตุบรรณาธิการ: บทความนี้มาจากPeckShield(ID:PeckShield)พิมพ์ซ้ำโดย Odaily โดยได้รับอนุญาต

หมายเหตุบรรณาธิการ: บทความนี้มาจาก

พิมพ์ซ้ำโดย Odaily โดยได้รับอนุญาต

เริ่มตั้งแต่เวลา 08:58 น. ของวันที่ 18 เมษายน Uniswap แพลตฟอร์ม DeFi ถูกโจมตีโดยแฮ็กเกอร์โดยใช้ช่องโหว่การกลับเข้ามาใหม่ ทีมรักษาความปลอดภัยของ PeckShield พบปัญหาได้อย่างรวดเร็ว และพบว่าแฮ็กเกอร์ใช้ข้อบกพร่องด้านความเข้ากันได้ของมาตรฐาน Uniswap และ ERC777 เพื่อดำเนินการโจมตีซ้ำ

น่าเสียดายที่เพียง 24 ชั่วโมงต่อมา เวลา 08:45 น. ของวันที่ 19 เมษายน Lendf.Me ซึ่งเป็นแพลตฟอร์ม DeFi ที่รู้จักกันดีอีกแพลตฟอร์มหนึ่งก็ถูกโจมตีโดยแฮ็กเกอร์ในลักษณะเดียวกัน

หลักการของการโจมตีของแฮ็กเกอร์คือ: ผู้โจมตีใช้กลไกการเรียกกลับ TransferFrom() ของมาตรฐาน Ethereum ERC777 เพื่อจี้ธุรกรรมเมื่อเรียกใช้ฟังก์ชันการเรียกกลับ _callTokensToSend() ภายใน และดำเนินการโจมตีที่เป็นอันตรายก่อนที่ฟังก์ชัน _move() จะอัปเดตจริง ความสมดุล.

รายละเอียดการโจมตีช่องโหว่โดยละเอียดเราจะแนะนำโดยละเอียดในบทความต่อไป

Figure 1: ERC777 transferFrom()

คำอธิบายภาพ

ชื่อเรื่องรอง

ERC777 ปัญหาความเข้ากันได้ของพอร์ตโฟลิโอธุรกิจมาตรฐาน

หนึ่งในฟังก์ชันของส่วนขยายมาตรฐานคือการจัดเตรียมกลไก "hook" ซึ่งอนุญาตให้ที่อยู่หรือสัญญาทั่วไปควบคุมหรือปฏิเสธที่จะส่งโทเค็นโดยการลงทะเบียนฟังก์ชัน hook ของ tokensToSend() สิ่งนี้ได้เสริมความแข็งแกร่งให้กับอินเทอร์เฟซการควบคุมความเสี่ยงของโทเค็นบนพื้นฐานของ ERC20 ซึ่งเป็นการปรับปรุงที่เป็นประโยชน์ อย่างไรก็ตาม เนื่องจากลักษณะโครงการ DeFi ที่ประกอบขึ้นได้ เมื่อมีการเรียกใช้สัญญาระหว่างผลิตภัณฑ์ต่างๆ ความซับซ้อนของตรรกะทางธุรกิจก็จะเพิ่มขึ้นอย่างมากเช่นกัน ซึ่งทำให้เกิดความเป็นไปได้ในการโจมตีด้วยการแทรกโค้ด

Figure 2: ERC777-Compatible tokensToSend() Hijacking

คำอธิบายภาพ

Figure 3: OpenZeppelin's Exploit Demo (Hook Setup)

จากนั้นผู้โจมตีสามารถทำอะไรก็ได้ใน tokensToSend() เช่นเดียวกับฟังก์ชัน hook บนพีซีทั่วไป ดังที่แสดงในรูปด้านล่าง ผู้โจมตีสามารถทำธุรกรรมหลายรายการสำหรับธุรกรรมเดียวกัน

Figure 4: OpenZeppelin's Exploit Demo (Hook Function)

คำอธิบายภาพ

Uniswap เป็นรายแรกที่ใช้ประโยชน์จากปัญหาความเข้ากันได้ของ ERC777 เพื่อดำเนินการโจมตี ดังที่แสดงในภาพหน้าจอของธุรกรรมที่เป็นอันตรายใน Bloxy (แฮช: 0x9cb1d93d6859883361e8c2f9941f13d6156a1e8daa0ebe801b5d0b5a612723c1) การเรียก tokenToEthSwapInput() จะเกิดขึ้นภายในฟังก์ชัน ซึ่งหมายความว่าผู้โจมตีสามารถจัดการอัตราแลกเปลี่ยนธุรกรรมก่อน แล้วจึงแลกเปลี่ยน imBTC อื่นเป็น ETH เพิ่มเติมในราคาที่ต่ำกว่า

Figure 5: Uniswap Hack

คำอธิบายภาพ

การวิเคราะห์การโจมตี Lendf.Me

Figure 6: Lendf.Me Hack

ประมาณ 24 ชั่วโมงหลังจาก Uniswap ถูกโจมตี Lendf.Me แพลตฟอร์ม DeFi อีกแพลตฟอร์มก็ถูกแฮ็กเช่นกัน ด้านล่างเป็นภาพหน้าจอของธุรกรรมการโจมตีรายการหนึ่ง ดังที่แสดงในรูป เมื่อมีการเรียกใช้ฟังก์ชันการถ่ายโอนจริง transferFrom() ในฟังก์ชัน supply() สัญญาของผู้โจมตีที่ติดยาเสพติดจะฝังการดำเนินการถอนเงินที่ขโมยการถอนเงินของ Lendf.Me()

ควรสังเกตว่าตรรกะทางธุรกิจปกติควรเป็นว่ายอดคงเหลือในสัญญาโครงการจะลบ 290 imBTC ที่ผู้โจมตีถอนออก อย่างไรก็ตาม เมื่ออุปทาน () กลับมา ยอดคงเหลือยังไม่ได้รับการรีเซ็ตและยังคงเป็น 290 imBTC (บรรทัดที่ 1,599 ). ผู้โจมตีควบคุมและแก้ไขจำนวนเงินจำนอง imBTC ของผู้โจมตีใน Lendf.Me ด้วยการจำนอง imBTC ที่มากพอ ผู้โจมตีสามารถให้ยืมสินทรัพย์ที่มีอยู่ทั้งหมดมากกว่า 10 ชนิดจากคู่การซื้อขายที่มีสภาพคล่องต่างๆ (มูลค่าสินทรัพย์รวม 25,236,849.44 ดอลลาร์สหรัฐ) ).

Figure 7: Lendf.Me Hack Details

คำอธิบายภาพ

ชื่อเรื่องรอง

ดังที่แสดงในรูปด้านบน หลังจากที่ผู้โจมตีทำกำไรได้ เขาโอนโทเค็นแต่ละรายการไปยังบัญชีที่เกี่ยวข้องทันที 0xa9bf70 จากนั้นผู้โจมตีก็แลกเปลี่ยน WETH, PAX, BUSD และโทเค็นอื่นๆ ที่เป็นที่นิยมมากกว่าผ่านแพลตฟอร์มต่างๆ เช่น 1inch.exchange และ ParaSwap หลายสิบครั้ง เป็นโทเค็น ETH, DAI, BAT และฝากโทเค็น TUSD, USDT ในแพลตฟอร์มการให้ยืมของ Aave จนถึงขณะนี้ ยอดคงเหลือของผู้โจมตีและบัญชีที่เกี่ยวข้องแสดงไว้ด้านบน

ข้อเสนอแนะการซ่อมแซม

ชื่อเรื่องรอง

ข้อเสนอแนะการซ่อมแซม

ทีมรักษาความปลอดภัยของ PeckShield ขอแนะนำให้นักพัฒนาซอฟต์แวร์ใช้วิธี "ตรวจสอบ-ผล-การโต้ตอบ" เพื่อป้องกันการโจมตีซ้ำ ตัวอย่างเช่น ใน supply() ของ Lendf.Me ถ้ายอดโทเค็นได้รับการอัพเดตก่อน ก็จะเรียกว่า doTransferIn() สิ่งนี้จะทำให้การโจมตีไม่สามารถรีเซ็ตยอดคงเหลือหลังจากถอนออก ()

ในทางกลับกัน คุณลักษณะมาตรฐาน ERC777 จะเปิดใช้กลไก hook อย่างหลีกเลี่ยงไม่ได้ ดังนั้น เราจึงจำเป็นต้องตรวจจับและป้องกันฟังก์ชันการทำธุรกรรมทั้งหมดจากความเสี่ยงในการกลับเข้ามาใหม่ ตัวอย่างเช่น หากการสั่งจ่าย () และถอน () ทำงานพร้อมกันและมีการเพิ่ม mutex ผู้โจมตีจะไม่สามารถดำเนินการถอน () ภายในฟังก์ชันการจัดหา ()

ประเด็นสุดท้ายที่ไม่สามารถเพิกเฉยได้คือเราต้องพิจารณาอย่างจริงจังถึงความเสี่ยงเชิงระบบที่เป็นไปได้ของพอร์ตโฟลิโอธุรกิจ DeFi ด้านแพลตฟอร์มไม่เพียงต้องมั่นใจว่ามีการตรวจสอบโค้ดที่มั่นคงและการตรวจสอบช่องโหว่ก่อนที่ผลิตภัณฑ์จะออนไลน์ ธุรกิจในผลิตภัณฑ์ที่แตกต่างกัน เมื่อรวมเข้าด้วยกัน ให้พิจารณาปัญหาการควบคุมความเสี่ยงเชิงระบบที่อาจเกิดขึ้นเนื่องจากตรรกะทางธุรกิจที่แตกต่างกัน

DeFi
安全
ยินดีต้อนรับเข้าร่วมชุมชนทางการของ Odaily
กลุ่มสมาชิก
https://t.me/Odaily_News
กลุ่มสนทนา
https://t.me/Odaily_CryptoPunk
บัญชีทางการ
https://twitter.com/OdailyChina
กลุ่มสนทนา
https://t.me/Odaily_CryptoPunk
สรุปโดย AI
กลับไปด้านบน
นี่เป็นการโจมตีอีกสองครั้งโดยแฮ็กเกอร์ที่ใช้ประโยชน์จากช่องโหว่การควบคุมความเสี่ยงอย
ดาวน์โหลดแอพ Odaily พลาเน็ตเดลี่
ให้คนบางกลุ่มเข้าใจ Web3.0 ก่อน
IOS
Android