Quay lại blog
Bảo mật

Address poisoning: trò lừa đảo nhắm vào thói quen copy-paste

Hai địa chỉ ví có phần đầu và phần cuối được tô sáng giống hệt nhau nhưng phần giữa khác nhau, một địa chỉ được đánh dấu là thật và một địa chỉ bị gắn cờ là đã bị đầu độc.

Tháng 5/2024, một trong những sai lầm copy-paste đắt giá nhất lịch sử crypto đã gửi khoảng 68 triệu USD Wrapped Bitcoin cho một người lạ. Không seed phrase nào bị đánh cắp và không smart contract nào bị khai thác. Nạn nhân đã sao chép một địa chỉ từ chính lịch sử giao dịch của mình — một địa chỉ mà kẻ tấn công đã gieo vào đó, được dựng lên để trông giống hệt một địa chỉ mà nạn nhân vốn đã tin tưởng. Đó chính là trò lừa address poisoning, và nó là một trong những cuộc tấn công rẻ nhất, dễ nhân rộng nhất đang hoạt động hôm nay.

Trò lừa này hiệu quả vì một thói quen mà gần như mọi người dùng crypto đều có: xác minh một địa chỉ qua vài ký tự đầu và cuối. Ví và block explorer cắt ngắn các địa chỉ dài khi hiển thị, nên thói quen đó trở nên tự nhiên — và kẻ tấn công có thể chế tạo những địa chỉ trông giống hệt, khớp với các đầu cuối nhìn thấy được đó, với chi phí gần như bằng không. Cách khắc phục không phải là "nhìn kỹ hơn". Nó là thay đổi hoàn toàn cách địa chỉ đi vào ví của bạn: danh bạ đã xác minh, danh sách trắng, mã QR, và kiểm tra toàn bộ địa chỉ thay vì liếc nhìn một danh sách lịch sử.

Trò lừa address poisoning thực chất là gì

Address poisoning là một trò lừa trong đó kẻ tấn công tạo ra một địa chỉ trông giống hệt, khớp với các ký tự đầu và cuối của một địa chỉ mà bạn thật sự dùng, gieo nó vào lịch sử giao dịch của bạn, và chờ bạn sao chép nhầm mục. Không cần bất kỳ sự cho phép nào từ bạn ở bất kỳ bước nào. Kẻ tấn công theo dõi dữ liệu chuỗi công khai để tìm những ví di chuyển lượng giá trị đáng kể theo lịch trình đều đặn — các khoản chi ngân quỹ, nạp tiền lên sàn, thanh toán định kỳ — và chọn ra những địa chỉ đối tác mà các ví đó gửi đến thường xuyên nhất.

Chế tạo địa chỉ giống hệt là phần dễ. Các công cụ tạo địa chỉ vanity nghiền qua vô số khóa ngẫu nhiên cho đến khi có một khóa cho ra địa chỉ với các ký tự mong muốn ở đúng vị trí mong muốn. Khớp toàn bộ một địa chỉ là bất khả thi về mặt tính toán, nhưng khớp bốn đến sáu ký tự ở mỗi đầu thì đủ rẻ để kẻ tấn công làm hàng loạt, trên phần cứng phổ thông, nhắm vào hàng nghìn mục tiêu cùng lúc. Kết quả là một địa chỉ thật mà kẻ tấn công hoàn toàn kiểm soát — một địa chỉ tình cờ không thể phân biệt được với địa chỉ của đối tác của bạn trong mọi hiển thị bị cắt ngắn.

Một mục giả lọt vào lịch sử của bạn như thế nào

