TÁC HẠITỔNG QUAN VỀ BUFFER OVERFLOW 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
Trang 1HỌC VIỆN KĨ THUẬT MẬT MÃ
AN TOÀN THÔNG TIN
BÁO CÁO BÀI TẬP LỚN
Đề tài:
TÌM HIỂU VỀ LỖ HỔNG TRÀN BỘ ĐỆM
(BUFFER OVERFLOW)
Trang 21 Nguyễn Văn Lĩnh – AT150631
THÀNH VIÊN CỦA NHÓM: NHÓM 14
Trang 3TỔNG QUAN VỀ BUFFER OVERFLOW
KHAI THÁC BUFFER OVERFLOW
Trang 4TỔNG QUAN VỀ
BUFFER OVERFLOW
Trang 5TỔNG QUAN VỀ BUFFER OVERFLOW
1 KHÁI NIỆM:
Buffer Overflow hay lỗi tràn bộ đệm 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)
Trang 6TỔNG QUAN VỀ BUFFER OVERFLOW
2 VÍ DỤ:
Trang 73 NGUYÊN NHÂN:
Phương thức kiểm tra biê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
TỔNG QUAN VỀ BUFFER OVERFLOW
Trang 84 TÁC HẠI
TỔNG QUAN VỀ BUFFER OVERFLOW
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
Trang 9KHAI THÁC
BUFFER OVERFLOW
Trang 10TỔ CHỨC BỘ NHỚ
- Mỗi tiến trình thực thi đều được hệ điều hành cấp phát cho một
không gian bộ nhớ ảo giống nhau Không gian nhớ này gồm 3
vùng:
Vùng Text
Vùng Data
Vùng Stack
Trang 11TỔ CHỨC BỘ NHỚ
Vùng Text là vùng cố định, chứa các mã lệnh thực thi (instruction) và dữ liệu chỉ đọc (real-only) Vùng này được chia sẻ giữa các tiến trình thực thi cùng một file chương trình và tương ứng với phân đoạn text của file thực thi Dữ liệu ở vùng này chỉ đọc mọi thao tác nhằm ghi lên vùng nhớ đều gây lỗi segmentation violation
Vùng Data chứa các dữ liệu đã được khởi tạo hoặc chưa khởi tạo giá trị Các biến toàn cục và biến tĩnh được chứa trong vùng này
Data region= Data + BSS + Heap
Vùng Stack là vùng nhớ được rành riêng khi thực thi chương trình dùng để chứa giá trị các biến cục bộ của hàm, tham số gọi hàm cũng như giá trị trả về Thao tác trên bộ nhớ stack được thao tác theo cơ chế “ vào sau ra trước”- LIFO (Last In First Out) với hai lệnh quan trọng nhất là PUSH và POP
Trang 12 Vùng bộ nhớ ảo stack chứa các đối số của hàm, địa chỉ lệnh trả về, địa chỉ stack
frame trước đó và các biến được khai báo cục bộ trong hàm
1 ĐỊNH NGHĨA:
Việc tràn bộ đệm xảy ra khi bộ đệm đặt trên Stack bị tràn, dẫn đến việc thay đổi dữ liệu ở các vùng nhớ có địa chỉ cao hơn, cụ
thể là các biến địa phương của hàm hoặc địa chỉ lệnh trả về (SavedEIP), từ đó thay đổi việc thực thi bình thường của chương
trình và tạo điều kiện cho kẻ tấn công “thao túng” phần mềm hoặc hệ điều hành
KHAI THÁC LỖI TRÀN BỘ ĐỆM TRÊN STACK
Trang 132 MỤC ĐÍCH:
Hacker thạo kỹ thuật và có ý đồ xấu có thể khai thác các lỗi tràn bộ đệm trên stack để thao túng chương trình theo nhiều 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 tạo thuận lợi cho kẻ tấn công
Ghi đè địa chỉ trả về trong một khung stack (stack frame) Khi hàm trả về, thực thi sẽ được tiếp tục tại địa chỉ mà kẻ tấn công đã chỉ rõ, thường là tại một bộ đệm chứa dữ liệu vào người dùng
Nếu không biết địa chỉ của phần dữ liệu người dùng cung cấp, nhưng biết rằng địa chỉ của nó được lưu trong một thanh ghi, thì có thể ghi đè lên địa chỉ trả về một giá trị địa chỉ của một opcode mà opcode này sẽ có tác dụng làm cho thực thi nhảy đến phần dữ liệu
KHAI THÁC LỖI TRÀN BỘ ĐỆM TRÊN STACK
Trang 14KHAI THÁC LỖI TRÀN BỘ ĐỆM TRÊN STACK
3 VÍ DỤ:
Trang 15KHAI THÁC LỖI TRÀN BỘ ĐỆM TRÊN HEAP
1 ĐỊNH NGHĨA
Heap là một khu vực của bộ nhớ được sử dụng bởi một ứng dụng và được cấp phát động tại thời gian chạy của các hàm,
chẳng hạn như malloc() Một hiện tượng tràn bộ đệm xảy ra trong khu vực dữ liệu heap được gọi là một hiện tượng tràn heap, nó xảy ra khi một đoạn bộ nhớ được cấp phát cho heap và dữ liệu bị ghi vào mà không có bất kì kiểm tra ràng buộc nào được thực hiện trên dữ liệu
Trang 16KHAI THÁC LỖI TRÀN BỘ ĐỆM TRÊN HEAP
Trang 17KHAI THÁC LỖI TRÀN BỘ ĐỆM TRÊN HEAP
3 VÍ DỤ:
Trang 18KHAI THÁC LỖI TRÀN BỘ ĐỆM TRÊN HEAP
3 VÍ DỤ:
Trang 19 Khai thác dựa vào các lỗ hổng phần mềm thông qua ngôn ngữ lập trình (phần mềm
thường được viết bằng ngôn ngữ C)
Khai thác các trang web có tương tác người dùng nhưng không ràng buộc dữ liệu nhập
như các trường hợp username, password,
MỘT SỐ CÁCH KHAI THÁC KHÁC
Trang 20MÔ PHỎNG KHAI THÁC BUFFER OVERFLOW
Trang 21BIỆN PHÁP
PHÒNG CHỐNG
Trang 22 Có 2 cách cơ bản để phát hiện các lỗi buffer overflow mà hacker có thể sử dụng :
Nhìn vào source code: Hacker tìm kiếm các string là các biến cục bộ trong các hàm của chương trình, xem xét chúng có được kiểm tra
biên (boundary check) chưa Kiểm tra tiêu chuẩn của các hàm có liên quan đến phần các chuỗi trong phần input, output
CÁCH PHÁT HIỆN BUFFER OVERFLOW
Trang 23 Xác định Bufer Overfow
CÁCH PHÁT HIỆN BUFFER OVERFLOW
1.Phát hiện tấn công từ bên ngoài
Phát hiện tràn bộ đệm bên ngoài xảy ra khi một cuộc tấn công sử dụng khai thác tràn bộ đệm đang chuyển tiếp đến một hệ thống từ hệ thống mạng Chẳng hạn như khi xử lí máy chủ web , trọng tải tấn công là thông tin nhị phân mà mục tiêu sẽ diễn giải dưới dạng mã và dữ liệu và thực thi như bất kỳ chương trình nào khác ( điều này giống như với các phần mềm độc hại , tải trọng khai thác này chứa các mẫu dữ liệu duy nhất và có thể phân biệt được để xác định sự hiện diện của cuộc tấn công Buffer overflow Các mẫu dữ liệu này tạo thành mẫu chứ
kí số mà chúng ta sử dụng để phát hiện các cuộc tấn công Nếu chúng ta có thể xác định lưu lượng mạng vận chuyển dữ liệu bằng các chữ ký này thì chúng ta có thể nhận ra một cuộc tấn công tràn bộ đệm
Bấm để thêm nội dung
Trang 252 Sử dụng các phần mềm xác định tấn công Buffer Overflow
Snort :
Snort là một hệ thống phát hiện xâm nhập mạng mã nguồn mở miễn phí và hệ thống ngăn chặn xâm nhập được tạo ra vào năm 1998 bởi Martin Roesch, người sáng lập
và cựu CTO của Sourcefire.Snort hiện được phát triển bởi Cisco, công ty đã mua Sourcefire vào năm 2013.
CÁCH PHÁT HIỆN BUFFER OVERFLOW
Xác định Bufer Overfow
Trang 27• Host-based Intrusion Detecction Systems ( Hệ thống phát hiện xâm nhập máy chủ )
• HIDS có thể được cài đặt trên nhiều dạng máy tính khác nhau cụ thể như các máy chủ, máy trạm, máy tính notebook HIDS cho phép bạn thực hiện một cách linh hoạt trong các đoạn mạng Lưu lượng đã gửi tới host được phân tích và chuyển qua host nếu chúng không tiềm ẩn mã nguy hiểm HIDS cụ thể hơn đối với các nền ứng dụng và phục vụ mạnh mẽ cho thị trường Windows trong thế giới máy tính, mặc dù vậy vẫn có các sản phẩm hoạt động trong nền ứng dụng UNIX và nhiều hệ điều hành khác
CÁCH PHÁT HIỆN BUFFER OVERFLOW
Xác định Bufer Overfow
Trang 28• 5.Sử dụng EMET
• EMET, viết tắt của Enhanced Mitigation Experienc Toolkit của Microsoft, là một trong những công cụ bảo mật tốt nhất và ít được biết đến nhất do Microsoft tạo ra EMET là một phần mềm đơn giản nhưng hiệu quả sử dụng các kỹ thuật giảm thiểu cụ thể như ngăn chặn thực hiện dữ liệu, lọc địa chỉ xuất bảng, xử lý ngoại lệ có cấu trúc ghi đè bảo vệ, vv để thêm các tính năng bảo mật bổ sung để bảo vệ ứng dụng đã cài đặt của bạn không bị khai thác.
CÁCH PHÁT HIỆN BUFFER OVERFLOW
Xác định Bufer Overfow
Trang 29 1 Lựa chọn ngôn ngữ lập trình.
2 Sử dụng các thư viện an toàn
3 Chống tràn bộ đệm trên stack.
4 Bảo vệ không gian thực thi
5 Ngẫu nhiên hóa sơ đồ không gian địa chỉ (Address space layout randomization ASLR)
CÁC CÁCH PHÒNG CHỐNG BUFFER OVERFLOW
Trang 30CÁC CÁCH PHÒNG CHỐNG BUFFER OVERFLOW
1 Lựa chọn ngôn ngữ lập trình.
• Nhiều ngôn ngữ lập trình khác cung cấp việc kiểm tra tại thời gian chạy Việc kiểm tra này cung cấp một ngoại lệ hay một cảnh báo khi C hay C+
Ngôn ngữ lập trình có một ảnh hưởng lớn đối với sự xuất hiện lỗi tràn bộ đệm.
• Ngôn ngữ lập trình C và C++ là hai ngôn ngữ lập trình thông dụng, nhưng hạn chế của nó là không kiểm tra việc truy cập hoặc ghi đè dữ liệu thông qua các con trỏ
• Cyclone: một biến thể của C, giúp ngăn chặn các lỗi tràn bộ đệm bằng việc gắn thông tin về kích thước mảng với các mảng
• Ngôn ngữ lập trình sử dụng nhiều kỹ thuật đa dạng để tránh gần hết việc sử dụng con trỏ và kiểm tra biên do người dùng xác định
Trang 31CÁC CÁCH PHÒNG CHỐNG BUFFER OVERFLOW
2 Sử dụng các thư viện an toàn.
Sử dụng các thư viện được viết tốt và đã được kiểm thử dành cho các kiểu dữ liệu trừu tượng mà các thư viện này thực
hiện tự động việc quản lý bộ nhớ, trong đó có kiểm tra biên có thể làm giảm sự xuất hiện và ảnh hưởng của các hiện tượng tràn bộ đệm Các thư viện an toàn gồm có: The Better String Library, Arri Buffer API, Vstr
Trang 32CÁC CÁCH PHÒNG CHỐNG BUFFER OVERFLOW
3 Chống tràn bộ đệm trên stack.
Stack – smashing protection là kỹ thuật dùng để phát hiện các hiện tượng tràn bộ đệm phổ biến nhất Kỹ thuật này kiểm tra xem stack đã bị sửa đổi hay chưa khi một hàm trả về Nếu stack đã bị sửa đổi, chương trình kết thúc bằng một lỗi segmentation fault.Chế độ Data Execution Prevention (cấm thực thi dữ liệu) của Microsoft bảo vệ các con trỏ và không cho chúng bị ghi đè.Có thể bảo vệ stack bằng cách phân tán stack thành hai phần, một phần dành cho dữ liệu và một phần dành cho các bước trả về hàm, sự phân chia này được dùng trong ngôn ngữ Forth
Trang 33CÁC CÁCH PHÒNG CHỐNG BUFFER OVERFLOW
4 Bảo vệ không gian thực thi.
Kỹ thuật này ngăn chặn việc thực thi mã tại stack hay heap Hacker có thể sử dụng tràn bộ đệm để chèn một đoạn mã tùy ý vào
bộ nhớ của chương trình, với việc bảo vệ không gian thực thi thì mọi cố gắng chạy đoạn mã đó sẽ gây ra một ngoại lệ Một số CPU hỗ trợ tính năng có tin bit NX (No eXecute) hoặc bit XD (eXecute Disable) Khi kết hợp với phần mềm các tính năng này có thể được dùng để đánh dấu những trang dữ liệu (chẳng hạn như các trang chứa stack và heap) là đọc được nhưng không thực hiện được
Trang 34CÁC CÁCH PHÒNG CHỐNG BUFFER OVERFLOW
5 Ngẫu nhiên hóa sơ đồ không gian địa chỉ (Address space layout randomization ASLR).
Là một tính năng an ninh máy tính có liên quan đến việc sắp xếp các vùng dữ liệu quan trọng (thường bao gồm nơi
chứa mã thực thi và vị trí các thư viện, heap và stack) một cách ngẫu nhiên trong không gian địa chỉ của một tiến trình
Trang 35CÁC CÁCH PHÒNG CHỐNG BUFFER OVERFLOW
6 Kiểm tra sâu đối với gói tin (deep packet inspection - DPI).
Có thể phát hiện việc cố gắng khai thác lỗi tràn bộ đệm từ xa ngay từ biên giới mạng Các kỹ thuật này có khả năng
ngăn chặn các gói tin có chứa chữ ký của một vụ tấn công đã biết hoặc chứa các chuỗi dài các lệnh No- Operation (NOP – lệnh rỗng không làm gì) Việc rà quét gói tin không phải một phương pháp hiệu quả vì nó chỉ có thể ngăn chặn các cuộc tấn công đã biết và có nhiều cách để mã hóa một lệnh NOP