
Phân tích từ góc độ kỹ thuật: Vì sao token cơ chế giảm phát dễ bị tấn công
Tuyển chọn TechFlowTuyển chọn TechFlow

Phân tích từ góc độ kỹ thuật: Vì sao token cơ chế giảm phát dễ bị tấn công
Bài viết này sẽ thảo luận và phân tích nguyên nhân khiến token通缩 bị tấn công, đồng thời đưa ra các phương án phòng thủ tương ứng.
Tổng quan
Gần đây, các token có cơ chế giảm phát trên blockchain thường xuyên bị tấn công. Bài viết này sẽ thảo luận và phân tích nguyên nhân khiến các token có cơ chế giảm phát bị tấn công, đồng thời đưa ra các phương án phòng thủ tương ứng.
Thông thường có hai cách triển khai cơ chế giảm phát trong token: một là cơ chế đốt cháy (burn), hai là cơ chế phản xạ (reflect). Dưới đây chúng ta sẽ phân tích hai phương thức triển khai này cùng những vấn đề tiềm ẩn.
Cơ chế đốt cháy
Thông thường, các token có cơ chế đốt cháy sẽ thực hiện logic đốt cháy trong hàm _transfer của nó. Đôi khi người gửi phải chịu phí giao dịch. Trong trường hợp này, số lượng token người nhận nhận được sẽ không thay đổi, nhưng người gửi phải trả thêm token vì họ phải chịu phí giao dịch. Dưới đây là một ví dụ đơn giản:

Tiếp theo, chúng ta sẽ thảo luận về rủi ro tiềm tàng trong tình huống này.
Nếu chỉ xét riêng hợp đồng token, ta thấy cách viết này dường như không có vấn đề gì, nhưng trong blockchain có rất nhiều tình huống phức tạp, cần phải xem xét nhiều khía cạnh khác nhau.
Thông thường, để token có giá cả thị trường, các dự án sẽ cung cấp thanh khoản cho token trên các sàn giao dịch phi tập trung như Uniswap, Pancakeswap.
Trong đó, Uniswap có một hàm skim, sẽ chuyển phần chênh lệch giữa số dư và dự trữ của hai loại token trong nhóm thanh khoản đến người gọi, nhằm cân bằng số dư và dự trữ:

Lúc này, người gửi trở thành nhóm thanh khoản. Khi gọi _transfer, một phần token trong nhóm thanh khoản sẽ bị đốt cháy, dẫn đến giá token tăng lên một phần.
Kẻ tấn công lợi dụng đặc điểm này để chuyển trực tiếp token vào nhóm thanh khoản, sau đó gọi hàm skim để rút ra, rồi lặp lại thao tác này nhiều lần, khiến lượng lớn token trong nhóm thanh khoản bị đốt cháy, giá cả cũng vì vậy mà tăng vọt, cuối cùng bán token để thu lợi nhuận.
Một vụ tấn công thực tế điển hình là Winner Doge (WDOGE):

Trong hàm _transfer của hợp đồng WDOGE, khi block.timestamp > closingTime thì đi vào vòng lặp else. Tại dòng code thứ 21, số lượng chuyển khoản bị trừ khỏi số dư của người gửi; tại dòng code thứ 31, người gửi lại bị đốt cháy một lượng tokensToBurn. Kẻ tấn công lợi dụng cơ chế phí giao dịch này để đánh cắp toàn bộ giá trị tài sản (WBNB) trong nhóm thanh khoản thông qua phương thức tấn công nêu trên.

Cơ chế phản xạ
Trong cơ chế phản xạ, mỗi giao dịch người dùng thực hiện đều bị thu phí, dùng để thưởng cho những người nắm giữ token, nhưng không kích hoạt việc chuyển khoản, mà chỉ đơn thuần điều chỉnh một hệ số.
Trong cơ chế này, người dùng có hai loại số lượng token: tAmount và rAmount. tAmount là số lượng token thực tế, còn rAmount là số lượng token sau phản xạ, với tỷ lệ là tTotal / rTotal. Thông thường mã nguồn được triển khai như sau:

Token theo cơ chế phản xạ thường có một hàm tên là deliver, sẽ đốt cháy token của người gọi, làm giảm giá trị rTotal, do đó tỷ lệ sẽ tăng lên, khiến lượng token phản xạ của những người dùng khác cũng tăng theo:

Kẻ tấn công nhận thấy hàm này và dùng nó để tấn công nhóm thanh khoản Uniswap tương ứng.
Vậy hắn sẽ khai thác như thế nào? Cũng bắt đầu từ hàm skim của Uniswap:

Trong Uniswap, reserve là dự trữ, khác với token.balanceOf(address(this)).
Kẻ tấn công trước tiên gọi hàm deliver để đốt cháy token của mình, khiến giá trị rTotal giảm, tỷ lệ tăng theo đó, nên giá trị token phản xạ cũng tăng lên, token.balanceOf(address(this)) cũng tăng tương ứng, tạo ra sự chênh lệch so với giá trị reserve.
Do đó, kẻ tấn công có thể gọi hàm skim để rút ra một lượng token bằng đúng phần chênh lệch này nhằm thu lợi.

Một ví dụ tấn công thực tế là BEVO NFT Art Token (BEVO):

Khi hợp đồng token tồn tại hàm burn, lại xuất hiện một phương pháp tấn công tương tự khác:

Khi người dùng gọi hàm burn, token của họ sẽ bị đốt cháy, đồng thời giá trị tTotal giảm, do đó tỷ lệ giảm xuống, lượng token phản xạ tương ứng cũng giảm, khiến số lượng token trong nhóm thanh khoản lúc này cũng giảm, dẫn đến giá token tăng.
Kẻ tấn công lợi dụng đặc điểm này, gọi nhiều lần hàm burn để giảm giá trị tTotal, sau đó gọi hàm sync của nhóm thanh khoản để đồng bộ hóa reserve và balances. Cuối cùng, lượng token trong nhóm thanh khoản giảm mạnh, giá cả tăng vọt. Sau đó, kẻ tấn công bán token để thu lợi nhuận.

Một ví dụ tấn công thực tế là Sheep Token (SHEEP):

Phương án phòng thủ
Thông qua việc phân tích các phương pháp tấn công nhằm vào cơ chế đốt cháy và phản xạ, không khó để nhận ra điểm mấu chốt mà kẻ tấn công khai thác là thao túng giá cả trong nhóm thanh khoản. Do đó, đưa địa chỉ nhóm thanh khoản vào danh sách trắng, loại trừ việc hủy bỏ token hoặc tham gia vào cơ chế phản xạ, có thể tránh được các cuộc tấn công kiểu này.
Tổng kết
Bài viết đã phân tích hai cơ chế triển khai token giảm phát cùng các phương thức tấn công tương ứng, cuối cùng đưa ra giải pháp xử lý phù hợp. Khi viết hợp đồng, các dự án cần phải tính đến tình huống token kết hợp với sàn giao dịch phi tập trung, để tránh các cuộc tấn công kiểu này.
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














