Buffer overflow là một trong những lỗ hổng lâu đời nhất trong lịch sử bảo mật máy tính, xuất hiện từ thập niên 1980 nhưng vẫn là nguyên nhân của hàng loạt vụ tấn công nghiêm trọng năm 2026. Bản chất của nó đơn giản đến bất ngờ: chương trình ghi dữ liệu vượt quá kích thước vùng nhớ được cấp phát, và kẻ tấn công lợi dụng phần dữ liệu tràn ra đó để chiếm quyền điều khiển.
Bộ nhớ stack hoạt động như thế nào
Hãy tưởng tượng stack như một chồng đĩa trong nhà hàng: mỗi khi gọi một hàm, hệ thống đặt thêm một đĩa lên trên chứa biến cục bộ, tham số, và quan trọng nhất là địa chỉ trả về (return address), tức vị trí mà CPU sẽ nhảy đến sau khi hàm kết thúc. Biến cục bộ nằm ngay phía trên địa chỉ trả về trong bộ nhớ. Khi chương trình dùng hàm như strcpy() hoặc gets() mà không kiểm tra kích thước đầu vào, dữ liệu có thể tràn từ vùng biến cục bộ xuống ghi đè địa chỉ trả về.
Khoảnh khắc chiếm quyền
Kẻ tấn công gửi một chuỗi dữ liệu được thiết kế cẩn thận gồm hai phần: phần đầu là mã máy độc hại (shellcode), phần sau là địa chỉ trỏ ngược lại chính shellcode đó. Khi hàm kết thúc, CPU đọc địa chỉ trả về đã bị ghi đè và nhảy thẳng vào mã độc. Từ đây, kẻ tấn công có toàn quyền thực thi lệnh với cùng đặc quyền của chương trình bị khai thác. Nếu chương trình chạy quyền root hoặc SYSTEM, kẻ tấn công kiểm soát toàn bộ máy.
Heap overflow: biến thể nguy hiểm không kém
Ngoài stack, vùng nhớ heap (cấp phát động bằng malloc()) cũng dễ bị tràn. Heap overflow phức tạp hơn vì không có địa chỉ trả về để ghi đè trực tiếp, nhưng kẻ tấn công có thể thay đổi metadata quản lý heap, dẫn đến ghi dữ liệu tùy ý vào bất kỳ vị trí nào trong bộ nhớ. Kỹ thuật này từng được dùng trong các vụ khai thác hệ thống quy mô lớn.
Các lớp phòng thủ hiện đại
Ngành công nghệ đã xây nhiều tầng bảo vệ. ASLR (Address Space Layout Randomization) xáo trộn vị trí bộ nhớ mỗi lần chạy, khiến kẻ tấn công không biết trước shellcode nằm ở đâu. Stack canary đặt một giá trị ngẫu nhiên giữa biến cục bộ và địa chỉ trả về: nếu giá trị này bị thay đổi, chương trình dừng ngay lập tức. DEP/NX (Data Execution Prevention) đánh dấu vùng nhớ stack và heap là không thực thi, ngăn CPU chạy shellcode trực tiếp.
Tại sao vẫn chưa hết nguy hiểm
Dù có ASLR, canary và DEP, kẻ tấn công vẫn phát triển kỹ thuật vượt rào. ROP $343.15 (0.0%) (Return-Oriented Programming) tái sử dụng các đoạn mã hợp lệ có sẵn trong chương trình, xâu chuỗi chúng lại để thực thi lệnh tùy ý mà không cần shellcode mới. Các ngôn ngữ không kiểm soát bộ nhớ tự động như C và C++ vẫn chiếm phần lớn trong hệ điều hành, firmware và phần mềm nhúng, nghĩa là bề mặt tấn công vẫn còn rất lớn. Năm 2026, buffer overflow vẫn nằm trong top 10 lỗ hổng nguy hiểm nhất theo OWASP, nhắc nhở rằng những lỗi cơ bản nhất đôi khi lại gây hậu quả nghiêm trọng nhất.






