Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 46 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
46
Dung lượng
6,67 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 ENVIROMENT VARIABLEAND SET-UID (ENVIROMENT VARIABLE AND SET-UID 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 TOÀ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 ENVIROMENT VARIABLEAND SET-UID (ENVIROMENT VARIABLE AND SET-UID 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 ENVIROMENT VARIABLE AND SET-UID (ENVIROMENT VARIABLE AND SET-UID 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 cóó́ thể hoà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 tìm hiểu lab Enviroment Variable and Set-UID MỤC LỤC LỜI CẢM ƠN LỜI MỞ ĐẦU MỤC LỤC CHƯƠNG I: TỔNG QUAN VỀ ENVIRONMENT VARIABLES VÀ SET-UID PROGRAM 1.1 Environment Variables 1.2 Set-UID Program 1.3 Mục tiêu Lab 1.4 Chuẩn bị cho Lab 1.5 Cài đặt môi trường ảo Ubuntu v16.04 SEED Labs 10 CHƯƠNG II: 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 16 2.3 Task 3: Biến môi trường hàm execve() 21 2.4 Task 4: Biến môi trường hàm system () 24 2.5 Task 5: Các biến môi trường Set-UID program 25 2.6 Task 6: The PATH Environment variable and Set-UID programs .28 2.7 Task 7: The LD_PRELOAD environment variable and Set-UID Programs 31 2.8 Task 8: Gọi chương trình bên ngồi hàm system() hàm execve() 37 2.9 Task 9: Capability Leaking 41 CHƯƠNG III: KẾT LUẬN 43 TÀI LIỆU THAM KHẢO 44 CHƯƠNG I: TỔNG QUAN VỀ ENVIRONMENT VARIABLES VÀ SET-UID PROGRAM 1.1 Environment Variables Biến môi trường giá trị cung cấp phụ thuộc vào Hệ điều hành, nên thay đổi biến môi trường (khi thay đổi môi trường chạy) ảnh hưởng đến trình thực thi ứng dụng, ứng dụng sử dụng biến mơi trường đóó́ Biến mơi trường giới thiệu dạng đại vào năm 1979 với Version Unix, đóó́ bao gồm tất phiên phiên hệ điều hành Unix từ thời điểm đóó́ trở đi, bao gồm Linux macOS Từ PC DOS 2.0 vào năm 1982, tất hệ điều hành kế nhiệm Microsoft, bao gồm Microsoft Windows OS / bao gồm chúng tính năng, với cú pháp, cách sử dụng tên biến tiêu chuẩn cóó́ phần khác Vậy cần thiết lập biến mơi trường? Ví dụ Suy nghĩ chút, dễ dàng để hiểu lý Hiện tại, developer sử dụng github công cụ hữu ích để quản lý code dự án Các thao tác git giúp người quản lý cóó́ thể dễ dàng kiểm sốt tiến trình dự án đến đâu để lên kế hoạch, dễ dàng chia sẻ code với thành viên gia nhập nhóó́m phát triển Tuy nhiên, việc dễ dàng chia sẻ với thành viên việc người khác khơng mong muốn cóó́ thể đọc hết code bạn, thông tin tài khoản email hay API key riêng bạn Để khắc phục vấn đề này, sử dụng biến trường thiết lập máy khác để bạn cóó́ thể sử dụng tài khoản cá nhân mà không cần chia sẻ thơng tin đóó́ 1.2 Set-UID Program Set-UID (SET User ID upon execution), loại đặc quyền file (file permission) đặc biệt, cóó́ thể cho phép user tạm cóó́ quyền thực thi file quyền người sở hữu (owner) để thay đổi hành vi file thực thi đóó́ Hay nóó́i cách đơn giản hơn: “Thơng thường file linux chạy kế thừa quyền từ user login SETUID cấp quyền “tạm thời” cho user chạy file quyền user tạo file (owner user) Nóó́i cách khác, user chạy cóó́ UID GID người tạo file, chạy file hay command.” 1.3 Mục tiêu Lab Mục tiêu lab giúp sinh viên hiểu cách biến môi trường ảnh hưởng đến chương trình hành vi hệ thống Mặc dù biến môi trường ảnh hưởng đến hành vi chương trình, cách chúng hoạt động khơng nhiều lập trình viên hiểu rõ Kết là, chương trình sử dụng biến mơi trường, chương trình cóó́ thể cóó́ lỗ hổng Qua lab này, hiểu rõ cách vận hành biến môi trường, cách chúng đề xuất từ quy trình mẹ sang quy trình con, cách chúng ảnh hưởng đến chương trình/ hệ thống Đặc biệt quan tâm đến cách biến môi trường ảnh hưởng đến hoạt động chương trình Set-UID, thường chương trình đặc quyền 1.4 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 hồn tất 1.5 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 2.7 Task 7: The LD_PRELOAD environment variable and Set-UID Programs Trong task này, chúng tơi nghiên cứu cách chương trình Set-UID đối phóó́ với số biến mơi trường Một số biến môi trường, bao gồm LD_PRELOAD, LD_LIBRARY PATH LD_* khác ảnh hưởng đến hành vi trình liên kết động Trình liên kết động phần hệ điều hành (OS) tải (liên tục từ nhớ lưu trữ đến RAM) liên kết thư viện chia sẻ cần thiết tệp thực thi thời điểm chạy Trong Linux, ld.so ld-linux.so, trình liên kết động (mỗi loại cho kiểu nhị phân khác nhau) Trong Linux, LD_LIBRARY PATH tập hợp thư mục phân tách dấu hai chấm, nơi thư viện tìm kiếm đầu tiên, trước tập thư mục tiêu chuẩn LD_PRELOAD định danh sách thư viện chia sẻ bổ sung, người dùng định, tải trước tất thư viện khác Trong task này, nghiên cứu LD PRELOAD Đầu tiên, ta xây dựng thư viện liên kết động Trước hết, tạo chương trình cóó́ tên mylib.c, nóó́ cóó́ chức đơn giản ghi đè hàm function sleep() vào libc hệ thống Thực biên dịch chạy chương trình lệnh gcc -fPIC - g -c mylib.c (trong đóó́ -fPIC cóó́ nghĩa phát mã độc lập vị trí, thích hợp cho liên kết động tránh giới hạn kích thước bảng bù tồn cục, -g cóó́ nghĩa tạo thơng tin gỡ lỗi -c cóó́ nghĩa biên dịch tệp không liên kết) Bảng bù đắp toàn cục, GOT( Global Offset Table), phần nhớ chương trình máy tính sử dụng phép mã chương trình máy tính biên dịch dạng tệp ELF để chạy xác, không phụ thuộc vào địa nhớ nơi mã liệu chương trình tải thời gian chạy gcc -shared -o filename mylib.o -lc (trong đóó́ -shared tạo đối tượng chia sẻ cóó́ thể liên kết với đối tượng khác để tạo thành tệp thực thi, -o tệp lưu trữ kết đầu tệp.) Tiếp theo, đề cập đến tệp đầu thực thi giá trị biến LD_PRELOAD Điều làm cho chương trình phải tải thư viện trước thực thi chương trình 32 Sau đóó́, thư mục task7 tạo chương trình gọi hàm sleep(), biên dịch thực thi chương trình Và ta thực thi chương trình với user thường, ta cóó́ thể thấy chương trình gọi hàm sleep() định nghĩa chương trình myprogcompiled in dòng chữ mà ta code chương trình Khi chạy chương trình tình khác định tài liệu, ta nhận thấy số tình định, thư viện chứa 33 hàm sleep() ta không gọi thay vào đóó́, hàm sleep() hệ thống xác định thực thi Để hiểu hành vi này, ta cần chỉnh sửa chương trình thêm lệnh gọi hệ thống để thực thi env | grep LD để xem biến môi trường quy trình Như ta đề cập đến grep LD cách mà chương trình tải thư viện xác định tơi thực thi hàm sleep() biến môi trường LD_PRELOAD Chương trình myprogram.c chỉnh sửa sau Trường hợp 1: Sau tiến hành chỉnh sửa thêm lệnh system(“env | grep LD”); ta tiến hành biên dịch thực thi lại chương trình user thường Lúc output chương trình lần dịng in hàm sleep() biến mơi trường chương trình chứa chuỗi “LD” Như ta thấy, tiến trình sử dụng LD_PRELOAD biến mơi trường nóó́ Trường hợp 2: Ta đặt chương trình thành chương trình root SET-UID cho chương trình chạy lại Output cho thấy thư viện chứa hàm sleep() chương trình khơng gọi cho thấy biến mơi trường q trình đóó́ khơng chứa biến LD_PRELOAD Điều cho thấy tiến trinh SET-UID tạo không kế 34 thừa biến LD_PRELOAD đóó́ nóó́ khơng tải thư viện hàm sleep() hệ thống xác định chương trình sleep() Trường hợp 3: Vì chương trình chương trình SET-UID root, ta cần đăng nhập vào tài khoản user root xác định biến LD_PRELOAD Khi chạy chương trình, ta thấy function sleep() người dùng định nghĩa thực thi biến LD_PRELOAD diện Điều xảy ta tài khoản root chủ sở hữu function root Điều làm cho trình cóó́ real ID effective ID, đóó́ biến LD_PRELOAD không bị loại bỏ 35 Tiếp theo, ta tạo tài khoản user quochoang dựa tài khoản root Trường hợp 4: Ta tiến hành tạo myprocompiled1 myprogcompiled để hạn chế nhầm lẫn Tiếp theo, ta đặt chủ sở hữu tệp quochoang (một tài khoản người dùng khác root) đặt nóó́ thành chương trình SET-UID Sau đóó́, ta đăng nhập vào tài khoản user quochoang đặt lại biến LD_PRELOAD Khi chạy lại chương trình, thấy hàm sleep() người user định nghĩa gọi biến LD_PRELOAD cóó́ tiến trình 36 Hành vi biến LD_PRELOAD diện real ID effective ID giống bị loại bỏ chúng khác Điều chế bảo mật chương trình SET-UID Trong trường hợp đầu tiên, thứ ba thứ tư, chủ sở hữu tài khoản user thực thi tệp giống nhau, biến LD_PRELOAD ln cóó́ mặt thư viện người dùng xác định tải trước Trong đóó́, trường hợp thứ hai, effective ID user root real ID user seed, biến LD_PRELOAD bị loại bỏ thay vào đóó́ thư viện liên kết động lib.c, hàm sleep() hệ thống xác định gọi, biện pháp đối phóó́ hệ thống UNIX cơng 37 2.8 Task 8: Gọi chương trình bên hàm system() hàm execve() Mặc dù system() execve() cóó́ thể sử dụng để chạy chương trình mới, system() nguy hiểm sử dụng chương trình đặc quyền, chẳng hạn chương trình Set-UID Chúng ta thấy biến môi trường PATH ảnh hưởng đến hành vi system (), biến ảnh hưởng đến cách hoạt động shell Nhưng exevec() không cóó́ vấn đề, hàm khơng gọi shell Gọi shell cóó́ hậu nguy hiểm khác, lần này, nóó́ khơng liên quan đến biến mơi trường Tình task: Bob làm việc cho quan kiểm toán cần điều tra công ty hành vi gian lận đáng ngờ Đối với mục đích điều tra, Bob cần có khả đọc tất tệp hệ thống Unix cơng ty; mặt khác, để bảo vệ tính tồn vẹn hệ thống, Bob sửa đổi tệp Để đạt mục tiêu này, Vince, superuser hệ thống, viết chương trình set-root-uid đặc biệt (xem bên dưới), sau cấp quyền thực thi cho Bob Chương trình yêu cầu Bob nhập tên tệp command lines, sau chạy /bin/cat để hiển thị tệp định Vì chương trình chạy dạng root nên hiển thị tệp Bob định Tuy nhiên, chương trình khơng có hoạt động ghi, Vince chắn Bob khơng thể sử dụng chương trình đặc biệt để sửa đổi tệp Trước tiên, ta tiến hành biên dịch thực thi chương trình Vince mà task cung cấp thành file cóó́ tên task8compiled Ta tiếp tục chuyển chương trình thành root thành chương trình Set-UID với quyền thực thị user khác 38 Ta tạo file text giả task8Test.txt Trong trình chạy chương trình task8compiled, hàm chức nóó́ cho output nội dung tệp định, ta định file dummy text task8Test.txt ta vừa tạo Tiếp theo, xem xét Bob sử dụng tài khoản người dùng quochoang (Đối xử với Bob người khác (người dùng bình thường)) Ở đây, cóó́ thể thấy chương trình chạy bình thường cung cấp tệp để đọc Tuy nhiên, cung cấp đầu vào độc hại chẳng hạn “document; /bin/sh”, chương trình đọc nội dung tài liệu trước tiên sau đóó́ chạy /bin/sh dạng lệnh (theo chương trình.) /sh cho phép Bob chạy chương trình shell cóó́ đặc quyền root bob sau đóó́ chạy lệnh rm để xóó́a tệp mà nóó́ khơng cóó́ quyền ghi Thiết bị đầu cuối gốc biểu thị dấu # Điều cho thấy Bob khơng cóó́ quyền để viết, nóó́ cóó́ thể xóó́a tệp dễ dàng cách giả định đặc quyền người dùng root Vấn đề lệnh gọi hệ thống bên chương trình không tách biệt câu lệnh input người dùng Input người dùng viết cuối coi lệnh thay tên liệu / tài liệu 39 Điều cóó́ thể tránh cách tách biệt đầu vào người dùng lệnh chương trình Vì lệnh gọi hệ thống yêu cầu xây dựng lệnh cách sử dụng đầu vào, nên tránh sử dụng hàm system() chương trình thay vào đóó́ sử dụng hàm execve() để xử lý thứ nhập từ người dùng dạng chuỗi đầu vào khơng cho phép nóó́ chạy dạng câu lệnh Đối với điều này, ta chỉnh sửa chương trình biên dịch lại, biến nóó́ thành chương trình SET-UID thuộc sở hữu root 40 Ta lại thử thực cơng thấy nóó́ khơng thành cơng toàn chuỗi người dùng nhập vào coi tên tệp tách chuỗi ‘;’ làm tên tài liệu lệnh trước Ngoài ra, người dùng quên dấu ngoặc kép nhập chuỗi, câu lệnh người dùng mở cần thiết người dùng root, đóó́ Bob khơng cóó́ quyền viết, sửa hay xóó́a 41 Điều xảy vì, thấy chương trình, lệnh hệ thống xây dựng cách sử dụng chuỗi nhập vào thực thi Trong terminal, cóó́ thể nhập nhiều lệnh cách sử dụng ‘;’ đóó́ phần thứ hai sau dấu ‘;’ đầu vào coi lệnh trực tiếp phần tên tệp Khơng cóó́ xác thực đầu vào sử dụng system (), cóó́ số sử dụng execve() Khi sử dụng execve(), input nhập trực tiếp dạng tham số thứ hai cho hàm mà thực tế, nóó́ coi tồn tên tệp khơng nối vào chuỗi để xây dựng lệnh, trước Điều tránh kiểu công 2.9 Task 9: Capability Leaking Để tuân theo the Principle of Least Privilege, chương trình Set-UID thường từ bỏ vĩnh viễn đặc quyền root chúng đặc quyền đóó́ khơng cịn cần thiết Hơn nữa, đơi khi, chương trình cần giao quyền kiểm sốt nóó́ cho người dùng; trường hợp này, đặc quyền root phải thu hồi Lệnh gọi hệ thống setuid () cóó́ thể sử dụng để thu hồi đặc quyền Theo hướng dẫn, “setuid () đặt effective user ID trình gọi Nếu effective UID người gọi root, real UID setuser-ID lưu đặt” Do đóó́, chương trình Set-UID cóó́ UID hiệu gọi setuid (n), trình trở thành trình bình thường, với tất UID nóó́ đặt thành n Khi thu hồi đặc quyền, sai lầm phổ biến khả bị rị rỉ Q trình cóó́ thể đạt số khả đặc quyền nóó́ cịn đặc quyền; đặc quyền bị hạ cấp, chương trình khơng xóó́a khả đóó́, chúng cóó́ thể truy cập quy trình khơng cóó́ đặc quyền Nóó́i cách khác, ID người dùng hiệu quy trình trở thành khơng đặc quyền, quy trình đặc quyền nóó́ sở hữu khả đặc quyền 42 Trước tiên, ta tiến hành biên dịch thực thi chương trình task9.c đây, gắn quyền root cho chương trình chuyển nóó́ thành chương trình Set-UID Và đây, ta tạo file trống zzz thư mục /etc Khi task9 chạy file zzz kiểm tra, lúc nhìn thấy liệu đóó́ Tệp sửa đổi cách thêm nội dung tiến trình vào tệp Tiếp theo, ta chạy chương trình lần xem nội dung tệp zzz, lúc ta thấy nội dung tệp sửa đổi Điều xảy chương trình, ta bỏ đặc quyền, ta khơng đóó́ng tệp vào thời điểm đóó́ tệp chạy với quyền đặc quyền cho phép liệu tệp sửa đổi, khơng cóó́ quyền phù hợp Ở đây, sau gọi fork, quyền kiểm soát chuyển cho tiến trình đóó́ người dùng độc hại thành công việc sửa đổi nội dung tệp đặc quyền Điều cho thấy điều quan trọng phải đóó́ng trình mơ tả tệp sau loại bỏ đặc quyền, để nóó́ cóó́ quyền thích hợp 43 44 CHƯƠNG III: KẾT LUẬN Mục tiêu lab giúp sinh viên hiểu cách biến môi trường ảnh hưởng đến chương trình hành vi hệ thống Mặc dù biến môi trường ảnh hưởng đến hành vi chương trình, cách chúng hoạt động khơng nhiều lập trình viên hiểu rõ Kết là, chương trình sử dụng biến mơi trường, chương trình cóó́ thể cóó́ lỗ hổng Qua lab này, hiểu rõ cách vận hành biến mơi trường, cách chúng đề xuất từ quy trình mẹ sang quy trình con, cách chúng ảnh hưởng đến chương trình/ hệ thống Đặc biệt quan tâm đến cách biến môi trường ảnh hưởng đến hoạt động chương trình Set-UID, thường chương trình đặc quyền 45 TÀI LIỆU THAM KHẢO [1] firmianay, "environment-variable-and-set-uid-lab.md," [Online] Available: https://github.com/firmianay/Life-long-Learner/blob/master/SEED-labs/environmentvariable-and-set-uid-lab.md [2] W Du, "Environment Variable and Set-UID Lab," [Online] Available: https://seedsecuritylabs.org/Labs_16.04/Software/Environment_Variable_and_SetUI D/ [3] li-xin-yi, "Environment-Variable-and-Set-UID-Program-Lab," [Online] Available: https://github.com/li-xin-yi/seedlab/tree/master/Environment-Variableand-Set-UID-Program-Lab 46 ...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 ENVIROMENT VARIABLEAND SET- UID (ENVIROMENT VARIABLE AND SET- UID. .. 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 ENVIROMENT VARIABLE AND SET- UID (ENVIROMENT VARIABLE AND SET- UID LAB)? ?? chúng em cịn... "Environment Variable and Set- UID Lab," [Online] Available: https://seedsecuritylabs.org/Labs_16.04/Software/Environment _Variable_ and_ SetUI D/ [3] li-xin-yi, "Environment -Variable- and- Set- UID- Program-Lab,"