Buffer overflow là gì

  -  

Tràn bộ đệm có lẽ là một dạng lỗ hổng bảo mật phần mềm được biết đến nhiều nhất. Hầu hết các nhà phát triển này đều biết lỗ hổng là gì nhưng các cuộc tấn công tràn bộ đệm đều vẫn còn đang xảy ra trên các ứng dụng kể cả những ứng dụng mới được phát triển lẫn những ứng dụng đã được hình thành từ lâu.

Bạn đang xem: Buffer overflow là gì


Đang xem: Buffer overflow là gì

Tràn bộ đệm là gì ?

Lỗi tràn bộ đệm hay còn gọi là ( Buffer Overflow ) mô tả một sự kiện bất thường của chương trình khi tiến trình lưu trữ dữ liệu vượt ra ngoài biên của một bộ nhớ đệm được cấp phát có chiều dài nhất định. Kết quả dẫn đến dữ liệu có thể bị ghi đè 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à các thanh ghi điều khiển luồng thứ tự của cả chương trình. Tác hại của lỗi tràn bộ đệm có thể gây ra có thể làm hỏng dữ liệu, làm hỏng chương trình hoặc gây ra việc thực thi mã độc.

Tràn bộ đệm có thể ảnh hưởng tới mọi loại phần mềm, chúng thường là các kết quả của đầu vào không đúng định dạng hoặc không phân bổ đủ không gian lưu trữ cho bộ đệm. Một ví dụ đơn giản dưới đây, phân bổ bộ nhớ cho thông tin đăng nhập được thiết kế để mong đợi tên người dùng và mật khẩu được nhâp vào là 8 byte. Vì vậy nếu ai đó cố tình nhập vào 10 byte chương trình có thể ghi vượt quá dữ liệu qua ranh giới bộ đệm.

*
*
*
*
*
*
Kỹ Thuật Tấn Công Buffer Overflow Là Gì ? Buffer Overflow Là Gì 10

Trong stack có 3 thanh ghi mà ta sẽ phải hiểu thật kỹ để nắm được cơ chế hoạt động của stack:

EBP ( Extended Base Pointer ): Lưu địa chỉ của vị trí mà dữ liệu đầu tiên được nhập vào stack vì vậy nó luôn được trỏ tới nền của frame hiện tạiESP ( Extended Stack pointer ): Lưu địa chỉ tiếp theo phải được nhập vào stack nên nó luôn trỏ tới đỉnh của stackEIP ( Extended Instruction Pointer ): Lưu địa chỉ tiếp theo của lệnh phải được thực thi.

Quá trình gọi hàm được chia làm ba bước như sau:

Khởi đầu (Prologue): lưu lại các trạng thái stack, cấp phát vùng nhớGọi hàm (call): đẩy EIP vào stack và nhảy tới địa chỉ của hàmKết thúc (Epilogue): khôi phục lại trạng thái như trước khi gọi hàm

Ví dụ: add (3, 4)

Chương trình sẽ push 3 và 4 vào stack

Thông thường các biến cục bộ và tham số được truy xuất qua độ dời của vị trí (offset) so với EBP. Trong đó:

EBP-n: Local variablesEBP+n: Parameters

Qua đó giả sử chúng ta có thể ghi đè lên con trỏ EIP với dữ liệu trỏ đến địa chỉ của một vùng chứa mã thực thi mà chúng ta muốn thì điều gì sẽ xảy ra?Một ví dụ về tràn bộ nhớ đệm trên stack và cách khai thác nó

Một ví dụ về tràn bộ nhớ đệm trên stack và cách khai thác nó

Phần mền tồn tại lỗ hổng tràn bộ đệm mình sử dụng ở đây là Easy RM to MP3 Converter. Mọi người có thể tải nó về tại đây, Sau khi cài đặt xong:

Đây là một phần mềm cho phép convert từ Realplayer streaming clips sang Mp3 bằng cách load và chọn một file mình muốn.

Xem thêm: Uzumaki Naruto - ( Đồng Nhân Naruto) Cùng Nhau Chiến Đấu Nhé!

Tham khảo chi tiết ở đây vì chamichi.com.vn không cho viết dài quá :(.

Kết quả mình đã chèn được đoạn code hiển thị dialog box windows có nội dung là Hello World.

Hậu quả khi tồn tại lỗ hổng tràn bộ đệmCode injectionDDOS hệ thốngLeo thang đặc quyền….Cách khắc phục lỗ hổng tràn bộ đệm

Đối với một số ngôn ngữ lập trình như C:

Khai báo không gian bộ nhớ lớn hơn nhiều lần so với dữ liệu được nhập vào.Xử lý các xâu an toàn. Tránh các lỗi thường gặp khi xử lý xâu như: Unbounded string copies, Null-termination errors, Write outside array bounds, Off-by-one errors, Improper data sanitizationCác hàm nên sử dụng:

Hay đối với các hệ điều hành cũng đều cung cấp cơ chế bảo vệ bộ nhớ:

Address space randomization (ASLR): Di chuyển ngẫu nhiên xung quanh các vị trí không gian địa chỉ của các vùng dữ liệu. Thông thường các cuộc tấn công tràn bộ đệm cần biết được nơi lưu trữ của mã thực thi và việc ngẫu nhiên không gian địa chỉ làm cho điều này hầu như không thể xảy ra.Data execution prevention: Gắn cờ ngẫu nhiên vào các khu vực nhất định của bộ nhớ là không được thực thi hoặc không thể thực thi, điều này ngăn chặn việc chạy mã thực thi trong các vùng bị cấm.Structured exception handler overwrite protection (SEHOP): Giúp ngăn chặn mã độc tấn công từ Structured Exception Handling (SEH) — một hệ thống tích hợp để quản lý các ngoại lệ phần cứng và phần mềm. Do đó ngăn chặn kẻ tấn công có thể sử dụng kỹ thuật khai thác ghi đè SHE. Ở cấp độ hàm, ghi đè SHE đạt được bằng cách sử dụng tràn bộ đệm dựa trên stack để ghi đè lên bản ghi đăng kí ngoại lệ được lưu trữ trên luồng của ngăn xếp.

Xem thêm: Phim Song Long Truyền Kỳ Tập 39, Song Long Truyền Kỳ Tập 39

Đây là một số ghi chép của mình về vấn đề tràn bộ nhớ đệm. Xin gửi lời cảm ơn tới người Thầy môn Lập trình an toàn đã truyền cảm hứng cho mình về những kiến thức bổ ích này.