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

(TIỂU LUẬN) THỰC tập cơ sở CHUYÊN NGHÀNH AN TOÀN PHẦN mềm NGHIÊN cứu THỰC HÀNH CÁCH tấn CÔNG RETURN TO LIBC (RETURN TO LIBC ATTACK LAB)

35 2 0

Đ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

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  THỰC TẬP CƠ SỞ CHUYÊN NGHÀNH AN TOÀN PHẦN MỀM NGHIÊN CỨU THỰC HÀNH CÁCH TẤN CÔNG RETURN-TO-LIBC (RETURN-TO-LIBC ATTACK LAB) …………………………………………………………………………………………… Giảng viên hướng dẫn: PGS.TS Lương Thế Dũng Sinh viên thực hiện: Lớp: Mã số sinh viên: Nhóm: Khóó́a: TP Hồ Chí Minh, tháng 11 năm 2021 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Ở CHUN NGÀNH AN TOÀN PHẦN MỀM NGHIÊN CỨU THỰC HÀNH CÁCH TẤN CÔNG RETURN-TO-LIBC (RETURN-TO-LIBC ATTACK 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: 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 THỰC HÀNH CÁCH TẤN CÔNG RETURN-TO-LIBC (RETURN-TO-LIBC ATTACK 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 cóó́ thể hồn thiện tốt đề tài nghiên cứu sau Chúng em xin chân thành cảm ơn! 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 cách công Return-to-Libc MỤC LỤC LỜI CẢM ƠN LỜI MỞ ĐẦU MỤC LỤC CHƯƠNG I: TỔNG QUAN VỀ RETURN-TO-LIBC ATTACK LAB 1.1 Tổng quan mục tiêu, giới thiệu nhiệm vụ lab 1.2 Tổng quan lý thuyết .6 CHƯƠNG II: CÀI ĐẶT MÔI TRƯỜNG THỰC HIỆN 1.1 Chuẩn bị cho Lab 1.2 Cài đặt môi trường ảo Ubuntu v16.04 SEED Labs 10 CHƯƠNG III: TIẾN HÀNH THỰC HIỆN VÀ NGHIÊN CỨU CHUYÊN SÂU BÀI LAB THEO THỨ TỰ TỪNG TASK 15 3.1 Cài đặt thiết lập ban đầu để thực lab 15 3.1.1 Address Space Randomization (Ngẫu nhiên hóó́a khơng gian địa chỉ) .15 3.1.2 Configuring /bin/sh 15 3.1.3 The StackGuard Protection Scheme 15 3.1.4 Non-Executable Stack 16 3.2 Giới thiệu chương trình chứa lỗ hổng 16 3.3 Task 1: Tìm địa hàm libc 18 3.4 Task 2: Đưa chuỗi shell vào nhớ (Putting the shell string in the memory) 20 3.5 Task 3: Khai thác lỗ hổng tràn đệm (Exploiting the Buffer-Overflow Vulnerability) 22 3.6 Task 4: Bật tính ngẫu nhiên hóó́a địa (Turning on Address Randomization) 27 3.7 Task 5: Vượt qua biện pháp an toàn Shell (Defeat Shell’s countermeasure) 31 CHƯƠNG IV: KẾT LUẬN 33 TÀI LIỆU THAM KHẢO 34 CHƯƠNG I: TỔNG QUAN VỀ RETURN-TO-LIBC ATTACK LAB 1.1 Tổng quan mục tiêu, giới thiệu nhiệm vụ lab Mục tiêu học tập lab để ta cóó́ trải nghiệm trực tiếp biến thể thú vị công tràn đệm; cơng cóó́ thể bỏ qua sơ đồ bảo vệ cóó́ triển khai hệ điều hành Linux Một cách phổ biến để khai thác lỗ hổng tràn đệm làm tràn đệm mã shellcode độc hại, sau đóó́ khiến chương trình dễ bị cơng nhảy đến shellcode lưu trữ ngăn xếp Để ngăn chặn kiểu công này, số hệ điều hành cho phép quản trị viên hệ thống tạo ngăn xếp khơng thể thực thi được; đóó́, việc nhảy đến shellcode khiến chương trình bị lỗi Thật khơng may, chương trình bảo vệ khơng phải chống đánh lừa; tồn biến thể công tràn đệm gọi công return-to-libc, khơng cần ngăn xếp thực thi; nóó́ chí khơng sử dụng shell code Thay vào đóó́, nóó́ làm cho chương trình dễ bị cơng đến số mã cóó́, chẳng hạn hàm system () thư viện libc, tải vào nhớ Trong lab này, ta cung cấp chương trình cóó́ lỗ hổng tràn đệm; nhiệm vụ ta phát triển công return-to-libc để khai thác lỗ hổng cuối giành đặc quyền root Ngồi cơng, ta thực số phương án bảo vệ triển khai Ubuntu để chống lại công tràn đệm Ta cần đánh giá xem chương trình cóó́ hoạt động hay khơng giải thích 1.2 Tổng quan lý thuyết Return to libc phương pháp khai thác lỗi tràn đệm hệ thống cóó́ ngăn xếp khơng thực thi được, nóó́ giống với tràn đệm tiêu chuẩn, đóó́ địa trả thay đổi để trỏ đến vị trí mà cóó́ thể kiểm sốt Tuy nhiên, khơng cóó́ mã thực thi phép ngăn xếp, ta gắn thẻ shellcode Vì lí đóó́ ta sử dụng thủ thuật return to libc sử dụng hàm cung cấp thư viện Ta ghi đè địa trả hàm libc, chuyển cho nóó́ đối số xác thực thi nóó́ cho ta Vì hàm khơng nằm ngăn xếp, ta cóó́ thể bỏ qua bảo vệ ngăn xếp thực thi code CHƯƠNG II: CÀI ĐẶT MÔI TRƯỜNG THỰC HIỆN 1.1 Chuẩn bị cho Lab Truy cập đường link: https://www.virtualbox.org/wiki/Downloads Để tải cài đặt Sau tải chạy chương trình để cài đặt vào máy Chọn Next Tiếp tục , chọn Next cuối chọn Install Chọn Finish để kết thúc trình cài đặt Bên giao diện sau cài đặt hoàn tất 10 3.4 Task 2: Đưa chuỗi shell vào nhớ (Putting the shell string in the memory) Mục đích tác vụ đưa chuỗi lệnh ‘/bin/sh’ vào nhớ biết địa nóó́ Để đạt điều này, ta tạo biến shell cóó́ tên MYSHELL chứa chuỗi lệnh / bin/sh Biến MYSHELL cóó́ chuỗi shell tiến trình Bây tạo chương trình envShellString.c cho để lấy địa biến nhớ Chương trình sau đóó́ biên dịch chạy với retlib để lấy địa biến Tiếp theo, sử dụng chương trình getenv.c để tìm địa biến MYSHELL Ta tiến hành biên dịch chạy chương trình Nóó́ cho ta output xác địa phục vụ cho tasks công sau 21 Kết luận: Địa biến shell truyền dạng biến mơi trường cho tiến trình cóó́ thể tìm thấy sử dụng cho công để đưa số chuỗi tùy ý vào nhớ tiến trình 22 3.5 Task 3: Khai thác lỗ hổng tràn đệm (Exploiting the Buffer-Overflow Vulnerability) Mục đích task tạo nội dụng badfile cách cung cấp liệu nhị phân Qua cách sử dụng objdump chương trình retlib, cóó́ thể tìm giá trị X, Y, Z Các giá trị đặt chương trình exploit2.c Dưới đây, ta cóó́ thể thấy dịng thứ ba cho biết không gian cấp cho hàm bof () 0x18 Địa offset hàm system () 24 Địa exit() hàm cao so với hàm system() 23 Chương trình exploit2.c chứa đầy đủ địa hàm system(), exit(), địa /bin/sh Địa hàm xác định task phía 24 Tiếp theo, ta tiếp tục biên dịch chạy chương trình exploit.c Ta cóó́ thể nhìn thấy root shell cóó́ thể sinh Khi làm điều này, ta cóó́ đặc quyền root Bây giờ, địa trả system (), buf [32] thay 0, tham số setuid (), khơng cóó́ chỗ cho exit () Đây lý nóó́ trả lỗi phân đoạn khỏi trình bao gốc Kết luận: Bằng cách biết địa hàm System (), địa hàm exit () địa biến shell gửi đến quy trình dạng biến mơi trường giá trị mục mảng (X, Y, Z) chuỗi đệm, ta cóó́ thể khai thác chương trình dễ bị tổn thương cóó́ vấn đề tràn đệm 25 Trường hợp cơng 1: Mục đích task trường hợp để tìm địa hàm exit() Trong chương ‘exploit.c’, ta đưa địa hàm exit() đây.\ Ta tiến hành biên dịch chạy chương trình exploit ‘retlib’ Ta cóó́ thể nhận trình shell root 26 Kết luận: Như thấy hình trên, địa hàm exit() đưa Ta cóó́ thể nhận thấy địa hàm exit() không cần thiết để thực công vào người dùng Root shell tạo mà không cung cấp địa exit() Trường hợp công 2: Mục đích task thay đổi tên tệp ‘retlib’ thành ‘newretlib’ cố gắng công người dùng mà không thay đổi nội dung ‘badfile’ Ở ta thay đổi tên chương trình từ ‘retlib’ thành ‘newretlib’ chạy chương trình exploit2 chương trình ‘newretlib’ Chúng nhận thấy gặp lỗi ta khơng thể lấy trình root shell tiến hành công người dùng Kết luận: Ta cơng người dùng Cuộc cơng khơng thành cơng ta đổi tên tệp, địa tệp bị thay đổi phải lặp lại toàn tác vụ thực trước đóó́ để tìm lại địa Ở ‘retlib’ cóó́ địa khác ‘newretlib’ cóó́ địa khác sử dụng task tới 27 3.6 Task 4: Bật tính ngẫu nhiên hóa địa (Turning on Address Randomization) Ta biết tất công thực người dùng cách tắt tính ngẫu nhiên hóó́a địa chỉ, biện pháp đối phóó́ tắt bảo vệ StackGuard biên dịch chương trình chứa lỗ hổng Bây ta tiến hành bật lại tính ngẫu nhiên hóó́a địa kiểm tra xem biện pháp bảo vệ cóó́ hiệu chống lại công Return-to-libc hay không Sau ta bật lại biện pháp đối phóó́ ngẫu nhiên địa chỉ, chương trình ‘exploit2’ ‘newretlib’ cóó́ thể chạy Kết luận: Lần nóó́ cho kết Segmentation fault Điều xảy tràn đệm địa system (), exit () / bin / sh ln thay đổi Vì vậy, ta khơng thể giữ địa xác Đây lý công không thành công Thêm nữa, giá trị X,Y Z không thay đổi cóó́ địa chúng bị thay đổi Khi ta bật ngẫu nhiên địa chỉ, ta chạy chương trình biến chuỗi shell mà ta tạo task để tìm địa shell Khi ta cho chạy chạy lại vài lần, lần chạy cho kết ngẫu nhiên Ta tiếp ta tiến hành gỡ lỗi ‘newretlib’ trình gỡ lỗi ‘gdb’ để kiểm tra xem ngẫu nhiên hóó́a địa cóó́ cịn hiệu hay không 28 Khi kiểm tra xem ngẫu nhiên hóó́a địa cóó́ bị vơ hiệu hóó́a hay khơng nóó́ cho biết nóó́ bị vơ hiệu hóó́a ngẫu nhiên hóó́a địa tự động tắt sau trình gỡ lỗi ‘gdb’ sử dụng 29 Ta tạo điểm breakpoint hàm chạy chương trình dịng sau đóó́ Chúng tơi kiểm tra địa hàm system () địa hàm exit () Tính ngẫu nhiên hóó́a địa bật lại ‘gdb’ ta cóó́ thể nóó́i tính ngẫu nhiên hóó́a vơ hiệu hóó́a bị tắt Sau đóó́, ta tạo điểm breakpoint hàm main () chạy lại dòng chương trình để kiểm tra thay đổi địa 30 Ta thấy địa hàm system () địa hàm exit () thay đổi Kết luận: Ta nhận thấy rằng, ta cố gắng trước đóó́ để bật ngẫu nhiên địa thành hệ điều hành, ‘gdb’ theo mặc định vơ hiệu hóó́a ngẫu nhiên địa Ta phải tắt đặc biệt tính vơ hiệu hóó́a ngẫu nhiên ‘gdb’ để trì biện pháp đối phóó́ ngẫu nhiên hóó́a địa 31 3.7 Task 5: Vượt qua biện pháp an toàn Shell (Defeat Shell’s countermeasure) Đối với task này, trước tiên ta phải tắt ngẫu nhiên địa (address randomization) Và sau đóó́ liên kết /bin /sh với /bin/dash lệnh sudo ln -sf /bin/dash /bin/sh Một số chương trình shell, chẳng hạn dash bash, cóó́ biện pháp đối phóó́ tự động loại bỏ đặc quyền chúng thực thi quy trình Set-UID Vì vậy, với /bin/sh liên kết với /bin/dash, ta thực khai thác lỗ hổng Khi chạy chương trình ‘newretlib’, trình shell tạo khơng phải trình root shell Để giải vấn đề này, cần gọi hàm setuid (0) trước gọi hàm system () Chúng ta cóó́ thể lấy địa setuid () từ gdb giống cách lấy địa system () exit () Trên gdb, cóó́ thể chạy p setuid để lấy địa setuid() Bây giờ, ta biết tham số setuid () phải địa $ ebp + Bây ebp trỏ đến 20, tham số, phải 28 29 30 31 địa làm cho buf [32] = Ta đặc biệt lấy làm tham số uid = đại diện cho người dùng root 32 Theo ta thấy đây, 24, setuid () gọi, tham số nóó́ độ lệch 8, tức 32 Sau đóó́, địa trả trở thành 28, nơi cóó́ thể gọi system () cóó́ tham số độ lệch 8, tức 36 Khi làm điều này, ta cóó́ đặc quyền root Bây giờ, địa trả system (), buf [32] thay 0, tham số setuid (), khơng cóó́ chỗ cho exit () Đây lý nóó́ trả lỗi phân đoạn khỏi trình bao gốc 33 CHƯƠNG IV: KẾT LUẬN Mục tiêu học tập lab để ta cóó́ trải nghiệm trực tiếp biến thể thú vị công tràn đệm; cơng cóó́ thể bỏ qua sơ đồ bảo vệ cóó́ triển khai hệ điều hành Linux Một cách phổ biến để khai thác lỗ hổng tràn đệm làm tràn đệm mã shellcode độc hại, sau đóó́ khiến chương trình dễ bị công nhảy đến shellcode lưu trữ ngăn xếp Để ngăn chặn kiểu công này, số hệ điều hành cho phép quản trị viên hệ thống tạo ngăn xếp thực thi được; đóó́, việc nhảy đến shellcode khiến chương trình bị lỗi 34 TÀI LIỆU THAM KHẢO [1] firmianay, "return-to-libc-attack-lab.md," [Online] Available: https://github.com/firmianay/Life-long-Learner/blob/master/SEED-labs/return-tolibc-attack-lab.md [2] li-xin-yi, "Return-to-libc-Attack," [Online] Available: https://github.com/li- xin-yi/seedlab/tree/master/Return-to-libc-Attack [3] W Du, "Return-to-libc Attack Lab," [Online] Available: https://seedsecuritylabs.org/Labs_16.04/Software/Return_to_Libc/ 35 ...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 THỰC HÀNH CÁCH TẤN CÔNG RETURN- TO- LIBC (RETURN- TO- LIBC ATTACK LAB). .. cố gắng nỗ lực thành viên để hoàn thiện đề tài, chắn đề tài “NGHIÊN CỨU THỰC HÀNH CÁCH TẤN CÔNG RETURN- TO- LIBC (RETURN- TO- LIBC ATTACK LAB)? ?? chúng em cịn nhiều thiếu sóó́t Chúng em mong nhận góó́p... firmianay, "return- to- libc- attack- lab.md," [Online] Available: https://github.com/firmianay/Life-long-Learner/blob/master/SEED-labs /return- tolibc -attack- lab.md [2] li-xin-yi, "Return- to- libc- Attack, "

Ngày đăng: 14/12/2022, 10:24

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

TÀI LIỆU LIÊN QUAN

w