Integer overflow ในโค้ด admin ปลดล็อกเงินติดค้าง 2 ล้านดอลลาร์ในสัญญา ICO HongCoin ปี 2016
บั๊ก integer-overflow เกือบสิบปีในฟังก์ชัน admin ของสัญญา Ethereum ICO ของ HongCoin เพิ่งถูกเปิดเผยโดยนักวิจัยด้านความปลอดภัยที่รู้จักในชื่อ 0xflorent ซึ่งช่วยให้ฟื้นฟู ETH ประมาณ 1,003.62 เหรียญ — หรือราว 2 ล้านดอลลาร์ — ที่ถูกล็อกไว้กว่าเก้าปี ข้อบกพร่องนี้อยู่ในฟังก์ชัน admin ที่เข้าถึงได้จำกัดซึ่งถูกควบคุมโดย multisignature wallet ของ HongCoin จึงอนุญาตให้ปลดล็อกเงินทุนสำหรับนักลงทุนดั้งเดิม 48 รายที่ประสานงานร่วมกันได้ การแก้ไขในครั้งนี้แสดงตัวอย่างบทเรียนสำคัญเกี่ยวกับการรักษาความเข้ากันได้ย้อนหลังและความเสี่ยงระยะยาวของบั๊กสัญญาอัจฉริยะในสัญญา DeFi และการขายโทเคน
ช่องโหว่คืออะไร และมันช่วยให้กู้คืนทุนได้อย่างไร?
โดยสรุป ช่องโหว่เกิดจากปัญหา integer-overflow ในฟังก์ชัน admin ที่มีสิทธิ์พิเศษ
0xflorent พบว่า ฟังก์ชันนี้ในสัญญา ซึ่งจำกัดการใช้งานเฉพาะ multisig wallet ของ HongCoin เท่านั้น ไม่มีการป้องกัน integer-overflow ที่เวอร์ชัน Solidity รุ่นหลังได้เพิ่มเข้ามาเป็นการป้องกันมาตรฐาน จึงเปิดโอกาสให้เกิดพฤติกรรมคำนวณเลขที่ไม่คาดคิด ซึ่งถ้าใช้ประโยชน์อย่างระมัดระวัง จะช่วยให้ผู้ถือสิทธิ์ admin ปลดล็อก ETH จำนวนมากที่ถูกล็อกเนื่องจาก overflow ได้
ข้อบกพร่องนี้ไม่ได้ถูกโจมตีเชิงร้ายแรงในที่สาธารณะ แต่ทำให้เงินทุนถูกล็อกภายในสัญญานานถึงเก้าปีตั้งแต่ ICO ในปี 2016 จนกระทั่ง 0xflorent ค้นพบและเปิดเผยอย่างรับผิดชอบ ร่วมประสานงานกับผู้ถือ multisig wallet ของ HongCoin เพื่อกำหนดวิธีแก้ไขอย่างปลอดภัยและนำไปใช้งาน
กรณีนี้เน้นให้เห็นว่าสัญญาอัจฉริยะรุ่นเก่า โดยเฉพาะอย่างยิ่งที่ถูกสร้างก่อนการปรับปรุงด้านความปลอดภัยของภาษา เช่นการตรวจจับ overflow อัตโนมัติใน Solidity 0.8.x อาจยังมีช่องโหว่ที่ตรวจไม่พบโดยไม่มีการตรวจสอบโค้ดอย่างลึกซึ้งและการจำลองสภาพแวดล้อม
การประสานงานและดำเนินการกู้คืนทุนทำอย่างไร?
เนื่องจากฟังก์ชันที่มีช่องโหว่สามารถเรียกใช้งานได้ผ่าน multisignature wallet ของ HongCoin เท่านั้น จึงต้องมีการร่วมมืออย่างใกล้ชิด
ขั้นตอนการกู้คืนประกอบด้วย:
- 0xflorent วิเคราะห์และทดสอบขั้นตอนปลดล็อกอย่างละเอียดบนการ Fork ของ Ethereum mainnet เพื่อยืนยันว่า exploit ทำซ้ำได้โดยไม่มีความเสี่ยงกับเงินทุนจริง
- หลังจากยืนยันความถูกต้อง นักวิจัยติดต่ออย่างปลอดภัยกับผู้ถือ multisig wallet ของ HongCoin และแบ่งปันหลักฐานพร้อมคำแนะนำ
- ทีม multisig อนุมัติและเซ็นธุรกรรมปลดล็อกด้วยตนเองเพื่อรักษาการกำกับดูแลบนเชนและการควบคุมโดยหลายฝ่าย
- ทีมดำเนินการธุรกรรมจำนวน 41 รายการแยกกัน — รายการละหนึ่งนักลงทุนที่มีเงินติดค้าง — เพื่อปลดล็อก ETH ประมาณ 1,000 เหรียญทีละขั้นตอน
- ขณะเดียวกัน ผู้ถืออีกเจ็ดรายที่มีจำนวนเงินค่อนข้างน้อยสามารถถอนเงินได้โดยตรงโดยไม่ต้องใช้วิธีแก้ไขนี้
น่าสังเกตว่า ผลลัพธ์เริ่มแรกแสดงว่านักลงทุนสองรายได้กู้คืน ETH รวม 96.5 เหรียญ หรือราว 193,000 ดอลลาร์แล้ว แสดงให้เห็นถึงผลกระทบเชิงปฏิบัติและการมีส่วนร่วมของนักลงทุน
แนวทางความร่วมมือเช่นนี้ค้ำประกันความสมบูรณ์และความไว้วางใจในการบริหารจัดการเงินทุนในขณะที่ปลดล็อกสินทรัพย์ที่ถูกล็อกโดยช่องว่างทางเทคนิคจากอดีตได้อย่างปลอดภัย
ใครได้รับผลประโยชน์และกู้คืนเงินได้เท่าไหร่?
โดยรวม นักลงทุนดั้งเดิมประมาณ 48 รายที่ซื้อโทเคน HongCoin ใน ICO ปี 2016 มีสิทธิ์ที่จะกู้คืนยอด ETH ที่ถูกล็อกไว้ได้จากการแก้ไขครั้งนี้
| ตัวชี้วัด | ค่า |
|---|---|
| ETH ที่ปลดล็อกทั้งหมด | 1,003.62 ETH (~2 ล้านดอลลาร์) |
| จำนวนผู้มีสิทธิ์ในการกู้คืน | 48 |
| นักลงทุนที่กู้คืนเงินได้แล้ว | 2 |
| ETH ที่กู้คืนแล้วจนถึงปัจจุบัน | 96.5 ETH (~193,000 ดอลลาร์) |
| จำนวนธุรกรรมที่เซ็น | 41 |
| จำนวนผู้ถือที่ได้เงินคืนโดยตรง | 7 คน |
ที่มีนักลงทุนแค่สองรายเรียกร้องเงินคืนจนถึงตอนนี้น่าจะเป็นเพราะความยากลำบากในการติดต่อและดึงดูดนักลงทุนที่หายไปนาน หรือการต้องให้ทำขั้นตอนคืนเงินต่อเนื่อง การติดต่อถึงผู้ถือรายอื่นๆ ต่อไปน่าจะช่วยเพิ่มอัตราการกู้คืนเมื่อเวลาผ่านไป
กรณีนี้ชี้ให้เห็นว่าบั๊กในสัญญาเก่าสามารถล็อกเงินจำนวนมากได้เป็นเวลาหลายปี และเน้นความสำคัญของการตรวจสอบโค้ดอย่างลึกซึ้งแม้หลัง ICO จะสิ้นสุดนานแล้ว
ทำไมบั๊ก integer-overflow จึงยังเป็นความเสี่ยงระยะยาวในสัญญาเก่า?
เหตุการณ์ HongCoin สะท้อนช่องโหว่คลาสสิกที่เกิดจากเวอร์ชัน Solidity ก่อนหน้า ที่การคำนวณโปรแกรมเลขจำนวนเต็ม — โดยไม่มีการตรวจจับ overflow และ underflow ในตัว — สามารถนำไปสู่สถานะที่ไม่พึงประสงค์ได้โดยไม่แจ้งเตือน
ก่อน Solidity v0.8.0 นักพัฒนาต้องใช้ไลบรารีภายนอกอย่าง SafeMath เพื่อป้องกัน overflow อย่างชัดเจน ในสัญญา ICO เก่าหลายฉบับ การป้องกันนี้มักไม่ครบถ้วนหรือขาดหายไป ดังนั้น:
- การดำเนินการเลขจำนวนเต็มอาจกลับค่า (เช่น การลบทำให้เลขติดลบที่กลายเป็นเลขบวกขนาดใหญ่อย่างไม่คาดคิด)
- ฟังก์ชัน admin หรือเจ้าของที่จัดการตัวแปรยอดเงิน อาจถูกใช้ในทางที่ผิดเพื่อปลดล็อกหรือปิดล็อกเงินโดยไม่ได้ตั้งใจ
- สัญญาเก่าที่เผยแพร่บน Ethereum mainnet ไม่สามารถแก้ไขได้ ทำให้ความเสี่ยงนี้ติดตัวตลอดไป
บั๊กใน HongCoin อยู่ในฟังก์ชัน admin เพียงเท่านั้น ซึ่งแสดงให้เห็นว่าพื้นที่จำกัดในโค้ดก็มีช่องโหว่ที่อาจถูกมองข้ามได้
| ยุค Solidity | การป้องกัน overflow | แนวปฏิบัติทั่วไป |
|---|---|---|
| ก่อน Solidity 0.8.0 | ไม่มีค่าเริ่มต้น | ใช้ SafeMath หรือไลบรารีอื่นๆ |
| Solidity 0.8.0 ขึ้นไป | ตรวจจับ overflow ในตัว | คำนวณอย่างปลอดภัยเป็นค่าเริ่มต้น |
ความอยู่รอดของช่องโหว่นี้เน้นย้ำถึงคุณค่าของการตรวจสอบความปลอดภัยเฉพาะเจาะจงสัญญาเก่า โดยเฉพาะอย่างยิ่งเมื่อต้องรักษาเงินทุนที่ยังล็อกอยู่หรือการควบคุมที่แม้จะจำกัดแต่สำคัญ ความสามารถในการจำลองเรียกใช้งานบน fork ของ testnet และมีผู้เซ็น multisig ร่วมสำหรับการแก้ไขจึงเป็นสิ่งจำเป็น
บทเรียนความปลอดภัยที่กู้คืน HongCoin สอนอะไรบ้าง?
กรณี integer overflow ที่ถูกละเลยมาเนิ่นนานนี้เสริมข้อคิดสำคัญสำหรับชุมชน Web3 ด้านความปลอดภัย โดยเฉพาะอย่างยิ่งเมื่อระบบนิเวศ DeFi มีความซับซ้อนและขนาดใหญ่ขึ้นเรื่อยๆ:
- ความเสี่ยงสัญญาเก่ายังคงอยู่: สัญญาที่เปิดใช้งาน แม้จะผ่านมาหลายปี อาจล็อกสินทรัพย์บนเชนจำนวนมากอย่างไม่มีกำหนดเนื่องจากบั๊กเล็กน้อยที่ไม่ถูกตรวจพบตั้งแต่แรก
- กุญแจ admin และ multisigs สำคัญ: สิทธิ์ที่ควบคุมโดย multisig wallet เปิดเส้นทางให้แก้ปัญหาได้ แต่ก็เพิ่มความซับซ้อนในการประสานงาน การออกแบบการกำกับดูแลควรคาดการณ์สภาพการอัปเกรดหรือแก้ไขไว้ล่วงหน้า
- Integer overflow ยังเป็นเรื่องที่ต้องกังวล: แม้มีฟีเจอร์ป้องกันใน Solidity รุ่นใหม่ การตรวจสอบสมมติฐานและกรณีขอบของการคำนวณยังเป็นสิ่งจำเป็น โดยเฉพาะเมื่ออัปเกรดสัญญาเก่าหรือย้ายข้อมูล
- การเปิดเผยข้อมูลและความร่วมมืออย่างรับผิดชอบ: นักวิจัย 0xflorent แสดงตัวอย่างการปฏิบัติที่ดีโดยเปิดเผยข้อมูลอย่างเป็นส่วนตัว ตรวจสอบบน testnet และร่วมมือกับผู้ถือ multisig ในการปลดล็อกเงินอย่างถูกต้องตามจรรยาบรรณ
- ความไว้วางใจนักลงทุนและการกู้คืนทุน: การปลดล็อกเงินที่ถูกล็อกสามารถฟื้นฟูมูลค่าที่สำคัญให้ผู้ถือหลังเวลาผ่านไปหลายปี ลดความเสียหายด้านชื่อเสียงและสร้างความเชื่อมั่นในชุมชน
| ประเด็นสำคัญ | ตัวอย่างกรณี HongCoin | แนวทางปฏิบัติที่ดีที่สุด |
|---|---|---|
| ประเภทช่องโหว่ | Integer-overflow ในฟังก์ชัน admin | ตรวจสอบโค้ดครบถ้วน, ใช้ SafeMath |
| วิธีการกู้คืน | ประสาน multisig และตรวจสอบ testnet | การควบคุมหลายฝ่าย; การเปิดตัวและตรวจสอบเป็นลำดับ |
| ผลกระทบต่อนักลงทุน | ปลดล็อก 2 ล้านดอลลาร์ให้ 48 นักลงทุน | การสื่อสารโปร่งใสและคืนเงิน |
| ความเสี่ยงสัญญาเก่า | เงินถูกล็อกมา 9 ปี | การตรวจสอบอย่างต่อเนื่องและตรวจสัญญาเก่า |
ทีมความปลอดภัยที่ดูแลหรือเผยแพร่โปรโตคอลเก่าควรระวังเป็นพิเศษกับปัญหาที่ซ่อนอยู่เหล่านี้ซึ่งยังอาจทำให้เกิดผลกระทบทางปฏิบัติหรือการเงินครั้งใหญ่ได้
ข้อมูลเชิงลึกจาก Soken: “Integer overflow ในสัญญาอัจฉริยะเก่าเป็นความท้าทายด้านความปลอดภัยที่ไม่มีวันหมดไป การตรวจสอบของเรามักพบรูปแบบเก่าที่ไม่มีการป้องกันในตัวภาษา ทำให้เกิดความเสี่ยงแฝง การแก้ไขอย่างประสานงาน—โดยเฉพาะในสัญญาที่ควบคุมโดย multisignature wallet—ต้องการความสมดุลที่ละเอียดระหว่างความถูกต้องทางเทคนิคกับการกำกับดูแลผู้มีส่วนได้เสีย กรณีกู้คืน HongCoin นี้เป็นตัวอย่างว่าวิธีการเปิดเผยอย่างมีจริยธรรมพร้อมการกำกับดูแลสามารถปลดล็อกมูลค่าที่ถูกกักขังไว้ได้หลายปีหลังเปิดตัว”
บทสรุป: ปลดล็อกมูลค่าเก่าผ่านความระมัดระวังทางเทคนิคและการกำกับดูแล
การกู้คืนกรณี integer overflow ของ HongCoin แสดงให้เห็นว่าช่องโหว่ของโค้ดจากยุค Solidity ก่อนหน้านี้สามารถกักขังเงินหลายล้านดอลลาร์ไว้เกือบสิบปีได้อย่างไร ความร่วมมือที่นำโดย 0xflorent และผู้ถือ multisig ของ HongCoin แสดงให้เห็นประสิทธิภาพของกระบวนการเปิดเผยข้อมูลและแนวทางการแก้ไขที่ได้รับการสนับสนุนจากการกำกับดูแลอย่างปลอดภัย
ความเข้าใจถึงความเสี่ยงของสัญญาเก่าเหล่านี้เป็นสิ่งจำเป็นสำหรับสุขภาพระยะยาวของระบบนิเวศ Ethereum ที่สัญญารุ่นเก่ายังคงเป็นรากฐานสำคัญ แม้มีความซับซ้อนและรายละเอียดที่ซ่อนอยู่ โปรเจกต์บล็อกเชนที่รับผิดชอบดูแลหรืออัปเกรดสัญญาเก่าควรให้ความสำคัญกับการตรวจสอบย้อนหลังเกี่ยวกับ integer overflow และปัญหาที่เกี่ยวข้อง โดยใช้ประโยชน์จากการจำลองใน testnet forks และการอนุมัติ multisig เพื่อการแก้ไขที่ปลอดภัย
ก้าวต่อไปที่เหมาะสมสำหรับทีมที่บริหารสัญญาเก่าคือการประเมินเฉพาะจุดบั๊ก integer overflow โดยแม็พเส้นทาง admin ที่ละเอียดและจำลองผลกระทบบน test forks — โดยเฉพาะอย่างยิ่งในสถานการณ์ที่มีเงินติดอยู่หรือสถานะตัวแปรถูกแช่แข็ง การดำเนินการเช่นนี้ล่วงหน้าช่วยป้องกันการสูญเสียแก่นักลงทุนและปลดล็อกมูลค่าที่ซ่อนเร้น
การผนวกการประเมินสัญญาเก่าอย่างเข้มงวดไว้ในโปรแกรมความปลอดภัยเหมือนการเตรียมพร้อมรับมือเหตุการณ์ จะช่วยเสริมความปลอดภัยของโปรโตคอลและความเชื่อมั่นแก่นักลงทุน บริการตรวจสอบทางเทคนิคของ Soken เชี่ยวชาญในการตรวจสอบสัญญาอัจฉริยะรุ่นเก่าและรุ่นใหม่ ช่วยให้โปรเจกต์ระบุและแก้ไขความเสี่ยงที่เกิดขึ้นตั้งแต่ต้นจนถึงช่วงเวลาหลังเปิดใช้งานเป็นเวลานาน
Frequently Asked Questions
อะไรทำให้เงิน $2 ล้านติดอยู่ในสัญญา HongCoin ICO?
บั๊ก integer overflow ในฟังก์ชัน admin ที่จำกัดของสัญญา ICO ปี 2016 บน Ethereum ของ HongCoin ทำให้ไม่สามารถเคลื่อนย้ายเงินได้ ทำให้มีเงินประมาณ 1,003.62 ETH หรือประมาณ $2 ล้าน ถูกล็อกไว้ถึง 9 ปี
ช่องโหว่ integer overflow ถูกค้นพบและแก้ไขอย่างไร?
นักวิจัยด้านความปลอดภัย 0xflorent ตรวจพบช่องโหว่ในฟังก์ชัน admin ที่จำกัดโดย multisignature wallet และใช้การประสานงาน multisig เพื่อกู้คืนเงินที่ล็อกไว้โดยไม่ทำลายสิทธิ์ของผู้มีส่วนได้ส่วนเสีย
บทเรียนความปลอดภัย smart contract ที่ได้จากเหตุการณ์ HongCoin คืออะไร?
เหตุการณ์นี้เน้นย้ำความสำคัญของการป้องกัน integer overflow การรักษาความปลอดภัยฟังก์ชัน admin และการจัดการความเสี่ยงในสัญญาเก่าเพื่อรองรับความเข้ากันได้ย้อนหลังและช่วยให้กู้คืนเงินในอนาคตได้
ทำไมช่องโหว่ใน smart contract เก่าถึงสำคัญใน DeFi?
สัญญาเก่าที่ไม่มีมาตรการรักษาความปลอดภัยทันสมัยอาจมีบั๊กซ่อนเร้นที่ล็อกเงินไว้หลายปี ทำให้เกิดความเสี่ยงในระบบการเงินกระจายและการขายโทเค็น ICO เน้นความจำเป็นของการตรวจสอบและแก้ไขประจำ
multisignature wallet มีบทบาทอย่างไรในการกู้คืนเงิน?
multisignature wallet ควบคุมฟังก์ชัน admin ที่จำกัดและทำให้สามารถปลดล็อกเงินอย่างปลอดภัยด้วยการประสานงานที่เหมาะสม แสดงถึงวิธีการกู้คืนแบบ white-hat ที่เคารพการควบคุมการกำกับดูแล