Cointime

Download App
iOS & Android

คำอธิบายโดยละเอียดเกี่ยวกับเหตุการณ์การโจมตีของ Socket

Validated Project

เมื่อวันที่ 16 มกราคม 2024 Socket Tech ถูกโจมตีและได้รับความสูญเสียประมาณ 3.3 ล้านเหรียญสหรัฐ ผู้โจมตีใช้ประโยชน์จากช่องโหว่ในลิงก์ตรวจสอบข้อมูลของสัญญา Socket และขโมยเงินผู้ใช้ของสัญญาที่ได้รับอนุญาตผ่านการป้อนข้อมูลที่เป็นอันตราย การโจมตีครั้งนี้ทำให้เกิดการสูญเสียที่อยู่ทั้งหมด 230 แห่ง และการสูญเสียที่อยู่เดียวที่ใหญ่ที่สุดคือประมาณ 656,000 เหรียญสหรัฐ

การแนะนำความเป็นมา

Socket เป็นโปรโตคอลการทำงานร่วมกันที่ให้บริการข้อมูลและการรับส่งข้อมูลที่ปลอดภัยและมีประสิทธิภาพแบบข้ามสายโซ่ สัญญา Socket Gateway เป็นจุดเชื่อมต่อสำหรับการโต้ตอบทั้งหมดกับชั้นสภาพคล่องของซ็อกเก็ต โดยที่บริดจ์สินทรัพย์และ DEX ทั้งหมดมารวมกันเป็นเมตาบริดจ์เดียว และเลือกธุรกรรมที่ดีที่สุดตามการตั้งค่าของผู้ใช้ เช่น ต้นทุน เวลาแฝง หรือการกำหนดเส้นทางความปลอดภัย

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

ภาพด้านล่างแสดงบันทึกการกำหนดเส้นทางที่เพิ่มผ่านผู้ดูแลสัญญา

สรุปเหตุการณ์

  1. 1. เมื่อเวลา 15:03 น. ของวันที่ 16 มกราคม ตามเวลาปักกิ่ง กระเป๋าเงินของผู้โจมตีได้โอนเงินที่ใช้สำหรับการโจมตี การวิเคราะห์เวลาของเราแสดงให้เห็นว่าเงินมาจาก 0xe620 และเกี่ยวข้องกับ 10 BNB ที่ถอนออกจาก Tornado Cash
  1. 2. เงินเหล่านี้ถูกใช้เพื่อสร้างและดำเนินการสัญญาสองฉบับเพื่อใช้ประโยชน์จากช่องโหว่ของซ็อกเก็ต สัญญาฉบับแรกมุ่งเป้าไปที่ USDC ในที่อยู่ที่ได้รับอนุญาตจาก SocketGateway (ภาพหน้าจอด้านล่าง) เหยื่อ 127 รายถูกฉ้อโกงเป็นเงินประมาณ 2.5 ล้านเหรียญสหรัฐ
  1. 3. ถัดไป สัญญาฉบับที่สองกำหนดเป้าหมายไปที่ WETH, USDT, WBTC, DAI และ MATIC ในที่อยู่ของเหยื่อ ส่งผลให้ผู้เสียหายอีก 104 รายสูญเสียทรัพย์สินดังต่อไปนี้:
  • 42.47526105 เวท
  • 347,005.65 ดอลลาร์สหรัฐฯ
  • 2.88962154 WBTC
  • 13,821.01 วัน
  • 165,356.99 เมติค
  1. 4. ผู้โจมตีแปลง USDC และ USDT เป็น ETH

แหล่งที่มาของช่องโหว่

ช่องโหว่ที่ถูกโจมตีโดยผู้โจมตีมีอยู่ในฟังก์ชัน PerformanceAction ในที่อยู่การกำหนดเส้นทางที่อยู่เส้นทางที่เพิ่มใหม่

ฟังก์ชันดั้งเดิมของฟังก์ชัน PerformAction ในที่อยู่นี้คือเพื่อช่วยเหลือฟังก์ชันของ Wrapping และ Unwrapping อย่างไรก็ตาม ช่องโหว่ร้ายแรงปรากฏในฟังก์ชันนี้: ผู้ใช้เรียกใช้ข้อมูลภายนอกโดยตรงผ่าน swapExtraData ใน .call() โดยไม่มีการตรวจสอบ ซึ่งหมายความว่าผู้โจมตีสามารถเรียกใช้ฟังก์ชันที่เป็นอันตรายได้ตามอำเภอใจ

ในเหตุการณ์นี้ ผู้โจมตีได้สร้างอินพุต swapExtraData ที่เป็นอันตรายซึ่งทริกเกอร์ฟังก์ชัน TransferFrom การโทรที่เป็นอันตรายใช้ประโยชน์จากการอนุญาตของผู้ใช้ต่อสัญญา SocketGateway และขโมยเงินจากพวกเขา

แม้ว่าสัญญาจะทำให้แน่ใจว่ายอดคงเหลือของผู้ใช้จะเปลี่ยนแปลงอย่างถูกต้องหลังจากเรียก fromToken.call() โดยการตรวจสอบการตรวจสอบยอดคงเหลือ ฟังก์ชันนี้จะไม่คำนึงถึงสถานการณ์ที่ผู้โจมตีตั้งค่าจำนวนเป็น 0

ฟื้นฟูกระบวนการโจมตี

  1. 1. การใช้สัญญาการโจมตี ผู้โจมตีเรียกว่า 0x00000196() ในสัญญา Socket Gateway
  1. 2. fallback() ใช้ลายเซ็นเลขฐานสิบหก 196 เพื่อเรียกสัญญาที่อยู่การกำหนดเส้นทางที่มีช่องโหว่ (routerAddress)
  1. 3. ในภาพหน้าจอด้านล่าง เราจะเห็นอินพุตปลอมที่ผู้โจมตีใช้ และหมายเลขการสลับคือ 0 ทั้งหมด
  1. 4. ถัดไป WrappedTokenSwapperImpl.performAction() จะถูกเรียกให้ทำการสลับ
  1. 5. SwapExtraData ปลอมได้รับการยอมรับและดำเนินการโดย fromToken (WETH) โดยไม่มีการตรวจสอบใดๆ
  1. 5. SwapExtraData ปลอมได้รับการยอมรับและดำเนินการโดย fromToken (WETH) โดยไม่มีการตรวจสอบใดๆ
  1. 6. ผู้โจมตีทำซ้ำขั้นตอนข้างต้นจนกว่าทรัพย์สินของเหยื่อจะหมด หลังจากที่ธุรกรรมที่เป็นอันตรายปรากฏขึ้น Socket ก็รีบเรียก DisableRoute เพื่อบล็อกเส้นทางที่มีช่องโหว่ก่อนหน้านี้และป้องกันการโจมตีในวงกว้าง
  2. 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 จะยังคงมุ่งมั่นที่จะมอบการตรวจสอบและการตรวจจับที่ครอบคลุมสำหรับแพลตฟอร์ม ช่วยลดความเสี่ยงในการรวมกลุ่มต่างๆ และปรับปรุงความไว้วางใจของชุมชนและระดับความปลอดภัยของอุตสาหกรรมทั้งหมด

ความคิดเห็น

ความคิดเห็นทั้งหมด

Recommended for you

ต้องอ่านทุกวัน