lang
简体中文
繁體中文
English
Tiếng Việt
한국어
日本語
ภาษาไทย
Türkçe
หน้าแรก
AI
OPRR
ด่วน
ความลึก
กิจกรรม
BlockBeats Pro
เพิ่มเติม
การเงิน
พิเศษ
ระบบนิเวศบล็อกเชน
รายการ
พอดแคสต์
ข้อมูล
BTC
$96,000
5.73%
ETH
$3,521.91
3.97%
HTX
$0.{5}2273
5.23%
SOL
$198.17
3.05%
BNB
$710
3.05%

SlowMist: วิเคราะห์การโจรกรรม Cetus โทเค็น 1 อันสร้างมูลค่าได้ 230 ล้านเหรียญสหรัฐ

อ่านบทความนี้ใน 26 นาที
นี่เป็นการโจมตีทางคณิตศาสตร์ที่ซับซ้อนมาก ผู้โจมตีเลือกพารามิเตอร์ที่เฉพาะเจาะจงผ่านการคำนวณที่แม่นยำและใช้ประโยชน์จากข้อบกพร่องในฟังก์ชัน watched_shlw เพื่อรับสภาพคล่องมูลค่าหลายพันล้านด้วยต้นทุน 1 โทเค็น
ชื่อเรื่องเดิม: "SlowMist: การวิเคราะห์การโจรกรรมมูลค่า 230 ล้านเหรียญจาก Cetus"
ผู้เขียนต้นฉบับ: Victory, Lisa, SlowMist Technology


ข้อมูลเบื้องหลัง


เมื่อวันที่ 22 พฤษภาคม ตามข่าวของชุมชน Cetus ผู้ให้บริการสภาพคล่องในระบบนิเวศ SUI ถูกสงสัยว่าถูกโจมตี โดยความลึกของกลุ่มสภาพคล่องลดลงอย่างมาก และคู่ซื้อขายโทเค็นหลายคู่ใน Cetus ก็ลดลงด้วย มูลค่าความเสียหายที่ประเมินไว้เกินกว่า 230 ล้านเหรียญสหรัฐ ต่อมา Cetus ได้ออกประกาศแจ้งว่า “เราตรวจพบเหตุการณ์ดังกล่าวในโปรโตคอลของเรา ด้วยเหตุผลด้านความปลอดภัย สัญญาอัจฉริยะจึงถูกระงับชั่วคราว ขณะนี้ทีมงานกำลังสืบสวนเหตุการณ์ดังกล่าวอยู่ เราจะออกแถลงการณ์การสืบสวนเพิ่มเติมในเร็วๆ นี้”


หลังเกิดเหตุการณ์ ทีมรักษาความปลอดภัย SlowMist ได้เข้ามาแทรกแซงการวิเคราะห์และออกการแจ้งเตือนด้านความปลอดภัย ต่อไปนี้เป็นการวิเคราะห์โดยละเอียดเกี่ยวกับวิธีการโจมตีและการโอนเงิน


