Tiểu luận ngành công nghệ thông tin nghiên cứu và xây dựng phương pháp chống tấn công tràn stack

20 1 0
Tiểu luận ngành công nghệ thông tin  nghiên cứu và xây dựng phương pháp chống tấn công tràn stack

Đ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

NHẬN XÉT CỦA GIÁO VIÊN Cô ng hệ ng g ôn th tin MỤC LỤC NHẬN XÉT CỦA GIÁO VIÊN MỤC LỤC LỜI NÓI ĐẦU Tổng quan lỗi tràn đệm Error! Bookmark not defined Cô Kỹ thuật công lỗi tràn đệm ng 2.1 Ví dụ ng 2.2 Tràn nhớ đệm stack 10 Phương pháp phịng chống cơng tràn đệm 13 hệ 3.1 Lựa chọn ngôn ngữ lập trình 13 ôn th 3.2 Sử dụng thư viện an toàn 15 3.3 Chống tràn nhớ đệm stack 16 g 3.4 Bảo vệ không gian thực thi 16 tin 3.5 Ngẫu nhiên hóa sơ đồ không gian địa 17 3.6 Kiểm tra sâu gói tin 17 Kết Luận 19 LỜI NÓI ĐẦU Trong lĩnh vực an ninh máy tính lập trình, lỗi tràn nhớ đệm hay gọi tắt lỗi tràn đệm lỗi lập trình gây ngoại lệ truy nhậ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 Cô Năm 1988, cố máy tính thu hút ý toàn thể cộng đồng sử dụng mạng internet, đời sâu internet (Internet Worm) ng Con sâu làm 6000 máy chủ phải ngưng hoạt động lỗi ng biết đến “tràn đệm” (buffer overflow) Cho đến nay, lỗi tràn đệm tiếp tục tìm thấy nhiều phần mềm nhiều hệ điều hành khác hệ Đó thực nguy nghiêm trọng, vấn đề tồn lâu ôn th cần quan tâm cách nghiêm túc Đa phần lỗi tràn đệm dẫn đến việc chiếm quyền điều khiển toàn g hệ thống nên thực lỗi chết người Tràn đệm xảy tin nhiều hệ điều hành, đặc biệt UNIX Windows, nhiều ứng dụng khác web, mail, ftp, dns, telnet, ssh, database, Tháng 8-2001, sâu máy tính Code Red khiến giới thiệt hại hàng tỉ USD bắt nguồn từ lỗ hổng tràn đệm phần mềm máy chủ Microsoft Internet Information Server (IIS) Vậy tràn đệm? Tại xảy tràn đệm? Tại tràn đệm tạo lỗ hổng bảo mật? Làm để ngăn chặn lỗi tràn đệm? Đó lý chúng em nghiên cứu đề tài Nghiên cứu xây dựng phương pháp chống công tràn stack Trong q trình thực đề tài nhóm em khơng khỏi mắc phải thiếu sót Mong thầy đóng góp ý kiến để chúng em hồn thiện tốt đề tài sau Em xin chân thành cảm ơn! Sinh viên thực hiện: Vũ Hoàng Đạt Lê Văn Phương Cô Lê Thị Linh ng hệ ng g ôn th tin CHƯƠNG I TỔNG QUAN VỀ LỖI TRÀN BỘ ĐỆM 1.1 Tổ chức nhớ cho tiến trình Cơ ng hệ ng • kernel mode g ơn • user mode th Bộ nhớ phân thành phần là: Mặc định GB không gian nhớ ảo cung cấp cho user tin mode, vùng địa 0x00000000 – 0x7fffffff, phần lại, 0x80000000 – 0xBfffffff dành cho kernel mode 1.2 Tổ chức nhớ tiến trình Mỗi tiến trình thực thi hệ điều hành cấp cho không gian nhớ ảo (logic) giống Không gian nhớ gồm vùng: • Vùng text • Vùng data • Vùng stack Ý nghĩa vùng sau: Vùng text vùng cố định, chứa mã lệnh thực thi (instruction) liệu đọc (read-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 Vùng Cô data tương ứng với phân đoạn data-bss file thực thi Vùng stack vùng nhớ dành riêng thực thi chương trình ng 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ế ng "vào sau trước" - LIFO (Last In, First Out) với hai lệnh quan trọng hệ PUSH POP Trong phạm vi viết này, tập trung tìm hiểu vùng stack g ơn th tin 1.3 Lỗi tràn đệm Bộ đệm (buffer): vùng nhỏ RAM, lưu trữ mã thực thi, liệu chương trình thực thi CPU Một lỗi tràn nhớ đệm hay gọi tắt lỗi tràn đệm lỗi lập trình gây ngoại lệ truy nhậ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 Lỗi tràn đệm điều kiện bất thường tiến trình lưu liệu vượt ngồi biên nhớ đệm có chiều dài cố định Kết Cơ liệu đè lên vị trí nhớ liền kề Dữ liệu bị ghi đè bao gồm ng nhớ đệm khác, biến liệu điều khiển luồng chạy chương trình (program flow control) ng Các lỗi tràn đệm làm cho tiến trình đổ vỡ cho hệ 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ại để làm cho chương trình hoạt th động cách khơng mong đợi Bằng cách đó, lỗi tràn đệm gây ôn nhiều lỗ hổng bảo mật (vulnerability) phần mềm tạo sở cho nhiều g thủ thuật khai thác (exploit) Việc kiểm tra biên (bounds checking) đầy đủ tin lập trình viên trình biên dịch ngăn chặn lỗi tràn đệm Ví dụ chương trình thực thi gồm vùng mã thực thi (program instructions), vùng lưu trữ liệu số (buffer storing integer data), vùng lưu trữ liệu chuỗi (buffer storing character data), địa quay chương trình (return address pointer) Với chương trình bình thường sau thực thi xong, dựa vào địa quay về, chương trình trả lại quyền điều khiển cho chương trình gọi Người cơng làm tràn đệm (ví dụ: vùng lưu trữ liệu chuỗi) làm cho địa quay bị chép đè địa đoạn mã phá hoại Kết quả, thay trả quyền điều khiển cho chương trình gọi thực thi đoạn mã chương trình phá hoại Cô ng hệ ng g ôn th tin Chương II Kỹ thuật công lỗi tràn đệm Một lỗi tràn nhớ đệm xảy liệu viết vào nhớ đệm, mà không kiểm tra biên đầy đủ nên ghi đè lên vùng nhớ liền kề làm hỏng giá trị liệu địa nhớ kề với vùng nhớ đệm Hiện tượng hay xảy chép xâu ký tự từ nhớ đệm sang vùng nhớ đệm khác 2.1 Ví dụ Cơ Trong ví dụ sau, chương trình định nghĩa hai phần tử liệu kề ng nhớ: A nhớ đệm xâu ký tự dài byte B số nguyên kích thước byte Ban đầu, A chứa toàn byte giá trị 0, B ng chứa giá trị Các ký tự có kích thước byte A A A hệ 0 0 A A B B th A A 0 A 0 ôn g Bây giờ, chương trình ghi xâu ký tự "excessive" vào đệm A, theo xâu ký tự đè lên giá trị B: tin sau byte để đánh dấu kết thúc xâu Vì khơng kiểm tra độ dài xâu, nên A A A A A A A A B 'e' 'x' 'c' 'e' 's' 's' 'i' B 'v' 'e' Tuy lập trình viên khơng có ý định sửa đổi B, giá trị B bị thay số tạo nên từ phần cuối xâu ký tự Trong ví dụ này, hệ thống big-endian sử dụng mã ASCII, ký tự "e" byte trở thành số 25856 Nếu B phần tử liệu lại số biến chương trình định nghĩa, việc viết xâu ký tự dài vượt phần cuối B gây lỗi chẳng hạn segmentation fault (lỗi phân đoạn) tiến trình kết thúc 2.2 Tràn nhớ đệm stack Bên cạnh việc sửa đổi biến không liên quan, tượng tràn đệm thường bị lợi dụng (khai thác) tin tặc để làm cho chương trình chạy thực thi đoạn mã tùy ý cung cấp Các kỹ thuật để tin Cơ tặc chiếm quyền điều khiển tiến trình tùy theo vùng nhớ mà đệm ng đặt Ví dụ, vùng nhớ stack, nơi liệu tạm thời "đẩy" xuống "đỉnh" ngăn xếp (push), sau "nhấc ra" (pop) để đọc giá ng trị biến Thông thường, hàm (function) bắt đầu thực thi, phần hệ tử liệu tạm thời (các biến địa phương) đẩy vào, chương trình truy nhập đến liệu suốt thời gian chạy hàm Khơng có ơn th tượng tràn stack (stack overflow) mà cịn có tràn heap (heap overflow) Trong ví dụ sau, "X" liệu nằm stack chương trình g bắt đầu thực thi; sau chương trình gọi hàm "Y", hàm đòi hỏi lượng tin nhỏ nhớ cho riêng mình; sau "Y" gọi hàm "Z", "Z" địi hỏi nhớ đệm lớn: Z Z Z Z Z Z Y X X X : / / / Nếu hàm "Z" gây tràn nhớ đệm, ghi đè liệu thuộc hàm Y hay chương trình chính: Z Z Z Z Z Z Y X X X 10 / / Điều đặc biệt nghiêm trọng hầu hết hệ thống Ngoài liệu thường, nhớ stack lưu giữ địa trả về, nghĩa vị trí phần chương trình chạy trước hàm gọi Khi hàm kết thúc, vùng nhớ tạm thời lấy khỏi stack, thực thi trao lại cho địa trả Như vậy, địa trả bị ghi đè lỗi tràn đệm, trỏ tới vị trí khác Trong trường hợp tượng tràn đệm khơng có chủ ý ví dụ đầu tiên, chắn vị trí Cơ vị trí khơng hợp lệ, khơng chứa lện ng Một người dùng 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: ng • Ghi đè biến địa phương nằm gần nhớ đệm stack để thay đổi hệ 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ả th • ơn 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 g tin 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 Cụ thể, địa đoạn mã độc hại muốn chạy ghi ghi R, lệnh nhảy đến vị trí chứa opcode cho lệnh jump R, call R (hay lệnh tương tự với hiệu ứng nhảy đến địa chi ghi R) làm cho đoạn mã phần liệu người dùng thực thi Có thể tìm thấy địa opcode hay byte thích hợp nhớ thư viện liên kết động (DLL) hay file thực thi Tuy nhiên, địa opcode thường khơng chứa ký 11 tự null (hay byte 0) nào, địa opcode khác tùy theo ứng dụng phiên hệ điều hành Dự án Metasploit sở liệu chứa opcode thích hợp, liệt kê opcode hệ điều hành Microsoft Windows Cô ng hệ ng g ôn th tin 12 Chương III Phương pháp phịng chống cơng tràn đệm Để chống lại công theo kiểu tràn đệm, người lập trình phải viết đọan mã để bảo vệ chương trình ứng dụng Đối với hệ thống chạy hệ điều hành Windows có lựa chọn để chống lại kiểu cơng là: Cơ • DEP – Data Execution Prevention: không thực thi thị nằm vùng liệu ng • ASLR – Address Space Layout Randomization: máy tính khởi ng động khởi động lại, ASLR gán vùng nhớ cách ngẫu nhiên cho tiến trình hệ thống, tập tin DLL Có tổng cộng 256 vùng hệ khác gán Điều gây khó khăn cho người công việc định vị lợi dụng chương trình thực thi th Để phịng chống cơng tràn đệm có hiệu nên kết hợp DEP ôn ASLR g Nhiều kỹ thuật đa dạng với nhiều ưu nhược điểm sử dụng để tin phát ngăn chặn tượng tràn đệm Cách đáng tin cậy để tránh ngăn chặn tràn đệm sử dụng bảo vệ tự động mức ngơn ngữ lập trình Tuy nhiên, loại bảo vệ áp dụng cho mã thừa kế (legacy code), nhiều ràng buộc kỹ thuật, kinh doanh hay văn hóa lại địi hỏi sử dụng ngơn ngữ khơng an tồn Các mục sau mô tả lựa chọn cài đặt có 3.1 Lựa chọn ngơn ngữ lập trình Lựa chọn ngơn ngữ lập trình có ảnh hưởng lớn xuất lỗi tràn đệm Năm 2006, C C++ nằm số ngơn ngữ 13 lập trình thơng dụng nhất, với lượng khổng lồ phần mềm viết hai ngôn ngữ C C++ không cung cấp sẵn chế chống lại việc truy nhập ghi đè liệu lên phần nhớ thông qua trỏ bất hợp lệ; cụ thể, hai ngôn ngữ không kiểm tra xem liệu ghi vào mảng (cài đặt nhớ đệm) có nằm biên mảng hay khơng Tuy nhiên, cần lưu ý thư viện chuẩn C++, thư viện khuôn mẫu chuẩn - STL, cung cấp nhiều cách an toàn để lưu trữ liệu đệm, lập trình viên C tạo sử dụng tiện ích tương tự Cũng tính khác C hay C++, Cơ lập trình viên phải tự xác định lựa chọn xem họ có muốn chấp nhận hạn ng chế tốc độ chương trình để thu lại lợi ích tiềm (độ an tồn chương trình) hay khơng ng Một số biến thể C, chẳng hạn Cyclone, giúp ngăn chặn hệ lỗi tràn đệm việc chẳng hạn gắn thơng tin kích thước mảng với 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 th hết việc sử dụng trỏ kiểm tra biên người dùng xác định ơn Nhiều ngơn ngữ lập trình khác cung cấp việc kiểm tra thời gian chạy, g việc kiểm tra gửi cảnh báo ngoại lệ C C++ ghi đè tin liệu Ví dụ ngôn ngữ đa dạng, từ Python tới Ada, từ Lisp tới Modula-2, từ Smalltalk tới OCaml Các môi trường bytecode Java NET đòi hỏi kiểm tra biên tất mảng Gần tất ngôn ngữ thông dịch bảo vệ chương trình trước tượng tràn đệm cách thông báo trạng thái lỗi định rõ (well-defined error) Thông thường, ngôn ngữ cung cấp đủ thông tin kiểu để thực kiểm tra biên, ngơn ngữ thường cho phép lựa chọn kích hoạt hay tắt chế độ Việc phân tích tĩnh (static analysis) loại nhiều kiểm tra kiểu biên động, cài đặt tồi trường hợp rối rắm giảm đáng kể hiệu Các kỹ sư phần mềm phải cẩn thận cân nhắc phí tổn cho an tồn 14 hiệu định sử dụng ngơn ngữ cấu cho trình biên dịch 3.2 Sử dụng thư viện an toàn Vấn đề tràn đệm thường gặp C C++ ngơn ngữ để lộ chi tiết biểu diễn mức thấp nhớ đệm với vai trò chỗ chứa cho kiểu liệu Do đó, phải tránh tràn đệm cách gìn giữ tính đắn cao cho phần mã chương trình thực việc quản lý đệm Việc sử dụng thư viện viết tốt kiểm thử, dành cho Cô kiểu liệu trừu tượng mà thư viện thực tự động việc quản lý ng nhớ, có kiểm tra biên, làm giảm xuất ảnh hưởng tượng tràn đệm Trong ngôn ngữ này, xâu ký tự mảng hai ng kiểu liệu mà tượng tràn đệm thường xảy ra; đó, hệ thư viện ngăn chặn lỗi tràn đệm kiểu liệu cung cấp phần che chắn cần thiết Dù vậy, việc sử dụng thư viện an th tồn cách khơng dẫn đến tràn đệm số lỗ hổng khác; ôn tất nhiên, lỗi thư viện lỗ hổng Các cài đặt thư viện "an toàn" gồm The Better String Library, Arri Buffer API g Vstr Thư viện C hệ điều hành OpenBSD cung cấp hàm hữu ích tin strlcpy strlcat, hàm nhiều hạn chế nhiều so với cài đặt thư viện an toàn đầy đủ Tháng năm 2006, Báo cáo kỹ thuật số 24731 hội đồng tiêu chuẩn C công bố; báo cáo mô tả tập hàm dựa hàm vào liệu hàm xử lý xâu ký tự thư viện C chuẩn, hàm bổ sung tham số kích thước đệm 15 3.3 Chống tràn nhớ đệ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 Các hệ thống sử dụng kỹ thuật gồm có Libsafe, StackGuard vá lỗi (patch) ProPolice gcc Chế độ Data Execution Prevention (cấm thực thi liệu) Microsoft bảo vệ thẳng trỏ tới SEH Exception Handler, khơng cho chúng bị ghi Cơ đè ng Có thể bảo vệ stack cách phân tách stack thành hai phần, ng phần dành cho liệu phần cho bước trả hàm Sự phân chia dùng ngôn ngữ lập trình Forth, khơng phải hệ định thiết kế dựa theo tiêu chí an tồn Nhưng dù khơng th phải giải pháp hoàn chỉnh vấn đề tràn đệm, liệu nhạy cảm địa trả bị ghi đè g ơn 3.4 Bảo vệ không gian thực thi tin Bảo vệ không gian thực thi cách tiếp cận việc chống tràn đệm Kỹ thuật ngăn chặn việc thực thi mã stack hay heap Một kẻ cơng sử dụng tràn đệm để chèn đoạn mã tùy ý vào nhớ chương trình, với bảo vệ khơng gian thực thi, cố gắng chạy đoạn mã gây ngoại lệ (exception) Một số CPU hỗ trợ tính có tên bit NX ("No eXecute" - "Không thực thi") bit XD ("eXecute Disabled" - "chế độ thực thi bị tắt" ) Khi kết hợp với phần mềm, tính dùng để đánh dấu 16 trang liệu (chẳng hạn trang chứa stack heap) đọc không thực thi Một số hệ điều hành Unix (chẳng hạn OpenBSD, Mac OS X) có kèm theo tính bảo vệ khơng gian thực thi (ví dụ W^X) Các biến thể Microsoft Windows hỗ trợ bảo vệ không gian thực thi, với tên gọi Data Execution Prevention (ngăn chặn thực thi liệu) 3.5 Ngẫu nhiên hóa sơ đồ khơng gian địa Cơ Ngẫu nhiên hóa sơ đồ khơng gian địa (Address space layout ng randomization - ASLR) tính an ninh máy tính có liên quan đến việc xếp vị trí vùng liệu quan trọng (thường bao gồm nơi chứa mã ng thực thi vị trí thư viện, heap stack) cách ngẫu nhiên không hệ gian địa tiến trình th Việc ngẫu nhiên hóa địa nhớ ảo mà hàm biến nằm ôn làm cho việc khai thác lỗi tràn đệm trở nên khó khăn hơn, khơng phải khơng thể Nó cịn buộc kẻ cơng phải điều chỉnh khai g thác cho hợp với hệ thống cụ thể, điều làm thất bại cố gắng tin sâu Internet Một phương pháp tương tự hiệu hơn, kỹ thuật rebase tiến trình thư viện không gian địa ảo 3.6 Kiểm tra sâu gói tin Biện pháp kiểm tra sâu gói tin (deep packet inspection - DPI) phát cố gắng từ xa để khai thác lỗi tràn đệm từ biên giới mạng Các kỹ thuật có khả 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 - 17 lệnh rỗng khơng làm gì), chuỗi thường sử dụng vị trí nội dung quan trọng (payload) cơng có biến đổi Việc rà 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 Các kẻ cơng sử dụng mã alphanumeric, metamorphic, shellcode tự sửa để tránh bị phát việc rà gói tin Cơ ng hệ ng g ơn th tin 18 KẾT LUẬN Trong thời đại công nghệ thông tin phát triển vũ bão, vấn đề an toàn thông tin trở nên cấp thiết Lỗi tràn đệm hiểm họa gây an tồn cho hệ thống Do đó, nghiên cứu cách phịng chống công tràn đệm phải trọng để đảm bảo hệ thống an toàn Đến nay, lỗi tràn đệm tiếp tục tìm thấy nhiều phần mềm nhiều hệ điều hành khác Đó thực nguy nghiêm trọng, Cô vấn đề tồn lâu cần quan tâm cách nghiêm túc.Qua đề tài này, chúng em tìm hiểucách phịng chống cơng này, kỹ thuật ng chống công tràn đệm hệ ng g ôn th tin 19 TÀI LIỆU THAM KHẢO http://vi.wikipedia.org/wiki/lỗi_tràn_bộ_đệm/ http://timtailieu.vn/tai-lieu/do-an-tim-hieu-ky-thuat-tan-cong-thong-qua-loi-tran-bodem-tren-window-7330/ http://luanvan.co/luan-van/tim-hieu-ve-loi-tran-bo-dem-cach-khai-thac-cac-phongchong-demo-51752/ Cô ng hệ ng g ôn th tin 20

Ngày đăng: 02/10/2023, 14:56

Tài liệu cùng người dùng

Tài liệu liên quan