Địa chỉ giống hệt là vô dụng cho đến khi nó xuất hiện ở đâu đó mà bạn có thể sao chép. Có ba phương thức đưa vào chiếm ưu thế:

  • Chuyển dust. Kẻ tấn công gửi một lượng cực nhỏ — vài xu hoặc ít hơn — từ địa chỉ giống hệt đến địa chỉ của bạn. Giờ đây ví của bạn hiển thị một giao dịch đến từ một địa chỉ trông giống hệt đối tác thường xuyên của bạn.
  • Chuyển token giá trị 0. Trên các chain EVM và TRON, hợp đồng token sẽ xử lý một lệnh chuyển 0 token từ bất kỳ ai. Một lệnh chuyển giá trị 0 không cần bất kỳ sự phê duyệt nào từ ví mà nó có vẻ như phát đi, bởi vì di chuyển 0 token thì không bao giờ vượt quá bất kỳ hạn mức (allowance) nào. Kẻ tấn công kích hoạt một lệnh như vậy để một giao dịch gửi đi 0 USDT xuất hiện trong chính lịch sử của bạn, từ địa chỉ của bạn đến địa chỉ giống hệt — một giao dịch bạn chưa bao giờ thực hiện, không tốn của bạn đồng nào, và trông giống hệt lần thanh toán thật gần nhất của bạn.
  • Airdrop token giả. Những token vô giá trị mang ký hiệu (ticker) quen thuộc đến từ địa chỉ giống hệt, gieo mầm vào cả lịch sử lẫn thông báo của bạn.

Cả ba đều để lại cùng một cái bẫy: một mục có các ký tự nhìn thấy được khớp với một địa chỉ đích mà bạn tin tưởng. Rồi trò lừa chuyển sang trạng thái ngủ đông — đôi khi hàng tháng trời — cho đến ngày bạn đang vội.

Sơ đồ ba bước: bạn thanh toán đến một địa chỉ thật, kẻ tấn công gieo một giao dịch giá trị 0 từ một địa chỉ trông giống hệt vào lịch sử của bạn, và một lần copy-paste về sau gửi tiền cho kẻ tấn công
Việc đầu độc diễn ra âm thầm; thiệt hại xảy ra nhiều tuần sau, chỉ trong một lần dán.

Cú dán 68 triệu USD

Vụ việc tháng 5/2024 đưa trò lừa address poisoning trở nên nổi tiếng đã diễn ra đúng theo kịch bản. Một ví cá voi thực hiện một khoản chuyển nhỏ đến một địa chỉ mới. Chỉ trong vài phút, một kẻ tấn công đã tạo ra một địa chỉ giống hệt khớp với các ký tự đầu và cuối của địa chỉ đích đó và thả một mục giả vào lịch sử của ví. Ở giao dịch tiếp theo, nạn nhân sao chép mục bị đầu độc và gửi khoảng 68 triệu USD WBTC đến đó. Toàn bộ cuộc tấn công chỉ tốn của kẻ lừa đảo hơn tiền phí giao dịch một chút.

Điều xảy ra sau đó mới là phần bất thường: sau nhiều ngày trao đổi tin nhắn on-chain và thương lượng, kẻ tấn công đã trả lại về cơ bản toàn bộ số tiền. Nạn nhân đã may mắn — chính quy mô khổng lồ của khoản chiếm được, sự chú ý của công chúng, và áp lực truy vết theo sau đã khiến việc rút tiền mặt trở nên nguy hiểm. Đừng xây dựng mô hình mối đe dọa của bạn dựa trên cái kết đó. Các chiến dịch đầu độc chạy liên tục nhằm vào những ví bình thường với những khoản nhỏ hơn nhiều, và các nạn nhân nhỏ hơn không lấy lại được tiền của mình.

Vì sao mắt bạn thất bại — và thói quen khiến mọi thứ tệ hơn

Một địa chỉ EVM dài 42 ký tự; một địa chỉ TRON dài 34. Các giao diện cắt ngắn chúng còn một nhúm ký tự ở mỗi đầu, và nhiều năm dùng những giao diện đó huấn luyện bạn coi hai đầu là địa chỉ. Kẻ tấn công biết chính xác các mẫu cắt ngắn của những ví và explorer phổ biến, và chúng khớp đúng những ký tự đó. Khi cả hai đầu nhìn thấy được đều trùng khớp, thì phần giữa — phần duy nhất khác biệt — lại là phần không hiển thị nào phô ra và không thói quen nào kiểm tra.

Đây chính là loại thất bại đã tạo ra những khoản thiệt hại lớn hơn nhiều ở cấp độ tổ chức. Tháng 2/2025, sự cố Bybit cho thấy ngay cả những người ký MultiSig của một sàn giao dịch lớn cũng phê duyệt thứ mà một giao diện bị xâm phạm hiển thị thay vì thứ thực sự đang được ký — chúng tôi đã mổ xẻ thất bại đó trong bài phân tích vụ hack Bybit của chúng tôi. Trò lừa address poisoning là phiên bản bán lẻ của cùng một sự thật đó:

