
Phân tích kỹ thuật các phương thức tấn công tiềm ẩn đối với ví BRC-20
Tuyển chọn TechFlowTuyển chọn TechFlow

Phân tích kỹ thuật các phương thức tấn công tiềm ẩn đối với ví BRC-20
Phân tích hệ thống nguyên nhân Binance tạm dừng rút ORDI dựa trên nguyên lý thiết kế của BRC-20.
Tác giả: Trustless Labs
Sau khi nghiên cứu sâu về mã và cơ chế của BRC-20, chúng tôi phát hiện ra rằng trong giai đoạn chuyển tiền tồn tại một phương thức tấn công có thể nhắm vào các ví lớn (huge holder). Để giúp các sàn giao dịch kiểm tra xem có vấn đề gì trong quy trình vận hành hay không, đồng thời thực hiện tinh thần "mũ trắng" (white hat), chúng tôi đã thử sử dụng phương pháp đã được kiểm chứng để khóa tài sản trong ví nóng ORDI của Binance, dẫn đến việc Binance tạm dừng rút ORDI. Ngay lập tức, chúng tôi đã thông báo cho đội ngũ Binance và trao đổi chi tiết thao tác nhằm giúp Binance khôi phục chức năng rút tiền nhanh nhất có thể. Ba giờ sau, Binance đã khôi phục việc rút ORDI. Bài viết này sẽ phân tích hệ thống nguyên nhân khiến Binance tạm dừng rút ORDI xuất phát từ nguyên lý thiết kế của BRC-20, giúp mọi người hiểu rõ vì sao bất kỳ ai cũng có thể khóa số dư BRC-20 của bạn.
Đầu tiên, hãy cùng xem trên chuỗi đã xảy ra điều gì thông qua UniSat.

Đây là số dư ví nóng ORDI của Binance hiển thị trên UniSat tại thời điểm viết bài, được chia thành ba phần: Transferable (Có thể chuyển), Available (Khả dụng) và Balance (Số dư). Điều này liên quan đến ba khái niệm cơ bản trong BRC-20: Transferable balance (số dư có thể chuyển), Available balance (số dư khả dụng) và Overall balance (tổng số dư). Transferable balance là số dư có thể chuyển trực tiếp; Available balance là số dư có thể chuyển thành Transferable balance; Overall balance là tổng của hai loại trên, biểu thị tổng số dư hiện tại của địa chỉ. Đến đây, nhiều người có thể thắc mắc: nếu ví nóng ORDI của Binance hiện có nhiều số dư như vậy, tại sao lại không thể rút hay chuyển tiền? Đừng vội, hãy tiếp tục theo dõi bên dưới.
Việc chuyển tiền BRC-20 cần hai bước: bước đầu tiên là ghi (inscribe) một bản ghi (Inscription) mang nội dung "transfer", bước thứ hai là chuyển chính bản ghi Inscription này đến người nhận để hoàn tất việc chuyển BRC-20. Vì việc chuyển Inscription dựa trên mô hình UTXO, nghĩa là số lượng amt được inscribe ở bước đầu tiên là bao nhiêu thì ở bước thứ hai chỉ có thể chuyển đúng bằng lượng đó, do đó Transferable balance mà đề cập ở trên cũng hoạt động theo cơ chế UTXO. Để dễ hiểu hơn, ta xét ví dụ sau: giả sử A là một địa chỉ mới tạo, bạn mint m token ORDI vào địa chỉ A hoặc chuyển m ORDI từ địa chỉ khác tới A. Lúc này, Available balance và Overall balance của địa chỉ A đều là m, còn Transferable balance là 0. Sau đó, nếu muốn chuyển n ORDI từ A sang địa chỉ B, trước tiên phải inscribe một Inscription với amt = n vào địa chỉ A (chỉ hợp lệ khi n <= m). Khi đó, Transferable balance của A là n, Available balance là m - n, Overall balance vẫn là m. Bước thứ hai là chuyển Inscription có amt = n này đến địa chỉ B. Sau bước này, Available balance và Overall balance của A còn m - n, Transferable balance về 0; còn địa chỉ B sẽ có Available balance và Overall balance đều bằng n, Transferable balance là 0 — giao dịch hoàn tất.

Lấy danh sách giao dịch ví nóng ORDI của Binance trên UniSat làm ví dụ, các giao dịch có Method là inscribe-transfer tương ứng với bước đầu tiên vừa nêu; các giao dịch có Method là receive hoặc send tương ứng với bước thứ hai. Hai giao dịch cuối cùng trong hình kết hợp với nhau tạo thành một giao dịch chuyển tiền BRC-20 hoàn chỉnh. Ngoài ra, ba giao dịch inscribe-transfer còn lại lần lượt ghi ba Inscription với các giá trị amt là 8.210.108, 6.099 và 2.683 — ba bản ghi này cùng cấu thành nên Transferable balance. Do đó, nếu hiện tại muốn rút ORDI từ ví nóng của Binance, chỉ có thể rút đúng ba khoản với số lượng amt tương ứng như vậy, dĩ nhiên là không thể đáp ứng nhu cầu đa dạng rút tiền của người dùng.
Nguyên nhân của tình trạng này là vì bất kỳ ai cũng có thể inscribe một Inscription bất kỳ vào một địa chỉ nào đó, do đó ai cũng có thể khóa số dư BRC-20 của một địa chỉ bằng cách thực hiện bước đầu tiên của giao dịch chuyển tiền BRC-20. Vậy Binance nên giải quyết vấn đề đang đối mặt như thế nào? Thực ra rất đơn giản: chỉ cần chuyển ba Inscription nói trên về chính mình, Transferable balance sẽ được trả lại thành Available balance. Sau đó, tùy theo nhu cầu rút tiền của người dùng, inscribe các Inscription với amt phù hợp rồi tiến hành chuyển đi. Tuy nhiên, biện pháp này chỉ giải quyết tạm thời, không thể khắc phục tận gốc vấn đề. Chỉ khi cải tiến chính giao thức, sửa chữa những điểm yếu trong thiết kế hiện tại của BRC-20, mới có thể giải quyết triệt để.
Chào mừng tham gia cộng đồng chính thức TechFlow
Nhóm Telegram:https://t.me/TechFlowDaily
Tài khoản Twitter chính thức:https://x.com/TechFlowPost
Tài khoản Twitter tiếng Anh:https://x.com/BlockFlow_News













