Transaction Replacement Attack là gì?
Một Transaction Replacement Attack xảy ra khi ai đó gửi một khoản thanh toán tiền mã hóa, rồi nhanh chóng phát tán phiên bản khác của giao dịch đó với thông tin đã thay đổi trước khi nó được xác nhận. Mục đích là lừa người nhận chấp nhận khoản thanh toán đang chờ. Hãy tưởng tượng bạn hứa trả tiền mặt tại quầy, rồi chạy lại để tráo tiền khi thu ngân quay đi.
Nếu một giao dịch hiện là đang chờ, có thể coi là đã thanh toán. Chưa hẳn. Cho đến khi thợ mỏ đưa nó vào một khối, vẫn có thể xảy ra thay đổi và một Transaction Replacement Attack có thể đảo chiều kết quả.
Transaction Replacement Attack hoạt động như thế nào
Tóm tắt nhanh với một tình huống thanh toán đơn giản.
- Step 1: Kẻ tấn công gửi cho bạn một khoản thanh toán với phí thấp. Bạn thấy nó đang chờ và cảm thấy yên tâm.
- Step 2: Trước khi xác nhận, kẻ tấn công tạo một giao dịch mới chi tiêu cùng số tiền, thường thông qua Replace by Fee (RBF) hoặc bằng cách gửi lại với cùng nonce trên các chuỗi dựa trên tài khoản.
- Step 3: Bản thay thế đưa ra phí cao hơn nên hấp dẫn thợ mỏ, vì vậy nó được đào vào khối trong khi phiên bản đầu bị hủy.
- Step 4: Điều này dễ xảy ra khi tắc nghẽn mạng nặng, khi thợ mỏ ưu tiên giao dịch có phí cao hơn.
- Step 5: Bạn trao sản phẩm hoặc dịch vụ khi thanh toán còn đang chờ và cuối cùng không được trả tiền khi chuỗi xác nhận bản thay thế.
Đó là chiêu. Đơn giản, hơi lừa, và có thể ngăn chặn.
Tại sao Transaction Replacement Attack quan trọng
Đây là lý do bạn nên quan tâm, dù bạn đang vận hành điểm thanh toán hay chỉ chuyển coin cho bạn bè.
- Benefit: Cơ chế thay thế cho phép người dùng trung thực đẩy nhanh các giao dịch bị kẹt bằng cách tăng phí, điều này hữu ích khi bạn cần xác nhận ngay.
- Perspective: Những công cụ giúp bạn cũng có thể được dùng chống lại bạn nếu bạn tin tưởng giao dịch đang chờ để đổi lấy hàng hóa hoặc quyền truy cập.
- Relevance: Bạn sẽ thấy điều này ở điểm bán, trong việc mint NFT, giao dịch OTC và bất cứ nơi nào người ta chấp nhận giao dịch đang chờ.
Sử dụng một ví tiền mã hóa mà rõ ràng đánh dấu các giao dịch có thể thay thế và hiển thị số xác nhận. Với các khoản thanh toán, yêu cầu một vài xác nhận trước khi giao bất cứ thứ gì quan trọng.
Đặc điểm chính của Transaction Replacement Attack
Điểm khác biệt, nói đơn giản:
- Timing: Xảy ra trước khi xác nhận, khi giao dịch vẫn còn trong mempool.
- Incentives: Phí cao hơn hoặc điều kiện tốt hơn khiến thợ mỏ hoặc trình xác thực chọn bản thay thế thay vì bản gốc.
- Signals: Một số giao dịch được đánh dấu là có thể thay thế, và các chuỗi dựa trên tài khoản cho phép thay thế cùng nonce.
- Target: Người bán hoặc đối tác chấp nhận giao dịch đang chờ là điểm yếu.
Các biến thể
Cùng ý chính, cơ chế hơi khác tùy theo chuỗi.
- RBF: Người gửi đánh dấu khoản thanh toán là có thể thay thế rồi sau đó phát tán phiên bản có phí cao hơn thay đổi đầu ra hoặc người nhận.
- Nonce swap: Trên các chuỗi dựa trên tài khoản, người dùng gửi lại giao dịch với cùng nonce nhưng gas cao hơn, điều này hủy bỏ hoặc thay đổi ý định trước đó.
- Refund trick: Người gửi ban đầu trả cho người bán, sau đó thay thế giao dịch đang chờ bằng một giao dịch gửi tiền về địa chỉ do họ kiểm soát.
Đừng coi một khoản thanh toán là cuối cùng cho đến khi node của bạn đánh dấu giao dịch đã được giải quyết. Transaction Replacement Attack mất hiệu lực sau khi có đủ xác nhận.
Ví dụ
Một quán cà phê chấp nhận thanh toán đang chờ cho một ly latte, người mua ngay lập tức phát tán bản thay thế với phí cao hơn gửi tiền đi nơi khác, và nhân viên sau đó nhận ra người mua đã khai thác tính có thể thay thế.
Thông tin thú vị
Tăng phí được đưa ra để giúp người dùng trung thực cứu các giao dịch bị kẹt, từ lâu trước khi nó trở thành trò cười cho chiêu lừa. Như nhiều cải tiến kỹ thuật khác, hiệu quả của nó tùy thuộc vào người sử dụng.
Tổng kết
Tóm tắt: đừng giao hàng khi chỉ có thể. Hãy chờ một hoặc hai khối, rồi yên tâm.