Address poisoning không bao giờ chạm vào khóa của bạn. Nó chỉnh sửa môi trường mà khóa của bạn hoạt động trong đó — rồi để bạn ký một giao dịch hoàn toàn hợp lệ đến nhầm nơi.

Đó cũng là lý do bản thân blockchain không thể cứu bạn. Giao dịch bạn ký chính xác là giao dịch bạn yêu cầu; chính ý định của bạn mới là thứ đã bị bẻ cong từ thượng nguồn. Một khi đã được xác nhận, nó là không thể đảo ngược.

Những cách phòng vệ thực sự hiệu quả

Vì trò lừa này khai thác quy trình làm việc chứ không phải mật mã học, nên những cách phòng vệ hiệu quả là những thay đổi trong quy trình — được xếp hạng ở đây từ mang tính cấu trúc nhất đến thủ công nhất:

Ba lớp phòng vệ trước address poisoning: xác minh toàn bộ địa chỉ, một danh sách trắng địa chỉ, và một khoản chuyển thử nhỏ trước lần thanh toán chính
Phòng vệ cấu trúc thắng sự cảnh giác: xác minh đầy đủ, đưa vào danh sách trắng, thử trước.
  • Không bao giờ sao chép địa chỉ từ lịch sử giao dịch. Hãy coi lịch sử là một màn hình hiển thị, không phải một nguồn. Những nguồn an toàn duy nhất là một danh bạ bạn đã lưu vào một thời điểm đã được xác minh, một mã QR quét trực tiếp từ người nhận, hoặc một địa chỉ được gửi qua một kênh riêng, trực tiếp.
  • Dùng danh sách trắng ở những nơi mức độ rủi ro xứng đáng. Một danh sách trắng địa chỉ giới hạn các giao dịch gửi đi vào một danh sách đích đã được phê duyệt trước, khiến một mục bị đầu độc trở nên vô dụng ngay cả khi ai đó dán nó. Mô hình bảo mật của Ownbit hỗ trợ danh sách trắng địa chỉ trong MultiSig doanh nghiệp, cùng với hạn mức hằng ngày và ngưỡng người ký, để cú dán của một người không thể chuyển tiền ngân quỹ đến một địa chỉ chưa được thẩm định.
  • Xác minh toàn bộ địa chỉ một lần, rồi chỉ tin vào danh bạ đã lưu. Checksum bắt được lỗi gõ nhầm, chứ không bắt được địa chỉ giống hệt — một địa chỉ bị đầu độc là một địa chỉ hoàn toàn hợp lệ. Hãy đối chiếu từng ký tự với thứ người nhận đã gửi cho bạn, hoặc đọc to phần giữa của chuỗi qua một cuộc gọi. Làm điều đó một lần, lưu danh bạ, và không bao giờ sao chép lại nó từ bất kỳ đâu khác.
  • Gửi một khoản thử trước — và xác nhận đã nhận qua kênh ngoài. Một khoản chuyển nhỏ tốn một lần phí và loại bỏ rủi ro đuôi khỏi một khoản lớn. Nhưng hãy để người nhận xác nhận đã nhận qua một kênh riêng; tự mình xác nhận bằng cách liếc nhìn lịch sử là mở lại đúng cái bẫy đó.
  • Đưa một màn hình thứ hai, hoặc một người thứ hai, vào vòng lặp. Quy trình ví lạnh của Ownbit chuyển giao dịch chưa ký bằng mã QR sang một chiếc điện thoại ngoại tuyến, nơi toàn bộ địa chỉ đích được xem xét trên phần cứng mà môi trường trực tuyến không thể chạm tới. Trong một MultiSig, một người đồng ký trên một thiết bị khác kiểm tra lại địa chỉ đích sẽ biến lỗi dán của một người thành một đề xuất bị từ chối thay vì một khoản mất mát — với điều kiện những người ký thực sự xác minh, đó đúng là kỷ luật mà vụ Bybit đã cho thấy có thể suy yếu.

Ví phần cứng xứng đáng được nhắc đến một cách thẳng thắn ở đây: màn hình trên thiết bị của chúng phục vụ cùng mục đích như một chiếc điện thoại air-gapped, và chúng giúp chống lại việc đầu độc đúng bằng mức độ mà chủ nhân đọc toàn bộ địa chỉ trên thiết bị. Không công cụ nào xác minh ý định thay cho bạn.

