1. Trang chủ
  2. » Giáo Dục - Đào Tạo

THỰC tập cơ sở CHUYÊN NGÀNH AN TOÀN PHẦN mềm NGHIÊN cứu lỗ HỔNG TRÀN bộ đệm (BUFFER OVERFLOW VULNERABILITY LAB)

27 26 2

Đ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 27
Dung lượng 1,61 MB

Nội dung

BAN CƠ YẾU CHÍNH PHỦ HỌC VIỆN KỸ THUẬT MẬT MÃ KHOA AN TỒN THƠNG TIN -II - THỰC TẬP CƠ SỞ CHUYÊN NGÀNH AN TOÀN PHẦN MỀM NGHIÊN CỨU LỖ HỔNG TRÀN BỘ ĐỆM (BUFFER OVERFLOW VULNERABILITY LAB) …………………………………………………………………………………………… Giảng viên hướng dẫn:  PGS.TS Lương Thế Dũng Sinh viên thực hiện: Võ Minh Sang Lớp: AT15H Mã số sinh viên: AT150741 Nhóm: 13 Khóa: 2018-2023 TP.Hồ Chí Minh, tháng 11 năm 2021 download by : skknchat@gmail.com BAN CƠ YẾU CHÍNH PHỦ HỌC VIỆN KỸ THUẬT MẬT MÃ KHOA: AN TỒN THƠNG TIN  THỰC TẬP CƠ SỞ CHUYÊN NGÀNH AN TOÀN PHẦN MỀM NGHIÊN CỨU LỖ HỔNG TRÀN BỘ ĐỆM (BUFFER OVERFLOW VULNERABILITY LAB) Nhận xét giáo viên hướng dẫn: Điểm báo cáo: Xác nhận giáo viên hướng dẫn: download by : skknchat@gmail.com LỜI CẢM ƠN Chúng em xin chân thành cảm ơn PGS.TS Lương Thế Dũng–giảng viên trực tiếp hướng dẫn, bảo, tạo điều kiện thuận lợi giúp đỡ chúng em trình thực đề tài Để có thành ngày hơm nay, ngồi nỗ lực khơng ngừng nghỉ thành viên nhóm phần khơng nhỏ đóng góp nên thành cơng nhờ quan tâm, bảo, giúp đỡ thầy cô, anh chị khóa bạn bè xung quanh Tuy có nhiều cố gắng nỗ lực thành viên để hoàn thiện đề tài, chắn đề tài “NGHIÊN CỨU LỖ HỔNG TRÀN BỘ ĐỆM (BUFFER OVERFLOW VULNERABILITY LAB)” chúng em nhiều thiếu sót Chúng em mong nhận góp ý từ thầy giáo để nhóm em hoàn thiện tốt đề tài nghiên cứu sau Chúng em xin chân thành cảm ơn! download by : skknchat@gmail.com LỜI MỞ ĐẦU Ngày nay, với xu hướng chuyển đổi số mạnh mẽ doanh nghiệp, công ty, tổ chức dẫn đến việc tạo phần mềm quản lý, điều hành làm việc thiết yếu Bên cạnh đó, ảnh hưởng đại dịch COVID-19 thúc đẩy nhanh việc chuyển đổi số Để đảm bảo an toàn cho phần mềm tạo vận hành tránh bị kẻ xấu cơng gây thiệt hại nghiêm trọng Đó lý để chúng em chọn chuyên đề Software Security đặc biệt nghiên cứu lỗ hổng Buffer Overflow download by : skknchat@gmail.com MỤC LỤC LỜI CẢM ƠN LỜI MỞ ĐẦU MỤC LỤC CHƯƠNG I : TỔNG QUAN VỀ LỖ HỔNG TRÀN BỘ ĐỆM (BUFFER OVERFLOW) Giới thiệu Buffer Overflow .6 Mục đích lab .6 CHƯƠNG II : Cài đặt môi trường trước thực 1) Cài đặt công cụ Oracle VM Virtual Box 2) Cài đặt môi trường ảo Ubuntu v16.04 SEED Labs 10 CHƯƠNG III: Phân tích thực BÀI LAB 16  Bật/tắt số chế ban đầu .16 Address Space Randomization 16 Task 1: Chạy chương trình Shellcode 17 Task 2: Khai thác chương trình có lỗ hổng 17 Task 3: Đánh bại biện pháp đối phó Dash .21 Task 4: Đánh bại chế Address Randomization 23 Task 5: Bật chế độ bảo vệ ngăn xếp (StackGuard Protection) 24 Task 6: Bật chế độ ngăn xếp không thực thi (Non-executable Stack Protection) 25 CHƯƠNG IV: KẾT LUẬN 26 TÀI LIỆU THAM KHẢO 27 download by : skknchat@gmail.com CHƯƠNG I : TỔNG QUAN VỀ LỖ HỔNG TRÀN BỘ ĐỆM (BUFFER OVERFLOW) Giới thiệu Buffer Overflow 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 Tràn đệm định nghĩa điều kiện chương trình cố gắng ghi liệu vượt ngồi ranh giới đệm có độ dài cố định cấp phát trước Lỗ hổng bị người dùng độc hại lợi dụng để thay đổi kiểm sốt luồng chương trình, chí thực thi đoạn mã tùy ý Lỗ hổng phát sinh trộn lẫn lưu trữ cho liệu (ví dụ đệm) lưu trữ cho điều khiển (ví dụ: địa trả về): phần liệu bị tràn ảnh hưởng đến luồng điều khiển chương trình, tràn thay đổi địa trả Ví dụ: username password khởi tạo với nhớ lưu trữ byte Đối với phiên đầu vào lên đến 10 byte dư byte dẫn đến xảy lỗi tràn đệm Mục tiêu học tập lab để sinh viên có kinh nghiệm trực tiếp lỗ hổng tràn đệm cách đưa học lỗ hổng từ lớp học vào thực hành Mục đích lab Trong phịng thí nghiệm này, sinh viên cung cấp chương trình có lỗ hổng tràn đệm; nhiệm vụ phát triển kế hoạch để khai thác lỗ hổng cuối giành đặc quyền root Ngồi cơng, sinh viên hướng dẫn thực số phương án bảo vệ triển khai hệ điều hành để chống lại công tràn đệm Sinh viên cần đánh giá xem chương trình có hoạt động hay khơng giải thích Phịng thí nghiệm bao gồm chủ đề sau: • Lỗ hổng cơng tràn đệm • Bố cục ngăn xếp lệnh gọi hàm • Địa ngẫu nhiên, ngăn xếp khơng thực thi StackGuard • Mã số • Cuộc cơng quay trở lại-libc, nhằm mục đích đánh bại biện pháp đối phó ngăn xếp khơng thực thi được, đề cập phịng thí nghiệm riêng biệt download by : skknchat@gmail.com CHƯƠNG II : CÀI ĐẶT MÔI TRƯỜNG TRƯỚC KHI THỰC HIỆN 1) Cài đặt công cụ Oracle VM Virtual Box đặt Truy cập đường link: https://www.virtualbox.org/wiki/Downloads Để tải cài Sau tải chạy chương trình để cài đặt vào máy Chọn Next download by : skknchat@gmail.com Tiếp tục , chọn Next cuối chọn Install download by : skknchat@gmail.com hồn tất Chọn Finish để kết thúc q trình cài đặt Bên giao diện sau cài đặt download by : skknchat@gmail.com 2) Cài đặt môi trường ảo Ubuntu v16.04 SEED Labs Truy cập vào trang web : https://seedsecuritylabs.org/labsetup.html Chọn version 16.04 hình bên tải theo đường dẫn đính kèm Ở em chọn đường dẫn “Google Drive” Sau tải xong giải nén file rar 10 download by : skknchat@gmail.com Sau ấn Create Chọn Start để tiến hành cài đặt bên 13 download by : skknchat@gmail.com Q trình cài đặt hồn tất Lưu ý : Khi đóng máy Ubuntu ảo Các bạn nên chọn “Save the machine state” Để lưu lại làm 14 download by : skknchat@gmail.com Hình bên file chương sau mà thực hành 15 download by : skknchat@gmail.com CHƯƠNG III: PHÂN TÍCH VÀ THỰC HIỆN BÀI LAB  Bật/tắt số chế ban đầu Trước thực công , cần phải vơ hiệu hóa số chế để đơn giản hóa vấn đề Address Space Randomization : Ubuntu số hệ thống dựa Linux khác sử dụng ngẫu nhiên hóa khơng gian địa để ngẫu nhiên hóa địa bắt đầu heap stack Điều làm cho việc đốn địa xác trở nên khó khăn; đốn địa bước quan trọng công tràn đệm Trong phịng thí nghiệm này, cần vơ hiệu hóa điều lệnh Configuring /bin/sh: Thay đổi default shell từ “dash” thành “zsh” để tránh biện pháp đối phó thực “bash” cho chương trình SET-UID The StackGuard Protection Scheme: Trình biên dịch GCC thực chế bảo mật gọi Stack Guard để ngăn chặn lỗi tràn đệm Khi có bảo vệ này, công tràn đệm không hoạt động.Chúng ta tắt tính bảo vệ trình biên dịch cách sử dụng tùy chọn -fno-stack-protectionor Non-Executable Stack: Ở chế cung cấp tham số “-z execstack” Khi cung cấp tham số này, ngăn xếp trở nên thực thi được, sau cho phép mã thực thi ngăn xếp Theo mặc định, ngăn xếp thực thi hệ điều hành biết liệu ngăn xếp có thực thi hay khơng tập 16 download by : skknchat@gmail.com bit nhị phân hệ thống Bit trình biên dịch thao tác trình biên dịch gcc đặt ngăn xếp thực thi (Non-Executable Stack) theo mặc định Task 1: Chạy chương trình Shellcode Ở , có tệp “call_shellcode.c” tải từ trang web Chúng ta biên dịch chương trình với tham số “-z execstack” điều đảm bảo ngăn xếp thực thi để chạy mã shell không xảy lỗi phân đoạn Chương trình sau biên dịch có tên “call_shellcode” làm nỗi bật màu xanh Tiếp theo, thực thi chương trình biên dịch thấy, nhập shell tài khoản (được biểu thị $) Và khơng có lỗi, điều chứng tỏ chương trình chạy thành cơng có quyền truy cập vào ‘/ bin / sh’ Một điểm cần lưu ý khơng phải chương trình gốc SET-UID, tài khoản gốc, nên thiết bị đầu cuối thuộc tài khoản gốc Tiếp đến, biên dịch chương trình có lỗ hổng ‘stack.c’ cho thực vơ hiệu hóa chế Bảo vệ StackGuard làm cho ngăn xếp thực thi cách chuyển tham số tương ứng vào lệnh Ngồi ra, chương trình biên dịch, lưu trữ tệp ‘stack’, sau tạo thành chương trình gốc SET UID Điều nhìn thấy ảnh chụp hình sau, tệp đánh dấu màu xanh có nghĩa tệp thực thi tệp đánh dấu màu đỏ có nghĩa chương trình SET-UID: Task 2: Khai thác chương trình có lỗ hổng Ở phần việc này, sử dụng chương trình gốc SET-UID để chiếm quyền truy cập chương trình shell 17 download by : skknchat@gmail.com Vì tắt chế Address Space Randomization , biết chương trình lưu trữ nhớ bên ngăn xếp Để tìm địa chương trình chạy nhớ , cần phải biên dịch chương trình chế độ Debug Debugging giúp cho tiếp địa ghi ebp offset , để xây dựng buffer payload phù hợp điều giúp cho chạy chương trình muốn Trước hết , cần phải biên dịch chương trình chế độ debug tham số “-g” , vô hiệu hóa chế StackGuard cho phép chế Executable Stack Sau , chạy chương trình gdb hình bên dưới: Tiếp theo , đạt breakpoint hàm bof()và thực thi chương trình : Chương trình dừng nơi đặt breakpoint 18 download by : skknchat@gmail.com Chúng ta quan tâm đến giá trị khung stack hàm nhằm mục đích xây dựng badfile sau Chúng ta xem giả trị buffer ebp xem khác ebp giá trị khởi đầu buffer để tìm địa trả (address return) hình bên dưới: Ở đây, thấy trỏ khung 0xbfffea18 địa trả phải lưu trữ 0xbfffea18 + địa chuyển đến 0xbfffea18 + Ngồi ra, để địa trả trỏ tới mã chúng ta, cần biết vị trí để lưu trữ địa trả đầu vào địa lưu trữ trường địa trả ngăn xếp Điều tìm cách tìm khác biệt địa trả địa bắt đầu đệm, đầu vào chép vào đệm từ đầu Có thể thấy khác biệt ebp khởi động đệm đầu cách bố trí ngăn xếp, biết địa trả cao byte nơi ebp trỏ đến Do đó, khoảng cách địa trả điểm bắt đầu đệm 36, đó, địa trả nên lưu trữ badfile với độ lệch 36 Tiếp theo , chỉnh sửa tệp “exploit.py” để nhập hàm trả 19 download by : skknchat@gmail.com Vì code thực thi chế độ debug, ngăn xếp sâu so với thực thi bình thường, gdb đẩy liệu bổ sung vào ngăn xếp Do đó, thêm giá trị lớn nhiều vào giá trị ebp làm địa trả Ở ta nhập BFFFEA18 + 120 = BFFFEA90, làm địa trả khung ngăn xếp, mã Ta cẩn thận để khơng có số địa trả hàng Địa trả lưu trữ vị trí bù tính tốn trước đầu vào Tiếp theo, trước tiên làm cho chương trình python thực thi chạy tệp tin exploit.py để tạo “badfile” Tiếp theo, chạy chương trình SET-UID dễ bị công sử dụng tệp xấu làm đầu vào chép nội dung tệp ngăn xếp, dẫn đến tràn đệm Dấu # có đặc quyền root thành cơng cách nhập vào root shell ID người dùng hiệu coi ID người dùng gốc (0): Do đó, thực thành cơng công tràn đệm giành đặc quyền root 20 download by : skknchat@gmail.com Bây giờ, id người dùng (uid) không id người dùng hiệu dụng (euid) Do đó, bước tiếp theo, chạy chương trình để chuyển id người dùng thực thành root Chúng ta biên dịch chương trình sau để thay đổi uid tài khoản thành 0, uid tài khoản gốc: Như thấy, biên dịch chương trình lưu trữ tệp có tên makeitroot Xin lưu ý khơng phải chương trình gốc SET-UID Tiếp theo, chạy chương trình thiết bị đầu cuối gốc để đặt uid (từ chương trình) Vì có đặc quyền root công tràn đệm thành công, thay đổi id người dùng thành mà khơng gặp cố Có thể thấy thay đổi này: Task 3: Đánh bại biện pháp đối phó Dash Đầu tiên thay đổi liên kết biểu tưởng /bin/sh trỏ tới /bin/dash trở lại Tạo tệp “dash_shell_test.c” hướng dẫn lab 21 download by : skknchat@gmail.com hình Biên dịch tệp “dash_shell_test.c” trở thành chương trình root SET-UID bên Khi chạy chương trình , thấy nhập account shell riêng user id chương trình seed Sau xóa // phía trước dịng lệnh setuid(0) dash_shell_code.c, nhận được: Như thấy, nhập root shell kiểm tra user ID, root Vì vậy, thấy hai lần có quyền truy cập vào shell, lần đầu tiên, khơng phải root chương trình bash loại bỏ đặc quyền chương trình SET-UID id người dùng hiệu id người dùng thực tế khơng giống Do đó, thực thi chương trình với đặc quyền bình thường khơng phải root Nhưng cách có lệnh setuid chương trình, tạo khác biệt id người dùng thực tế đặt thành root id người dùng hiệu chương trình SET-UID dấu gạch ngang không giảm đặc quyền đây, trình bao gốc chạy Do đó, lệnh đánh bại biện pháp đối phó dấu gạch ngang cách đặt uid thành thư mục gốc cho chương trình gốc SET-UID, cung cấp quyền truy cập thiết bị đầu cuối thư mục gốc Tiếp theo, cố gắng thực công tràn đệm, giống cách làm nhiệm vụ 2, biện pháp đối phó / bin / dash cho chương trình SET-UID diện liên kết tượng trưng từ /bin/sh đến /bin/dash Chúng ta thêm mã hợp ngữ để thực lệnh gọi hệ thống setuid đầu shellcode exploit.py, 22 download by : skknchat@gmail.com trước gọi thực thi () Khi chạy tệp khai thác này, xây dựng tệp xấu với mã cập nhật thực thi Ngăn xếp, sau chạy chương trình gốc SET UID ngăn xếp Kết cho thấy truy cập vào thiết bị đầu cuối root kiểm tra id, thấy id người dùng (uid) root Do đó, cơng thực thành cơng vượt qua biện pháp đối phó dash cách sử dụng lệnh gọi hệ thống setuid () Điều nhìn thấy kết sau: Task 4: Đánh bại chế Address Randomization Đầu tiên , bật lại chế Address Randomization cho stack heap với giá trị Và công Task xuất lỗi phân đoạn Điều cho thấy công không thành công Tiếp theo chạy shellscript cung cấp để chạy chương trình dễ bị cơng vịng lặp Về , cách công brute-force để truy cập địa với địa mà đặt badfile Tập lệnh shell lữu trữ tệp bruteattack tạo thành cơng chương trình root SET-UID 23 download by : skknchat@gmail.com Kết đầu hiển thị thời gian thực nỗ lực thực công với Address Randomize phương pháp tiếp cận Brute-Force Nó dẫn đến tràn đệm thành cơng sau khoảng thời gian Giải thích cho điều là, trước phương pháp đối phó Address Space Randomize bị tắt, khung ngăn xếp ln điểm nhớ cho chương trình mục đích đơn giản Điều giúp dễ dàng đốn tìm điểm bù, khác biệt địa trả điểm bắt đầu đệm, để đặt mã độc hại địa trả tương ứng chương trình Tuy nhiên, bật biện pháp đối phó ngẫu nhiên hóa bố cục khơng gian địa chỉ, điểm bắt đầu khung ngăn xếp ngẫu nhiên hóa khác Vì vậy, khơng thể tìm xác điểm bắt đầu điểm bù để thực tràn Lựa chọn lại thử nhiều thời gian tốt, trừ nhấn vào địa mà định mã dễ bị công Khi chạy chương trình brute force, chương trình chạy chạm vào địa cho phép chương trình shell chạy Như thấy, nhận thiết bị đầu cuối gốc (vì chương trình gốc SET-UID), biểu thị # Task 5: Bật chế độ bảo vệ ngăn xếp (StackGuard Protection) Đầu tiên, vơ hiệu hóa biện pháp đối phó ngẫu nhiên hóa địa Sau đó, biên dịch chương trình ‘stack.c’ với StackGuard Protection (bằng cách không cung cấp -fno-stack-protectionor) ngăn xếp thực thi (bằng cách cung cấp -z execstack) Sau đó, chuyển đổi chương trình biên dịch thành chương trình gốc SETUID Sau nhiệm vụ sau: 24 download by : skknchat@gmail.com Tiếp theo, chạy chương trình stack dễ bị cơng thấy nỗ lực làm tràn đệm không thành công lỗi sau trình bị hủy bỏ: Điều chứng tỏ với chế StackGuard Protection, cơng tràn đệm phát ngăn chặn Task 6: Bật chế độ ngăn xếp khơng thực thi (Non-executable Stack Protection) Việc ngẫu nhiên hóa địa bị tắt từ bước trước Sau đó, chúng tơi biên dịch chương trình với StackGuard Protection bị tắt (do -fno-stack-protectionor) ngăn xếp thực thi (bằng cách thêm -z noexecstack) Sau đó, chúng tơi làm cho chương trình trở thành chương trình gốc SET-UID Khi chạy chương trình biên dịch này, gặp lỗi lỗi phân đoạn Điều cho thấy công tràn đệm không thành công chương trình bị lỗi: Lỗi rõ ràng ngăn xếp thực thi Khi thực công tràn đệm, cố gắng chạy chương trình dễ dàng cung cấp cho quyền truy cập root độc hại Nhưng chương trình thường lưu trữ ngăn xếp cố gắng nhập địa trả trỏ đến chương trình độc hại Bố cục nhớ ngăn xếp lưu trữ biến đối số cục bộ, với địa trả giá trị ebp Nhưng tất giá trị khơng có u cầu thực thi khơng cần phải có ngăn xếp thực thi Do đó, cách loại bỏ tính thực thi này, chương trình bình thường chạy cũ mà khơng có tác dụng phụ, mã độc coi liệu khơng phải mã Nó khơng coi chương trình mà liệu đọc Do đó, cơng chúng tơi không thành công không giống trước cơng chúng tơi thành cơng ngăn xếp thực thi 25 download by : skknchat@gmail.com CHƯƠNG IV: KẾT LUẬN Trong suốt khoảng thời gian thực tập sở chuyên ngành khoảng thời gian dài để em tiếp thu học kinh nghiệm thực tế Được trực tiếp tham gia, nghiên cứu vào tập, em thấy học hỏi nhiều điều, quãng thời gian bổ ích cho em, để học hỏi vận dụng học vào thực tế Với thời gian nghiên cứu không nhiều em hi vọng, với đề tài mình, em đưa ý kiến, giáp pháp ứng dụng có ích cho đề tài Software Security đặc biệt lỗ hổng tràn đệm 26 download by : skknchat@gmail.com TÀI LIỆU THAM KHẢO Du, W (n.d.) Buffer-Overflow Vulnerability Lab Retrieved https://seedsecuritylabs.org/Labs_16.04/Software/Buffer_Overflow/ from firmianay (n.d.) buffer-overflow-vulnerability-lab.md Retrieved from https://github.com/firmianay/Life-long-Learner/blob/master/SEED-labs/bufferoverflow-vulnerability-lab.md li-xin-yi (n.d.) Buffer-Overflow Retrieved from https://github.com/li-xin-yi/seedlab/tree/master/Buffer-Overflow MeghaJakhotia (n.d.) Buffer Overflow Retrieved from https://github.com/MeghaJakhotia/ComputerSecurityAttacks/tree/master/Buffer %20Overflow 27 download by : skknchat@gmail.com ...BAN CƠ YẾU CHÍNH PHỦ HỌC VIỆN KỸ THUẬT MẬT MÃ KHOA: AN TỒN THƠNG TIN  THỰC TẬP CƠ SỞ CHUYÊN NGÀNH AN TOÀN PHẦN MỀM NGHIÊN CỨU LỖ HỔNG TRÀN BỘ ĐỆM (BUFFER OVERFLOW VULNERABILITY LAB) Nhận... đề tài “NGHIÊN CỨU LỖ HỔNG TRÀN BỘ ĐỆM (BUFFER OVERFLOW VULNERABILITY LAB)? ?? chúng em cịn nhiều thiếu sót Chúng em mong nhận góp ý từ thầy giáo để nhóm em hồn thiện tốt đề tài nghiên cứu sau Chúng... 27 download by : skknchat@gmail.com CHƯƠNG I : TỔNG QUAN VỀ LỖ HỔNG TRÀN BỘ ĐỆM (BUFFER OVERFLOW) Giới thiệu Buffer Overflow Tràn đệm lỗi lập trình gây ngoại lệ truy nhập nhớ máy tính chương

Ngày đăng: 28/03/2022, 15:37

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w