> สาเหตุของเหตุการณ์นี้คือชุมชนไม่สามารถค้นพบความเสี่ยงในข้อเสนอเมื่อตรวจสอบข้อเสนอ และไม่ได้ตรวจสอบอย่างรอบคอบว่ารหัสของสัญญาข้อเสนอมีช่องโหว่ด้านความปลอดภัยหรือไม่**เขียนโดย: SharkTeam**ในวันที่ 20 พฤษภาคม 2023 ตามเวลาปักกิ่ง Tornado.Cash ประสบกับการโจมตีข้อเสนอ และผู้โจมตีทำกำไรได้ประมาณ 680,000 ดอลลาร์สหรัฐ SharkTeam ได้ทำการวิเคราะห์ทางเทคนิคของเหตุการณ์นี้เป็นครั้งแรก และสรุปข้อควรระวังด้านความปลอดภัย โดยหวังว่าโครงการต่อๆ ไปจะได้เรียนรู้จากเหตุการณ์ดังกล่าว และสร้างแนวป้องกันความปลอดภัยสำหรับอุตสาหกรรมบล็อกเชน## 1. การวิเคราะห์เหตุการณ์ที่อยู่ผู้โจมตี:0x092123663804f8801b9b086b03B98D706f77bD590x592340957eBC9e4Afb0E9Af221d06fDDDF789de9สัญญาการโจมตี:0xAF54612427d97489707332efe0b6290F129DbAcb0x03ecf0d22f9ccd21144a7d492cf63b471916497a0x7dc86183274b28e9f1a100a0152dac975361353d (สัญญาการปรับใช้)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. คำแนะนำด้านความปลอดภัยในการตอบสนองต่อการโจมตีนี้ เราควรปฏิบัติตามข้อควรระวังต่อไปนี้ในระหว่างขั้นตอนการพัฒนา:* เมื่อออกแบบข้อเสนอ ให้คำนึงถึงความปลอดภัยของกลไกข้อเสนออย่างเต็มที่และลดความเสี่ยงที่ข้อเสนอจะถูกควบคุมจากส่วนกลาง พิจารณาลดมูลค่าของการโจมตี เพิ่มต้นทุนในการได้รับสิทธิ์ในการออกเสียง และเพิ่มต้นทุนในการดำเนินการโจมตี ฯลฯ การออกแบบ* ก่อนลงคะแนนในข้อเสนอ ชุมชนควรตรวจสอบอย่างรอบคอบว่ารหัสสัญญามีประตูหลังหรือไม่* ก่อนที่ข้อเสนอจะได้รับการอนุมัติ คุณสามารถติดต่อบริษัทตรวจสอบความปลอดภัยบุคคลที่สามเพื่อดำเนินการตรวจสอบความปลอดภัยของโค้ดตรรกะของสัญญาได้
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. คำแนะนำด้านความปลอดภัย
ในการตอบสนองต่อการโจมตีนี้ เราควรปฏิบัติตามข้อควรระวังต่อไปนี้ในระหว่างขั้นตอนการพัฒนา: