Integer Overflow Attack là gì?
Integer Overflow Attack xảy ra khi một giá trị số trong chương trình đạt giới hạn tối đa rồi quay vòng về, cho phép kẻ tấn công bóp méo số dư hoặc giới hạn. Trong tiền mã hóa, vòng quay này có thể biến một kiểm tra như “bạn có đủ token không?” thành có trong khi lẽ ra là không. Hãy tưởng tượng đồng hồ đo công tơ số của xe cũ lật từ 999999 về 000000, nhưng lần này là tiền.
“Các trình biên dịch hiện đại khiến điều này không thể xảy ra.” Không hẳn vậy. Nhiều hợp đồng thông minh vẫn dùng phép toán không kiểm tra ở vài chỗ, toán học tự viết, hoặc assembly có thể tái phát sinh lỗi tràn số.
Cách Integer Overflow Attack hoạt động
Sau đây là mô tả nhanh lấy hợp đồng token làm ví dụ.
- Bước 1: Hợp đồng lưu số dư bằng số nguyên kích thước cố định và có hàm cộng, trừ, hoặc nhân các khoản.
- Bước 2: Kẻ tấn công chọn đầu vào đẩy con số vượt quá giới hạn tối đa, khiến nó quay vòng về một giá trị rất nhỏ hoặc gần bằng không.
- Bước 3: Vòng quay đó lật ngược một kiểm tra. Ví dụ: sau khi quay vòng, số dư trông lớn bất thường hoặc giới hạn chuyển khoản trông rất nhỏ, nên yêu cầu kiểm tra được thông qua.
- Bước 4: Kẻ tấn công tạo token chưa được hưởng, phá giới hạn tối đa, hoặc chuyển tiền mà họ không đáng lẽ được phép di chuyển.
- Bước 5: Họ luân chuyển khoản lời qua giao dịch hoặc cầu nối rồi rút đi trước khi ai phát hiện.
Thực tế: một vài token ERC 20 từng có lỗi tràn theo lô cho phép kẻ tấn công tạo lượng cung phi lý, rồi bán ồ ạt trên sàn. Đúng vậy, điều đó đã xảy ra.
Tại sao Integer Overflow Attack quan trọng
Nếu bạn giữ token, phát triển ứng dụng, hoặc giao dịch DeFi, bạn nên quan tâm. Vấn đề liên quan đến số học, và số học điều khiển tiền mã hóa.
- Lợi ích: Hiểu cách hoạt động giúp bạn phát hiện dấu hiệu nguy hiểm sớm và bảo vệ tài sản.
- Góc nhìn: Lỗi số học luôn tồn tại. Chuỗi mới và công cụ mới xuất hiện, nhưng sai sót trong phép toán vẫn bị kẻ tấn công khai thác.
- Sự liên quan: Bạn sẽ gặp nó trong toán học lượng cung token, hệ thống phần thưởng, bộ đếm NFT, và các dApps phổ biến quản lý số dư người dùng.
Trong Solidity, để phép toán luôn được kiểm tra theo mặc định và giữ các khối unchecked thật nhỏ và được kiểm toán. Thêm kiểm thử fuzz thử các giá trị cực đại, không chỉ các trường hợp thành công.
Đặc điểm chính của Integer Overflow Attack
Điều làm nó khác các lỗi khác:
- Vòng quay: Số nhảy từ giá trị tối đa về 0 như bộ đếm vòng.
- Im lặng: Không có lỗi gốc nếu phép toán không được kiểm tra, nên kết quả sai trông như hợp lệ.
- Có thể kích hoạt: Thường thì đầu vào do người dùng kiểm soát có thể khiến sự kiện xảy ra đúng lúc.
- Có thể lặp lại: Một khi tìm ra, kẻ tấn công có thể tự động hóa và tấn công nhiều mục tiêu.
Các biến thể
Các dạng chính bạn sẽ nghe, cùng họ nhưng đường tấn công khác nhau:
- Underflow: Phép trừ xuống dưới 0 và quay vòng thành giá trị rất lớn.
- Cộng: Thêm vào số dư hoặc lượng cung làm vượt giới hạn tối đa và quay về số nhỏ.
- Nhân: Các hệ số thưởng hoặc yếu tố tỉ lệ khiến giá trị vượt quá giới hạn.
- Bộ đếm: ID token hoặc bộ đếm lượng cung quay vòng và cho phép mint tiếp vượt quá giới hạn.
Integer Overflow Attack không chỉ là vấn đề của Solidity. Nó có thể xuất hiện trên Vyper, Rust, Move, hoặc assembly tùy chỉnh, và nhiều vụ khai thác được công bố cuối cùng đều do phép toán không kiểm tra quanh số dư hoặc lượng cung.
Ví dụ
Một hàm thưởng nhân số người dùng cung cấp với hệ số thưởng lớn, giá trị quay vòng, kiểm tra giới hạn bị vượt qua, và Integer Overflow Attack cho phép kẻ tấn công tạo nhiều token hơn dự định.
Thông tin thú vị
Màn arcade cổ điển với màn 256 bị khóa? Hiện tượng đóng băng nổi tiếng đó là do tràn số nguyên, chứng tỏ ngay cả trò chơi retro cũng có thể vô tình hé lộ lỗi tương tự trên tiền mã hóa.
Tổng kết
Hãy nghĩ Integer Overflow Attack như những con số chạy một vòng và kẻ trộm lợi dụng khoảng trống; giữ phép toán được kiểm tra để bạn yên tâm hơn.
