เมื่อวันที่ 16 มกราคม 2024 Socket Tech ถูกโจมตีและได้รับความสูญเสียประมาณ 3.3 ล้านเหรียญสหรัฐ ผู้โจมตีใช้ประโยชน์จากช่องโหว่ในลิงก์ตรวจสอบข้อมูลของสัญญา Socket และขโมยเงินผู้ใช้ของสัญญาที่ได้รับอนุญาตผ่านการป้อนข้อมูลที่เป็นอันตราย การโจมตีครั้งนี้ทำให้เกิดการสูญเสียที่อยู่ทั้งหมด 230 แห่ง และการสูญเสียที่อยู่เดียวที่ใหญ่ที่สุดคือประมาณ 656,000 เหรียญสหรัฐ
การแนะนำความเป็นมา
Socket เป็นโปรโตคอลการทำงานร่วมกันที่ให้บริการข้อมูลและการรับส่งข้อมูลที่ปลอดภัยและมีประสิทธิภาพแบบข้ามสายโซ่ สัญญา Socket Gateway เป็นจุดเชื่อมต่อสำหรับการโต้ตอบทั้งหมดกับชั้นสภาพคล่องของซ็อกเก็ต โดยที่บริดจ์สินทรัพย์และ DEX ทั้งหมดมารวมกันเป็นเมตาบริดจ์เดียว และเลือกธุรกรรมที่ดีที่สุดตามการตั้งค่าของผู้ใช้ เช่น ต้นทุน เวลาแฝง หรือการกำหนดเส้นทางความปลอดภัย
สามวันก่อนการโจมตีของแฮกเกอร์ ผู้ดูแลระบบสัญญา Socket ดำเนินการคำสั่ง addRoute เพื่อเพิ่มเส้นทางใหม่ให้กับระบบ วัตถุประสงค์ของการเพิ่มการกำหนดเส้นทางคือเพื่อขยายฟังก์ชันการทำงานของ Socket Gateway แต่ทำให้เกิดช่องโหว่ร้ายแรงโดยไม่ได้ตั้งใจ
ภาพด้านล่างแสดงบันทึกการกำหนดเส้นทางที่เพิ่มผ่านผู้ดูแลสัญญา
สรุปเหตุการณ์
- 1. เมื่อเวลา 15:03 น. ของวันที่ 16 มกราคม ตามเวลาปักกิ่ง กระเป๋าเงินของผู้โจมตีได้โอนเงินที่ใช้สำหรับการโจมตี การวิเคราะห์เวลาของเราแสดงให้เห็นว่าเงินมาจาก 0xe620 และเกี่ยวข้องกับ 10 BNB ที่ถอนออกจาก Tornado Cash
- 2. เงินเหล่านี้ถูกใช้เพื่อสร้างและดำเนินการสัญญาสองฉบับเพื่อใช้ประโยชน์จากช่องโหว่ของซ็อกเก็ต สัญญาฉบับแรกมุ่งเป้าไปที่ USDC ในที่อยู่ที่ได้รับอนุญาตจาก SocketGateway (ภาพหน้าจอด้านล่าง) เหยื่อ 127 รายถูกฉ้อโกงเป็นเงินประมาณ 2.5 ล้านเหรียญสหรัฐ
- 3. ถัดไป สัญญาฉบับที่สองกำหนดเป้าหมายไปที่ WETH, USDT, WBTC, DAI และ MATIC ในที่อยู่ของเหยื่อ ส่งผลให้ผู้เสียหายอีก 104 รายสูญเสียทรัพย์สินดังต่อไปนี้:
- 42.47526105 เวท
- 347,005.65 ดอลลาร์สหรัฐฯ
- 2.88962154 WBTC
- 13,821.01 วัน
- 165,356.99 เมติค
- 4. ผู้โจมตีแปลง USDC และ USDT เป็น ETH
แหล่งที่มาของช่องโหว่
ช่องโหว่ที่ถูกโจมตีโดยผู้โจมตีมีอยู่ในฟังก์ชัน PerformanceAction ในที่อยู่การกำหนดเส้นทางที่อยู่เส้นทางที่เพิ่มใหม่
ฟังก์ชันดั้งเดิมของฟังก์ชัน PerformAction ในที่อยู่นี้คือเพื่อช่วยเหลือฟังก์ชันของ Wrapping และ Unwrapping อย่างไรก็ตาม ช่องโหว่ร้ายแรงปรากฏในฟังก์ชันนี้: ผู้ใช้เรียกใช้ข้อมูลภายนอกโดยตรงผ่าน swapExtraData ใน .call() โดยไม่มีการตรวจสอบ ซึ่งหมายความว่าผู้โจมตีสามารถเรียกใช้ฟังก์ชันที่เป็นอันตรายได้ตามอำเภอใจ
ในเหตุการณ์นี้ ผู้โจมตีได้สร้างอินพุต swapExtraData ที่เป็นอันตรายซึ่งทริกเกอร์ฟังก์ชัน TransferFrom การโทรที่เป็นอันตรายใช้ประโยชน์จากการอนุญาตของผู้ใช้ต่อสัญญา SocketGateway และขโมยเงินจากพวกเขา
แม้ว่าสัญญาจะทำให้แน่ใจว่ายอดคงเหลือของผู้ใช้จะเปลี่ยนแปลงอย่างถูกต้องหลังจากเรียก fromToken.call() โดยการตรวจสอบการตรวจสอบยอดคงเหลือ ฟังก์ชันนี้จะไม่คำนึงถึงสถานการณ์ที่ผู้โจมตีตั้งค่าจำนวนเป็น 0
ฟื้นฟูกระบวนการโจมตี
- 1. การใช้สัญญาการโจมตี ผู้โจมตีเรียกว่า 0x00000196() ในสัญญา Socket Gateway
- 2. fallback() ใช้ลายเซ็นเลขฐานสิบหก 196 เพื่อเรียกสัญญาที่อยู่การกำหนดเส้นทางที่มีช่องโหว่ (routerAddress)
- 3. ในภาพหน้าจอด้านล่าง เราจะเห็นอินพุตปลอมที่ผู้โจมตีใช้ และหมายเลขการสลับคือ 0 ทั้งหมด
- 4. ถัดไป WrappedTokenSwapperImpl.performAction() จะถูกเรียกให้ทำการสลับ
- 5. SwapExtraData ปลอมได้รับการยอมรับและดำเนินการโดย fromToken (WETH) โดยไม่มีการตรวจสอบใดๆ
- 5. SwapExtraData ปลอมได้รับการยอมรับและดำเนินการโดย fromToken (WETH) โดยไม่มีการตรวจสอบใดๆ
- 6. ผู้โจมตีทำซ้ำขั้นตอนข้างต้นจนกว่าทรัพย์สินของเหยื่อจะหมด หลังจากที่ธุรกรรมที่เป็นอันตรายปรากฏขึ้น Socket ก็รีบเรียก DisableRoute เพื่อบล็อกเส้นทางที่มีช่องโหว่ก่อนหน้านี้และป้องกันการโจมตีในวงกว้าง
- 7. เมื่อวันที่ 23 มกราคม Socket ประกาศว่าได้กู้คืน 1,032 ETH แล้ว และประกาศเมื่อวันที่ 25 ว่าจะชดเชยการสูญเสียทั้งหมดให้เต็มจำนวน เหตุการณ์ที่เกิดขึ้นนี้ได้รับการแก้ไข.
สรุปเหตุการณ์
การโจมตีข้อมูลการโทรที่เป็นอันตรายไม่ใช่เรื่องแปลกในสัญญาการกำหนดเส้นทางที่มีการอนุญาตผู้ใช้แบบไม่จำกัด การโจมตีที่คล้ายกันก่อนหน้านี้ ได้แก่ Dexible และ Hector Bridge เมื่อวันที่ 17 กุมภาพันธ์ 2023 Dexible การแลกเปลี่ยนแบบกระจายอำนาจถูกโจมตี ทำให้เกิดการสูญเสียมากกว่า 1.5 ล้านดอลลาร์ ผู้โจมตีป้อนข้อมูลการโทรที่เป็นอันตรายลงในฟังก์ชัน fill() ของ Dexible เพื่อขโมยทรัพย์สินของผู้ใช้ เมื่อวันที่ 2 มิถุนายน 2023 โปรโตคอลเครือข่าย Hector ถูกโจมตี ผู้โจมตีปรับใช้สัญญา USDC ปลอมและโอน USDC จริง 652,000 USDC จากสัญญาของเหยื่อผ่านข้อมูลการโทรที่เป็นอันตราย
โดยทั่วไปแล้วแพลตฟอร์มการรวมบล็อคเชนจะปรับปรุงสภาพคล่องและลดการสูญเสียโดยการห่อหุ้มชุดของสัญญาบริดจ์และการกำหนดเส้นทาง อย่างไรก็ตาม การห่อหุ้มที่ซับซ้อนนี้ทำให้เกิดความท้าทายด้านความปลอดภัยมากขึ้น เรายินดีที่ได้เห็นว่าเหตุการณ์ของ Socket สามารถแก้ไขได้ CertiK จะยังคงมุ่งมั่นที่จะมอบการตรวจสอบและการตรวจจับที่ครอบคลุมสำหรับแพลตฟอร์ม ช่วยลดความเสี่ยงในการรวมกลุ่มต่างๆ และปรับปรุงความไว้วางใจของชุมชนและระดับความปลอดภัยของอุตสาหกรรมทั้งหมด
ความคิดเห็นทั้งหมด