Lỗ hổng ví phần cứng Coldcard liên quan đến vụ trộm Bitcoin trị giá 70 triệu USD trong 41 phút

Một kẻ tấn công đã rút tiền từ 1.196 địa chỉ Bitcoin chỉ trong 41 phút vào ngày 30 tháng 7, lấy đi 1.082,65 BTC trị giá khoảng 70,2 triệu USD. Lỗ hổng firmware trong ví phần cứng Coldcard của Coinkite đã khiến việc tạo seed trở nên dễ đoán, cho phép kẻ tấn công tái tạo khóa ngoại tuyến.
Coldcard Hardware Wallet

Một kẻ tấn công đã rút tiền từ 1.196 địa chỉ Bitcoin chỉ trong 41 phút vào ngày 30 tháng 7, chiếm đoạt 1.082,65 BTC trị giá khoảng 70,2 triệu USD vào thời điểm đó. Galaxy Research đã lập bản đồ cuộc quét này và liên hệ nó với một lỗ hổng firmware trong Coldcard, loại ví phần cứng chỉ dành cho Bitcoin do công ty Coinkite của Canada sản xuất.

Một lỗi tích hợp firmware từ tháng 3 năm 2021 đã điều hướng việc tạo seed sang một trình tạo số giả ngẫu nhiên phần mềm xác định (PRNG) thay vì trình tạo số ngẫu nhiên phần cứng (RNG) STM32.

Block cho biết một kẻ tấn công nếu có thể xác định hoặc giới hạn đủ mức UID của thiết bị, trạng thái bộ định thời (timer) và lịch sử gọi RNG trước đó, thì có thể tái tạo các luồng đầu ra ứng viên ngoại tuyến mà không cần truy cập vào thiết bị. Các seed ứng viên sau đó có thể được kiểm tra bằng cách dẫn xuất địa chỉ của chúng và so sánh với dữ liệu blockchain công khai.

Coinkite đã phát hành firmware khẩn cấp cho mọi mẫu máy và lộ trình phát hành bị ảnh hưởng vào ngày 31 tháng 7, nhưng việc cài đặt nó không sửa chữa được seed hiện có. Coinkite yêu cầu những chủ sở hữu có seed bị lộ phải tạo một seed mới trên firmware đã được vá và chuyển tiền của họ.

Việc khôi phục seed cũ vào firmware đã cập nhật hoặc một ví khác vẫn sẽ mang theo điểm yếu đó. Hiện chưa có báo cáo công khai nào về việc tái cấu trúc seed của nạn nhân và khớp nó với một địa chỉ đã bị rút tiền.

Nguyên nhân kỹ thuật đằng sau lỗi PRNG

Block đã truy vết lỗi này từ cấu hình sản xuất của Coldcard, nơi định nghĩa MICROPY_HW_ENABLE_RNG bằng 0 vì Coinkite cung cấp trình bao bọc hardware-RNG riêng. Thư viện libngu đã kiểm tra xem macro có tồn tại hay không thay vì kiểm tra xem nó có được kích hoạt hay không, khiến bản build bị ràng buộc với cơ chế dự phòng Yasmarang của MicroPython. Cơ chế dự phòng MicroPython này được khởi tạo từ ID duy nhất (UID) của chip và các thanh ghi bộ định thời, đồng thời không thu thập thêm entropy mới sau khi khởi tạo.

Coinkite ước tính entropy thực tế vào khoảng 40 bit trên Mk3 và khoảng 72 bit trên Mk4, Mk5 và Q, so với 128 bit của một seed BIP-39 gồm 12 từ. Block không đưa ra một con số thực tế duy nhất mà đặt trần điều kiện dưới 240,7 và 273,3, đồng thời cảnh báo rằng mức sau không tương đương với bảo mật mật mã 73-bit. Họ cũng không công bố tiêu chuẩn kiểm tra brute-force nào.

Bản đồ quét địa chỉ Bitcoin từ Galaxy Research
Nguồn ảnh: Galaxy Research

Việc reseed trên các mẫu máy đời sau làm tăng số lượng ứng viên, nhưng Block cho biết chi phí thực tế phụ thuộc vào thông tin UID có sẵn, thời gian khởi động, các lần gọi RNG trước đó và chi phí dẫn xuất.

Các phiên bản firmware bị ảnh hưởng

Mức độ rủi ro phụ thuộc vào firmware đang chạy khi seed được tạo, chứ không phải phiên bản được cài đặt hiện tại:

  • Mk2 và Mk3: Coinkite liệt kê các phiên bản Mk3 từ 4.0.1 đến 4.1.9, đã được sửa trong 4.2.0, và không nêu tên Mk2. Block xếp cả hai phiên bản Mk2 và Mk3 từ 4.0.0 đến 4.1.9 vào diện nguy hiểm.
  • Mk4 và Mk5: bất kỳ phiên bản nào trước 5.6.0.
  • Q: bất kỳ phiên bản nào trước 1.5.0Q.
  • Edge builds: trước 6.6.0X cho Mk4 và Mk5, trước 6.6.0QX cho Q.

Coinkite cho biết một seed được tạo bằng ít nhất 50 lần đổ xúc xắc công bằng, độc lập và riêng tư sẽ không gặp rủi ro chỉ từ lỗi này. Nếu số lượng hoặc tính riêng tư của các lần đổ xúc xắc không chắc chắn, Coinkite khuyên nên di chuyển tiền. Một mật khẩu BIP-39 mạnh và duy nhất sẽ tạo ra một ví riêng biệt mà các từ khóa seed không thể tự truy cập được, nhưng công ty vẫn khuyến nghị thay thế seed.

Multisig chỉ giúp ích khi nhóm ký (quorum) không được xây dựng hoàn toàn từ các thiết bị bị ảnh hưởng. TAPSIGNER, OPENDIME và SATSCARD sử dụng các cơ sở mã khác nhau và không bị ảnh hưởng.

Bối cảnh vụ tấn công

Hiện chưa có ai định danh được kẻ tấn công. Galaxy, đơn vị lập bản đồ cuộc quét 1.196 địa chỉ, cho biết họ không tìm thấy giao dịch Bitcoin nào khác trong 30 ngày trước đó có cùng mức phí 30 sat/vB và chữ ký không thay đổi.

Họ cảnh báo rằng mô hình này giúp nhận dạng người vận hành chứ không phải hành vi trộm cắp, bởi vì một cuộc quét "trông giống hệt như việc chủ sở hữu đồng tiền chọn di chuyển tiền của họ".

Tiết lộ này diễn ra sau nghiên cứu Ill Bloom của Coinspect vào đầu tháng 7, một lỗi PRNG yếu riêng biệt trong các ví phần mềm cũ có liên quan đến hơn 5 triệu USD bị rút từ các địa chỉ trên Bitcoin, Ethereum, Tron, Rootstock và Polygon kể từ tháng 5.