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

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 16 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

Thông tin cơ bản

Định dạng
Số trang 35
Dung lượng 2,64 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  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: Sinh viên thực hiện: Lớp: Mã số sinh viên: Nhóm: Khóa: PGS.TS Lương Thế Dũng Trần Quốc Hồng AT15H AT150719 13 2018-2023 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Ở 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) 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 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 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 Thật khơng may, chương trình bảo vệ 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; chí khơng sử dụng shell code Thay vào đó, 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 Ngoà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, giống với tràn đệm tiêu chuẩn, địa trả thay đổi để trỏ đến vị trí mà kiểm sốt Tuy nhiên, khơng có mã thực thi phép ngăn xếp, ta khơng thể 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 đối số xác thực thi cho ta Vì hàm khơng nằm ngăn xếp, ta 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 đặt Chuẩn bị cho Lab 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 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 Để đạ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 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, tìm giá trị X, Y, Z Các giá trị đặt chương trình exploit2.c Dưới đây, ta 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 nhìn thấy root shell 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ý trả lỗi phân đoạn thoát 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 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 nhận trình shell root 26 Kết luận: Như thấy hình trên, địa hàm exit() đưa Ta 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 tơi nhận thấy gặp lỗi ta 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’ chạy Kết luận: Lần cho kết Segmentation fault Điều xảy tràn đệm địa system (), exit () / bin / sh 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 cho biết 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 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 lấy địa setuid () từ gdb giống cách lấy địa system () exit () Trên gdb, 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ố độ lệch 8, tức 32 Sau đó, địa trả trở thành 28, nơi 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ý 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 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 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-to-libcattack-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

Ngày đăng: 23/03/2022, 18:57

HÌNH ẢNH LIÊN QUAN

Quay lại với Oracle VM VirtualBox , Chọn New ,lựa chọn các cài đặt như hình bên dưới và chọn Next. - 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)
uay lại với Oracle VM VirtualBox , Chọn New ,lựa chọn các cài đặt như hình bên dưới và chọn Next (Trang 11)
Sau khi chọn đường dẫn xong sẽ hiện giống như ảnh màn hình sau và click vào “SEEDUbuntu-16.04-32bit.vmdk” và chọn Choose - 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)
au khi chọn đường dẫn xong sẽ hiện giống như ảnh màn hình sau và click vào “SEEDUbuntu-16.04-32bit.vmdk” và chọn Choose (Trang 13)

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w