
เมื่อวันที่ 16 มกราคม 2024 Socket Tech ถูกโจมตี ส่งผลให้สูญเสียเงินประมาณ 3.3 ล้านเหรียญสหรัฐ ผู้โจมตีใช้ประโยชน์จากช่องโหว่ในลิงก์ตรวจสอบข้อมูลของสัญญา Socket และขโมยเงินผู้ใช้ของสัญญาที่ได้รับอนุญาตผ่านการป้อนข้อมูลที่เป็นอันตราย การโจมตีครั้งนี้ทำให้เกิดการสูญเสียที่อยู่ทั้งหมด 230 แห่ง โดยการสูญเสียที่อยู่เดียวที่ใหญ่ที่สุดคือประมาณ 656,000 ดอลลาร์
การแนะนำความเป็นมา
Socket เป็นโปรโตคอลการทำงานร่วมกันที่ให้บริการข้อมูลและการรับส่งข้อมูลที่ปลอดภัยและมีประสิทธิภาพแบบข้ามสายโซ่ สัญญา Socket Gateway เป็นจุดเชื่อมต่อสำหรับการโต้ตอบทั้งหมดกับชั้นสภาพคล่องของซ็อกเก็ต โดยที่บริดจ์สินทรัพย์และ DEX ทั้งหมดมารวมกันเป็นเมตาบริดจ์เดียว และเลือกธุรกรรมที่ดีที่สุดตามการตั้งค่าของผู้ใช้ เช่น ต้นทุน เวลาแฝง หรือการกำหนดเส้นทางความปลอดภัย
สามวันก่อนการแฮ็ก ผู้ดูแลระบบสัญญา Socket ดำเนินการคำสั่ง addRoute เพื่อเพิ่มเส้นทางใหม่ให้กับระบบ วัตถุประสงค์ของการเพิ่มการกำหนดเส้นทางคือเพื่อขยายขีดความสามารถของ Socket Gateway แต่ทำให้เกิดช่องโหว่ร้ายแรงโดยไม่ได้ตั้งใจ
รูปภาพด้านล่างแสดงบันทึกการกำหนดเส้นทางที่เพิ่มผ่านผู้ดูแลสัญญา:
สรุปเหตุการณ์
1. เมื่อเวลา 15:03 น. ของวันที่ 16 มกราคม ตามเวลาปักกิ่ง กระเป๋าเงินของผู้โจมตีได้โอนเงินที่ใช้สำหรับการโจมตี การวิเคราะห์เวลาของเราแสดงให้เห็นว่าเงินมาจาก 0x e 620 และเกี่ยวข้องกับ 10 BNB ที่ถอนออกจาก Tornado Cash
2. เงินเหล่านี้ถูกใช้เพื่อสร้างและดำเนินการสัญญาสองฉบับเพื่อใช้ประโยชน์จากช่องโหว่ของซ็อกเก็ต สัญญาฉบับแรกกำหนดเป้าหมายไปที่ USDC ในที่อยู่ที่ได้รับอนุญาตจาก SocketGateway (ภาพหน้าจอด้านล่าง) เหยื่อ 127 รายถูกฉ้อโกงจากเงินประมาณ 2.5 ล้านเหรียญสหรัฐ
3. ถัดไป สัญญาฉบับที่สองกำหนดเป้าหมายไปที่ WETH, USDT, WBTC, DAI และ MATIC ในที่อยู่ของเหยื่อ ส่งผลให้เหยื่ออีก 104 รายสูญเสียทรัพย์สินโดยประมาณดังต่อไปนี้:
-42.48 WETH
-347, 005.65 USDT
-2.89 WBTC
-13, 821.01 DAI
-165, 356.99 MATIC
4. ผู้โจมตีแปลง USDC และ USDT เป็น ETH
แหล่งที่มาของช่องโหว่
ช่องโหว่ที่ถูกโจมตีโดยผู้โจมตีมีอยู่ในฟังก์ชัน PerformanceAction ภายในที่อยู่การกำหนดเส้นทางที่อยู่เส้นทางที่เพิ่มใหม่
ฟังก์ชันดั้งเดิมของฟังก์ชัน PerformAction ในที่อยู่นี้คือเพื่อช่วยเหลือฟังก์ชัน Wrapping และ Unwrapping
อย่างไรก็ตาม ช่องโหว่ร้ายแรงปรากฏในฟังก์ชันนี้: ผู้ใช้เรียกใช้ข้อมูลภายนอกโดยตรงผ่าน swapExtraData ใน .call() โดยไม่มีการตรวจสอบ ซึ่งหมายความว่าผู้โจมตีสามารถเรียกใช้ฟังก์ชันที่เป็นอันตรายได้ตามอำเภอใจ
ในเหตุการณ์นี้ ผู้โจมตีได้สร้างอินพุต swapExtraData ที่เป็นอันตรายซึ่งทริกเกอร์ฟังก์ชัน TransferFrom การโทรที่เป็นอันตรายใช้ประโยชน์จากการอนุญาตของผู้ใช้ต่อสัญญา SocketGateway และขโมยเงินจากพวกเขา
แม้ว่าสัญญาจะทำให้แน่ใจว่ายอดคงเหลือของผู้ใช้จะเปลี่ยนแปลงอย่างถูกต้องหลังจากเรียก fromToken.call() โดยการตรวจสอบการตรวจสอบยอดคงเหลือ ฟังก์ชันนี้จะไม่คำนึงถึงสถานการณ์ที่ผู้โจมตีตั้งค่าจำนวนเป็น 0
ฟื้นฟูกระบวนการโจมตี
1. การใช้สัญญาการโจมตี ผู้โจมตีเรียก 0x 00000196() ในสัญญา Socket Gateway
2.fallback() เรียกสัญญาที่อยู่การกำหนดเส้นทางที่มีช่องโหว่ (ที่อยู่เราเตอร์) โดยใช้ลายเซ็นเลขฐานสิบหก 196
3. ในภาพหน้าจอด้านล่าง เราจะเห็นอินพุตปลอมที่ผู้โจมตีใช้ และหมายเลขการสลับคือ 0 ทั้งหมด
4. ถัดไป WrappedTokenSwapperImpl.performAction() จะถูกเรียกให้ทำการสลับ
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 จะยังคงมุ่งมั่นที่จะให้การตรวจสอบและการทดสอบที่ครอบคลุมสำหรับแพลตฟอร์ม ช่วยลดความเสี่ยงโดยรวม และปรับปรุงความไว้วางใจของชุมชนและระดับความปลอดภัยของอุตสาหกรรมทั้งหมด .


