1. Trang chủ
  2. » Tất cả

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)

16 4 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 16
Dung lượng 329,11 KB

Nội dung

HỌ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) Sinh viên thực hiện Nguyễn Văn Lĩnh AT150631 Lê Gia Long AT1503[.]

HỌC VIỆN KỸ THUẬT MẬT Mà AN TỒ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) Sinh viên thực hiện: Nguyễn Văn Lĩnh Lê Gia Long Trần Hữu Long AT150631 AT150332 AT150434 Giảng viên: Vũ Thị Vân Học viện Kỹ Thuật Mật Mã Hà Nội, tháng năm 2021 Nhận xét giảng viên môn: LỜI MỞ ĐẦU: Trong tình hình nay, cơng vào môi trường mạng phát triển nhanh chóng, kể hình thức quy mơ hoạt động, có tính chất xun biên giới, gây ảnh hưởng nghiêm trọng đến hịa bình giới, ổn định trị, kinh tế nước, đặc biệt xâm phạm đến quyền lợi ích cá nhân, tổ chức. Những vụ công nhằm vào tất máy tính có mặt Internet, máy tính công ty lớn AT&T, IBM, trường đại học, quan nhà nước, tổ chức quan sự, nhà băng Một số vụ cơng có quy mơ khổng lồ (có tới 100.000 máy tính bị cơng ) Với cơng cụ tự động tìm lỗi hổng giúp nhiều cho nhà lập trình web khơng thể ngăn chặn tồn cơng nghệ web phát triển nhanh chóng (chủ yếu trọng đến yếu tố thẩm mĩ, yếu tố tốc độ ) nên dẫn đến nhiều khuyết điểm phát sinh Sự công không nằm khuổn khổ vài kĩ thuật phát hiện, mà linh động tăng lên tùy vào sai sót nhà quản trị hệ thống người lập trình Trong Buffer Overflow hay cịn gọi lỗi tràn đệm lỗi lập trình gây ngoại lệ truy cập nhớ máy tính chương trình bị kết thúc, người dùng có ý phá hoại, họ lợi dụng lỗi để phá vỡ an ninh hệ thống Để hiểu rõ lỗ hổng tràn đệm (Buffer Overflow) nguyên nhân dẫn đến lỗi tràn đệm tạo lỗ hỏng phần mềm sau nhóm em xin trình bày báo cáo đề tài “ Tìm hiểu lỗ hổng tràn đệm (Buffer Overflow)” Ở đề tài nhóm em vấn đề như: khái niệm lỗi tràn đệm, ví dụ, ngun nhân biện pháp phịng chống Cuối nhóm em tiến hành thực nghiệm công lỗ hổng tràn nhớ đệm LỜI MỞ ĐẦU: I GIỚI THIỆU: .5 Các khái niệm 1.1 Buffer: .5 1.2 Stack: 1.3 Thanh ghi: Buffer Overflow: .5 2.1 Khái niệm: 2.2 Ví dụ: 2.3 Nguyên nhân: 2.4 Tác hại: II KHAI THÁC BUFFER OVERFLOW: Các kiểu lỗi Buffer Overflow thường gặp .7 1.1 Stack overflow: 1.2 Format String: Các kiểu khai thác Buffer Overflow 2.1 Tổ chức nhớ: 2.2 Khai thác lỗi tràn đệm stack (Stack overflow) 2.3 Khai thác lỗi tràn đệm heap (Heap Overflow) 2.4 Một số cách khai thác khác .11 III Phòng chống Buffer Overflow .11 Cách phát Buffer Overflow 11 Các cách phòng chống Buffer Overflow .12 2.1 Lựa chọn ngôn ngữ lập trình: 12 2.2 Sử dụng thư viện an toàn: 12 2.3 Chống tràn đệm stack: 13 2.4 Bảo vệ không gian thực thi: 13 2.5 Ngẫu nhiên hóa sơ đồ khơng gian địa (Address space layout randomization ASLR): 13 2.6 Kiểm tra sâu gói tin (deep packet inspection - DPI): 13 IV Kết luận chung: .13 I GIỚI THIỆU: Các khái niệm 1.1 Buffer: Buffer hay đệm khối dành riêng nhớ máy tính, cho phép chứa nhiều phần tử kiểu liệu Với ngơn ngữ lập trình C, Buffer thường tổ chức dạng mảng từ nhớ 1.2 Stack: Stack hay ngăn xếp kiểu liệu trừu tượng dùng khoa học máy tính Một Stack đối tượng (Object) có tính chất: Đối tượng đưa vào Stack cuối lấy (LIFO – Last In First Out) Stack hỗ trợ thao tác quan trọng PUSH POP để thực việc thêm đối tượng vào Stack loại bỏ đối tượng khỏi Stack 1.3 Thanh ghi: Thanh ghi ô nhớ có dung lượng nhỏ nằm nhân CPU có tốc độ truy cập cao, sử dụng để tăng tốc độ xử lý lệnh chương trình máy tính cách cung cấp truy cập trực tiếp đến giá trị cần sử dụng Hầu hết máy tính đại hoạt động theo nguyên lý chuyển liệu từ nhớ sang ghi, sau việc tính tốn thực ghi kết chuyển lại nhớ Buffer Overflow: 2.1 Khái niệm: Buffer Overflow hay lỗi tràn đệm điều kiện bất thường tiến trình lưu trữ liệu vượt ngồi biên đệm có chiều dài cố định Kết liệu đè lên nhớ liền kề Dữ liệu bị ghi đè bao gồm đệm khác, biến liệu điều khiển luồng chảy chương trình (program flow control) Các lỗi tràn đệm làm cho tiến trình bị đổ vỡ cho kết sai Các lỗi kích hoạt liệu vào thiết kế đặc biệt để thực thi đoạn mã phá hoạt làm cho chương trình hoạt động khơng mong muốn Bằng cách lỗi tràn đệm gây nhiều lỗ hổng bảo mật phần mềm tạo sở cho nhiều thủ thuật khai thác 2.2 Ví dụ: Hình 1.1 Ví dụ Buffer Overflow Ở ví dụ hàm func khai báo hai biến buffa buffb có kích thước 10 Chương trình u cầu nhập tên lấy thơng tin nhập vào Sau thơng tin chép từ buffa sang buffb kết thúc Nếu người dùng nhập 10 kí tự chương trình bị sập Hàm strcpy chép liệu từ buffa sang buffb Nhưng buffb có kích thước nhỏ buffa nên nhập vào 10 kí tự lớn kí tự chép từ buffa sang buffb gây tượng tràn nhớ đệm 2.3 Nguyên nhân: Nguyên nhân gây lỗi Buffer Overflow chương trình, ứng dụng: - Phương thức kiểm tra biên (boundary) không thực đầy đủ bỏ qua - Các ngôn ngữ lập trình ngơn ngữ C, thân tiền ẩn lỗi mà hacker khai thác - Các phương thức strcat(), strcpy(), sprintf(), bcopy(), gets(), canf() ngơn ngữ C khai thác hàm khơng kiểm tra buffer cấp phát stack có kích thước lớn liệu copy vào buffer hay không 2.4 Tác hại: Tác hại lỗi Buffer Overflow: - Lỗi tràn đệm xảy ứng dụng cố gắng ghi liệu vượt khỏi phạm vi đệm (giới hạn cuối giới hạn đầu đệm) - Lỗi tràn đệm khiến ứng dụng ngừng hoạt động, gây liệu chí giúp kẻ cơng kiểm sốt hệ thống tạo hội cho kẻ công thực nhiều thủ thuật khai thác khác II KHAI THÁC BUFFER OVERFLOW: Các kiểu lỗi Buffer Overflow thường gặp 1.1 Stack overflow: Lỗi stack overflow xuất buffer tràn stack space hình thức cơng phổ biến lỗi tràn đệm Mục đích: - Ghi đè biến địa phương nằm gần nhớ đệm stack để thay đổi hành vi chương trình nhằm phục vụ ý đồ hacker - Ghi đè địa trả khung stack Khi hàm trả thực thi tiếp tục địa mà hacker rõ, thường đệm chứa liệu vào người dùng 1.2 Format String: Tràn đệm chuỗi định dạng (thường gọi “lỗ hổng định dạng chuỗi”) lỗi tràn đệm mức chuyên môn cao, tác hại tương tự công tràn đệm khác Về bản, lỗ hổng định dạng chuỗi tận dụng lợi kiểu liệu hỗn hợp kiểm sốt thơng tin chức định, chẳng hạn C/C++ printf Các kiểu khai thác Buffer Overflow Có kiểu khai thác Buffer Overflow chính: - Stack overflow - Heap overflow 2.1 Tổ chức nhớ: Mỗi tiến trình thực thi hệ điều hành cấp phát cho không gian nhớ ảo (logic) giống Không gian nhớ gồm vùng: text, data stack Trong đó: - Vùng Text vùng cố định, chứa mã lệnh thực thi (instruction) liệu đọc (real-only) Vùng chia sẻ tiến trình thực thi file chương trình tương ứng với phân đoạn text file thực thi Dữ liệu vùng đọc thao tác nhằm ghi lên vùng nhớ gây lỗi segmentation violation - Vùng Data chứa liệu khởi tạo chưa khởi tạo giá trị Các biến toàn cục biến tĩnh chứa vùng Data region = Data + BSS + Heap  Data: chứa biến toàn cục (Global Variable) biến tĩnh khởi tạo (Static Variable) khai báo người lập trình  BSS: chứa biến chưa khởi tạo khởi tạo không rõ ràng, phản hồi tới khu vực Data-BSS file thực thi (Executable file) Dữ liệu Data region đọc/ghi (Read-write)  Heap: Địa bắt đầu sau kết thúc BSS phát triển kích thước tăng dần trình thực thi Việc cấp phát thu dọn nhớ Heap thực qua lời gọi malloc(), realloc() free() Lời gọi hệ thống brk() sbrk() dùng để điều chỉnh kích cỡ (resize) Heap Vùng Heap chia sẻ tất thư viện chia sẻ module nạp động tiến trình - Vùng Stack vùng nhớ rành riêng thực thi chương trình dùng để chứa giá trị biến cục hàm, tham số gọi hàm giá trị trả Thao tác nhớ stack thao tác theo chế “ vào sau trước”LIFO (Last In First Out) với hai lệnh quan trọng PUSH POP Stack có ghi (ESP) gọi trỏ Stack (Stack pointer) trỏ tới đỉnh Stack Đáy Stack địa cố định Kích cỡ Stack điều chỉnh động nhân hệ điều hành (Kernel) thời gian thực thi (Run-time) CPU thực lệnh PUSH POP với Stack Stack gồm khung, gọi Stack Frame Các Stack Frame thêm vào gọi hàm (function) loại bỏ khỏi Stack trở từ hàm Một Stack Frame gồm: tham số hàm, biến địa phương hàm đó, liệu cần thiết để khôi phục khung Stack trước để quay hàm gọi (Previous Stack Frame) – Dữ liệu gồm: Giá trị trỏ lệnh vào thời điểm hàm gọi (SavedEIP) địa Stack Frame (Frame Pointer) hàm trước (SavedEBP) Hình 2.1 Tổ chức nhớ 2.2 Khai thác lỗi tràn đệm stack (Stack overflow)  Định nghĩa: Vùng nhớ ảo Stack chứa đối số hàm, địa lệnh trả về, địa stack frame trước biến khai báo cục hàm Việc tràn đệm xảy đệm đặt Stack bị tràn, dẫn đến việc thay đổi liệu vùng nhớ có địa cao hơn, cụ thể biến địa phương hàm địa lệnh trả (SavedEIP), từ thay đổi việc thực thi bình thường chương trình tạo điều kiện cho kẻ cơng “thao túng” phần mềm hệ điều hành Hình 2.2 Stack  Mục đích: Hacker thạo kỹ thuật có ý đồ xấu khai thác lỗi tràn đệm stack để thao túng chương trình theo cách sau: - Ghi đè biến địa phương nằm gần nhớ đệm stack để thay đổi hành vi chương trình nhằm tạo thuận lợi cho kẻ công - Ghi đè địa trả khung stack (stack frame) Khi hàm trả về, thực thi tiếp tục địa mà kẻ công rõ, thường đệm chứa liệu vào người dùng - Nếu địa phần liệu người dùng cung cấp, biết địa lưu ghi, ghi đè lên địa trả giá trị địa opcode mà opcode có tác dụng làm cho thực thi nhảy đến phần liệu người dùng Hình 2.3 Stack bị cơng Atacker  Ví dụ: Hình 2.4 Ví dụ Stack Buffer Overflow 2.3 Khai thác lỗi tràn đệm heap (Heap Overflow)  Định nghĩa Heap khu vực nhớ sử dụng ứng dụng cấp phát động thời gian chạy hàm, chẳng hạn malloc() Một tượng tràn đệm xảy khu vực liệu heap gọi tượng tràn heap khai thác kỹ thuật khác với lỗi tràn stack Bộ nhớ heap cấp phát động ứng dụng thời gian chạy thường chứa liệu chương trình Bởi Heap sử dụng để lưu trữ liệu, không sử dụng để lưu giá trị địa trả hàm Stack nên việc khai thác lỗi tràn đệm Heap khó khăn nhiều so với việc khai thác lỗi tràn đệm Stack Hình 2.4 Dung lượng heap đơn giản  Mục đích: - Trong cách cơng heap overflow, attacker làm tràn nhớ overwrite dynamic variables, dẫn đến hiệu ứng không mong muốn - Việc khai thác thực cách phá liệu theo cách đặc biệt để làm cho ứng dụng ghi đè lên cấu trúc liệu nội chẳng hạn trỏ danh sách liên kết Hình 2.6 Heap Overflow  Ví dụ: Hình 2.5 Ví dụ Heap Buffer Overflow 2.4 Một số cách khai thác khác - Khai thác dựa vào lỗ hổng phần mềm thông qua ngơn ngữ lập trình (phần mềm thường viết ngơn ngữ C) - Khai thác trang web có tương tác người dùng không ràng buộc liệu nhập trường hợp username, password, III Biện pháp phòng chống Buffer Overflow Cách phát Buffer Overflow Có cách để phát lỗi buffer overflow mà hacker sử dụng : - Nhìn vào source code: Hacker tìm kiếm string biến cục hàm chương trình, xem xét chúng có kiểm tra biên (boundary check) chưa Kiểm tra tiêu chuẩn hàm có liên quan đến phần chuỗi phần input, output - Nhập vào ứng dụng liệu lớn xem xét ứng dụng có biểu khơng bình thường khơng  Các bước xác định Buffer Overflow:  Bước 1: Chạy máy chủ web máy cục  Bước 2: Phát yêu cầu với thẻ dài thẻ kết thúc với “$$$$$”  Bước 3: Nếu máy chủ web bị treo, tìm kiếm bãi tập kết lõi “$$$$$” để tìm kiếm vị trí tràn  Bước 4: Sử dụng cơng cụ tự động codeBlocker, eEye Retina, …  Bước 5: Sử dụng phận phân tách trình gỡ rối  Bước 6: Sử dụng IDA-Proto để xây dựng lại vị trí bị khai thác Các cách phịng chống Buffer Overflow Việc xử lý đệm trước đọc hay thực thi làm thất bại khai thác lỗi tràn đệm không ngăn chặn cách tuyệt đối Việc xử lý bao gồm: - Chuyển từ chữ hoa thành chữ thường - Loại bỏ ký tự đặc biệt lọc xâu khơng chứa kí tự chữ số chữ Ngồi ra, cịn có kỹ thuật để tránh việc lọc xử lý này: Alphanumeric code: mã gồm toàn chữ số - Polumorphic code: mã đa hình - Seft-modifying code: mã tự sửa đổi - Tấn cơng kiểu return – to – libc Vì vậy, để tránh nguy bị khai thác lỗi buffer overflow cần sử dụng biện pháp phòng tránh hiệu 2.1 Lựa chọn ngơn ngữ lập trình: Ngơn ngữ lập trình có ảnh hưởng lớn xuất lỗi tràn đệm - Ngôn ngữ lập trình C C++ hai ngơn ngữ lập trình thơng dụng, hạn chế không kiểm tra việc truy cập ghi đè liệu thơng qua trỏ Cụ thể khơng kiểm tra liệu copy vào mảng có phù hợp với kích thước mảng hay khơng - Cyclone: biến thể C, giúp ngăn chặn lỗi tràn đệm việc gắn thơng tin kích thước mảng với 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 trỏ kiểm tra biên người dùng xác định - Nhiều ngôn ngữ lập trình khác cung cấp việc kiểm tra thời gian chạy Việc kiểm tra cung cấp ngoại lệ hay cảnh báo C hay C++ ghi đè liệu ví dụ Pythol, Ada, Lisp, - Ngồi ra, mơi trường Java hay Net địi hỏi kiểm tra biên tất mảng 2.2 Sử dụng thư viện an toàn: Sử dụng thư viện viết tốt kiểm thử dành cho kiểu liệu trừu tượng mà thư viện thực tự động việc quản lý nhớ, có kiểm tra biên làm giảm xuất ảnh hưởng tượng tràn đệm Các thư viện an tồn gồm có: The Better String Library, Arri Buffer API, Vstr 2.3 Chống tràn đệm stack: Stack – smashing protection kỹ thuật dùng để phát hiện tượng tràn đệm phổ biến Kỹ thuật kiểm tra xem stack bị sửa đổi hay chưa hàm trả Nếu stack bị sửa đổi, chương trình kết thúc lỗi segmentation fault.Chế độ Data Execution Prevention (cấm thực thi liệu) Microsoft bảo vệ trỏ không cho chúng bị ghi đè.Có thể bảo vệ stack cách phân tán stack thành hai phần, phần dành cho liệu phần dành cho bước trả hàm, phân chia dùng ngôn ngữ Forth 2.4 Bảo vệ không gian thực thi: Kỹ thuật ngăn chặn việc thực thi mã stack hay heap Hacker sử dụng tràn đệm để chèn đoạn mã tùy ý vào nhớ chương trình, với việc bảo vệ khơng gian thực thi cố gắng chạy đoạn mã gây ngoại lệ Một số CPU hỗ trợ tính có tin bit NX (No eXecute) bit XD (eXecute Disable) Khi kết hợp với phần mềm tính dùng để đánh dấu trang liệu (chẳng hạn trang chứa stack heap) đọc không thực 2.5 Ngẫu nhiên hóa sơ đồ khơng gian địa (Address space layout randomization ASLR): Là tính an ninh máy tính có liên quan đến việc xếp vùng liệu quan trọng (thường bao gồm nơi chứa mã thực thi vị trí thư viện, heap stack) cách ngẫu nhiên không gian địa tiến trình 2.6 Kiểm tra sâu gói tin (deep packet inspection - DPI): Có thể phát việc cố gắng khai thác lỗi tràn đệm từ xa từ biên giới mạng Các kỹ thuật có khả ngăn chặn gói tin có chứa chữ ký vụ công biết chứa chuỗi dài lệnh No- Operation (NOP – lệnh rỗng khơng làm gì) Việc rà qt gói tin khơng phải phương pháp hiệu ngăn chặn cơng biết có nhiều cách để mã hóa lệnh NOP IV Kết luận chung: Hiện nay, hầu hết máy tính bị cơng Buffer Overflow, việc tìm hiểu công Buffer Overflow cần thiết cho người quản trị, hay người dùng máy tính thơng thường Như nói trên, cơng Buffer Overflow thực cách dễ dàng, kẻ cơng khai thác liệu ngơn ngữ lập trình phổ biến Vì vậy, để phòng chống, doanh nghiệp, tổ chức, cá nhân ngồi việc sử dụng ngơn ngữ lập trình cao hay thư viện an tồn, phải thường xuyên tổ chức rà quét để tìm lỗ hổng, ngăn chặn kịp thời công tràn đệm Thực tế rằng, công tràn đệm thường xuyên xảy gây hậu nghiêm trọng cho hệ thống can thiệp trực tiếp vào mã nguồn Tuy báo cáo dạng công Buffer Overflow cách phòng chống với phát triển công nghệ, hacker không ngừng phát triển cách cơng vào hệ thống Vì vậy, báo cáo giúp người đọc phần biết đến cách công Buffer Overflow mức độ nguy hiểm công phương pháp Buffer Overflow Bài báo cáo sở phần giúp người đọc dựa vào để nghiên cứu sâu cơng từ đưa biện pháp phịng chống hiệu triệt để TÀI LIỆU THAM KHẢO: Nguyễn Thành Nam,Nghệ thuật tận dụng lỗi phần mềm Khoa học kĩ thuật, 2009 Buffer Overflow: https://www.slideshare.net/xoapit/buffer-overflow-60692537 Tìm hiểu lỗi tràn đệm (Buffer Overflow) – Ks Đào Hương Giang Buffer Overflow/ khai thác lỗi tràn đệm ứng dụng: https://congnghecit.com/de-tro-thanh-chuyen-gia-bao-mat-module17-tran-bo-nho-dembuffer-overflow.html?fbclid=IwAR3Bw6R8IXUxVYk7ZzuBVge9y-qG-g9WD_4u54_BDcvxRx3xlTEy3Qypbg Lỗi tràn đệm: https://mysunitsecurity.blogspot.com/2011/03/tran-bo-em-xuan-mung-misoft.html? fbclid=IwAR19ezoOdNk0ZdCHIkALrsHXruW2J2nOoX2Qg0rAap5a4syLiCxf35FRDko ... đệm (Buffer Overflow) nguyên nhân dẫn đến lỗi tràn đệm tạo lỗ hỏng phần mềm sau nhóm em xin trình bày báo cáo đề tài “ Tìm hiểu lỗ hổng tràn đệm (Buffer Overflow)? ?? Ở đề tài nhóm em vấn đề như: khái... thường đệm chứa liệu vào người dùng 1.2 Format String: Tràn đệm chuỗi định dạng (thường gọi ? ?lỗ hổng định dạng chuỗi”) lỗi tràn đệm mức chuyên môn cao, tác hại tương tự công tràn đệm khác Về bản, lỗ. .. gọi lỗi tràn đệm lỗi lập trình gây ngoại lệ truy cập nhớ máy tính chương trình bị kết thúc, người dùng có ý phá hoại, họ lợi dụng lỗi để phá vỡ an ninh hệ thống Để hiểu rõ lỗ hổng tràn đệm (Buffer

Ngày đăng: 24/02/2023, 21:26

TỪ KHÓA LIÊN QUAN

w