Buffer Overflow là gì?
Trong lĩnh vực an ninh máy tính và lập trình, lỗi Buffer overflow hay tiếng Việt gọi là lỗi tràn bộ nhớ đệm/lỗi tràn bộ đệm là khi mà bộ nhớ bị ghi đè nhiều lần trên ngăn xếp. Lỗi này thường xuyên xảy ra do người dùng gửi một lượng lớn dữ liệu tới server ứng dụng, điều này làm cho dữ liệu bị bắt phải đè lên các vị trí bộ nhớ liền kề đó. Đây là một lỗi lập trình có thể gây ra một ngoại lệ truy nhập bộ nhớ máy tính và chương trình bị kết thúc, hoặc khi người dùng cố tình phá hoại, có thể lợi dụng lỗi này để phá vỡ an ninh hệ thống.
Nguyên nhân gây ra lỗi Buffer Overflow
- Không thực hiện đầy đủ, hoặc không kiểm tra biên.
- Các ngôn ngữ lập trình như C, bản thân nó đã luôn có những tiềm ẩn các lỗ hổng mà hacker dễ dàng có thể tấn công vào. Trong ngôn ngữ lập trình C còn tồn tại các hàm 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à bộ đệm hay không.
Các cách khai thác lỗi Buffer Overflow
Tấn công Buffer overflow có thể thấy nguyên nhân gần tương tự với tấn công SQL Injection, khi người truy cập hay cả những hacker đưa các biên đầu vào, các dữ liệu tới vượt khỏi tầm xử lý của hệ thống thì điều này sẽ làm cho hệ thống bị treo, lỗi quá tải, chúng cũng sẽ từ chối xử lý dịch vụ và chính điều này sẽ tạo ra những lỗ hổng, các hacker từ đó chèn các mã độc hoặc các lệnh không đúng chiếm đoạt lấy quyền kiểm soat từ xa.
Khai thác lỗi Buffer Overflow trên stack
- Để gây ra tình trạng lỗi tràn bộ đệm, hacker có thể ghi đè một biến địa phương nằm gần bộ đệm trong stack, biến này làm thay đổi hành vi của hệ thống để tạo điều kiện tấn công cho kẻ xấu.
- Ghi đè lên địa chỉ trả về trong khung stack. Khi hàm trả về, thực thi sẽ vẫn tiếp tục tại địa chỉ mà hacker đã chỉ định, thông thường địa chỉ này thuộc khu vực bộ đệm chứa dữ liệu người dùng.
Lỗi Buffer Overflow trên Heap
- Hiện tượng lỗi tràn bộ đệm xảy ra tại khu vực dữ liệu Heap hay cũng chính là hiện tượng tràn Heap, hacker có thể khai thác lỗ hổng này bằng các kỹ thuật (khác với các lỗi tràn stack).
- Bộ nhớ heap là bộ phận thường để chứa dữ liệu của chương trình, nó được cấp phát tự động bởi các ứng dụng thời gian chạy.
- Hacker thực hiện tấn công bằng cách phá những dữ liệu này để làm ứng dụng ghi đè lên các dữ liệu của nội bộ (ví dụ như các con trỏ của danh sách liên kết).
Một số cách khai thác lỗi Buffer overflow khác
Khai thác vào các lỗ hổng phần mềm thông qua các ngôn ngữ lập trình (đa số các phần mềm hiện nay được viết bằng ngôn ngữ lập trình C).
Tấn công vào các website có lượng tương tác với người dùng khá, tốt nhưng lại không yêu cầu hay bắt buộc người dùng phải khai báo tên đăng nhập và mật khẩu đăng nhập tài khoản,…
Các biện pháp chống tràn bộ nhớ đệm
- Kĩ càng lựa chọn ngôn ngữ lập trình: ngôn ngữ lập trình đóng một vai trò vô cùng quan trọng và mang ảnh hưởng lớn trong việc phát sinh, có khả năng xảy ra lỗi tràn bộ đệm.
- Chỉ nên sử dụng các thư viện an toàn: thư viện được viết tốt, được test thử với các dạng dữ liệu trừu tượng mà các thư viện này tự động quản lý bộ nhớ.
- Để hạn chế nhất việc phát sinh lỗi Buffer overflow, chương trình cần phải đảm bảo diễn ra việc xác nhận đầu vào. Khi có bất kì một field, form đăng ký, các phương pháp khác yêu cầu nhập đầu vào thì đều mang những nguy cơ tiềm ẩn về lỗ hổng cho việc tấn công. Không chỉ là những yếu tố như HTTP header, field, giao diện XML mà tất cả các giá trị input ở bất kì khu vực nào của ứng dụng phần mềm thì các bạn cũng cần phải có sự kiểm tra kĩ lưỡng.
Thông qua bài viết này, BKHOST cung cấp đến bạn các thông tin về khái niệm của Buffer overflow là gì, những nguyên nhân gây ra và cách phòng trách để bị tấn công lỗi tràn bộ đệm. Mặt khác, nếu như có bất kỳ thắc mắc nào về hosting , đăng ký tên miền, mua SSL giá rẻ… thì hãy đón đọc trên blog của BKHOST nhé!