SharkTeam: การวิเคราะห์หลักการโจมตีข้อเสนอ Tornado.Cash

สาเหตุของเหตุการณ์นี้คือชุมชนไม่สามารถค้นพบความเสี่ยงในข้อเสนอเมื่อตรวจสอบข้อเสนอ และไม่ได้ตรวจสอบอย่างรอบคอบว่ารหัสของสัญญาข้อเสนอมีช่องโหว่ด้านความปลอดภัยหรือไม่

เขียนโดย: SharkTeam

ในวันที่ 20 พฤษภาคม 2023 ตามเวลาปักกิ่ง Tornado.Cash ประสบกับการโจมตีข้อเสนอ และผู้โจมตีทำกำไรได้ประมาณ 680,000 ดอลลาร์สหรัฐ SharkTeam ได้ทำการวิเคราะห์ทางเทคนิคของเหตุการณ์นี้เป็นครั้งแรก และสรุปข้อควรระวังด้านความปลอดภัย โดยหวังว่าโครงการต่อๆ ไปจะได้เรียนรู้จากเหตุการณ์ดังกล่าว และสร้างแนวป้องกันความปลอดภัยสำหรับอุตสาหกรรมบล็อกเชน

1. การวิเคราะห์เหตุการณ์

ที่อยู่ผู้โจมตี:

0x092123663804f8801b9b086b03B98D706f77bD59

0x592340957eBC9e4Afb0E9Af221d06fDDDF789de9

สัญญาการโจมตี:

0xAF54612427d97489707332efe0b6290F129DbAcb

0x03ecf0d22f9ccd21144a7d492cf63b471916497a

0x7dc86183274b28e9f1a100a0152dac975361353d (สัญญาการปรับใช้)

0xc503893b3e3c0c6b909222b45f2a3a259a52752d (สัญญาข้อเสนอปลอม)

สัญญาที่ถูกโจมตี:

0x5efda50f22d34F262c29268506C5Fa42cB56A1Ce

เริ่มต้นธุรกรรมข้อเสนอ:

0x34605f1d6463a48b818157f7b26d040f8dd329273702a0618e9e74fe350e6e0d

ธุรกรรมการโจมตี:

0x3274b6090685b842aca80b304a4dcee0f61ef8b6afee10b7c7533c32fb75486d

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

(1) ประการแรก ผู้โจมตี (0x08e80ecb) เริ่มต้นข้อเสนอของสัญญาที่ถูกโจมตี (0x5efda50f) โดยอ้างว่าข้อเสนอนี้เป็นส่วนเสริมของข้อเสนอ 16

(2) แต่จริง ๆ แล้วมีฟังก์ชั่นทำลายตัวเองเพิ่มเติมในข้อเสนอ

(3) น่าเสียดายที่ชุมชนไม่พบปัญหาใด ๆ ในข้อเสนอนี้ และสมาชิกส่วนใหญ่ลงมติให้ผ่านข้อเสนอนี้

(4) ผู้โจมตีสร้างสัญญาจำนวนมากเพื่อดำเนินการโอนโทเค็น

(5) ผู้โจมตี (0x08e80ecb) ทำลายสัญญาข้อเสนอ (0xc503893b) และสัญญาการสร้างของเขา (0x7dc86183) สัญญาการโจมตี (0xc503893b) ได้รับการปรับใช้ใหม่ในภายหลังในที่อยู่เดียวกัน

(6) หลังจากแก้ไขสัญญาข้อเสนอ ผู้โจมตี (0x08e80ecb) ดำเนินการตามข้อเสนอและแก้ไขจำนวนโทเค็นล็อคของที่อยู่สัญญาภายใต้การควบคุมของเขาเป็น 10,000

(7) หลังจากดำเนินการตามข้อเสนอแล้ว ผู้โจมตี (0x08e80ecb) จะโอนโทเค็นไปยังที่อยู่ของตนเองและรับความเป็นเจ้าของสัญญาที่ถูกโจมตี

การวิเคราะห์ช่องโหว่: เนื่องจากสัญญาการสร้าง (0x7dc86183) ของสัญญาข้อเสนอ (0xc503893b) ถูกปรับใช้ผ่าน creat2 หลังจากที่สัญญาทั้งสองถูกทำลาย สัญญาลอจิกใหม่สามารถปรับใช้ในที่อยู่เดียวกัน และการดำเนินการข้อเสนอจะถูกเรียกใช้ในรูปแบบ ของ delegatecall สัญญาโจมตีสามารถแก้ไขค่าในสัญญาที่ถูกโจมตีโดยพลการ

บทสรุปของเหตุการณ์: สาเหตุของเหตุการณ์นี้คือชุมชนไม่สามารถค้นพบความเสี่ยงในข้อเสนอเมื่อตรวจสอบข้อเสนอ และไม่ได้ตรวจสอบอย่างละเอียดว่ารหัสของสัญญาข้อเสนอมีช่องโหว่ด้านความปลอดภัยหรือไม่

2. คำแนะนำด้านความปลอดภัย

ในการตอบสนองต่อการโจมตีนี้ เราควรปฏิบัติตามข้อควรระวังต่อไปนี้ในระหว่างขั้นตอนการพัฒนา:

  • เมื่อออกแบบข้อเสนอ ให้คำนึงถึงความปลอดภัยของกลไกข้อเสนออย่างเต็มที่และลดความเสี่ยงที่ข้อเสนอจะถูกควบคุมจากส่วนกลาง พิจารณาลดมูลค่าของการโจมตี เพิ่มต้นทุนในการได้รับสิทธิ์ในการออกเสียง และเพิ่มต้นทุนในการดำเนินการโจมตี ฯลฯ การออกแบบ
  • ก่อนลงคะแนนในข้อเสนอ ชุมชนควรตรวจสอบอย่างรอบคอบว่ารหัสสัญญามีประตูหลังหรือไม่
  • ก่อนที่ข้อเสนอจะได้รับการอนุมัติ คุณสามารถติดต่อบริษัทตรวจสอบความปลอดภัยบุคคลที่สามเพื่อดำเนินการตรวจสอบความปลอดภัยของโค้ดตรรกะของสัญญาได้
ดูต้นฉบับ
  • รางวัล
  • แสดงความคิดเห็น
  • แชร์
แสดงความคิดเห็น
ไม่มีความคิดเห็น
  • หัวข้อถ่ายทอดสด