Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 40 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
40
Dung lượng
1,54 MB
Nội dung
Cơ Sở An Toàn Thông Tin
4. Tìmhiểuvềlỗitrànbộđệm,
cách khaithác,cácphòngchống
(Demo)
Nhóm 5 :
Hoàng Hải Anh
Đoàn Mạnh Hùng
Trần Thu Lộc
Đỗ Văn Trường
LOGO
Tóm Tắt Nội Dung
Giới thiệu về buffer overflow.
1
Stack overflow.
2
Heap overflow.
3
Cách khai thác buffer overflow.
4
Cách phòng tránh buffer overflow.
5
LOGO
I.Tổng quan về buffer overflow
Định nghia: Lỗitrànbộ đệm là một điều kiện bất thường
khi một tiến trình lưu 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ácbộ nhớ liền kề. Dữ liệu bi 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 chương trình (program flow control).
Các lỗitrànbộ đệm có thề làm cho tiến trình bị đổ vỡ hoặc
cho ra kết quả sai. Cáclỗi này có thể được kích hoạt bởi
các dữ liệu vào được thiết kế đặc biệt để thưc thi các đoạn
mả phá hoại hoặc để làm cho chương trình hoạt động
không như mong đợi. Bằng cách đó cáclỗitrànbộ đệm gây
ra nhiều lổ hổng bảo mật đối với phần mềm và tạo cơ sở
cho nhiều thủ thuật khai thác.
LOGO
I.Tổng quan về buffer overflow
Trong các ngôn ngữ lập trình thì ngôn ngữ C dễ sinh ra các
lỗi tràn nhớ mà attacker có thể khai thác .
Trong ngôn ngữ C,các chuỗi (string ) hay các buffer được
thể hiện như sau:
Con trỏ (pointer) sẽ chỉ trỏ vào byte đầu tiên của chuỗi hay
buffer đó,và chúng ta xác định được kết điểm kết thúc khi
con trỏ trỏ đến 1 byte null ->không xác định độ dài của đối
tượng nhập vào ->có thể copy 1 buffer có độ dài lớn vào 1
buffer có độ dài nhỏ hơn ->gây tràn nhớ(buffer overflow)
LOGO
I.Tổng quan về buffer overflow
Thông thường có 2 cáchkhai thác lỗi buffer overflow mà
attacker có thể sử dụng:
Khai thác dựa vào các lỗ hỏng phần mền thông qua
ngôn ngữ lập trình(phần mền 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 vào như các trường
username ,password
LOGO
I.Tổng quan về buffer overflow
Nguyên nhân gây ra cáclỗi buffer overflow của các chương
trình/ứng dụng:
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ềm ẩn. cáclỗi mà hacker có thể khai thác.
Các phương thưc strcat(),strcpy(),sprintf(),bcopy(),
gets() ,và canf() trong ngôn ngữ C có thể được khai thác vì các
hàm này không kiểm tra xem 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 cào buffer hay
không?
Những chương trình /ứng dụng được lập trình không tốt khi
tạo ra nó (khả năng lập trình kém).
LOGO
I.Tổng quan về buffer overflow
Một lỗi buffer overflow xuất hiện khi buffer cố gắng
cấp phát 1 không gian lưu trữ có dữ liệu lớn hơn khả
năng lưu trữ của nó
Vd:
LOGO
I.Tổng quan về buffer overflow
Có hai kiểu buffer overflow chính:
Stack overflow
Heap over flow
Stack và heap là địa điểm lưu trữ cung cấp cho các biến
khi chạy. một chương trình .Biến được lưu trữ trong stack
hoặc heap cho đến khi chương trình có nhu cầu sử dụng.
Stack:là nơi lưu trữ tĩnh của không gian bộ nhớ.
Heap là nơi lưu trữ động của không gian bộ nhớ ,được sinh
ra khi chạy một chương trình.
LOGO
I.Tổng quan về buffer overflow
Thông thường có 2 cáchkhai thác lỗi buffer overflow mà
attacker có thể sử dụng:
Khai thác dựa vào các lỗ hỏng phần mền thông qua
ngôn ngữ lập trình(phần mền 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 vào như các trường
username ,password
LOGO
II.Stack overflow
Giới thiệu về stack:
Stack là một kiểu cấu trúc giữ liệu hoạt động theo co chế
LIFO (last in first out) được máy tính sử dụng để chuyền
các đối số vào các hàm để tham chiếu đến các biến cục bộ.
Stack sẽ lưu giữ tất cả các thông tin mà hàm cần
Stack được khởi tạo khi bắt đầu của một hàm và được
“phóng thích” khi hàm kết thúc.
[...]... IV .Các cáchkhai thác buffer overflow LOGO Có các kỹ thuật khác nhau cho việc khai thác lỗitrànbộ nhớ đệm, tùy theo kiến trúc máy tính, hệ điều hành và vùng bộ nhớ: 1 Khai thác lỗitrànbộ đệm trên stack 2 Khai thác lỗitrànbộ đệm trên heap IV .Các cáchkhai thác buffer overflow LOGO 1 Khai thác lỗitrànbộ đệm trên stack Một người dùng thạo kỹ thuật và có ý đồ xấu có thể khai thác cáclỗi tràn. .. LOGO IV .Các cáchkhai thác buffer overflow 2 Khai thác lỗitrànbộ đệm trên heap Một hiện tượng trànbộ đệ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 và có thể khai thác được bằng các kỹ thuật khác với cáclỗitràn stack Bộ nhớ heap được cấp phát động bởi các ứng dụng tại thời gian chạy và thường chứa dữ liệu của chương trình Việc khai thác được thực hiện bằng cách phá... phá dữ liệu này theo cáccách đặc biệt để làm cho ứng dụng ghi đè lên các cấu trúc dữ liệu nội bộ chẳng hạn các con trỏ của danh sách liên kết LOGO V .Cách phòng tránh buffer overflow Cản trở đối với các kĩ thuật khai thác lỗi buffer overflow: Việc xử lý bộ đệm trước khi đọc hay thực thi nó có thể làm thất bại các cố gắng khai thác lỗi trànbộ đệm nhưng vẫn không ngăn chặn được một cách tuyệt đối Việc... khai thác các lỗi trànbộ đệm trên stack để thao túng chương trình theo một trong cáccách sau: 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 LOGO IV .Các cáchkhai thác buffer overflow 1 Khai thác lỗi trànbộ đệm trên stack Ghi đè địa chỉ trả về trong một khung stack (stack frame) Khi hàm trả về, thực thi sẽ được... ra các môi trường của Java hay NET cũng đòi hỏi kiểm tra biên đối với tất cà các mảng LOGO V .Cách phòng tránh 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ộ. .. trànbộ đệm Các thư viện an toàn gồm có The Better String Library, Arri Buffer API và Vstr LOGO V .Cách phòng tránh buffer overflow 3 Chốngtrànbộ đệm trên stack Stack-smashing protection là kỹ thuật dùng để phát hiện các hiện tượng trànbộ đệ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... là tại một bộ đệm chứa dữ liệu vào của 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ị là đị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 người dùng LOGO IV .Các cáchkhai thác buffer overflow 1 Khai thác lỗi trànbộ đệm trên... buffer overflow chúng ta cần sử dụng các biện pháp phòng tránh hiệu quả hơn LOGO V .Cách phòng tránh buffer overflow 1.Lựa chọn ngôn ngữ lập trình 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ànbộ đệ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ỏ Cụ thể nó không kiểm... liệu thông qua các con trỏ Cụ thể nó không kiểm tra dữ liệu copy vào một mảng có phù hợp kích thước của mnảg hay không? LOGO V .Cách phòng tránh buffer overflow Cyclone, một biến thể của C, giúp ngăn chặn cáclỗitrànbộ đệ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 D 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... trả về trong khung stack (stack frame) 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 II.Stack overflow LOGO II.Stack overflow LOGO III.Heap overflow LOGO Các biến được cấp phát tự động trong hàm,như là malloc() được tạo ra trong heap Trong cách tấn công heap overflow,attacker làm trànbộ nhớ sẽ có thể overwrite các