โปรโตคอล DeFi สูญเสียเงินหลายพันล้านดอลลาร์ให้กับการถูกใช้ประโยชน์จากสัญญาอัจฉริยะ ไม่ใช่เพราะการลดลงของตลาดหรือการบังคับใช้กฎระเบียบ แต่เป็นเพราะรหัสที่ไม่ได้ทำงานตามวิธีที่นักพัฒนาคาดหวังเมื่อใครบางคนจงใจทำให้มันเบี่ยงเบน การเข้าใจวิธีการทำงานของการโจมตีเหล่านี้ไม่ใช่แค่แบบฝึกหัดทางวิชาการเท่านั้น หากคุณใช้ DeFi เงินของคุณก็นั่งอยู่ในสัญญาเหล่านี้
ระบบนิเวศ Ethereum ETH$2,200ETH$2,20024h+0.46%7d+6.96%30d+8.02%1y+31.82%via Statility คนเดียวได้เห็นการระบายออกกว่า 5 พันล้านดอลลาร์ผ่านการถูกใช้ประโยชน์นับตั้งแต่ DeFi เริ่มขยายตัวในปี 2020 บางอย่างเป็นการโจมตี zero-day ที่ซับซ้อน หลายอย่างเป็นรูปแบบความเสี่ยงที่เป็นที่รู้จักกันดีซึ่งผู้ตรวจสอบพลาด หรือซึ่งนำเสนอหลังจากการตรวจสอบเสร็จสิ้น นี่คือเวกเตอร์การโจมตีที่ยังคงแสดงตัว
ผู้ต้องสงสัยตามปกติ
Reentrancy
Reentrancy คือความเสี่ยงสัญญาอัจฉริยะที่เก่าแก่ที่สุด และมันยังคงได้ผล การโจมตีนี้ใช้ประโยชน์จากข้อบกพร่องในตรรกะที่เรียบง่าย: สัญญาส่งเงินไปยังที่อยู่ภายนอกก่อนอัปเดตยอดคงเหลือภายในของมันเอง สัญญาของผู้โจมตีได้รับเงิน จากนั้นจึงเรียกกลับไปยังสัญญาเดิมเพื่อถอนอีกครั้ง เนื่องจากยอดคงเหลือยังไม่ได้รับการอัปเดต สัญญาจึงคิดว่าผู้โจมตียังคงมีเงินและส่งเงินเพิ่มเติม
การโจมตี reentrancy ที่มีชื่อเสียงที่สุดคือการแฮก The DAO ในปี 2016 ซึ่งระบายออก ETH ประมาณ 60 ล้านดอลลาร์ และในที่สุดนำไปสู่การแยกแบบ hard fork ของ Ethereum ที่สร้าง Ethereum Classic คุณอาจคิดว่าอุตสาหกรรมได้เรียนรู้บทเรียนของมัน มันไม่ได้
ในเดือนกรกฎาคม 2023 ความเสี่ยง reentrancy ในคอมไพเลอร์ Vyper (ไม่ใช่ในรหัสของโปรโตคอลใด ๆ แต่ในภาษาโปรแกรมมิ่งตัวเอง) นำไปสู่การถูกใช้ประโยชน์ข้ามพูลหลายแห่งของ Curve Finance โดยระบายออกกว่า 60 ล้านดอลลาร์ ข้อบกพร่องนี้มีอยู่ในเวอร์ชัน Vyper 0.2.15 ถึง 0.3.0 มาหลายปี สิ่งนี้มีความสำคัญเพราะมันแสดงให้เห็นว่า reentrancy สามารถซ่อนตัวได้ในชั้นของสแต็กที่นักพัฒนาโปรโตคอลและผู้ตรวจสอบไม่ได้มองหา
Oracle Manipulation
โปรโตคอล DeFi ต้องการข้อมูลราคาเพื่อทำงาน แพลตฟอร์มการให้ยืมต้องรู้มูลค่าของหลักประกัน DEX ต้องการราคาอ้างอิงเพื่อการป้องกัน slippage ข้อมูลราคานี้มาจากอ็อราเคิล และการจัดการอ็อราเคิลหมายถึงการจัดการโปรโตคอล
การถูกใช้ประโยชน์ของ Mango Markets ในเดือนตุลาคม 2022 เป็นตัวอย่างตามตำราเรียน Avraham Eisenberg ใช้ 5 ล้านดอลลาร์เพื่อปั๊มราคาของโทเค็น MNGO อย่างมีเทียมทางบนแลกเปลี่ยนของ Mango เอง ซึ่งทำให้มูลค่าของตำแหน่งหลักประกัน เขาเพิ่มขึ้น เขาจึงยืม 114 ล้านดอลลาร์เทียบกับหลักประกันที่สูงขึ้นนั้นและถอนออก จากเทคนิคแล้ว โปรโตคอลทำงานตรงตามที่ออกแบบไว้ อ็อราเคิลรายงานราคาที่เห็น ตรรกะการให้ยืมปฏิบัติตามกฎของมัน แต่ระบบสันนิษฐานว่าราคาอ็อราเคิลสะท้อนมูลค่าตลาดที่แท้จริง และสมมติฐานนั้นผิด
โปรโตคอลที่ใช้แหล่งข้อมูลบนโซ่เดียวสำหรับข้อมูลราคา โดยเฉพาะอย่างยิ่งพูลการซื้อขายของโทเค็นสภาพคล่องต่ำเพียงอย่างเดียว มีความเสี่ยงโดยเนื้อแท้ต่อสิ่งนี้ Chainlink และเครือข่ายอ็อราเคิลแบบกระจายตัวอื่น ๆ มีอยู่เพื่อบรรเทาสิ่งนี้ด้วยการรวมข้อมูลจากแหล่งที่มาหลายแห่ง แต่ไม่ใช่ทุกโปรโตคอลที่ใช้พวกเขา และแม้แต่ฟีดแบบรวมก็ยังสามารถจัดการได้ภายใต้เงื่อนไขที่รุนแรง
Flash Loan Attacks
Flash loan คือสินเชื่อที่ไม่มีหลักประกันซึ่งต้องยืมและชำระคืนภายในธุรกรรมเดียว หากไม่มีการชำระคืน ธุรกรรมทั้งหมดจะย้อนกลับราวกับว่าไม่เคยเกิดขึ้นเลย นี่เป็นการดั้งเดิมทางการเงินที่ใหม่อย่างแท้จริงซึ่งไม่มีความเท่าเทียมกันในการเงินแบบดั้งเดิม
มันยังเป็นเครื่องมือที่ทำให้การถูกใช้ประโยชน์หลายอย่างเป็นไปได้ในเชิงเศรษฐกิจ ก่อนที่จะมี flash loan ผู้โจมตีที่ต้องการจัดการพูลมูลค่า 50 ล้านดอลลาร์ต้องใช้ 50 ล้านดอลลาร์ ด้วย flash loan พวกเขาต้องการ ETH เพียงพอเพื่อครอบคลุมค่าแก๊สและค่าบริมาณ flash loan มักจะเป็นเพียงสองสามร้อยดอลลาร์เท่านั้น
รูปแบบนี้ซ้ำกันข้ามการถูกใช้ประโยชน์หลายสิบอย่าง: ยืมจำนวนมหาศาลผ่าน flash loan ใช้มันเพื่อจัดการราคาอ็อราเคิลหรือระบายออกจากพูลที่เสี่ยง ชำระคืนสินเชื่อ เก็บกำไร การโจมตี bZx ในปี 2020 เป็นหนึ่งในกรณีแรกที่สาธิตรูปแบบนี้ Pancake Bunny ในปี 2021 สูญเสีย 45 ล้านดอลลาร์ให้กับการจัดการราคาที่ขับเคลื่อนด้วย flash loan รายชื่อยังคงเพิ่มขึ้น
Flash loan ไม่ได้สร้างความเสี่ยง พวกเขาขยายมันได้ โปรโตคอลใด ๆ ที่เสี่ยงต่อการเคลื่อนไหวของเงินทุนจำนวนมากนั้นเสียหายแล้ว Flash loan เพียงแค่ทำให้มันเป็นไปได้สำหรับผู้ใดก็ตามที่จะเป็นเงินทุนจำนวนมาก ฟรี
สิ่งที่การตรวจสอบจริงๆ ทำ (และไม่ทำ)
การตรวจสอบสัญญาอัจฉริยะคือการตรวจสอบรหัสทีละบรรทัด โดยปกติดำเนินการโดยบริษัทเฉพาะด้านความปลอดภัย ที่มองหารูปแบบความเสี่ยงที่รู้จัก ข้อผิดพลาดในตรรกะ และการเบี่ยงเบนจากข้อมูลจำเพาะ ผู้ตรวจสอบที่ดียังทดสอบกรณีขอบ จำลองสถานการณ์การโจมตี และตรวจสอบโครงสร้างการกระตุ้นทางเศรษฐกิจ
นี่คือสิ่งที่การตรวจสอบไม่ใช่: การรับประกัน โปรโตคอลที่ได้รับการตรวจสอบถูกแฮกเป็นประจำ มีหลายเหตุผลสำหรับสิ่งนี้
ประการแรก รหัสที่ได้รับการตรวจสอบอาจไม่ใช่รหัสที่ปรับใช้ โปรโตคอลมักจะทำการเปลี่ยนแปลงหลังการตรวจสอบ บางครั้งการเปลี่ยนแปลงที่สำคัญ และปรับใช้โดยไม่ต้องตรวจสอบซ้ำ ประการที่สอง การตรวจสอบจะตรวจสอบสัญญาในโดดเดี่ยวหรือภายในขอบเขตที่จำกัด โปรโตคอล DeFi สามารถหนึ่งได้ ซึ่งหมายความว่าพวกเขาโต้ตอบกับโปรโตคอลอื่น ๆ ในลักษณะที่สร้างพฤติกรรมที่เกิดขึ้นซึ่งการตรวจสอบเดียวไม่สามารถทำนายได้ โปรโตคอลการให้ยืมอาจปลอดภัยเมื่อตัวมันเอง แต่กลายเป็นเสี่ยงเมื่อใครบางคนสร้างพูลใหม่ที่โต้ตอบกับมันในลักษณะที่ไม่คาดคิด
ประการที่สาม การถูกใช้ประโยชน์หลายอย่างนั้นเป็นเศรษฐกิจมากกว่าเทคนิค รหัสทำสิ่งที่เขียนไว้ แต่โครงสร้างการกระตุ้นทางเศรษฐกิจมีข้อบกพร่องที่ผู้โจมตีสามารถใช้ประโยชน์ได้ ผู้ตรวจสอบที่มีพื้นฐานด้านวิศวกรรมล้วนๆ อาจไม่จับได้ นี่คือเหตุผลที่บริษัทความปลอดภัยบางแห่งรวมนักเศรษฐศาสตร์และผู้ออกแบบกลไกไว้ในทีมการตรวจสอบของพวกเขา
สิ่งที่การตรวจสอบจับได้เทียบกับสิ่งที่พวกเขาพลาด
| การตรวจสอบมักจะจับได้ | การตรวจสอบมักจะพลาด |
|---|---|
| รูปแบบ Reentrancy | การเปลี่ยนแปลงรหัสหลังการตรวจสอบ |
| Integer overflow/underflow | ความเสี่ยงในการสร้างองค์ประกอบข้ามโปรโตคอล |
| ข้อผิดพลาดการควบคุมการเข้าถึง | ข้อบกพร่องในการออกแบบทางเศรษฐกิจหรือการกระตุ้น |
| รูปแบบความเสี่ยงที่รู้จัก | เวกเตอร์การโจมตีใหม่ |
| ปัญหาการเพิ่มประสิทธิภาพแก๊ส | พื้นผิวการโจมตีการตรวจสอบสิทธิ |
| ความสอดคล้องมาตรฐาน (ERC-20 ฯลฯ) | ข้อบกพร่องระดับโครงสร้างพื้นฐาน (คอมไพเลอร์ EVM) |
รูปแบบหลังการทำการพิสูจน์ปากคำ
หลังจากจำนวนการพิสูจน์ปากคำในการถูกใช้ประโยชน์เพียงพอ รูปแบบจะปรากฏขึ้น การถูกใช้ประโยชน์ส่วนใหญ่ไม่ใช่เรื่องใหม่ พวกเขาเป็นรูปแบบของธีมที่ทราบซึ่งใช้กับโปรโตคอลที่มีจุดตาบอด
สมมติฐานที่ไม่ได้รับการตรวจสอบเป็นสาเหตุรากเหง้าที่พบได้บ่อยที่สุด นักพัฒนาสันนิษฐานว่าราคาอ็อราเคิลจะแม่นยำ พวกเขาสันนิษฐานว่ามีเพียงสัญญาที่มีจุดประสงค์เท่านั้นที่จะเรียกใช้ฟังก์ชันเฉพาะ พวกเขาสันนิษฐานว่าไม่มีใครมีเงินทุนเพียงพอที่จะเคลื่อนตลาดไป 40% ในบล็อกเดียว ทุกสมมติฐานคือพื้นผิวการโจมตีที่มีศักยภาพ
สัญญาที่อัปเกรดได้และคีย์ผู้ดูแลระบบเป็นธีมที่เกิดซ้ำอีกครั้ง โปรโตคอลหลายตัวใช้รูปแบบพร็อกซีที่อนุญาตให้ทีมอัปเกรดตรรกะสัญญาหลังจากปรับใช้ นี่ตั้งใจให้เป็นกลไกความปลอดภัย ช่วยให้นักพัฒนาแก้ไขข้อบกพร่องได้อย่างรวดเร็ว แต่มันยังหมายความว่าคีย์ผู้ดูแลระบบที่ถูกบดบังสามารถใช้เพื่อแทนที่สัญญาการทำงานด้วยหนึ่งที่เป็นอันตราย การแฮก Ronin Bridge ในปี 2022 ซึ่งสูญเสีย 625 ล้านดอลลาร์ ในที่สุดก็เป็นการหลีกหนีจากคีย์ผู้ดูแลระบบมากกว่าข้อบกพร่องในตรรกะสัญญาอัจฉริยะ
การถูกใช้ประโยชน์ DeFi ที่น่าสังเกต
| โปรโตคอล | ปี | จำนวนที่สูญเสีย | ประเภทการโจมตี |
|---|---|---|---|
| The DAO | 2016 | $60M | Reentrancy |
| Ronin Bridge | 2022 | $625M | การหลีกหนีจากคีย์ validator |
| Wormhole | 2022 | $320M | การตรวจสอบลายเซ็นข้าม |
| Mango Markets | 2022 | $114M | Oracle / การจัดการราคา |
| Curve (Vyper) | 2023 | $60M | Reentrancy ระดับคอมไพเลอร์ |
| Euler Finance | 2023 | $197M | ข้อบกพร่องในตรรกะการบังคับชำระหนี้ |
การปกป้องตัวเอง
คุณไม่สามารถตรวจสอบสัญญาอัจฉริยะได้ด้วยตัวเองเว้นแต่คุณเป็นนักพัฒนา Solidity และแม้ว่าคุณจะเป็นก็อาจจะพลาดสิ่งต่างๆ แต่คุณสามารถประเมินความเสี่ยงได้ชัดเจนยิ่งขึ้นโดยการตั้งคำถามที่ถูกต้อง
ตรวจสอบว่าโปรโตคอลได้รับการตรวจสอบหรือไม่ โดยใคร และเมื่อไร การตรวจสอบจากสองปีที่แล้วในฐานรหัสที่อัปเดตห้าสิบครั้งไม่ได้ให้ความมั่นใจมากนัก การตรวจสอบหลายครั้งจากบริษัทอิสระนั้นดีกว่าหนึ่ง โปรแกรมเรื่องรางวัลจากการค้นหาข้อบกพร่องเป็นสัญญาณที่ดีเพราะสร้างแรงจูงใจอย่างต่อเนื่องสำหรับนักวิจัยหมวกขาว เพื่อค้นหาปัญหาก่อนที่ผู้โจมตีจะ
เข้าใจว่าใครถือคีย์ผู้ดูแลระบบ หาก multisig ที่มีผู้ลงนามสามคนควบคุมความสามารถในการอัปเกรดสัญญา นั่นคือความเสี่ยงการรวมศูนย์ที่มีความหมาย หากคีย์เหล่านั้นนั่งอยู่เบื้องหลัง timelock ที่ให้ผู้ใช้ 48 ชั่วโมงในการออกจากก่อนที่จะมีการเปลี่ยนแปลง นั่นเป็นการออกแบบที่ดีกว่า
ระมัดระวังกับการแยก เมื่อทีมคัดลอกรหัสของโปรโตคอลอื่นและเปิดตัวเวอร์ชันใหม่ พวกเขามักจะแก้ไขชิ้นส่วนโดยไม่เข้าใจผลกระทบด้านความปลอดภัยอย่างเต็มที่ การถูกใช้ประโยชน์ที่แย่ที่สุดบางส่วนได้ตีกำแพงการแยกที่ไม่ดีของโปรโตคอลที่ปลอดภัยอื่น
กระจายตัวข้ามโปรโตคอล ตรรกะเดียวกันที่ใช้กับการไม่เก็บเงินฟิแตทั้งหมดของคุณในธนาคารหนึ่งแห่งใช้ที่นี่ หากโปรโตคอลที่คุณใช้ถูกใช้ประโยชน์ การสัมผัสที่จำกัดเพียงส่วนหนึ่งของพอร์ตโฟลิโอของคุณเป็นการสูญเสียที่รอดชีวิต การรวมศูนย์ไม่ใช่
ความปลอดภัย DeFi กำลังปรับปรุง เครื่องมือตรวจสอบอย่างเป็นทางการ การปฏิบัติการตรวจสอบที่ซับซ้อนมากขึ้น และฐานรหัสที่ทดสอบจากการรบเหมือน Uniswap และ Aave ได้พิสูจน์ว่าสัญญาที่สร้างได้ดีสามารถรักษาเงินหลายพันล้านดอลลาร์ตลอดหลายปีโดยไม่มีเหตุการณ์ใด แต่พรมแดนจะยุ่งเสมอ และรหัสใหม่มีความเสี่ยงใหม่ โปรโตคอลที่เสนออัตราผลตอบแทนสูงสุดมักเป็นปรากฏการณ์ที่ทดสอบน้อยที่สุดตามกาลเวลาและเงื่อนไขที่เป็นปฏิปักษ์ นั่นไม่ใช่เรื่องบังเอิญ
กำลังมองหาแพลตฟอร์มคริปโต แลกเปลี่ยน และแอพ DeFi เรียบร้อยแล้ว ค้นหาไดเรกทอรีที่ดูแลของเรา: