Lỗ hổng ví cứng Coldcard khiến hơn 88 triệu USD Bitcoin bị đánh cắp

Tóm tắt thị trường bằng AI
Một lỗ hổng tạo khóa trên ví phần cứng Coldcard đã được công bố được cho là đã cho phép kẻ tấn công đánh cắp hơn 88 triệu USD BTC, với khai thác được mô tả là vẫn đang diễn ra và các khoản tiền đang được gom lại trên chuỗi. Dù không phải là vấn đề ở cấp độ giao thức của Bitcoin, sự cố này có thể gây áp lực lên tâm lý trong ngắn hạn bằng cách làm gia tăng rủi ro lưu ký và vận hành, có khả năng thúc đẩy việc chuyển dịch sang tự lưu ký diễn ra nhanh hơn, tăng cường giám sát chuỗi cung ứng ví phần cứng, và gia tăng theo dõi các địa chỉ liên quan bởi các sàn giao dịch và các nhóm tuân thủ.
Mức ảnh hưởng
● Cao
Tài sản bị ảnh hưởng
BTC/USDT+0.92%
Quan điểm AI · BTC/USDTQuan điểm AI
▼ Giá giảm
Khám phá ngay
⚠️ Nhận định từ AI được tổng hợp từ tin tức và chỉ có giá trị tham khảo. Đây không phải là lời khuyên đầu tư và không thể hiện quan điểm của BingX. Đầu tư luôn đi kèm rủi ro. Vui lòng giao dịch có trách nhiệm.
Thiệt hại do lỗ hổng trên ví cứng Coldcard đã vượt 88 triệu USD khi tin tặc tiếp tục khai thác và gom tiền về các địa chỉ tập trung. Ngày 31/7, khoảng 500 ví Coldcard bị xâm nhập, dẫn tới việc thất thoát 594 BTC, ước tính khoảng 38 triệu USD. Coinkite, đơn vị sản xuất Coldcard, sau đó xác nhận tồn tại lỗ hổng trong quy trình tạo khóa (key generation) ảnh hưởng tới nhiều đời sản phẩm, gồm Coldcard Mk2, Mk3, Mk4, Q và Mk5. Theo thống kê hiện tại, tổng giá trị thiệt hại từ việc khai thác lỗ hổng đã vượt 88 triệu USD và các đợt tấn công vẫn đang diễn ra. Người dùng Coldcard được khuyến nghị chuyển tài sản sang địa chỉ khác càng sớm càng tốt. Dưới đây là phân tích lỗ hổng và theo dõi dòng tiền bị đánh cắp do Beosin thực hiện. I. Phân tích lỗ hổng Rà soát lịch sử commit firmware Coldcard cho thấy trong commit trước đó 37e4af5451c260c1e7d429fe8972c4cb5e68ee59, nhóm phát triển đã chỉnh sửa các đoạn mã liên quan cấu hình MK4, bao gồm trong mpconfigboard.h với dòng: // We have our own version of this code. #define MICROPY_HW_ENABLE_RNG (0) Trên phía MicroPython STM32, macro này quyết định nhánh biên dịch cho binding bộ tạo số ngẫu nhiên phần cứng (RNG) mặc định và phần triển khai random chung. Khi đặt về 0, đường dẫn RNG phần cứng mặc định không được dùng làm backend cho rng_get() chung. Chú thích hàm ý nhà phát triển sẽ tự triển khai RNG; kiểm tra tệp rng.h tùy biến chỉ thấy khai báo hai đối tượng MicroPython: MP_DECLARE_CONST_FUN_OBJ_0(pyb_rng_get_obj); MP_DECLARE_CONST_FUN_OBJ_1(pyb_rng_get_bytes_obj); Phần triển khai tương ứng: /// \function pyb_rng_get() ///// Returns a 30bit hardwaregenerated random number, or fails! //STATIC mp_obj_t pyb_rng_get(void){ // Retrieve and return the new random number return mp_obj_new_int(rng_get_or_fault() >> 2); } /// \function rng_get_bytes() /// Fills a buffer with random bits; the caller must provide a buffer of appropriate size. STATIC mp_obj_t pyb_rng_get_bytes(mp_obj_t buffer_io) { mp_buffer_info_t bufinfo; mp_get_buffer_raise(buffer_io, &bufinfo, MP_BUFFER_WRITE); mp_uint_t count = bufinfo.len; if(count SR & RNG_SR_DRDY)) { if (HAL_GetTick() start >= RNG_TIMEOUT_MS) { // Hardware failure... do not return anything! mp_raise_OSError(MP_EFAULT); } } // Retrieve and return the new random number last_value = RNG>DR; return last_value; } Điều này cho thấy mã tùy biến của Coldcard có chủ đích dùng RNG phần cứng, nhưng chỉ đảm bảo khi gọi pyb_rng_get* hoặc random_buffer() nội bộ. Trong quy trình tạo ví, mã thực tế được gọi là hàm tạo ví trong 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) Luồng gọi này đi vào module shared/random.py của Coldcard. Ở các phiên bản trước, random.py phụ thuộc rõ ràng vào ngu.random và ghi nhận: # 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 Khởi tạo ví sử dụng random.bytes, không phải pyb.rng(); vì vậy đối tượng pyb_rng_get_obj tùy biến không tự động ghi đè random.bytes. Khi MICROPY_HW_ENABLE_RNG bị đặt bằng 0, quá trình sinh seed không dùng RNG phần cứng mà rơi về pyb_rng_yasmarang trong micropython/ports/stm32/rng.c: #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 pyb_rng_yasmarang là PRNG (bộ tạo số giả ngẫu nhiên) và không đủ an toàn để sinh seed cho ví cứng vì kẻ tấn công có thể brute-force khóa. Coinkite hiện đã nêu rõ việc loại trừ stm32/rng.c trong Makefile: Do not compile MicroPython's fallback PRNG. The boardspecific 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 $@ II. Theo dõi dòng tiền bị đánh cắp Tiền từ nhiều ví nạn nhân đã được chuyển đi và gom lại về một số địa chỉ, hiện chưa ghi nhận bước rửa tiền tiếp theo. Dựa trên threat intelligence và phân tích hành vi on-chain, Beosin Trace xác định các địa chỉ gom tiền sau: bc1qq85v2c926eg6pgxhwp6q7lf6cnsz80qs3fcu9r (562 BTC) bc1qx76cae2706qd5q576feh7xq8rfcsjpf2htfhe3 (398.47 BTC) Ngoài ra, các địa chỉ dưới đây có mô hình dòng tiền tương tự và chưa phát sinh chuyển tiếp: bc1q8jy96fe5lf8vfugydnte3cguk92gpev7kwtp3q (89.62 BTC) bc1q0rvn88w08j75k4h48lf9fvhan7unjp7vjf5q6m (64.9 BTC) bc1qtfrwa4j6rmj9rsgspv6a0yjumkg39js2numu75 (45.9 BTC) bc1qmd5m5ktv7m5ffujxv4248fxv36myvdx79n8jp6 (30.18 BTC) Các cuộc tấn công nhắm vào Coldcard vẫn tiếp diễn. Nhóm Beosin cho biết họ đang tiếp tục giám sát các địa chỉ gom tiền bổ sung và phân tích các chuyển động liên quan. III. Kết luận Sự cố an ninh nghiêm trọng của ví cứng Coldcard bắt nguồn từ lỗi triển khai, khi đội ngũ phát triển sử dụng PRNG trong bước then chốt là tạo seed ví. Nhóm phát triển cần thực hiện kiểm thử và kiểm toán mã nguồn toàn diện, liên tục. Người dùng Coldcard nên chuyển tài sản ngay và theo dõi chặt chẽ các thông báo an ninh tiếp theo từ Coinkite. Beosin là công ty công nghệ bảo mật và tuân thủ pháp lý blockchain, cung cấp dịch vụ kiểm toán bảo mật hợp đồng thông minh trước khi ra mắt, giám sát và chặn rủi ro theo thời gian thực, thu hồi tài sản, chống rửa tiền (AML) cho tài sản ảo và truy vết điều tra. Beosin cho biết đã cung cấp sản phẩm tuân thủ và dịch vụ bảo mật blockchain "một cửa" cho cơ quan quản lý và thực thi pháp luật tại hơn 20 quốc gia và vùng lãnh thổ, hơn 200 nhà cung cấp dịch vụ tài sản ảo và 4.500+ dự án Web3.