
เช้าวันนี้ตามเวลาปักกิ่ง สะพานข้าม BNB Chian BSC Token Hub ถูกโจมตี แฮ็กเกอร์ใช้ช่องโหว่ของ cross-chain bridge เพื่อให้ได้เงินรวม 2 ล้าน BNB ใน 2 ส่วน มูลค่าประมาณ 566 ล้านดอลลาร์สหรัฐ(หมายเหตุ: BSC Token Hub เป็นสะพานข้ามระหว่าง BNB beacon chain (BEP2) และ BNB chain (BEP20 หรือ BSC))
ทันทีที่มีข่าวออกมา ราคาของ BNB ตกลงเกือบ 5% ภายใน 2 ชั่วโมง ตกลงไปต่ำสุดที่ 278.7 ดอลลาร์สหรัฐ ราคาปัจจุบันอยู่ที่ 284 ดอลลาร์สหรัฐ ลดลง 4.24% ตลอด 24 ชั่วโมง
จากข้อมูลของ BNB Chain การประมาณการเบื้องต้นของเงินทุนที่ถอนออกจาก BSC อยู่ในช่วงตั้งแต่ 100 ล้านดอลลาร์ถึง 110 ล้านดอลลาร์ ยิ่งไปกว่านั้น Tether ยังขึ้นบัญชีดำที่อยู่ของแฮ็กเกอร์เป็นครั้งแรกอีกด้วย "ขอบคุณชุมชนและพันธมิตรด้านการรักษาความปลอดภัยภายในและภายนอกของเรา เงินประมาณ 7 ล้านดอลลาร์ถูกระงับ"
CZ ผู้ก่อตั้ง Binance โพสต์บนโซเชียลมีเดียว่า Binance ได้ขอให้ผู้ตรวจสอบความถูกต้องทั้งหมดระงับเครือข่าย BSC เงินของผู้ใช้จะปลอดภัย เขาขออภัยในความไม่สะดวกที่เกิดขึ้นกับผู้ใช้และจะอัปเดตเพิ่มเติมตามนั้น
ชื่อเรื่องรอง
บทความวิเคราะห์ samczsun มีดังนี้:
(1) ห้าชั่วโมงที่แล้ว ผู้โจมตีขโมยเงิน 2 ล้าน BNB (ประมาณ 566 ล้านดอลลาร์) จาก Binance Bridge ฉันได้ทำงานอย่างใกล้ชิดกับฝ่ายต่าง ๆ เพื่อค้นหาว่าสิ่งนี้เกิดขึ้นได้อย่างไร

(2) สาเหตุของเหตุการณ์คือ @zachxbt ส่งที่อยู่ของผู้โจมตีมาให้ฉัน เมื่อฉันคลิกเข้าไป ฉันเห็นบัญชีที่มีมูลค่าหลายร้อยล้านดอลลาร์ ไม่ว่าจะเป็นพรมโปรเจกต์ที่หนีไป หรือมีการแฮ็กครั้งใหญ่เกิดขึ้น

(3) ตอนแรกฉันคิดว่า @VenusProtocol ถูกแฮ็กอีกแล้ว อย่างไรก็ตาม ฉันใช้เวลาไม่นานในการตัดสินว่าผู้โจมตี "จริงๆ" ได้ฝากเงินมากกว่า 200 ล้านดอลลาร์ใน Venus นั่นคือเวลาที่ฉันต้องการทราบว่าเงินเหล่านั้นมาจากไหน

(4) คำตอบคือผู้โจมตีโน้มน้าวให้ Binance cross-chain bridge ส่งพวกเขา (แฮ็กเกอร์) 1,000,000 BNB โดยตรงถึงสองครั้ง

(5) Binance เปิดตัว "แพ็คเกจของขวัญ" ที่ใหญ่ที่สุดในประวัติศาสตร์ของ Web3 หรือผู้โจมตีค้นพบช่องโหว่ที่ร้ายแรง ฉันเริ่มต้นด้วยการเปรียบเทียบธุรกรรมของผู้โจมตีกับการถอนเงินที่ถูกต้องตามกฎหมาย สิ่งแรกที่ฉันสังเกตเห็นคือผู้โจมตีใช้ความสูงเท่ากันเสมอ - 110217401 ในขณะที่การถอนที่ถูกต้องใช้ความสูงที่สูงกว่ามาก เช่น 270822321


(6) ฉันสังเกตเห็นด้วยว่าหลักฐานของผู้โจมตีนั้นสั้นกว่าหลักฐานการถอนที่ถูกต้องตามกฎหมายอย่างมาก ข้อเท็จจริงทั้งสองนี้ทำให้ฉันเชื่อว่าผู้โจมตีพบวิธีปลอมแปลงหลักฐานสำหรับบล็อกนี้โดยเฉพาะ (110217401) ตอนนี้ ฉันต้องเข้าใจว่าการพิสูจน์เหล่านี้ทำงานอย่างไร

(7) ใน Binance มีสัญญาพิเศษที่คอมไพล์ไว้ล่วงหน้าสำหรับการตรวจสอบแผนผัง IAVL ไม่ต้องกังวลหากคุณไม่รู้อะไรเกี่ยวกับต้นไม้ IAVL เพราะฉันไม่รู้ 95% ของต้นไม้เหล่านี้ โชคดีที่สิ่งที่คุณและฉันต้องการคืออีก 5% ที่เหลือ

