OP กว่า 20 ล้านเหรียญถูกขโมยจาก Multisig Wallet (ที่ยังไม่ได้) เป็นเจ้าของโดย Wintermute ได้อย่างไรกัน?

อันดับแรก ทาง Wintermute ได้รับการว่าจ้างจากทาง Optimism Foundation เพื่อทำการบริการจัดเตรียมสภาพคล่องในการเปิดตัว $OP ในวันที่ 27 พฤษภาคม พ.ศ. 2565 โดยกองทุนพันธมิตรของมูลนิธิได้รับการจัดสรร OP จำนวน 20 ล้านเหรียญให้แก่ Wintermute อย่างไรก็ตาม Wintermute พบว่าตัวเองไม่สามารถเข้าถึงโทเค็นเหล่านี้ได้ เนื่องจากพวกเขาได้ให้ที่อยู่ Multisig ของ Ethereum (L1) ที่พวกเขายังไม่ได้นำไปใช้แก่ Optimism (L2) แต่โชคไม่ดีนัก เพราะผู้โจมตีพบสิ่งนี้และปรับใช้ Multisig Contract ด้วยที่อยู่เดียวกันกับ L2 ก่อนหน้าที่ Wintermute จะดำเนินการ

หลังจากเหตุการณ์ดังกล่าว ทั้งสองทีมได้ออกประกาศ ดังนี้:

https://gov.optimism.io/t/message-to-optimism-community-from-wintermute/2595

โดยได้อธิบายวิธีการที่ผู้โจมตีสามารถควมคุมเหรียญ OP ทั้ง 20 ล้านเหรียญนี้

Address ต่าง ๆ ที่เกี่ยวข้อง

ขั้นตอนการโจมตี

  1. ผู้โจมตีใช้ Wallet ของผู้โจมตี #1 เพื่อปล่อย Attacking Contract
    https://optimistic.etherscan.io/tx/0x69ee67800307ef7cb30ffa42d9f052290e81b3df6d3b7c29303007e33cd1c240
  2. ผู้โจมตีใช้ Wallet ของผู้โจมตี #2 เพื่อสร้างธุรกรรมจำนวน 62 ธุรกรรมในการสร้าง Gnosis Safe multisig contract (มีสัญญาจำนวน 162 สัญญา ถูกสร้างขึ้นต่อ 1 ธุรกรรม)
    https://optimistic.etherscan.io/txs?a=0x60b28637879b5a09d21b68040020ffbf7dba5107&p=1
  3. Address ที่ถือเหรียญ OP 20 ล้านเหรียญถูกสร้างขึ้นที่ธุรกรรมที่ 55  (0x4f3a120e72c76c22ae802d129f599bfdbc31cb81)
    https://optimistic.etherscan.io/tx/0x00a3da68f0f6a69cb067f09c3f7e741a01636cbc27a84c603b468f65271d415b

การวิเคราะห์หาสาเหตุ

OP 20 ล้านเหรียญบน Optimism (L2) ถูกโอนไปที่ Address “0x4f3a120e72c76c22ae802d129f599bfdbc31cb81” ซึ่งเป็นที่อยู่ที่ Wintermute เป็นเจ้าของใน Ethereum (L1) แต่ “ยังไม่” เป็นของใครใน Optimism (L2)

โดยกระเป๋าเงิน Multisig Wintermute บน L1 ถูกสร้างขึ้นด้วยฟังก์ชัน createProxy() ของสัญญา Gnosis Safe Proxy Factory สัญญา Proxy ถูกสร้างขึ้นด้วย Ketword ใหม่ ซึ่งใช้ CREATE opcode เป็นเบื้องหลัง

Gnosis Safe Proxy Factory smart contract code

Address ของสัญญาอัจฉริยะที่ปรับใช้กับ CREATE opcode จะถูกคำนวณโดย keccak256 (senderAddress, nonce) ในกรณีนี้ senderAddress ที่สร้างสัญญานี้คือสัญญา Gnosis Safe Proxy Factory (0x76e2cfc1f5fa8f6a5b3fc4c8f4788f0116861f9b) และจำนวนสัญญาที่สร้างโดย Factory นี้ (ซึ่งจะเพิ่มขึ้นในทุกสัญญา Proxy ที่สร้างขึ้น)

