THỰC tập cơ sở CHUYÊN NGHÀNH AN TOÀN PHẦN mềm NGHIÊN cứu ENVIROMENT VARIABLE AND SET UID (ENVIROMENT VARIABLE AND SET UID LAB)

46 15 0
THỰC tập cơ sở CHUYÊN NGHÀNH AN TOÀN PHẦN mềm NGHIÊN cứu ENVIROMENT VARIABLE AND SET UID (ENVIROMENT VARIABLE AND SET UID LAB)

Đ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

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 VARIABLE AND SET-UID (ENVIROMENT VARIABLE AND SET-UID 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 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Ở CHUN NGÀNH AN TOÀN PHẦN MỀM NGHIÊN CỨU ENVIROMENT VARIABLE AND 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: 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 ENVIROMENT VARIABLE AND SET-UID (ENVIROMENT VARIABLE AND SET-UID 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! 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 tìm hiểu lab Enviroment Variable and Set-UID 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Ề ENVIRONMENT VARIABLES VÀ SET-UID PROGRAM 1.1 Environment Variables .6 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 download by : skknchat@gmail.com 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ý 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 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 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, 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.” download by : skknchat@gmail.com 1.3 Mục tiêu Lab 1.4 Chuẩn bị cho 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ó 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 đặ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 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 download by : skknchat@gmail.com 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 download by : skknchat@gmail.com 2.7 Task 7: The LD_PRELOAD environment variable and Set-UID Programs Trong task này, 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, 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ẻ 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 download by : skknchat@gmail.com 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 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 download by : skknchat@gmail.com 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 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 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 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 download by : skknchat@gmail.com thừa biến LD_PRELOAD 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 q trình có real ID effective ID, biến LD_PRELOAD khơng bị loại bỏ 35 download by : skknchat@gmail.com 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 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 download by : skknchat@gmail.com 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 download by : skknchat@gmail.com 2.8 Task 8: Gọi chương trình bên ngồi hàm system() hàm execve() Mặc dù system() execve() 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, 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 download by : skknchat@gmail.com Ta tạo file text giả task8Test.txt Trong trình chạy chương trình task8compiled, hàm chức 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, 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à 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, 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 download by : skknchat@gmail.com Điều 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 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 thành chương trình SET-UID thuộc sở hữu root 40 download by : skknchat@gmail.com Ta lại thử thực cơng thấy khơng thành cơng tồ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ở khơng phải cần thiết người dùng root, Bob khơng có quyền viết, sửa hay xóa 41 download by : skknchat@gmail.com Đ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, 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ế, 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 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 () 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 đặt thành n Khi thu hồi đặc quyền, sai lầm phổ biến khả bị rò rỉ Q trình đạt số khả đặc quyền cịn đặc quyền; đặc quyền bị hạ cấp, chương trình khơng xóa khả đó, chúng 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 sở hữu khả đặc quyền 42 download by : skknchat@gmail.com 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 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, để có quyền thích hợp 43 download by : skknchat@gmail.com 44 download by : skknchat@gmail.com 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ó 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 download by : skknchat@gmail.com 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-Variable-and-Set-UIDProgram-Lab 46 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 ENVIROMENT VARIABLE AND SET- UID (ENVIROMENT VARIABLE AND SET- UID. .. 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 hồn thiện tốt đề tài nghiên cứu. .. "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,"

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

Mục lục

    CHƯƠNG I: TỔNG QUAN VỀ ENVIRONMENT VARIABLES VÀ SET-UID PROGRAM

    1.3. Mục tiêu chính của Lab

    1.4. Chuẩn bị cho bài Lab

    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

    2.3. Task 3: Biến môi trường và hàm execve()

    2.4. Task 4: Biến môi trường và hàm system ()

    2.5. Task 5: Các biến môi trường và Set-UID program

    2.6. Task 6: The PATH Environment variable and Set-UID programs

    2.7. Task 7: The LD_PRELOAD environment variable and Set-UID Programs

    2.8. Task 8: Gọi các chương trình bên ngoài bằng hàm system() và hàm execve()

Tài liệu cùng người dùng

Tài liệu liên quan