Một nghi thức 30 giây cho mọi khoản chuyển lớn

  1. Lấy địa chỉ đích từ người nhận qua một kênh trực tiếp — chat, gọi điện, hoặc mã QR — không bao giờ từ lịch sử của bạn.
  2. Lưu ngay nó thành một danh bạ có tên; mục đã lưu đó giờ là nguồn duy nhất của bạn.
  3. Đọc phần giữa của địa chỉ khi bạn đối chiếu, không chỉ hai đầu. Kẻ tấn công khớp hai đầu; phần giữa phản bội chúng.
  4. Gửi một khoản thử nhỏ và để người nhận xác nhận đã nhận qua chính kênh trực tiếp đó.
  5. Gửi phần còn lại đến danh bạ đã lưu — và với những khoản tiền quy mô ngân quỹ, hãy yêu cầu một danh sách trắng cộng với một ngưỡng MultiSig để không cú dán đơn lẻ nào có thể gây chết người.

Nghi thức này tốn nửa phút và một khoản phí mạng cộng thêm. Nạn nhân tháng 5/2024 hẳn đã sẵn lòng trả cái giá đó gấp một nghìn lần.

Câu hỏi thường gặp

Trò lừa address poisoning là gì?

Trò lừa address poisoning là một cuộc tấn công trong đó kẻ lừa đảo tạo ra một địa chỉ trông giống hệt, khớp với các ký tự đầu và cuối của một địa chỉ bạn thường xuyên gửi tiền đến, rồi chèn nó vào lịch sử giao dịch của bạn bằng một lệnh chuyển dust hoặc chuyển giá trị 0. Kẻ lừa đảo sau đó chờ bạn sao chép mục giả thay vì mục thật. Cuộc tấn công không cần truy cập vào khóa của bạn và chỉ tốn hơn phí mạng một chút để thực hiện.

Một lệnh chuyển giá trị 0 có thể tự nó đánh cắp crypto của tôi không?

Không. Một lệnh chuyển giá trị 0 không di chuyển gì và không trao quyền gì; nó tồn tại chỉ để gieo một mục đáng tin vào lịch sử của bạn. Tiền của bạn chỉ gặp rủi ro nếu về sau bạn sao chép địa chỉ đã được gieo và gửi đến đó. Bạn có thể yên tâm phớt lờ dust và spam giá trị 0 — chỉ cần không bao giờ coi nó là một nguồn địa chỉ.

Làm sao tôi biết lịch sử ví của mình có bị đầu độc không?

Hãy để ý các khoản dust đến từ những địa chỉ trông giống các đối tác thường xuyên của bạn, hoặc các lệnh chuyển token giá trị 0 gửi đi mà bạn chưa bao giờ thực hiện. Trên thực tế, hãy giả định rằng bất kỳ ví đang hoạt động nào cũng đã bị đầu độc và hành xử theo đó: thay đổi nơi bạn sao chép địa chỉ thì an toàn hơn là kiểm tra lịch sử từng mục một.

Ví lạnh hay ví phần cứng có ngăn được address poisoning không?

Không tự nó làm được. Lưu trữ lạnh bảo vệ khóa, còn address poisoning không bao giờ tấn công khóa — nó tấn công địa chỉ mà bạn chọn trước khi ký. Thứ có ích là màn hình thứ hai: một thiết bị air-gapped hiển thị toàn bộ địa chỉ đích trước khi ký sẽ cho bạn một điểm kiểm tra độc lập cuối cùng, nhưng chỉ khi bạn đọc trọn vẹn địa chỉ trên đó.

Nếu bạn muốn xây những lan can bảo vệ này vào trong ví thay vì vào trí nhớ của mình, mô hình bảo mật của Ownbit ghép self-custody với danh sách trắng địa chỉ và hạn mức chi tiêu trên MultiSig doanh nghiệp, còn quy trình ví lạnh dựa trên QR đặt một bước xem xét toàn bộ địa chỉ trên một màn hình ngoại tuyến trước khi bất kỳ chữ ký nào tồn tại. Mỗi người dùng mới đều nhận được bản dùng thử 7 ngày, và dù thế nào thì khóa vẫn là của bạn.