(https://x.com/CetusProtocol/status/1925515662346404024)


ข้อมูลที่เกี่ยวข้อง


ธุรกรรมการโจมตีหนึ่งรายการ:https://suiscan.xyz/mainnet/tx/DVMG3B2kocLEnVMDuQzTYRgjwuuFSfciawPvXXheB3x



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


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


(แผนภาพลำดับการโจมตี)


1. ผู้โจมตีได้ยืมเงินจำนวน 10,024,321.28 haSUI ผ่านทางการกู้ยืมแบบแฟลช ทำให้ราคาพูลลดลงจาก 18,956,530,795,606,879,104 เหลือ 18,425,720,184762886 หรือลดลง 99.90%



2. ผู้โจมตีเลือกช่วงราคาที่แคบมากอย่างระมัดระวังเพื่อเปิดตำแหน่งสภาพคล่อง:


ขีดจำกัดล่างของติ๊ก: 300000 (ราคา: 60,257,519,765,924,248,467,716,150)

ขีดจำกัดบนของติ๊ก: 300200 (ราคา: 60,863,087,478,126,617,965,993,239)

ความกว้างของช่วงราคา: เพียง 1.00496621%


3. จากนั้นก็มาถึงแกนหลักของการโจมตี ผู้โจมตีอ้างว่าได้เพิ่มสภาพคล่องมหาศาลจำนวน 10,365,647,984,364,446,732,462,244,378,333,008 หน่วย แต่เนื่องจากช่องโหว่ ระบบจึงรวบรวมได้เพียง 1 โทเค็น A เท่านั้น



มาวิเคราะห์กันว่าทำไมผู้โจมตีจึงสามารถแลกเปลี่ยนสภาพคล่องมหาศาลด้วยโทเค็นเพียง 1 ตัวได้ เหตุผลหลักคือมีช่องโหว่การหลีกเลี่ยงการตรวจจับการล้นใน checking_shlw ในฟังก์ชัน get_delta_a ผู้โจมตีได้ใช้ประโยชน์จากสิ่งนี้และก่อให้เกิดการเบี่ยงเบนอย่างร้ายแรงในการคำนวณของระบบว่าต้องเพิ่ม haSUI เท่าใดจริงๆ เนื่องจากไม่ตรวจพบการล้น ระบบจึงประเมินจำนวน haSUI ที่จำเป็นผิดพลาด ส่งผลให้ผู้โจมตีสามารถแลกรับสินทรัพย์สภาพคล่องจำนวนมากได้ด้วยโทเค็นจำนวนเล็กน้อย จึงสามารถโจมตีได้สำเร็จ


เมื่อระบบคำนวณว่าต้องใช้ haSUI เท่าใดจึงจะเพิ่มสภาพคล่องจำนวนมหาศาลเช่นนี้:



ประเด็นสำคัญคือการใช้งานฟังก์ชัน checking_shlw นั้นมีข้อบกพร่องอย่างร้ายแรง ในความเป็นจริงค่าอินพุตใดๆ ที่น้อยกว่า 0xffffffffffffffff <<192 จะข้ามการตรวจสอบโอเวอร์โฟลว์ อย่างไรก็ตาม เมื่อค่าเหล่านี้ถูกเลื่อนไปทางซ้าย 64 บิต ผลลัพธ์จะเกินช่วงการแสดงของ u256 และข้อมูลลำดับสูงจะถูกตัดทอน ส่งผลให้ผลลัพธ์มีค่าน้อยกว่าค่าทางทฤษฎีมาก ส่งผลให้ระบบประมาณจำนวน haSUI ที่จำเป็นในการคำนวณครั้งต่อไปต่ำเกินไป



· มาสก์ผิด: 0xffffffffffffffff << 192 = ตัวเลขที่มีขนาดใหญ่มาก (ประมาณ 2^256-2^192)

· อินพุตเกือบทั้งหมดมีขนาดเล็กกว่ามาสก์นี้ ซึ่งหลีกเลี่ยงการตรวจจับการล้น

· ปัญหาที่แท้จริง: เมื่อ n >= 2^192, n<< 64 จะเกินช่วง u256 และถูกตัดทอน


ค่ากลางของผู้โจมตี liquidity * sqrt_price_diff = 6277101735386680763835789423207666908085499738337898853712:


· น้อยกว่าหน้ากากข้อผิดพลาด โดยหลีกเลี่ยงการตรวจจับการล้น

· อย่างไรก็ตาม หลังจากเลื่อนไปทางซ้าย 64 บิต จะเกินค่าสูงสุดของ u256 ทำให้ส่วนที่เกินถูกตัดทอน

· ผลการคำนวณขั้นสุดท้ายมีค่าน้อยกว่า 1 โดยประมาณ แต่เนื่องจากถูกปัดขึ้น ผลหารจึงเท่ากับ 1



4. ในที่สุดผู้โจมตีก็สามารถลบสภาพคล่องออกไปและได้รับรายได้จากโทเค็นจำนวนมหาศาล:


· การลบครั้งแรก: 10,024,321.28 haSUI

· การลบครั้งที่สอง: 1 haSUI

· การลบครั้งที่สาม: 10,024,321.28 haSUI



5. ผู้โจมตีได้คืนเงินกู้แบบแฟลชและสร้างกำไรสุทธิประมาณ 10,024,321.28 haSUI และ 5,765,124.79 SUI การโจมตีจึงเสร็จสิ้นลง


งานซ่อมแซมโดยฝ่ายโครงการ


หลังจากการโจมตี Cetus ได้ออกแพตช์ซ่อมแซม สำหรับโค้ดการซ่อมแซมโดยเฉพาะ โปรดดูที่: https://github.com/CetusProtocol/integer-mate/pull/7/files#diff-c04eb6ebebbbb80342cd953bc63925e1c1cdc7ae1fb572f4aad240288a69409


ฟังก์ชัน watched_shlw ที่ได้รับการซ่อมแซมมีดังต่อไปนี้:



คำแนะนำการซ่อมแซม: แก้ไขหน้ากากที่ไม่ถูกต้อง 0xffffffffffffffff << 192 ถึงเกณฑ์ที่ถูกต้อง 1 << 192 แก้ไขเงื่อนไขการตัดสินจาก n > หน้ากากเป็น n >= หน้ากาก ให้แน่ใจว่าเมื่อการเลื่อนไปทางซ้าย 64 บิตอาจทำให้เกิดการโอเวอร์โฟลว์ แฟล็กโอเวอร์โฟลว์สามารถตรวจพบและส่งคืนได้อย่างถูกต้อง


การวิเคราะห์ MistTrack


ตามการวิเคราะห์ ผู้โจมตี 0xe28b50cef1d633ea43d3296a3f6b67ff0312a5f1a99f0af753c85b8b5de8ff06 ทำกำไรได้ประมาณ 230 ล้านเหรียญสหรัฐฯ ซึ่งรวมถึง SUI, vSUI, USDC และสินทรัพย์อื่นๆ



เราพบว่าผู้โจมตีได้เตรียมค่าธรรมเนียมก๊าซไว้เมื่อสองวันก่อน และพยายามดำเนินการก่อนการโจมตี แต่ล้มเหลว:



หลังจากทำกำไรแล้ว ผู้โจมตีได้โอนเงินบางส่วน เช่น USDC, SOL และ suiETH ไปยังที่อยู่ EVM 0x89012a55cd6b88e407c9d4ae9b3425f55924919b ผ่านสะพานข้ามสาย เช่น Sui Bridge, Circle, Wormhole และ Mayan:



ในจำนวนนี้ 5.2341 WBNB ถูกโอนไปยังที่อยู่ BSC 0x89012a55cd6b88e407c9d4ae9b3425f55924919b: จากนั้นผู้โจมตีได้ฝากทรัพย์สินมูลค่า 10 ล้านเหรียญสหรัฐฯ เข้าใน Suilend: นอกจากนี้ ผู้โจมตียังได้โอน SUI จำนวน 24,022,896 ไปยังที่อยู่ใหม่ 0xcd8962dad278d8b50fa0f9eb0186bfa4cbdecc6d59377214c88d0286a0ac9562 ซึ่งยังไม่ได้โอนออก: โชคดีที่ตามข้อมูลของ Cetus ได้มีการร่วมมือกับ SUI Foundation และสมาชิกในระบบนิเวศอื่นๆ เงินจำนวน 162 ล้านเหรียญสหรัฐฯ ที่ขโมยมาจาก SUI ถูกอายัดไว้ได้สำเร็จ


(https://x.com/CetusProtocol/status/1925567348586815622)


ถัดไป เราใช้เครื่องมือป้องกันและติดตามการฟอกเงินแบบบนเครือข่าย MistTrack เพื่อวิเคราะห์ที่อยู่ 0x89012a55cd6b88e407c9d4ae9b3425f55924919b บน EVM ที่ได้รับเงินจากเครือข่ายข้ามเครือข่าย ที่อยู่นี้ได้รับ 5.2319 BNB บน BSC และยังไม่ได้โอนออกไป: ที่อยู่นี้ได้รับ 3,000 USDT, 40.88 ล้าน USDC, 1,771 SOL และ 8,130.4 ETH บน Ethereum ในจำนวนนี้ USDT, USDC และ SOL ถูกแลกเปลี่ยนเป็น ETH ผ่าน coW Swap, ParaSwap และอื่นๆ: จากนั้นที่อยู่ดังกล่าวได้โอน 20,000 ETH ไปยังที่อยู่ 0x0251536bfcf144b88e1afa8fe60184ffdb4caf16 ซึ่งยังไม่ได้โอนออก: ยอดคงเหลือปัจจุบันของที่อยู่นี้บน Ethereum คือ 3,244 ETH: MistTrack ได้เพิ่มที่อยู่ที่กล่าวถึงข้างต้นไปยังไลบรารีที่อยู่ที่เป็นอันตราย ในเวลาเดียวกันเราจะยังคงตรวจสอบยอดคงเหลือของที่อยู่ต่อไป


สรุป


การโจมตีนี้แสดงให้เห็นถึงพลังของช่องโหว่แบบ Math Overflow ผู้โจมตีเลือกพารามิเตอร์ที่เฉพาะเจาะจงผ่านการคำนวณที่แม่นยำและใช้ประโยชน์จากข้อบกพร่องในฟังก์ชัน watched_shlw เพื่อรับสภาพคล่องมูลค่าหลายพันล้านดอลลาร์ด้วยต้นทุน 1 โทเค็น นี่เป็นการโจมตีทางคณิตศาสตร์ที่ซับซ้อนมาก ทีมรักษาความปลอดภัยของ SlowMist แนะนำให้ผู้พัฒนาตรวจสอบเงื่อนไขขอบเขตของฟังก์ชันทางคณิตศาสตร์ทั้งหมดในการพัฒนาสัญญาอัจฉริยะอย่างเคร่งครัด


ลิงค์ต้นฉบับ


ยินดีต้อนรับสู่ชุมชนทางการของ BlockBeats:

กลุ่ม Telegram สมัครสมาชิก: https://t.me/theblockbeats

กลุ่ม Telegram พูดคุย: https://t.me/BlockBeats_App

บัญชี Twitter ทางการ: https://twitter.com/BlockBeatsAsia

举报 แก้ไข/รายงาน
เลือกคลัง
เพิ่มคลัง
ยกเลิก
เสร็จสิ้น
เพิ่มคลัง
เห็นได้เฉพาะตัวเอง
สาธารณะ
บันทึก
แก้ไข/รายงาน
ส่ง