นั่นหมายความว่า ถ้า senderAddess และ nonce บน L2 ตรงกัน นั่จะทำให้ตรงตามเงื่อนไขเหล่านี้บน L2 นั่นเอง

  • สัญญา Gnosis Safe Proxy Factory ได้ถูกปรับใช้บน L2 โดยมี Address เดียวกันกับที่อยู่บน L1
  • nonce บน L2 น้อยกว่า L1 (หมายถึงจำนวนของสัญญาที่สร้าง)

ด้วยเงื่อนไขเหล่านี้ ผู้โจมตีสามารถสร้างสัญญา Multisig จำนวนมากโดยใช้ Proxy Factory ที่มี Address เดียวกันจนกว่าจะถึง nonce เดียวกัน เพื่อสร้างสัญญา Multisig ด้วย Address เดียวกับ Wintermute Multisig wallet บน L1 และทำการเข้าควบคุม Address ที่ถือเหรียญ OP 20 ล้านเหรียญนั้นเอง

ผู้ปรับใช้ ProxyFactory

มีการพบว่าสัญญา Gnosis Safe Proxy Factory บน เครือข่าย Optimism (0x76e2cfc1f5fa8f6a5b3fc4c8f4788f0116861f9b) ถูกปรับใช้โดย Address ที่ถูกติดตามที่ชื่อว่า “Gnosis Safe: Deployer 3” บน Ethereum 

(0x1aa7451dd11b8cb16ac089ed100afe605efa00)

ค่า Gas สำหรับการปรับใช้ouhถูกส่งไปยัง Address ของผู้ปรับใช้ (0x1aa7451dd11b8cb16ac089ed7fe05efa00100a6a) โดย Wallet ของผู็โจมตี #2 (0x60b28637879b5a09d21b68040020ffbf7dba5107) จากธุรกรรมเหล่านี้:

https://optimistic.etherscan.io/tx/0xebe31b91705b2648ab4264fab02115782eafe26963ddc4ad99a2971d609ba376

https://optimistic.etherscan.io/tx/0x90debe0ba3110b4760809783d9b6d2d03d14a11495d20f85ff60bded89449259

สิ่งนี้เกิดขึ้นก่อนการปรับใช้สัญญา ProxyFactory on Optimism (L2) ในธุรกรรมนี้:

https://optimistic.etherscan.io/tx/0x75a42f240d229518979199f56cd7c82e4fc1f1a20ad9a4864c635354b4a34261

ซึ่งเป็นไปได้ว่าผู้โจมตีอาจเข้าถึง Private Key ของ “Gnosis Safe: Deployer 3” และจงใจที่จะปรับใช้ ProxyFactory บน Address เดียวกันเพื่อทำการโจมตีครั้งนี้

สรุป

บนเครือข่าย EVM การเข้าถึงบัญชีที่เป็นเจ้าของภายนอก (EOA) นั้นถือโดยเจ้าของคีย์ส่วนตัว (Private Key) อย่างไรก็ตาม เมื่อมีการสร้างที่อยู่จากสัญญา (Contract) จะไม่มีการรับประกันว่าความเป็นเจ้าของที่กำหนดไว้ในสัญญาอัจฉริยะจะเหมือนกันหมดในทุก ๆ เครือข่าย และด้วยการโอน OP จำนวน 20 ล้านเหรียญไปยังที่อยู่ที่ไม่มีใครเป็นเจ้าของ ผู้โจมตีจึงได้ปรับใช้กระเป๋าเงิน Multisig จำนวนทั้งหมด 10,044 วอลเล็ตเพื่อควบคุมที่อยู่ที่ถือโทเค็นเหล่านั้น

Social Media Link ของ Inspex: WebsiteMediumTwitterFacebookLinkedIn

อ้างอิง : https://inspexco.medium.com/how-20-million-op-was-stolen-from-the-multisig-wallet-not-yet-owned-by-wintermute-3f6c75db740a

Share on facebook
Share on twitter
Share on linkedin

Radius

ผู้เชี่ยวชาญการเขียนข่าว บทความ ที่เกี่ยวข้องกับ Bitcoin , คริปโตเคอเรนซี่ และ Blockchain ทั้งในไทยและต่างประเทศ อัพเดทราคา มุมมองการลงทุน ใหม่ล่าสุดทุกวัน
ข่าวต่อไป