Trong bối cảnh thị trường giảm, một tin tức bảo mật hiếm khi tạo ra sự chú ý xứng đáng. Ngày 30/7, một bản in trước trên arXiv đã mô tả 4.224 hợp đồng thông minh độc hại có thể qua mặt công cụ mô phỏng giao dịch ngay bên trong ví tiền số. Công cụ phát hiện tên SimGuard, hoạt động dựa trên bytecode của hợp đồng, đã xác định chúng trên Ethereum, BNB Smart Chain, Avalanche và Polygon. Kết quả: 5.742 địa chỉ nạn nhân, khoảng 3,48 triệu USD thiệt hại lịch sử. Các tác giả gọi đây là giới hạn trên, vì một số hoạt động kiểm thử của kẻ tấn công có thể bị phân loại nhầm. Nhưng điều đáng lo không nằm ở con số.
Hãy hiểu vì sao vụ này nguy hiểm. Transaction simulation là một tính năng an toàn được tích hợp vào ví hiện đại: trước khi bạn ký, ví sẽ chạy thử giao dịch và hiển thị thay đổi số dư ước tính. Người dùng dựa vào đó để quyết định. Với DeFi, đây giống như một chiếc phanh trước vực. Nhưng các hợp đồng mà SimGuard tìm thấy chứa các nhánh điều kiện: một kết quả khi trình mô phỏng đọc dữ liệu, một kết quả khác khi giao dịch được thực thi trên chuỗi. Nói đơn giản: ví của bạn có thể hiển thị một khoản lãi nhỏ, trong khi giao dịch cuối cùng gửi toàn bộ tiền gửi cho kẻ tấn công.
Tại sao người dùng lại đặt niềm tin tuyệt đối vào công cụ mô phỏng? Bởi vì nó hoạt động tốt trong 99% các giao dịch hợp lệ. Khi một giao dịch lừa đảo cổ điển xuất hiện, chẳng hạn như một địa chỉ ví gần giống, ví sẽ cảnh báo. Nhưng khi hợp đồng chứa các nhánh điều kiện, trình mô phỏng chỉ thấy một con rối được dàn dựng cẩn thận. Sự tin tưởng của người dùng được xây dựng qua hàng nghìn lần nhấn nút "Xác nhận" mà không gặp sự cố. Kẻ tấn công chỉ cần một lần thành công.
Cơ chế phổ biến nhất là kiểm soát lưu trữ (storage control). Khi trình mô phỏng đọc trạng thái hợp đồng, nó thấy nhánh sẽ trả lại tiền gửi kèm một chút phần thưởng. Người dùng thấy mọi thứ bình thường. Sau đó, kẻ tấn công thay đổi trạng thái trên chuỗi - ví dụ thêm địa chỉ người dùng vào danh sách đen - trước khi giao dịch được đưa vào khối. Khi giao dịch thực thi, nhánh đã chọn không còn là nhánh trả tiền, mà là nhánh chuyển toàn bộ tài sản đến một địa chỉ do kẻ tấn công kiểm soát. Người dùng không hề hay biết: bản xem trước đã cũ, nhưng giao diện không bao giờ nói điều đó.
SimGuard hoạt động ở tầng bytecode, nghĩa là nó có thể phân tích hợp đồng ngay cả khi mã nguồn không được công bố. Điều đó cho phép nó tìm ra các nhánh điều kiện được giấu trong mã máy ảo EVM. Khi so sánh giữa kết quả mô phỏng và hành vi thực thi trên môi trường giả lập, detector nhận diện sự lệch pha đặc trưng của các hợp đồng "hai mặt" này. Không phải biến thể nào cũng cần sửa đổi dữ liệu lưu trữ. Các hợp đồng dựa trên timestamp lợi dụng thời điểm khối muộn hơn so với lúc mô phỏng. Các hợp đồng dựa trên gas phản ứng khác nhau khi gas limit của lượt mô phỏng và lượt thực thi không khớp. Điều đó nghĩa là kể cả khi các nhà phát triển ví vá lỗ hổng storage, các biến thể này vẫn tồn tại.
Nghiên cứu đã thử nghiệm một tài khoản gửi toàn bộ số dư vào một hợp đồng chỉ trả về 1 wei (đơn vị nhỏ nhất của ETH). Kết quả: nhiều giao diện hiển thị giá trị dương; hầu hết không làm rõ tổng số tiền rời khỏi ví. Khoản hoàn trả 1 wei bị giao diện "thổi" thành dấu hiệu giao dịch có lãi. Bài báo cũng trích dẫn một giao dịch trên Etherscan ngày 8/1/2025, trong đó một lời gọi Claim() chuyển khoảng 143,45 ETH qua một hợp đồng được gắn nhãn phishing. Dữ liệu on-chain xác nhận hành vi chuyển tiền, nhưng không thể cho biết giao diện ví của nạn nhân đã hiển thị gì.
Điều đáng nói là nghiên cứu không nêu tên cụ thể các phiên bản ví dễ bị ảnh hưởng. MetaMask, Phantom hay các ví khác có thể có những khác biệt nhỏ trong cách xử lý gas và trạng thái. Điều đó có nghĩa là lỗ hổng có thể rộng hơn nhiều so với những gì chúng ta biết. Người dùng không thể tự kiểm tra backend mô phỏng; họ phải tin vào nhà phát triển. Và trớ trêu thay, chính niềm tin này là thứ đang bị khai thác. Tài liệu hiện tại của MetaMask gọi các ước tính thay đổi số dư chỉ là "dự đoán" và cảnh báo kết quả cuối cùng không được đảm bảo. Nhưng lời cảnh báo trong tài liệu hướng dẫn không bao giờ xuất hiện trên màn hình xác nhận.
Những con số trên nên được đọc một cách thận trọng. Preprint chưa qua bình duyệt. Số liệu về hợp đồng trên Avalanche không nhất quán; thời gian quan sát có các điểm kết thúc mâu thuẫn. Kho lưu trữ mã và dữ liệu đi kèm trả về mã HTTP 401 khi được kiểm tra, nghĩa là không ai có thể tái lập độc lập. Đánh giá bộ phát hiện chỉ dựa trên 44 hợp đồng, trong đó 30 hợp đồng được tạo bởi Gemini. Tôi vẫn coi đó là một tín hiệu mạnh, nhưng là tín hiệu để xây dựng hệ thống phòng thủ, không phải là bản án thống kê.
Điều khiến tôi thực sự quan tâm là sự đảo ngược vai trò. Người dùng ví trước giờ luôn nghĩ "ví thông minh sẽ bảo vệ tôi khỏi hợp đồng lừa đảo". Kẻ tấn công không chống lại tính năng đó; chúng dùng chính tính năng đó làm mồi nhử. Transaction simulation - biểu tượng của sự an toàn - trở thành phương tiện lừa dối. 91,5% thiệt hại nằm trên Ethereum và khoảng 83% tổng thiệt hại xuyên chuỗi thuộc về một cụm kẻ tấn công duy nhất. Một nhóm nhỏ, vận hành theo kiểu công nghiệp, dạy chúng ta rằng niềm tin không thể thay thế cho sự kiểm tra dòng tiền.
Hãy so sánh với vụ đánh cắp 538 triệu USD mà các hệ thống drainer thực hiện: cuộc tấn công đó cần người dùng ký một loại token approval hoặc cài đặt phần mềm giả mạo. Với phương pháp mới, kẻ tấn công không cần approval, không cần chiếm quyền kiểm soát ví. Nạn nhân chỉ thấy một giao dịch "có lãi" và ký vào đó. Đây là sự tiến hóa từ tấn công cơ học sang tấn công nhận thức. Trí tuệ nhân tạo càng làm cho chi phí tạo ra các hợp đồng này trở nên rẻ, nghĩa là các công cụ bảo mật phải chạy đua với chính những thứ chúng ta đang xây dựng.
Trong các cuộc kiểm toán giao thức mà tôi tham gia, tôi luôn yêu cầu hiển thị hai tham số: tổng tiền vào và tổng tiền ra của ví. Rất nhiều giao diện làm rất tốt việc hiển thị "thay đổi ròng" nhưng lại che giấu số tiền thực sự rời khỏi tài sản của người dùng. Với các vụ tấn công này, việc hiển thị tổng số tiền ra là chìa khóa: nếu bạn thấy 10 ETH rời ví và chỉ 1 wei quay lại, không ai có thể gọi đó là "có lãi". Đây không phải là cải tiến kỹ thuật, mà là một nguyên tắc thiết kế tối thiểu.
Bài báo khuyến nghị chạy lại mô phỏng mỗi khi trạng thái hợp đồng hoặc gas thay đổi, dùng gas limit và gas price của giao dịch thực tế, cũng như kiểm tra các mốc block và timestamp xa hơn. Tôi sẽ thêm một khuyến nghị cho người dùng: đối xử với bản xem trước như một lời gợi ý từ người lạ, không bao giờ là sự thật. Trong một thị trường giảm, tài sản của bạn được giữ bởi những dòng code; hãy chắc chắn bạn nhìn thấy dòng tiền chảy ra trước khi ký.
Chúng ta có thể chọn tin rằng 3,48 triệu USD là một con số nhỏ. Nhưng con số này sẽ lớn khi công nghệ AI hạ giá thành của sự lừa dối xuống gần bằng không. Có thể thứ duy nhất ngăn một vụ thảm họa là một thay đổi nhỏ trong giao diện: hiển thị tổng tiền rời ví. Kẻ tấn công không cần đánh cắp khóa riêng tư của bạn. Chúng chỉ cần bạn tin rằng mình đang có lãi. Liệu những người thiết kế CBDC trong tương lai có rút ra được bài học này trước khi phát hành ví số cho hàng triệu người dùng? Tôi hy vọng họ đọc được preprint này.

