Lỗi tràn bộ đệm (Buffer Overflow) có nguyên nhân gần giống với tấn công SQL Injection. Khi người dùng hay hacker cung cấp các biên đầu vào. Hay dữ liệu vượt quá khả năng xử lý của chương trình. Làm cho hệ thống bị treo dẫn đến từ chối dịch vụ. Hay có khả năng bị các hacker lợi dụng chèn các chỉ thị trái phép nhằm thực hiện các đoạn mã nguy hiểm từ xa.
Tác hại của lỗi tràn bộ đệm Buffer Overflow
- Lỗi tràn bộ đệm xảy ra khi một ứng dụng cố gắng ghi dữ liệu vượt khỏi phạm vi bộ đệm (giới hạn cuối hoặc cả giới hạn đầu của bộ đệm).
- Lỗi tràn bộ đệm có thể khiến ứng dụng ngừng hoạt động, gây mất dữ liệu hoặc thậm chí giúp kẻ tấn công kiểm soát hệ thống hoặc tạo cơ hội cho kẻ tấn công thực hiện nhiều thủ thuật khai thác khác nhau
Lỗi tràn bộ đệm (Buffer Overflow) là một điều kiện bất thường. Khi tiến trình lưu trữ dữ liệu vượt ra ngoài biên của bộ nhớ đệm có chiều dài cố định. Kết quả là dữ liệu có thể đè lên các bộ nhớ liền kề. Dữ liệu bị ghi đè có thể bao gồm các bộ nhớ đệm khác. Các biến và dữ liệu điều khiển luồng chảy của cả chương trình (program flow control).
Nguyên nhân gây ra lỗi Buffer Overflow
- Phương thức kiểm tra bên (boundary) không được thực hiện đầy đủ hoặc là được bỏ qua
- Các ngôn ngữ lập trình như là ngôn ngữ C, bản thân nó đã tiền ẩn các lỗi mà hacker có thể khai thác.
- Các phương thức strcat(), strcpy(), sprintf(), bcopy(), gets(), canf() trong ngôn ngữ C có thể được khai thác vì các hàm này không kiểm tra những buffer được cấp phát trên stack có kích thước lớn hơn dữ liệu được copy vào buffer hay không
Các kiểu lỗi Buffer Overflow thường gặp
Stack overflow: sẽ xuất hiện khi buffer tràn trong stack space và là hình thức tấn công phổ biến nhất của lỗi tràn bộ đệm.
Mục đích:
- Ghi đè một biến địa phương nằm gần bộ nhớ đệm trong stack. để thay đổi hành vi của chương trình. Nhằm phục vụ ý đồ của hacker.
- Ghi đè địa chỉ trả về trong khung stack. Khi hàm trả về thực thi sẽ được tiếp tục tại địa chỉ mà hacker đã chỉ rõ. Thường là tại một bộ đệm chứa dữ liệu vào của người dùng.
Format String: Tràn bộ đệm chuỗi định dạng (thường được gọi là “lỗ hổng định dạng chuỗi”) là lỗi tràn bộ đệm ở mức chuyên môn cao, tác hại tương tự như các cuộc tấn công tràn bộ đệm khác. Về cơ bản, lỗ hổng định dạng chuỗi tận dụng lợi thế của các kiểu dữ liệu hỗn hợp và kiểm soát thông tin trong chức năng nhất định, chẳng hạn như C/C++ printf
Chương trình đơn giản này có đầu vào từ người dùng và hiển thị lại trên màn hình. Chuỗi %s có nghĩa là các tham số khác.
str sẽ được hiển thị như là một chuỗi.