Tấn công buffer overflow

     

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: Tấn công buffer overflow

Đ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ì 6

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

Tấn công tràn bộ đệm được chia làm hai loại:

Stack-based buffer overflows: Hay còn gọi là tràn bộ đệm trên stack là một trong những phương thức tấn công phổ biến hơn. Nó tận dụng bộ nhớ ngăn xếp chỉ tồn tại trong thời gian thực hiện của hàm.Heap-based attacks: Hay còn gọi là tràn bộ đệm trên vùng heap thường khó thực hiện hơn, liên quan đến việc làm lấp đầy không gian bộ nhớ được phân bổ cho một chương trình ngoài bộ nhớ được sử dụng cho các hoạt động chạy hiện tại.Tổ chức bộ nhớ

Trước tiên chúng ta xem xét lại một chút về cách tổ chức của bộ nhớ. Tổ chức của bộ nhớ bao gồm các phân đoạn chính là code, data, .bss, heap, stack:

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

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

Phân đoạn text/code: Lưu trữ mã lệnh đã được biên dịch của chương trình, dữ liệu ở vùng này chỉ đọc và có kích thước cố định ( không thay đổi ) vì vậy mọi thao tác ghi lên vùng dữ liệu này đều gây lỗi segmentation violation.Phân đoạn data: Lưu trữ các dữ liệu chung có khởi tạo giá trị như biến cục bộ và biến toàn cục nên kích thước cố định.Phân đoạn .bss: Lưu trữ dữ liệu chung nhưng chưa được khởi tạo giá trị như biến cục bộ và biến toàn cục.Phân đoạn heap: Được sử dụng cho mục đích cấp phát bộ nhớ động từ thấp đến cao. Bộ nhớ heap sẽ không tự động được giải phóng.Phân đoạn stack: Được sử dụng để lưu trữ các tham số của hàm và các biến cục bộ trong đó bao gồm cả địa chỉ trả về trong các hàm được gọi. Theo kiến trúc vi xử lý intel, stack được cấp phát bộ nhớ từ cao xuống thấp. Dữ liệu trong các nhóm được gọi là stack frame và hoạt động theo cơ chế LIFO (Last In First Out). Khi gọi hàm, khởi tạo hàm và quay về từ chương trình con sẽ khiến stack thay đổi.

Stack frame là một vùng của stack được thiết lập danh cho các giá trị được đưa vào stack. Địa chỉ trả về của frame được lưu trữ trong thanh ghi EBP ( đối với vi xử lý Intel ). Ví dụ sau minh họa cho stack frame, giả sử đây là một luồng gọi hàm của chương trình:

*
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: Hướng Dẫn Cách Hack Like Fb Bằng Điện Thoại Android, Iphone, Hướng Dẫn Cách Tăng Like Facebook Trên Điện Thoại

Tham khảo chi tiết ở đây vì jdomain.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.

Đâ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.


Chuyên mục: Domain Hosting