(8) โดยพื้นฐานแล้ว เมื่อคุณตรวจสอบแผนผัง IAVL คุณจะต้องระบุรายการของ "การดำเนินการ" Binance cross-chain bridge มักต้องการสองการดำเนินการ: การดำเนินการ "iavl:v" และการดำเนินการ "multistore" นี่คือการใช้งาน: https://github.com/bnb-chain/bsc/blob/46d185b4cfed54436f526b24c47b15ed58a5e1bb/core/vm/lightclient/multistoreproof.go#L106-L125
(9) ในการปลอมแปลงหลักฐาน เราต้องดำเนินการทั้งสองให้สำเร็จ และเราต้องการการดำเนินการสุดท้าย (หลายร้านค้า) เพื่อส่งคืนค่าคงที่ (แฮชของบล็อกที่ระบุ: 110217401)
(10) เมื่อดูที่การใช้งาน เราจะเห็นว่าการจัดการรูทแฮชนั้นเป็นไปไม่ได้ หรืออย่างน้อยก็ยากมาก ซึ่งหมายความว่าเราต้องการค่าอินพุตของเราให้เท่ากับหนึ่งในรหัสการยืนยัน


(11) ค่าอินพุตของการดำเนินการ "multistore" คือค่าเอาต์พุตของการดำเนินการ "iavl:v" ซึ่งหมายความว่าเราต้องการควบคุมตัวแปรรูทที่นี่ในขณะที่ยังคงผ่านการตรวจสอบค่า

(12) แล้วจะคำนวณรูทแฮชได้อย่างไร? มันเกิดขึ้นในฟังก์ชั่นที่เรียกว่า COMPUTEHASH ในระดับที่สูงมาก มันจะวนซ้ำแต่ละพาธและลีฟโหนดและทำการแฮชจำนวนมาก
https://github.com/cosmos/iavl/blob/de0740903a67b624d887f9055d4c60175dcfa758/proof_range.go#L237-L290
(13) รายละเอียดการใช้งานจริง ๆ แล้วไม่สำคัญ สิ่งสำคัญคือเนื่องจากวิธีการทำงานของฟังก์ชันแฮช เราสามารถพูดได้อย่างมั่นใจว่าคู่ใด ๆ (พาธ, nleaf) จะส่งผลให้เกิดแฮชที่ไม่ซ้ำใคร สิ่งเหล่านี้จะต้องเหมือนเดิมหากเราต้องการปลอมแปลงหลักฐาน
(14) เมื่อพิจารณาถึงการวางหลักฐานในการทำธุรกรรมที่ถูกต้อง เราจะเห็นว่ามีเส้นทางที่ยาวมาก ไม่มีโหนดภายใน โหนดลีฟเพียงโหนดเดียว และโหนดใบไม้นี้มีแฮชของเพย์โหลดที่เป็นอันตรายของเรา! หากเราไม่สามารถแก้ไขลีฟโหนดนี้ได้ เราก็จำเป็นต้องเพิ่มโหนดลีฟใหม่

(15) แน่นอน หากเราเพิ่ม leaf node ใหม่ เราต้องเพิ่มโหนดภายในใหม่เพื่อให้ตรงกันด้วย

(16) ตอนนี้เราต้องเผชิญหน้ากับอุปสรรค์สุดท้าย เราจะทำให้ COMPUTEHASH คืนค่ารูทแฮชที่เราต้องการได้อย่างไร โปรดทราบว่าในที่สุดเราจะต้องใช้เส้นทางที่มีแฮชด้านขวาที่ไม่ใช่ศูนย์ เมื่อเราพบการจับคู่ เราจะยืนยันว่าตรงกับแฮชรูทระดับกลาง

(17) ลองใช้โค้ดกันสักหน่อยเพื่อที่เราจะสามารถหาได้ว่าเราต้องการแฮชอะไร จากนั้นที่เหลือก็แค่รวมเข้าด้วยกัน เราจะใช้หลักฐานทางกฎหมายและแก้ไขเพื่อให้:
1) เราเพิ่มโหนดลีฟใหม่สำหรับเพย์โหลดปลอม
2) เราเพิ่มโหนดภายในที่ว่างเปล่าเพื่อตอบสนองผู้พิสูจน์
3) เราปรับแต่งโหนดใบของเราเพื่อออกก่อนกำหนดด้วยแฮชรูทที่ถูกต้อง
https://gist.github.com/samczsun/8635f49fac0ec66a5a61080835cae3db…

(18) เป็นที่น่าสังเกตว่านี่ไม่ใช่วิธีที่ผู้โจมตีใช้อย่างแน่นอน เส้นทางการพิสูจน์ของพวกเขาสั้นกว่ามาก และฉันไม่แน่ใจว่าพวกเขาถูกสร้างขึ้นมาอย่างไร อย่างไรก็ตาม ช่องโหว่ที่เหลือก็เหมือนกัน และฉันเชื่อว่ามันมีค่ามากที่จะแสดงวิธีสร้างมันขึ้นมาใหม่ตั้งแต่ต้น
(19) โดยสรุป มีข้อบกพร่องในวิธีที่สะพานข้ามโซ่ของ Binance ตรวจสอบหลักฐานที่อาจทำให้ผู้โจมตีปลอมแปลงข้อความโดยพลการ โชคดีที่ผู้โจมตีที่นี่ปลอมแปลงเพียงสองข้อความ แต่ความเสียหายอาจเลวร้ายยิ่งกว่านั้นมาก


