ช่องโหว่ฮาร์ดแวร์วอลเล็ต Coldcard ทำบิตคอยน์ถูกขโมยกว่า 88 ล้านดอลลาร์

สรุปภาพรวมตลาดด้วย AI
มีรายงานว่า ช่องโหว่ที่ถูกเปิดเผยในการสร้างคีย์ของฮาร์ดแวร์วอลเล็ต Coldcard ทำให้ผู้โจมตีสามารถขโมย BTC ได้มากกว่า 88 ล้านดอลลาร์ โดยอธิบายว่าการโจมตียังคงดำเนินอยู่และมีการรวบรวมเงินทุนบนเชน แม้จะไม่ใช่ปัญหาในระดับโปรโตคอลของ Bitcoin แต่เหตุการณ์ดังกล่าวอาจกดดันความเชื่อมั่นในระยะใกล้ด้วยการยกระดับความเสี่ยงด้านการดูแลสินทรัพย์และการปฏิบัติการ ซึ่งอาจกระตุ้นให้เกิดการย้ายไปสู่การถือครองด้วยตนเองแบบเร่งตัว การตรวจสอบห่วงโซ่อุปทานของฮาร์ดแวร์วอลเล็ตอย่างเข้มงวดมากขึ้น และการเฝ้าติดตามที่อยู่ที่เกี่ยวข้องมากขึ้นโดยกระดานซื้อขายและทีมคอมพลายแอนซ์
ระดับผลกระทบ
● สูง
สินทรัพย์ที่ได้รับผลกระทบ
BTC/USDT+0.90%
ข้อมูลเชิงลึกจาก AI · BTC/USDTข้อมูลเชิงลึกจาก AI
▼ ขาลง
เทรดตอนนี้
⚠️ ข้อความเชิงลึกนี้สร้างขึ้นโดย AI โดยอ้างอิงจากเนื้อหาข่าวเพื่อใช้เป็นข้อมูลอ้างอิงเท่านั้น ไม่ถือเป็นคำแนะนำในการลงทุนหรือสะท้อนทัศนะของ BingX การลงทุนมีความเสี่ยง โปรดซื้อขายด้วยความระมัดระวัง
ความเสียหายจากการโจมตีที่เชื่อมโยงกับช่องโหว่ของฮาร์ดแวร์วอลเล็ต Coldcard พุ่งเกิน 88 ล้านดอลลาร์แล้ว และยังคงเกิดขึ้นต่อเนื่อง โดยเมื่อวันที่ 31 ก.ค. มีรายงานว่าอุปกรณ์ Coldcard ราว 500 เครื่องถูกเจาะ ส่งผลให้บิตคอยน์ 594 BTC (ราว 38 ล้านดอลลาร์) ถูกขโมยไป Coinkite ผู้ผลิต Coldcard ยืนยันภายหลังว่าพบช่องโหว่ด้านความปลอดภัยในกระบวนการสร้างคีย์ (key generation) ที่กระทบหลายเจเนอเรชันของสินค้า ได้แก่ Coldcard Mk2, Mk3, Mk4, Q และ Mk5 พร้อมเตือนให้ผู้ใช้งานย้ายเงินไปยังที่อยู่อื่นโดยเร็ว ต่อไปนี้เป็นสรุปการวิเคราะห์ช่องโหว่และการติดตามเส้นทางเงินที่ถูกขโมย ตามรายงานของ Beosin 1) วิเคราะห์ช่องโหว่ จากการตรวจสอบประวัติการแก้ไขโค้ดของเฟิร์มแวร์ Coldcard พบว่าในคอมมิตก่อนหน้า 37e4af5451c260c1e7d429fe8972c4cb5e68ee59 ทีมพัฒนาได้ปรับโค้ดที่เกี่ยวข้องกับการตั้งค่า MK4 หลายส่วน โดยในไฟล์ mpconfigboard.h มีการกำหนดค่า: // We have our own version of this code. #define MICROPY_HW_ENABLE_RNG (0) ฝั่ง MicroPython บน STM32 ค่านี้มีผลต่อเส้นทางการคอมไพล์สำหรับการผูกใช้งานฮาร์ดแวร์ RNG (random number generator) แบบค่าเริ่มต้น และการใช้งาน random แบบทั่วไป การตั้งเป็น 0 ทำให้ไม่ใช้ฮาร์ดแวร์ RNG แบบค่าเริ่มต้นเป็นแบ็กเอนด์ของ rng_get() ทั่วไป โดยคอมเมนต์ระบุว่าผู้พัฒนาจะทำ RNG เอง เมื่อดูไฟล์ rng.h ที่กำหนดเอง พบว่าประกาศอ็อบเจ็กต์ของ MicroPython เพียง 2 ตัว: MP_DECLARE_CONST_FUN_OBJ_0(pyb_rng_get_obj); MP_DECLARE_CONST_FUN_OBJ_1(pyb_rng_get_bytes_obj); การทำงานที่สอดคล้องกันชี้ว่าโค้ดที่กำหนดเองตั้งใจจะใช้ฮาร์ดแวร์ RNG จริง แต่รับประกันการเรียกใช้ฮาร์ดแวร์เฉพาะเมื่อเรียก pyb_rng_get* หรือ random_buffer() ภายในเท่านั้น จุดสำคัญอยู่ที่ขั้นตอนสร้างวอลเล็ต ใน shared/seed.py ฟังก์ชันที่ใช้คือ: async def make_new_wallet(nwords): # Select a new random seed. await ux_dramatic_pause('Generating...', 3) seed = generate_seed() words = await approve_word_list(seed, nwords) if words: await commit_new_words(words) คำสั่งดังกล่าวจะเข้าสู่ shared/random.py โดยเวอร์ชันก่อนหน้าของ random.py ระบุชัดว่าพึ่งพา ngu.random และมีแนวทางว่า: # random.py subset of the random module, with no compatibility, using cryptographically secure RNG # for bytes, use ngu.random.bytes(len) # bytes = ngu.random.bytes การเริ่มต้นวอลเล็ตจึงเรียก random.bytes ไม่ใช่ pyb.rng() และอ็อบเจ็กต์ pyb_rng_get_obj ที่กำหนดเองไม่ได้ไปแทนที่ random.bytes โดยอัตโนมัติ เมื่อ MICROPY_HW_ENABLE_RNG ถูกตั้งเป็น 0 ขั้นตอนสร้างวอลเล็ตจึงไม่ได้ใช้ฮาร์ดแวร์ RNG แต่ไปเรียก fallback ใน micropython/ports/stm32/rng.c คือ pyb_rng_yasmarang: #if MICROPY_HW_ENABLE_RNG uint32_t rng_get(void) { // Use STM32 hardware RNG ... } #else // For MCUs without an RNG, we still need to provide an rng_get() function. // A pseudoRNG is not ideal, but we use it for now. // Yasmarang random number generator static uint32_t pyb_rng_yasmarang(void) { static bool seeded = false; static uint32_t pad = 0, n = 0; ... } uint32_t rng_get(void) { return pyb_rng_yasmarang(); } #endif Beosin ระบุว่า pyb_rng_yasmarang เป็นตัวสร้างเลขสุ่มเทียม (pseudorandom) ซึ่งไม่ปลอดภัยอย่างมากสำหรับการสร้าง seed ของฮาร์ดแวร์วอลเล็ต เพราะผู้โจมตีสามารถใช้วิธี brute force เพื่อไล่หาคีย์ได้ Coinkite ได้แก้ไขโดยระบุชัดว่าให้ตัดการคอมไพล์ fallback PRNG ของ MicroPython ออกจาก Makefile โดยมีข้อความ เช่น: Do not compile MicroPython's fallback PRNG. The board-specific rng.c provides rng_get(), and this empty object satisfies the upstream object list. $(BUILD)/rng.o: CFLAGS += Dpyb_rng_yasmarang=errordonotwantthis $(BUILD)/rng.o: $(ECHO) "SKIP stm32/rng.c" $(Q)$(CC) $(CFLAGS) -x c -c /dev/null -o $@ 2) ติดตามเงินที่ถูกขโมย Beosin Trace ระบุว่าเงินจากวอลเล็ตของเหยื่อหลายรายถูกโอนและถูกรวมไปยังบางที่อยู่ (aggregation addresses) แล้ว โดยยังไม่พบการฟอกเงินเพิ่มเติมในขั้นถัดไป จากข้อมูล threat intelligence และการวิเคราะห์พฤติกรรมบนเชน พบที่อยู่รวมเงินหลักดังนี้: bc1qq85v2c926eg6pgxhwp6q7lf6cnsz80qs3fcu9r (562 BTC) bc1qx76cae2706qd5q576feh7xq8rfcsjpf2htfhe3 (398.47 BTC) นอกจากนี้ยังพบที่อยู่รวมเงินอื่นที่มีรูปแบบการไหลของเงินคล้ายกัน และยังไม่พบการโอนต่อ: bc1q8jy96fe5lf8vfugydnte3cguk92gpev7kwtp3q (89.62 BTC) bc1q0rvn88w08j75k4h48lf9fvhan7unjp7vjf5q6m (64.9 BTC) bc1qtfrwa4j6rmj9rsgspv6a0yjumkg39js2numu75 (45.9 BTC) bc1qmd5m5ktv7m5ffujxv4248fxv36myvdx79n8jp6 (30.18 BTC) Beosin ระบุว่าการโจมตียังคงเกิดขึ้น ทีมงานกำลังติดตามที่อยู่รวมเงินเพิ่มเติมและวิเคราะห์ความเคลื่อนไหวของเงินที่เกี่ยวข้องอย่างต่อเนื่อง 3) บทสรุป เหตุการณ์ด้านความปลอดภัยครั้งใหญ่ของ Coldcard เกิดจากความผิดพลาดเชิงการนำไปใช้ (implementation) ในขั้นตอนสำคัญของการสร้าง seed สำหรับวอลเล็ต ซึ่งกลับใช้ pseudorandom number generator แทนแหล่งสุ่มที่ปลอดภัย ทำให้เสี่ยงต่อการถูกเดาคีย์ได้ รายงานแนะนำให้ทีมพัฒนาทำการทดสอบและตรวจสอบโค้ดอย่างเข้มข้นและต่อเนื่อง ขณะที่ผู้ใช้ Coldcard ควรย้ายสินทรัพย์ไปยังที่อยู่อื่นโดยเร็ว และติดตามประกาศด้านความปลอดภัยจาก Coinkite อย่างใกล้ชิด Beosin เป็นบริษัทด้านความปลอดภัยบล็อกเชนและเทคโนโลยีการปฏิบัติตามกฎระเบียบ ให้บริการตรวจสอบความปลอดภัยสมาร์ตคอนแทรกต์ก่อนเปิดใช้งาน การเฝ้าระวังและป้องกันความเสี่ยงแบบเรียลไทม์ การกู้คืนสินทรัพย์ ระบบ AML สำหรับสินทรัพย์ดิจิทัล และการสืบสวนติดตามธุรกรรม โดยให้บริการแก่หน่วยงานกำกับดูแลและบังคับใช้กฎหมายในกว่า 20 ประเทศและภูมิภาค ผู้ให้บริการสินทรัพย์ดิจิทัลกว่า 200 ราย และโครงการ Web3 มากกว่า 4,500 โครงการ