พูดง่ายๆ คือ ผู้โจมตีใช้เวลาช่วงหนึ่งเตรียมการแบบเปิดเผยบนเชน จากนั้นใช้การมอบหมาย EIP-7702 ครั้งเดียวเปลี่ยนกระเป๋าเงินร้อน Binance 14 ของ Binance ให้กลายเป็นสัญญาของตัวเอง เริ่มกวาดตั้งแต่ช่วงกลางคืน พอถึงเช้าตรู่ ที่อยู่ที่เกี่ยวข้องกับกระเป๋าเงินร้อน Binance มีเงินไหลออกประมาณ 5.643 พันล้านดอลลาร์ ครอบคลุม Ethereum, Bitcoin, Tron และ L2 หลายเครือข่าย; ผู้ออกอย่าง Tether, Circle, Ripple, World Liberty ร่วมมือกันอายัดประมาณ 2.54 พันล้านดอลลาร์ คิดเป็นประมาณ 45% ของเงินที่ไหลออก และจนถึงขณะนี้ การมอบหมายที่เป็นอันตรายนั้นยังไม่ถูกเพิกถอน
ขณะนี้ถ้อยแถลงอย่างเป็นทางการของ Binance ยังคงเป็นว่า กำลังสอบสวนปัญหาความปลอดภัยที่อาจเกิดขึ้น เงินของผู้ใช้ปลอดภัยอย่างสมบูรณ์
Ethereum: 3.528 พันล้านดอลลาร์
Bitcoin: 1.449 พันล้านดอลลาร์
Tron: 628 ล้านดอลลาร์
Arbitrum + Optimism + Base: รวมประมาณ 38 ล้านดอลลาร์
Tether ประมาณ 1.567 พันล้าน USDT, Circle ประมาณ 823 ล้าน USDC (สองรายรวมกัน 2.316 พันล้าน) บวกกับ Ripple ประมาณ 200 ล้าน RLUSD, World Liberty Financial ประมาณ 27.8 ล้าน USD1 + 2 ล้าน WLFI รวมเป็น 2.54 พันล้าน
ตั้งแต่ 28 ตุลาคม: ที่อยู่ผู้โจมตี 0x7C86…5CA0 ได้รับเงินออกจาก Tornado Cash ประมาณ 0.1 ETH จำนวน 3 ครั้งต่อเนื่องกัน โดยใช้เพื่อจ่ายค่า Gas โดยเฉพาะ ที่อยู่นี้ก่อนหน้านี้ไม่มีความเกี่ยวข้องใดๆ กับ Binance
29 ตุลาคม 10:29: ติดตั้งสัญญากวาดครั้งแรก 0x19be…f2bf ภายหลังถูกทิ้งไม่ใช้
29 ตุลาคม 21:51: เขียนการมอบหมาย EIP-7702 ไปยังกระเป๋าเงินทดสอบสองใบ กระเป๋าเงินทั้งสองใบนี้ไม่ใช่ของ Binance แต่เป็นกระเป๋าเงินภายนอกที่ผู้โจมตีหามาเอง
29 ตุลาคม 22:20 และ 22:24: การซ้อมครั้งที่ 1 และ 2 เรียกการกวาดเพื่อดูดเงินจากกระเป๋าเงินทดสอบทั้งสองใบนี้จนเกลี้ยง ครั้งแรกอาจมีปัญหาบ้าง สี่นาทีต่อมาจึงทำอีกครั้ง
29 ตุลาคม 23:59 น.: ปรับใช้สัญญาฉบับแก้ไข 0x63e8…6fAe ในที่สุดก็มีผลกับ Binance
30 ตุลาคม 00:21 ถึง 00:30 น.: การซ้อมครั้งที่ 3 เปลี่ยนกระเป๋าเงินใบที่สาม มอบหมายสองครั้งบวกกวาดหนึ่งครั้ง
หลังจากนั้นเงียบไป 3 ชั่วโมง 51 นาที จนกระทั่งลงมือ
04:21:00 น.: ส่งธุรกรรมประเภท EIP-7702 มอบหมายโค้ดของ 0x63e8…6fAe ให้ Binance 14 ที่อยู่ 0x28C6…1d60 ในธุรกรรมเดียวกันยัดการอนุญาต 50 รายการ มีเพียง 1 รายการที่ตรงกับ nonce
04:24:23 น.: การกวาดหลักเกิดขึ้น Binance 14 เองเป็นผู้เรียก ส่งออก 167,464 ETH บวกโทเค็น 63 ชนิด ไปยัง 0x5227…2f8c ซึ่งรวมถึง USDT ประมาณ 1.615 พันล้าน ค่าธรรมเนียม 0.0004 ETH ไม่ถึง 1 ดอลลาร์
04:24:47 น.: Binance 16 เพิ่ม 28,005.6 ETH ไปยังที่อยู่เดียวกัน เกือบจะ无缝衔接
04:30 ถึง 04:33 น.: เริ่มแยก USDT 500 ล้านส่งไปยัง 0x9749…C762, 200 ล้านส่งไปยัง 0x0Ddf…697e
04:38 น.: 195,460 ETH โอนครั้งเดียวไปยัง 0x8532…43D4 นี่คือการขนย้ายครั้งใหญ่ที่สุดครั้งเดียว
04:41 และ 04:59 น.: ผู้โจมตีเรียกฟังก์ชันอื่น 0x043ff9d2 บน Binance 14 ในนาทีเดียวกัน Hot Wallet 34 โอนออก 780 ล้าน และ 43 ล้าน USDC ตามลำดับ ผู้โจมตียืมสิทธิ์ของ Binance 14 ที่มีต่อสัญญานี้
05:04 น.: กวาดอีกครั้ง กวาดไป 1,699.92 ETH
05:22 ถึง 06:02 น.: แตกเป็นชิ้นเล็กชิ้นน้อย RLUSD 88.5 ล้าน, UNI 7.02 ล้าน, PEPE 7.77 ล้านล้าน, wBETH 29,934, ENA 217.5 ล้าน ส่งไปยังที่อยู่ใหม่ทีละรายการ แต่ละที่อยู่โอนเข้า 0.5 ถึง 1 ETH ล่วงหน้าเป็นค่า Gas
05:44: ในกระบวนการนี้ Binance 14 ถูกกวาดสำเร็จอีกครั้ง โดยกวาดเงินฝากใหม่ที่เพิ่งเข้ามา
จากเวลาที่สั่งไปจนถึงการกวาดครั้งแรก ห่างกันเพียง 3 นาที 24 วินาที แต่ระบบควบคุมความเสี่ยงของ Binance ไม่มีการสกัดกั้นใดๆ
จากนั้นตั้งแต่เวลา 5 โมงเช้า Binance และโครงการต่างๆ เริ่มอายัดสินทรัพย์ Tether ประมาณ 1,567 ล้าน USDT, Circle ประมาณ 823 ล้าน USDC (รวมกัน 2,316 ล้าน) บวกกับ Ripple ประมาณ 200 ล้าน RLUSD, World Liberty Financial ประมาณ 27.8 ล้าน USD1 + 2 ล้าน WLFI รวมเป็น 2,540 ล้าน
EIP-7702 คือความสามารถที่นำมาใช้ในการอัปเกรด Pectra ของ Ethereum: ทำให้กระเป๋าเงินธรรมดา (EOA) เช่าซอร์สโค้ดของ smart contract ได้ชั่วคราว เจ้าของกระเป๋าเซ็นใบอนุญาต จากนั้นทุกการเรียกใช้กับที่อยู่นี้ จะรันโค้ดจากภายนอกนั้น
วิธีที่ผู้โจมตีใช้คือ:
ติดตั้ง合约 0x63e8…6fAe ซึ่งมีเพียงฟังก์ชันเดียว sweep(address pool, address[] depositors)——โอน ETH และโทเคนที่ระบุทั้งหมดไปยังที่อยู่ที่กำหนด
ได้ลายเซ็นอนุญาตของ Binance 14 มา แล้ว "ติดตั้ง" โค้ดนี้ลงบน hot wallet ของ Binance
หลังติดตั้งเสร็จ 3 นาที 24 วินาที ก็เรียกใช้สัญญากวาดบนที่อยู่ hot wallet ของ Binance โดยตรง
ดังนั้นจากภายนอกดูเหมือน hot wallet ของ Binance โอนเงินออกเอง บนเชนไม่เห็นการกระทำใดๆ ที่ "ที่อยู่ภายนอกโอนสินทรัพย์ออกไป" ดูเหมือน Binance 14 กำลังทำธุรกรรมการโอนออกปกติ
ผู้โจมตีไม่ทราบ nonce แบบเรียลไทม์ของ Binance 14 (กระเป๋านั้นยังคงส่งธุรกรรมอย่างต่อเนื่อง) ดังนั้นเขาจึงใส่การอนุญาต 50 รายการในธุรกรรมเดียว nonce เรียงจาก N ถึง N+49 เพื่อเดิมพันว่ามีหนึ่งรายการจะตรง ผลปรากฏว่ามีเพียงรายการเดียวที่ได้ผล
ยินดีต้อนรับสู่ชุมชนทางการของ BlockBeats:
กลุ่ม Telegram สมัครสมาชิก: https://t.me/theblockbeats
กลุ่ม Telegram พูดคุย: https://t.me/BlockBeats_App
บัญชี Twitter ทางการ: https://twitter.com/BlockBeatsAsia