Bạn có thể đạt được điều đó bằng cách sử dụng lệnh sau: Chúng tôi biên dịch chương trình vulp.c đã cho và biến nó thành chương trình gốc SETUID như sau:... Quá trình này được thực hiệ
Trang 1BAN 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 NGHÀNH
AN TOÀN PHẦN MỀM
NGHIÊN CỨU LỖ HỔNG RACE-CONDITION
(RACE-CONDITION 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: AT15H
Mã số sinh viên: AT150702
Nhóm: 13
Khóa: 2018-2023
TP Hồ Chí Minh, tháng 11 năm 2021
Trang 2BAN 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 LỖ HỔNG RACE-CONDITION
(RACE-CONDITION VULNERABILITY LAB)
Nhận xét của giáo viên hướng dẫn:
Điểm báo cáo:
Xác nhận của giáo viên hướng dẫn:
Trang 3LỜ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, chỉ bảo, tạo mọi điều kiện thuận lợi giúp đỡ chúng em trong quá trình thực hiện đề tài
Để có được thành quả như ngày hôm nay, ngoài sự nỗ lực không ngừng nghỉ của các thành viên trong nhóm thì một phần không nhỏ đóng góp nên thành công này là nhờ
sự quan tâm, chỉ bảo, giúp đỡ của các thầy cô, các anh chị khóa trên và bạn bè xung quanh
Tuy đã có rất nhiều cố gắng và sự nỗ lực của các thành viên để hoàn thiện đề tài,
nhưng chắc chắn đề tài “NGHIÊN CỨU LỖ HỔNG RACE-CONDITION (RACE-CONDITION VULNERABILITY LAB)” của chúng em còn nhiều thiếu sót Chúng
em rất mong nhận được sự góp ý từ các thầy giáo để nhóm em có thể hoàn thiện tốt hơn các đề tài nghiên cứu sau
Chúng em xin chân thành cảm ơn!
Trang 4LỜI MỞ ĐẦU
Ngày nay, với xu hướng chuyển đổi số mạnh mẽ của các doanh nghiệp, công ty, tổ chức dẫn đến việc tạo ra những phần mềm quản lý, điều hành và làm việc cũng hết sức thiết yếu Bên cạnh đó, ảnh hưởng của đại dịch COVID-19 cũng đã thúc đẩy nhanh việc chuyển đổi số Để đảm bảo an toàn cho phần mềm khi tạo ra và vận hành tránh bị kẻ xấu tấn công gây thiệt hại nghiêm trọng Đó cũng là lý do để chúng em chọn chuyên đề Software Security và đặc biệt là nghiên cứu lỗ hổng Race-Condition
Trang 5MỤC LỤC
LỜI CẢM ƠN 3
LỜI MỞ ĐẦU 4
MỤC LỤC 5
CHƯƠNG I: TỔNG QUAN VỀ RACE-CONDITION 6
1.Giới thiệu 6
2.Mục tiêu 6
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) 8
2.3 Task 3: Khởi động cuộc tấn công Race Condition(Launching the Race Condition Attack) 9
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) 14
2.5 Task 5: Biện pháp đối phó: Sử dụng Lược đồ tích hợp của Ubuntu (Countermeasure: Using Ubuntu’s Built-in Scheme) 16
CHƯƠNG III: KẾT LUẬN 18
3.1 Kết quả đạt được 18
a Cách cơ chế bảo vệ hoạt động 18
b Những giới hạn của của cơ chế bảo vệ 18
TÀI LIỆU THAM KHẢO 19
Trang 6
CHƯƠNG I: TỔNG QUAN VỀ RACE-CONDITION
1.Giới thiệu
Trong phòng thí nghiệm này, học sinh sẽ được học một chương trình có tính dễ bị tổn thương do race-condition; nhiệm vụ của họ là phát triển một kế hoạch để khai thác lỗ hổng và giành được đặc quyền root Ngoài các cuộc tấn công, học sinh sẽ được hướng dẫn để đi qua một số kế hoạch bảo vệ có thể được sử dụng để chống lại các cuộc tấn công theo lỗ hổng race-condition Học sinh cần đánh giá xem các chương trình có hoạt động hay không và giải thích tại sao
2.Mục tiêu
Mục tiêu học tập của phòng thí nghiệm này là để sinh viên có được kinh nghiệm trực tiếp về lỗ hổng race-condition bằng cách đưa những gì họ đã học được về lỗ hổng từ lớp thành hành động Một race-condition xảy ra khi nhiều quy trình truy cập và thao tác đồng thời cùng một dữ liệu và kết quả của việc thực thi phụ thuộc vào thứ tự cụ thể mà việc truy cập diễn ra Nếu một chương trình đặc quyền có lỗ hổng race-condition, những kẻ tấn công có thể chạy một quy trình song song để "chạy đua" với chương trình đặc quyền, với ý định thay đổi các hành vi của chương trình
Trang 7CHƯƠ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 có thể thực hiện các tác vụ phòng thí nghiệm bằng cách sử dụng máy ảo Ubuntu được tạo sẵn của chúng tôi Nếu bạn đang sử dụng Ubuntu của chúng tôi 9.11
VM, bạn có thể bỏ qua bước thiết lập ban đầu này Nếu bạn đang sử dụng máy ảo Ubuntu 11.04 hoặc 12.04 của chúng tôi, bạn cần để đọc phần sau Ubuntu 11.04 và 12.04 đi kèm với tính năng bảo vệ tích hợp chống lại tình trạng chủng tộc các cuộc tấn công Lược đồ này hoạt động bằng cách hạn chế những ai có thể theo dõi một liên kết tượng trưng Theo tài liệu, “Các liên kết tượng trưng trong thư mục cố định có thể ghi trên thế giới (ví dụ: / tmp) không thể theo sau nếu người theo dõi và 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 do not match the symlink owner) Trong phòng thí nghiệm này, chúng tôi cần tắt tính năng bảo vệ này Bạn có thể đạt được điều đó bằng cách sử dụng lệnh sau:
Chúng tôi biên dịch chương trình vulp.c đã cho và biến nó thành chương trình gốc SETUID như sau:
Trang 82.2 Task 2: Chọn mục tiêu ( Choosing our Target)
Ở đây, trước tiên chúng tôi kiểm tra xem có bất kỳ người dùng nào được đặt tên kiểm tra hay không Chúng tôi thấy rằng không có ai có tên đó và sau đó chúng tôi nhập văn bản sau vào tệp / etc / passwd từ tài khoản gốc:
Sau khi chỉnh sửa tệp / etc / passwd, chúng tôi kiểm tra lại tệp và thấy rằng mục
đã được thực hiện Sau đó, chúng tôi kiểm tra xem người dùng mới đã được tạo thành công hay chưa bằng cách chuyển từ hạt giống sang thử nghiệm và nhấn enter khi được hỏi mật khẩu Những điều sau đây cho thấy rằng chúng tôi đã thành công đã chuyển sang tài khoản người dùng thử nghiệm và dấu ‘#’ cho biết đó là tài khoản gốc:
Trang 9Sau khi xác minh rằng mục nhập của chúng tôi hoạt động, chúng tôi xóa mục nhập thủ công khỏi / etc / passwd trong tương lai và điều này được xác minh bằng cách làm như sau:
2.3 Task 3: Khởi động cuộc tấn công Race Condition ( Launching the Race Condition Attack)
Để khởi động cuộc tấn công, chúng ta cần chạy hai quá trình cùng nhau Target_process ở đây chạy chương trình đặc quyền trong một vòng lặp trừ khi tệp mật khẩu bị thay đổi Mục nhập người dùng từ nhiệm vụ 1 là được lưu trữ trong tệp passwd_input và được cung cấp làm đầu vào cho chương trình đặc quyền Mã có thể là được thấy trong ảnh chụp màn hình sau, trong đó điều kiện để phá vỡ vòng lặp là sử dụng dấu thời gian của tệp tức là nó dừng khi dấu thời gian đã thay đổi cho biết rằng tệp đã được sửa đổi
Mặt khác, attack_process là quá trình chạy song song với target_process và cố gắng thay đổi vị trí “/ tmp / XYZ” trỏ đến, để 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ũ bằng cách sử dụng hủy liên kết và sau đó tạo một liên kết mới bằng cách sử dụng liên kết tượng trưng Ban đầu, chúng tôi đặt “/ tmp / XYZ” trỏ tới “/ dev / null” để chúng tôi có thể vượt qua kiểm tra quyền truy cập chúng tôi có thể vượt qua kiểm tra này vì / dev / null có thể ghi cho bất kỳ ai và nó là một tệp đặc biệt có thể loại bỏ bất cứ điều gì được viết cho nó Sau đó, chúng tôi để quá trình ngủ trong một thời gian nhất định và sau đó tạo “/ tmp / XYZ” tệp trỏ tới tệp “/ etc /
Trang 10passwd”, tệp mà chúng tôi muốn ghi vào Quá trình này được thực hiện trong một vòng lặp để chạy đua với target_process:
Tiếp theo, trước tiên, chúng tôi biên dịch và chạy attack_process trong một
terminal, sau đó sử dụng terminal khác để chạy target_process:
Target_process dừng khi tệp mật khẩu đã thay đổi thành công, theo điều kiện được chỉ định trong tệp Sau đó, chúng tôi kiểm tra mục nhập mới được tạo trong tệp Để xác minh điều đó, chúng tôi chuyển sang người dùng thử nghiệm và chỉ cần nhấn enter khi được nhắc nhập mật khẩu Như đã thấy, chúng tôi nhập thành công người dùng mới và khi nhập ‘whoami’ hoặc id, chúng tôi thấy rằng kiểm tra là người dùng root
Trang 11Điều này chứng tỏ rằng cuộc tấn công của chúng tôi đã thành công và sử dụng điều kiện chủng tộc, chúng tôi có thể nâng cấp đặc quyền và ghi vào tệp mật khẩu Ngoài
ra, tác hại gây ra ở đây là chúng tôi đã tạo ra một gốc mới người dùng, do đó có được quyền truy cập root vào hệ thống, điều này có thể rất nguy hiểm
Ở đây, như đã thảo luận, có một điều kiện chạy đua giữa lệnh hủy liên kết và liên kết biểu tượng trong quá trình tấn công Nếu tệp trong target_process được mở sau khi hủy liên kết và trước liên kết biểu tượng thì cuộc tấn công của chúng ta sẽ luôn không thành công vì tệp được tạo bởi SETUID chương trình và do đó chủ sở hữu sẽ là root Trong trường hợp này, sẽ không thể hủy liên kết và do đó cuộc tấn công sẽ luôn luôn thất bại Điều này là do thư mục / tmp có một bit "dính", điều này chỉ cho phép chủ sở hữu của tệp để xóa tệp, mặc dù thư mục là thế giới có thể ghi Để vượt qua điều này, chúng ta có thể sử dụng lệnh gọi hệ thống renameat2 () để khắc phục điều kiện cuộc đua do cửa sổ giữa hủy liên kết và liên kết biểu tượng Hàm renameat2 () hoán đổi các liên kết tượng trưng khi cờ được sử dụng là RENAME_EXCHANGE Việc hoán đổi này sẽ giúp làm cho / tmp / XYZ trỏ đến / dev / null đôi khi nó trỏ đến / etc / passwd Khi nó trỏ đến / etc / passwd sau kiểm tra quyền truy cập và trước khi mở tệp, sau đó cuộc tấn công điều kiện cuộc đua sẽ thành công Các chương trình sau sử dụng renameat2 ():
Trang 12Trước khi chạy chương trình này, chúng tôi đặt các liên kết tượng trưng để / tmp / XYZ trỏ tới / dev / null và / tmp / link1 trỏ tới / etc / passwd Khi làm điều này, khi lệnh gọi hệ thống renameat2 () được thực hiện, nó sẽ hoán đổi / tmp / XYZ để trỏ tới / etc / passwd và / tmp / link1 để trỏ tới / dev / null Điều này tiếp tục diễn ra trong một vòng lặp
và chỉ khi / tmp / XYZ trỏ đến / etc / passwd giữa kiểm tra quyền truy cập và mở tệp, tấn công thành công
Quá trình tấn công đang chạy trong nền Chúng tôi xác minh rằng không có tài khoản thử nghiệm nào hiện có Sau đó, chúng tôi chạy target_process đang chạy chương trình đặc quyền trong một vòng lặp và thấy rằng điều này dừng khi điều kiện dừng được đáp ứng - tệp mật khẩu đang được sửa đổi Sau đó, chúng tôi làm tương tự thử nghiệm đã thực hiện trước đó để xác minh việc tạo người dùng mới và điều này có thể được nhìn thấy trong ảnh chụp màn hình tiếp theo Điều này cho thấy cuộc tấn công đã thành công
và chúng ta có thể sử dụng lệnh gọi hệ thống renameat2 () để thực hiện việc này, tránh race condition do cửa sổ hủy liên kết và liên kết biểu tượng, và do đó đảm bảo sự thành công của cuộc tấn công race condition
Trang 13Attack_process được viết trước đó cũng có thể chứa một lệnh gọi đến renameat2 () bởi vì hàm đang chạy trong một vòng lặp while và do đó nó sẽ có tác dụng tương tự Cập nhật chương trình như sau:
Sự thành công của cuộc tấn công bằng cách sử dụng attack_process được cập nhật:
Do đó, chúng ta có thể thấy rằng race condition đã đạt được thành công và chúng
ta có thể nhận được đặc quyền root vào hệ thống
Trang 142.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)
Chúng tôi chỉnh sửa chương trình dễ bị tấn công để áp dụng nguyên tắc ít đặc quyền nhất Chúng tôi sử dụng thực UID và UID hiệu dụng của chương trình Trước khi kiểm tra quyền truy cập, trước tiên chúng tôi đặt giá trị hiệu quả UID giống với UID thực Điều này làm giảm các đặc quyền và khi kết thúc chương trình, chúng tôi sẽ thay đổi UID có hiệu lực giống như trước đây để nhận lại các đặc quyền Chúng tôi biên dịch chương trình và biến nó thành chương trình sở hữu root SETUID Chúng tôi thực hiện quy trình tương tự như trước đây đối với cuộc tấn công:
Trang 15Terminal 1:
Terminal 2:
Trang 16Những điều trên cho thấy cuộc tấn công không thành công Theo nguyên tắc đặc quyền ít nhất, đặc quyền của chương trình SETUID tạm thời bị loại bỏ vì chúng tôi đặt người dùng hiệu quả ID giống như ID người dùng thực Do đó, chương trình dễ bị tổn thương không thể dễ bị tấn công hơn Đây là bởi vì, hàm fopen () đã sử dụng ID người dùng hiệu quả để mở tệp đặc quyền / etc / passwd không có quyền truy cập để mở tệp nữa
vì ID người dùng hiệu quả là ID của 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 quả thành người dùng thực id tại thời điểm thực thi, chúng tôi từ chối các đặ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 của Ubuntu
(Countermeasure: Using Ubuntu’s Built-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ỏ các điều kiện đặc quyền ít nhất được chỉ định, làm cho chương trình dễ bị tấn công trở lại Sau khi thay đổi, chúng tôi biên dịch lại chương trình và làm cho nó một chương trình gốc SETUID Tiếp theo, chúng tôi kích hoạt tính năng bảo vệ tích hợp sẵn của Ubuntu trước race condition:
Trang 17Như đã thấy, cuộc tấn công không thành công.
Trang 18CHƯƠNG III: KẾT LUẬN
3.1 Kết quả đạt được
a Cách cơ chế bảo vệ hoạt động
Ở đây, lỗ hổng race condition vulnerability TOCTTOU bị khai thác liên quan đến các liên kết tượng trưng bên trong thư mục ‘/ tmp’ Do đó, ngăn các chương trình đi theo các liên kết tượng trưng dưới các điều kiện cụ thể có thể khắc phục lỗ hổng này Đó chính xác là những gì được tích hợp sẵn này kỹ thuật phòng ngừa không Khi tính năng ngăn chặn liên kết tượng trưng cố định được bật, các liên kết tượng trưng bên trong một thư mục cố định có thể ghi thế giới chỉ có thể được theo dõi khi chủ sở hữu của liên kết tượng trưng khớp với người theo dõi hoặc chủ sở hữu thư mục Trong trường hợp của chúng tôi,
kể từ khi chương trình chạy với đặc quyền root và thư mục / tmp cũng thuộc sở hữu của root, chương trình, chương trình sẽ không được phép theo bất kỳ liên kết tượng trưng nào không được tạo bởi root Trong trường hợp của chúng ta, liên kết tượng trưng được tạo bởi kẻ tấn công mà thực sự là tài khoản hạt giống Kể từ đây liên kết này sẽ không được theo dõi và dẫn đến sự cố, như đã thấy Do đó, những người dùng khác không thể truy cập các tệp được bảo vệ ngay cả khi chương trình có lỗ hổng Race- Condition
b Những giới hạn của cơ chế bảo vệ
Phương án bảo vệ này không ngăn chặn race condition diễn ra, mà chỉ cản trở nó khỏi gây ra thiệt hại Do đó, nó là một cơ chế tốt để kiểm soát truy cập, cho phép chỉ những người dùng được dự định truy cập vào các tệp nhưng không thực sự ngăn chặn race condition đang diễn ra Ngoài ra, biện pháp bảo vệ này chỉ áp dụng cho các thư mục có thể ghi , chẳng hạn như/ tmp và không thể được áp dụng cho các loại thư mục khác
Trang 19TÀI LIỆU THAM KHẢO
[1] firmianay, "race-condition-vulnerability-lab.md," [Online] Available:
https://github.com/firmianay/Life-long-Learner/blob/master/SEED-labs/race-condition-vulnerability-lab.md
[2] W Du, "Race-Condition Vulnerability Lab," [Online] Available:
https://seedsecuritylabs.org/Labs_16.04/Software/Dirty_COW/
[3] MeghaJakhotia, "Race Condition," [Online] Available:
https://github.com/MeghaJakhotia/ComputerSecurityAttacks/tree/master/Race
%20Condition