Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 87 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
87
Dung lượng
3,55 MB
Nội dung
ĐẠI HỌC QUỐC GIA TP.HCM TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA KHOA HỌC & KỸ THUẬT MÁY TÍNH LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC NGHIÊN CỨU VÀ PHÁT TRIỂN CÔNG CỤ HỖ TRỢ KIỂM THỬ BẢO MẬT CÁC HỆ THỐNG TRIỂN KHAI TRÊN DOCKER VÀ KUBERNETES Ngành: KHOA HỌC MÁY TÍNH KHOA HỌC MÁY TÍNH HỘI ĐỒNG: Tập thể hướng dẫn: Thầy Nguyễn An Khương Khoa KH & KT Máy tính, ĐHBK Nguyễn Trí Đức CERG GMU, USA Giảng viên phản biện: Thầy Trần Tuấn Anh Khoa KH & KT Máy tính, ĐHBK Sinh viên thực hiện: Võ Minh Long 1812951 TP Hồ Chí Minh, 12/2022 Lời cam đoan Tơi xin cam đoan cơng trình nghiên cứu Tất nội dung nghiên cứu trình bày luận văn trung thực chưa công bố trước Trong luận văn có sử dụng số liệu dẫn chứng từ nhiều nguồn khác rõ phần trích dẫn tài liệu tham khảo Nếu phát gian lận nào, tơi xin chịu hồn tồn trách nhiệm luận văn Trường Đại học Bách Khoa tập thể hướng dẫn không liên quan đến vi phạm tác quyền quyền tơi gây q trình thực luận văn Sinh viên thực đề tài Võ Minh Long iv Lời cảm ơn Q trình hồn thành luận văn hành trình đặc biệt, giúp tơi học nhiều kiến thức trải nghiệm quý giá Tất tài sản quý báu hành trang vững cho bước vào đời Luận văn chắn khơng thể hồn thành thiếu hỗ trợ, giúp đỡ từ gia đình, thầy cô, người anh trước người bạn đồng hành Tại đây, xin gửi lời cảm ơn chân thành đến họ Lời đầu tiên, em xin bày tỏ lịng kính trọng biết ơn sâu sắc đến thầy Nguyễn An Khương Thầy người truyền đạt nhiều kiến thức hữu ích, mặt chuyên môn lẫn cách thức học tập làm việc khoa học Em cảm ơn thầy dẫn tận tình đầy tâm huyết, chất xúc tác to lớn để em hồn thành luận văn Xin gửi lời cảm ơn chân thành đến anh Nguyễn Quốc Bảo, anh Nguyễn Anh Khoa, anh Nguyễn Trí Đức, anh Nguyễn Phương Trường Anh anh Nguyễn Hồng Sơn Các anh người giúp đỡ, hỗ trợ tư vấn ý kiến chun mơn q giá cho em Đó đóng góp quan trọng ý nghĩa hoàn thiện luận văn Xin cảm ơn người bạn câu lạc An tồn thơng tin EFIENS Những lời nhận xét, góp ý động viên bạn tiếp thêm niềm tin để hồn thành luận văn Và nữa, cảm ơn bạn ln đồng hành chặng hành trình học hỏi tìm hiểu lĩnh vực an tồn thơng tin Lời cuối cùng, xin bày tỏ lòng biết ơn đặc biệt đến gia đình Con cảm ơn gia đình ln u thương, ủng hộ, tin tưởng động viên Cảm ơn gia đình tảng tuyệt vời để hồn thiện luận văn, hồn thiện thân v Tóm tắt luận văn Kiểm thử xâm nhập sở hạ tầng nội (thường biết đến với tên gọi Internal Infrastructure Penetration Testing) trình kiểm tra hệ thống máy tính hạ tầng mạng bên tổ chức phương pháp thử nghiệm để đánh giá mức độ bảo mật hệ thống khả bị công từ bên Việc phát hiện, loại bỏ lỗ hổng bảo mật bên hệ thống sở vững giúp tổ chức đảm bảo hệ thống họ trạng thái an tồn Vì vậy, nhu cầu việc kiểm tra bảo mật cho sở hạ tầng nội thiết yếu Trong vài năm trở lại đây, công ty bắt đầu hướng tới việc sử dụng micro services cho hệ thống phần mềm cơng nghệ đóng gói (hay gọi cơng nghệ container) ứng dụng rỗng rãi, đặt biệt công ty gắn liền với mơ hình phát triển Scrum Container phát triển thu hút quan tâm kẻ cơng Từ nhận thấy vấn đề đảm bảo an toàn cho sở hạ tầng triển khai công nghệ container ngày trở nên quan trọng hết Hiện có nhiều cơng nghệ container có thị trường, số công nghệ tiếng Docker, LCX (Linux containers), rkt (Rocket) Song song với phát triển đó, hệ thống quản lý container ngày mở rộng kể đến Kubernetes, OpenVZ, Docker Swarm Docker công cụ phổ biến lĩnh vực DevOps quy trình xây dựng phát hành phần mềm (CI/CD) Docker cung cấp cách để tạo “containers”, đoạn mã chạy môi trường giới hạn độc lập, giúp lập trình viên dễ dàng triển khai chạy ứng dụng cách dễ dàng, linh hoạt Điều giúp họ dễ dàng quản lý, triển khai ứng dụng đảm bảo chúng hoạt động tốt hệ thống triển khai chúng Nếu Docker đánh giá công nghệ container phổ biến Kubernetes xem hệ thống quản lý container phổ biến thị trường Cũng lí đó, đề tài luận văn hướng đến mục tiêu hỗ trợ trình kiểm thử xâm nhập sở hạ tầng triển khai tảng công nghệ Docker container triển khai hệ thống Kubernetes vi Mục lục Danh sách hình vẽ ix Danh sách bảng xi Giới thiệu đề tài 1.1 Đặt vấn đề 1.2 Nhiệm vụ, mục tiêu phạm vi 1.2.1 Nhiệm vụ 1.2.2 Mục tiêu 1.2.3 Phạm vi đề tài 1.3 Ý nghĩa thực tiễn đề tài 1.4 Bố cục luận văn 1 2 3 5 8 9 10 11 13 22 22 22 23 24 Một số hướng công, khai thác lỗi bảo mật Docker container 3.1 Tấn cơng thơng qua cấu hình khơng an tồn 3.1.1 Để lộ Docker socket 3.1.2 Sử dụng flag –privileged cho container 3.1.3 Cấp quyền capabilities vượt nhu cầu 3.1.4 Gắn thư mục nhạy cảm 3.2 Tấn công thông qua lỗ hổng Container Engine 26 26 27 28 29 30 31 đề tài Kiến thức công nghệ tảng 2.1 Một số khái niệm hệ điều hành Linux có liên quan 2.2 Docker 2.2.1 Giới thiệu container 2.2.2 Giới thiệu Docker 2.2.3 Lợi ích Docker 2.2.4 Sơ cách thức vận hành Docker 2.2.5 Một số thuộc tính Docker container 2.2.6 Xây dựng quản lý image container Docker 2.3 Kubernetes 2.3.1 Giới thiệu Kubernetes 2.3.2 Các vấn đề Kubernetes giải 2.3.3 Những tính Kubernetes 2.3.4 Mơ hình hoạt động Kubernetes vii 3.3 Tấn công kernel 3.3.1 Môi trường thực nghiệm 3.3.2 Phân tích lỗ hổng 3.3.3 Khai thác lỗ hổng 32 33 33 37 Một số hướng công, khai thác lỗi bảo mật hệ thống Kubernetes 4.1 Ma trận mối đe dọa Kubernetes 4.1.1 Ma trận mối đe dọa Kubernetes 4.1.2 Quy trình công công nghệ Kubernetes 4.2 Các kỹ thuật công sử dụng Kubernetes 4.2.1 Bước 1: Initial Access 4.2.2 Bước 2: Execution 4.2.3 Bước 3: Persistence 4.2.4 Bước 4: Privilege escalation 4.2.5 Bước 5: Defense evasion 4.2.6 Bước 6: Credential access 4.2.7 Bước 7: Discovery 4.2.8 Bước 8: Lateral Movement 42 42 42 43 45 45 46 47 47 48 48 49 50 Phân tích thiết kế hệ thống thực công cụ 5.1 Nhu cầu thực tiễn 5.2 Một số công cụ có liên quan đề xuất xây dựng cơng cụ 5.2.1 Công cụ kiểm tra bảo mật động 5.2.2 Công cụ kiểm tra bảo mật tĩnh cho Docker images 5.2.3 Tổng quan Trivy 5.3 Phân tích thiết kế hệ thống 5.3.1 Yêu cầu chức yêu cầu phi chức 5.3.2 Lược đồ Use case 5.3.3 Mô tả Use case 5.3.4 Lược đồ 5.4 Hiện thực công cụ 5.4.1 Tính đánh giá hệ thống 5.4.2 Tính khai thác hệ thống 5.5 Các công cụ công nghệ hỗ trợ 52 52 53 53 53 57 61 61 62 63 65 66 66 69 70 Kiểm thử đánh giá 6.1 Kiểm thử đánh giá môi trường thực nghiệm 6.1.1 Môi trường đánh giá thực nghiệm 6.1.2 Phương pháp đánh giá thực nghiệm 71 71 71 71 Tổng kết 7.1 Kết đạt 7.2 Hạn chế 7.3 Phương hướng phát triển tương lai 73 73 73 74 viii Danh sách hình vẽ 1.1 Mối quan hệ Docker container Kubernetes hệ thống 2.1 2.2 2.3 Một số capabilities Linux So sánh kiến trúc truyền thống với container Cách thức vận hành Docker Nguồn: https://docs.docker.com/engine/ images/architecture.svg 2.4 Một số capabilities cấp container 2.5 Ảnh minh họa trình truy cập tệp tin file.txt Docker container từ host 2.6 Ảnh minh họa cô lập không gian người dùng 2.7 Các lệnh với Docker image 2.8 Các lệnh hỗ trợ Docker image build 2.9 Ví dụ bước xây dựng Docker image đơn giản từ Dockerfile 2.10 Các lệnh làm việc với Docker container 2.11 Các lệnh làm việc Docker volume 2.12 Sơ đồ làm việc kubectl 10 12 12 13 13 15 16 17 20 25 3.1 3.2 3.3 3.4 3.5 Ảnh minh hoạ thư mục gốc Docker nằm host Ảnh minh hoạ khai thác thoát khỏi Docker để chiếm quyền quản trị host Ảnh minh hoạ khai thác chiếm quyền host thông qua sensitive mount Ảnh minh hoạ chế làm việc runC Mơ hình bước cơng leo quyền Linux kernel đề xuất Lingguang Lei cộng [4] 4.1 Ma trận mối đe dọa dành cho Kubernetes ứng dụng đóng gói năm 2021 cơng bố Microsoft Nguồn: https://www.microsoft com/en-us/security/blog/wp-content/uploads/2021/03/Matrix.png 43 5.1 5.2 Bảng thống kê lỗi tìm image cơng cụ Biểu đồ thể số lỗi tìm cơng cụ ba cơng cụ container images phổ biến - nhóm Biểu đồ thể số lỗi tìm cơng cụ ba cơng cụ container images phổ biến - nhóm Biểu đồ thể số lỗi tìm cơng cụ ba cơng cụ container images phổ biến - nhóm 5.3 5.4 ix 28 29 31 32 33 54 55 55 56 Trivy hỗ trợ cho trình CI số sản phẩm là: Travis CI, Circle CI, Jenkins, GitLab CI, Ví dụ, Travis CI có hai cách sử dụng là: trivy image exit - code serverity HIGH no - progress auto refresh [ YOUR_IMAGE ] trivy image exit - code serverity CRITICAL no - progress -auto - refresh [ YOUR_IMAGE ] Trạng thái mã kết thúc (–exit-code) hay tùy thuộc vào mức độ nghiêm trọng lỗ hổng Với lỗ hổng có tính chất nghiêm trọng Trivy cho hệ thống dừng lại, cịn trường hợp có tính chất nghiêm trọng hơn, Trivy thông báo lỗi đảm bảo hệ thống hoạt đông Hỗ trợ nhiều định dạng Trivy hỗ trợ để kiểm tra lỗi nhiều định dạng, là: • Container Images • Hệ thống tập tin cục rootfs • Kho lưu trữ Git từ xa 5.3 5.3.1 Phân tích thiết kế hệ thống Yêu cầu chức yêu cầu phi chức Trong phần trước, sinh viên tiến hành tìm hiểu công cụ hỗ trợ kiểm thử bảo mật động bảo mật tĩnh phổ biến thị trường Mỗi nhóm cơng cụ có ưu điểm nhược điểm riêng Với tiêu chí đặt tính sẵn sàng độ hiệu môi trường vận hành lên hàng đầu, sinh viên chọn Trivy làm cơng cụ để tìm hiểu sâu yêu cầu cài đặt, sử dụng Trivy không tác động trực tiếp đến môi trường vận hành sản phẩm Mặt khác, Trivy cung cấp tính plugin phép người khác mở rộng Trivy CLI mà không cần thay đổi sở mã Trivy Cụ thể, người dùng cần tạo tệp tin thực thi dạng nhị phân cấu hình tệp tin plugin.yaml theo cấu trúc Trivy cài binary thành plugin Từ đó, sinh viên thực đưa ý tưởng tạo công cụ để hỗ trợ pentester kiểm tra đánh giá bảo mật Docker container triển khai hệ thống Kubernetes máy chủ, đồng thời cơng cụ tích hợp vào Trivy để sử dụng Sinh viên tiến hành đặt số yêu cầu chức phi chức cho công cụ a Yêu cầu chức Cơng cụ có số u cầu chức sau: • Người dùng xem thông tin hệ thống bao gồm: người dùng tại, hostname, phiên hệ điều hành, tảng chạy container • Cơng cụ tìm kiếm tệp tin suid4 , tìm tiếm biến mơi trường nhạy cảm • Cơng cụ tìm kiếm tệp tin nhạy cảm • Cơng cụ kiểm tra hệ thống có bật chế ASLR khơng • Công cụ kiểm tra thông tin container bao gồm: câu lệnh capabilities chạy container, thư mục gắn vào container, trạng thái namespace container https://aquasecurity.github.io/trivy/v0.19.2/advanced/plugins/ https://www.redhat.com/sysadmin/suid-sgid-sticky-bit 61 • Cơng cụ kiểm tra thông tin nhạy cảm môi trường Kubernetes bao gồm: API server, service account, biến mơi trường • Cơng cụ kiểm tra lỗ hổng tồn dựa phiên nhân linux • Cơng cụ kiểm tra đề xuất mã khai thác tồn cơng cụ • Cơng cụ khai thác thành cơng số mã khai thác thực công cụ b u cầu phi chức Cơng cụ có số yêu cầu phi chức sau: • Với mã khai thác cách thay đổi nội dung tệp tin cấu hình hệ thống, sau dừng mã khai thác phải khôi phục trạng thái ban đầu liệu • Với mã khai thác cách tạo thêm container image, sau khai thác xong phải xóa tất image container tạo • Q trình đánh giá hệ thống không làm ảnh hưởng đến dịch vụ chạy hệ thống 5.3.2 Lược đồ Use case Từ yêu cầu chương phi chức năng, sinh viên phát họa lược đồ use case Hình 5.10: Lược đồ Use case Bcheck 62 5.3.3 Mô tả Use case Đánh giá tình trạng hệ thống Bảng 5.2: Use case: Đánh giá tình trạng hệ thống Usecase ID UC-1 Usecase name Đánh giá tình trạng hệ thống Actor Người dùng Description Kiểm tra toàn hệ thống, cung cấp thông tin liên quan đến hệ thống, container, Kubernetes cho người dùng để họ đánh giá tình trạng hệ thống Post-condition Cung cấp đầy đủ thông tin hệ thống Thông báo lỗ hổng tồn tại, đề xuất mã khai thác có cơng cụ để khai thác Normal flow Người dùng chạy chương trình với tùy chọn assess Chương trình kiểm tra vấn đề bảo mật liên quan đến hệ thống chạy container thơng báo Chương trình kiểm tra vấn đề bảo mật liên quan đến container thơng báo Chương trình kiểm tra vấn đề bảo mật liên quan đến Kubernetes thông báo Chương trình kiểm tra vấn đề bảo mật liên quan đến phiên kernel thông báo Alternative Flow 2.a Người dùng chạy với câu lệnh assess system để kiểm tra vấn đề bảo mật liên quan tới hệ thống 3.a Người dùng chạy với câu lệnh assess container để kiểm tra vấn đề bảo mật liên quan đến container 4.a Người dùng chạy với câu lệnh assess k8s để kiểm tra vấn đề bảo mật liên quan đến Kubernetes 5.a Người dùng chạy với câu lệnh assess kernel để kiểm tra vấn đề bảo mật liên quan đến Kernel Non-functional ment Require- Thời gian downtime không 2s Liệt kê mã khai thác 63 Bảng 5.3: Use case: Liệt kê mã khai thác Usecase ID UC-2 Usecase name Liệt kê mã khai thác Actor Người dùng Description Liệt kê danh sách mã khai thác định nghĩa dùng để khai thác thành công hệ thống bị lỗi Post-condition Cung cấp đầy đủ danh sách mã khai thác, mô tả cách sử dụng mã Normal flow Người dùng chạy chương trình với tùy chọn exploit –list Non-functional ment Require- Thời gian downtime không 2s Chạy mã khai thác Bảng 5.4: Use case: Chạy mã khai thác Usecase ID UC-3 Usecase name Chạy mã khai thác Actor Người dùng Description Chạy mã khai thác hệ thống Post-condition Thơng báo hệ thống bị khai thác hay khơng Nếu có, tiến hành khai thác trả kết Normal flow Người dùng chạy chương trình với tùy chọn exploit -e Chương trình kiểm tra mã khai thác có tồn hệ thống hay khơng Nếu mã khai thác tồn tại, chương trình tiến hành chạy mã khai thác hệ thống Chương trình trả kết cho người dùng Non-functional ment Require- Thời gian downtime không 2s Sau kết thúc chương trình, khơi phục hệ thống trạng thái ban đầu 64 5.3.4 Lược đồ Hình 5.11: Lược đồ Bcheck Luồng thực thi cơng cụ mơ tả Hình 5.11 Cụ thể: • Khi người dùng sử dụng tùy chọn assess, công cụ thực kiểm tra, đánh giá hệ thống, container, Kubernetes, kernel đưa kết lại cho người dùng • Kết trả làm bật tệp tin, liệu, cấu hình đánh giá có nguy cao dễ bị khai thác Nếu tồn lỗ hổng khai thác thơng qua mã khai thác có sẵn hệ thống, công cụ phản hồi tên mã lỗi, mơ tả với cách khai thác 65 • Khi người dùng sử dụng tùy chọn exploit –list, công cụ trả danh sách mã lỗi có mã khai thác sử dụng cách sử dụng cho người dùng • Người dùng dùng tùy chọn exploit -e , công cụ chạy mã khai thác hệ thống Luồng thực thi lúc phụ thuộc vào loại mã khai thác Sau chạy xong, công cụ thơng báo cho người dùng mã khai thác có chạy thành cơng hay khơng Nếu có, cơng cụ trả kết tương ứng 5.4 Hiện thực công cụ Theo thiết kế, cơng cụ có hai tính là: đánh giá hệ thống khai thác hệ thống 5.4.1 Tính đánh giá hệ thống Cơng cụ tiến hành đánh giá hệ thống theo tùy chọn Có năm tùy chọn cho người sử dụng là: • system: đánh giá vấn đề liên quan đến hệ điều hành thực thi • container: đánh giá vấn đề liên quan đến container • kubernetes: đánh giá vấn đề liên quan đến kubernetes • kernel: đánh giá vấn đề iên quan đến phiên kernel • full: thực tất đánh giá Tùy thuộc vào nhu cầu sử dụng, người dùng đánh giá loại vấn đề bảo mật cụ thể kiểm tra tất vấn đề, bao gồm: a Đánh giá vấn đề liên quan đến hệ điều hành thực thi Thông qua thực nghiệm làm việc môi trường doanh nghiệp, sinh viên nhận thấy quy trình kiểm thử bảo mật cho hệ thống có nhiều thao tác kiểm thử lặp lại nhiều hệ thống, hệ điều hành khác Các thao tác bao gồm: • Kiểm tra thơng tin hệ thống, bao gồm tên người dùng, hostname, phiên kernel, user id, group id, thư mục home • Liệt kê tất tệp tin có thuộc tính suid hệ thống • Tìm kiếm thơng tin nhạy cảm môi trường thực thi, dịch vụ có khả bị lỗi • Kiểm tra tệp tin nhạy cảm tồn hệ thống Do đó, sinh viên tự động hóa thao tác thường xun lặp lại cơng cụ func AssessSystem ( log logger Logger , WithFullOptions bool ) { log WithTitle ( " Scan ␣ System : " ) Printf ( " System ␣ Info " ) ScanBasicSysInfo ( log ) ScanSidFiles ( log ) log WithTitle ( " Scan ␣ System : " ) Printf ( " Sensitive ␣ environment ␣ and ␣ Services " ) ScanSensitiveEnv ( log ) 66 10 11 12 13 14 15 16 17 S c a n S e n s i t i v e S e r v i c e ( log ) log WithTitle ( " Scan ␣ System : " ) Printf ( " ASLR " ) ScanASLR () if WithFullOptions { log WithTitle ( " Scan ␣ System : " ) Printf ( " Sensitive ␣ Files " ) Sca nLocal FilePa th () } } Tại Dòng 13-16, tùy chọn quét hệ thống để đánh giá thư mục nhạy cảm tốn nhiều thời gian tùy theo số lượng tệp tin có hệ thống Do đó, sinh viên đưa hàm vào tùy chọn full b Đánh giá vấn đề liên quan đến container Với container, công cụ hỗ trợ đánh giá vấn đề liên quan đến cấu hình triển khai container Cụ thể là: • Kiểm tra câu lệnh thực thi container • Kiểm tra capabilities tiến trình • Kiểm tra vấn đề liên quan gắn thư mục (mount) • Kiểm tra namespace container • Kiểm tra Docker socket 10 11 12 13 14 func AssessContainer ( log logger Logger ) { log WithTitle ( " Scan ␣ Container : " ) Printf ( " Commands ␣ and ␣ Capabilities " ) S c a n A v a i l a b l e C o m m a n d s ( log ) S c a n P r o c c e s s C a p a b i l i t i e s ( log ) log WithTitle ( " Scan ␣ Container : " ) Printf ( " Mounts " ) ScanMountEscape () log WithTitle ( " Scan ␣ Container : " ) Printf ( " Namespace " ) ScanNetNamespace () log WithTitle ( " Scan ␣ Container : " ) Printf ( " Docker ␣ socket ␣ writable ! " ) ScanDockerSocket ( log ) } c Đánh giá vấn đề liên quan đến Kubernetes Với Kubernetes, công cụ hỗ trợ đánh giá vấn đề liên quan đến cấu hình triển khai 10 11 func AssessK8s ( log logger Logger ) { log WithTitle ( " Scan ␣ K8s : " ) Printf ( " Sysctl ␣ Variables " ) S c a n R o u t e L o c a l N e t w o r k V a l u e ( log ) log WithTitle ( " Scan ␣ K8s : " ) Printf ( " DNS - Based ␣ Service ␣ Discovery " ) D N S B a s e d S e r v i c e D i s c o v e r y () log WithTitle ( " Scan ␣ K8s : " ) Printf ( " K8s ␣ API ␣ Server " ) S c a n K s A n o n y m o u s L o g i n ( log ) log WithTitle ( " Scan ␣ K8s : " ) Printf ( " K8s ␣ Service ␣ Account " ) 67 12 13 S c a n P r i v i l e g e d K s S e r v i c e A c c o u n t ( conf K8sSATokenDefaultPath ) } d Đánh giá vấn đề liên quan đến phiển kernel Công cụ dựa đoạn mã nguồn công bố github linux-exploit-suggester.sh5 để tiến hành kiểm tra lỗ hổng tồn kernel Sau từ kết tìm được, tiến hành đối chiếu với mã khai thác thực công cụ Đề xuất cho người dùng mã khai thác thực 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 func AssessKernel ( log logger Logger ) { log WithTitle ( " Scan ␣ Kernel " ) Printf ( " ␣ Kernel ␣ Exploits " ) k e r n e l E x p l o i t S u g g e s t e r ( log ) } func k e r n e l E x p l o i t S u g g e s t e r ( log logger Logger ) { script := conf K er n e lE x p lo i t Sc r i pt writer := tabwriter NewWriter ( os Stdout , , , , ’␣ ’ , 0) // check bash command available _ , err := exec LookPath ( " bash " ) if err != nil { return } // run command get output log WithItemKey ( " refer " ) WithItemValue ( " https :// github com / mzet -/ linux - exploit - suggester " ) InOneLine () Printf ( " " ) output , err := exec Command ( " bash " , " -c " , script ) Output () if err != nil { return } cveIdList := make ([] int , 0) vulnerabilities := strings Split ( string ( output ) , " \ n " ) var exploitableList [] string for vulnId , vulnerability := range vulnerabilities { if strings Contains ( vulnerability , " [ CVE " ) { cveIdList = append ( cveIdList , vulnId ) } } // print all exploit and after 10 vulnerabilities var CVEIdregrex = ‘( CVE -\ d + -\ d +) ‘ for _ , cveId := range cveIdList { log Printf ( " cveid : ␣ % s " , vulnerabilities [ cveId ]) // extract CVE - id re := regexp MustCompile ( CVEIdregrex ) match := re FindString ( vulnerabilities [ cveId ]) println ( " match : " , match ) if match != " " && ! contains ( exploitableList , match ) { 43 // println (" match : " , match ) https://github.com/mzet-/linux-exploit-suggester/blob/master/ linux-exploit-suggester.sh 68 44 exploitableList = append ( exploitableList , strings ToLower ( match ) ) } 45 46 47 48 49 50 51 52 53 for i := cveId ; i < cveId +10; i ++ { if i >= len ( vulnerabilities ) { break } // not print CVE number twice if i != cveId && strings Contains ( vulnerabilities [ i ] , " [ CVE " ) { break } log Printf ( vulnerabilities [ i ]) } 54 55 56 57 58 59 60 61 62 } for _ , cve := range exploitableList { if exploits Exploits [ cve ] != nil { log WithItemKey ( " Exploitable ␣ is " ) WithColor () Printf ( " " ) str := fmt Sprintf ( " [ ID : ␣ % s ] ␣ -␣ % s \ n " , cve , exploits Exploits [ cve ] Describe () ) _ , err := fmt Fprintln ( writer , str ) if err != nil { fmt Println ( " Fprintln ␣ error : ␣ " , err ) return } } } 63 64 65 66 67 68 69 70 71 72 5.4.2 } Tính khai thác hệ thống Tính khai thác hệ thống giúp pentester nhanh chóng xác định mức độ thiệt hai lỗ hổng tìm thấy Cơng cụ có hai tùy chọn chính, bao gồm: liệt kê tất mã khai thác có hệ thống chạy mã khai thác Sinh viên thực sử dụng interface để lưu mã khai thác 10 11 12 13 14 15 16 type ExploitInterface interface { Describe () string Run ( args [] string ) bool } var Exploits map [ string ] ExploitInterface func init () { Exploits = make ( map [ string ] ExploitInterface ) } func ListAllExploit () { writer := tabwriter NewWriter ( os Stdout , , , , ’␣ ’ , 0) exploitId := for name , exploit := range Exploits { 69 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 str := fmt Sprintf ( " [ ID : ␣ % d ] ␣ -␣ % s \ t ␣ % s \ n " , exploitId , name , exploit Describe () ) fmt Fprintln ( writer , str ) exploitId += } writer Flush () } func RunSingleExploit ( name string , args [] string ) { Exploits [ name ] Run ( args ) } func RegisterExploit ( name string , exploit ExploitInterface ) { Exploits [ name ] = exploit } Để liệt kê tất mã khai thác, người dùng cần dùng tùy chọn -l –list Hiện thực hàm sau 10 11 func ListAllExploit () { writer := tabwriter NewWriter ( os Stdout , , , , ’␣ ’ , 0) exploitId := for name , exploit := range Exploits { str := fmt Sprintf ( " [ ID : ␣ % d ] ␣ -␣ % s \ t ␣ % s \ n " , exploitId , name , exploit Describe () ) fmt Fprintln ( writer , str ) exploitId += } writer Flush () } Tính chạy mã khai thác thực cách gọi hàm RunSingleExploit() ExploitInterface Sau gọi hàm Run(), luồng thực thi chuyển sang luồng thực thi mã khai thác Tính tới thời điểm tại, cơng cụ khai thác thành cơng bốn mã khai thác bao gồm: • Leo quyền thơng qua lộ Docker socket • Leo quyền thơng qua capability CAP_DAC_READ_SEARCH • Leo quyền thông qua capability CAP_SYS_ADMIN • Leo quyền thông qua lỗi Kernel CVE-2022-0847 5.5 Các công cụ công nghệ hỗ trợ Để thực công cụ, cần có cộng cụ cơng nghệ hỗ trợ sau: • Ngơn ngữ lập trình Go phiên 1.18.3 cài đặt hệ điều hành Ubuntu 20.04 sử dụng vi xử lý AMD64 • Thư viện mã nguồn mở Cobra Go • Các thư viện package bên thư ba: creack, fatih, google, hashicorp, inconshreveable, lufia, mattn, mitchellh, power-devops, shirou, spf13, tklauser, yusufpapurcu 70 Kiểm thử đánh giá 6.1 Kiểm thử đánh giá môi trường thực nghiệm Đối với công cụ trên, sinh viên thực xây dựng kịch để tiến hành đánh giá mức độ hiệu công cụ sau 6.1.1 Mơi trường đánh giá thực nghiệm • Hệ điều hành Ubuntu 20.04 • Docker container chạy image ubuntu:latest • Docker Phiên 20.10.12 • Kiểm thử Phiên Linux kernel: 5.15.0-56-generic, 5.11.0-051100-generic • Kiểm thử hệ thống Kubernetes triển khai kubectl có Phiên v1.25.0 6.1.2 Phương pháp đánh giá thực nghiệm Dựa vào mục tiêu hỗ trợ trình kiểm thử bảo mật cho container, sinh viên thực tiến hành kiểm thử để đánh giá hiệu suất công cụ Để tiến hành thực nghiệm, sinh viên xây dựng nhiều Docker container với cấu hình khơng sử dụng công cụ kiểm tra đánh giá kết đạt Kết đạt thể Bảng 6.1 Bảng 6.2 cho thấy công cụ tạo đạt yêu cầu ban đầu tính đặt 71 Bảng 6.1: Kết kiểm thử tính đánh giá hệ thống cơng cụ Bcheck STT Kịch Kết mong đợi Kết luận gắn docker socket vào container phát thông báo PASS Mơi trường container cấu hình với capability privileged phát thông báo PASS Gắn thư mục nhạy cảm vào container phát thông báo thư mục gắn PASS Môi trường container dùng mạng máy chủ phát thông báo PASS Môi trường container triển khai Kubernetes phát thông báo thông tin môi trường Kubernetes PASS Môi trường container triển khai phiên lỗi có tồn mã khai thác phát thông báo PASS Môi trường container dạng mặc định thơng báo cấu hình định nghĩa PASS Bảng 6.2: Kết kiểm thử tính khai thác hệ thống công cụ Bcheck STT Kịch Kết mong đợi Kết luận Gắn Docker socket vào container có quyền truy cập vào máy host PASS Mơi trường container có capabilities CAP_SYS_ADMIN có quyền truy cập vào máy host PASS Mơi trường container có capabilities CAP_DAC_READ_SEARCH có quyền đọc tệp máy host PASS Mơi trường có phiên kernel bị lỗi cve-2022-0847 người dùng bình thường có quyền root PASS 72 Tổng kết Chương trình bày kết đạt sau thực đề tài, hạn chế tồn đọng phương hướng phát triển tương lai 7.1 Kết đạt Sinh viên thành thạo phương pháp kiểm thử bảo mật cho hai công nghệ Docker container Kubernetes Đồng thời, sinh viên thành công xây dựng cơng cụ hỗ trợ q trình kiểm thử bảo mật cho Docker container triển khai Kubernetes triển khai máy chủ theo cách truyền thống Công cụ cung cấp thông tin cần thiết để giúp nhân viên kiểm thử bảo mật tiết kiệm thời gian nguồn lực đánh giá mức độ an tồn hệ thống Những kiến thức cơng cụ luận văn sinh viên áp dụng tham gia vào dự án kiểm thử bảo mật cho doanh nghiệp Kết cho thấy, 50 máy chủ bị công khai thác nhờ áp dụng phương pháp, kỹ thuật Chương nhiều nhân viên lập trình chưa ý đến khía cạnh bảo mật hệ thống vận hành container Kubernetes Công cụ hỗ trợ đánh giá giúp sinh viên tiết kiệm gần 60% thời gian đánh giá mức độ bảo mật container so với cách làm thủ cơng Ngồi ra, áp dụng vào môi trường thực tiễn chạy hệ điều hành khác Centos, container image khác Ubuntu alpine cơng cụ hoạt động ổn định Mặc dù công cụ thiết kế để kiểm thử cho Docker container triển khai Kubernetes chạy môi trường CRI-O1 , công Kubernetes, công cụ hoạt động chức thiết kế ban đầu 7.2 Hạn chế Hiện tại, đề tài tập trung phát triển, thử nghiệm hệ điều hành Ubuntu:20.04 có Linux kernel Phiên 5.11.0-051100-generic 5.15.0-56-generic Tuy nhiên, chất kernel khơng ảnh hưởng nhiều đến tính cốt lõi cơng cụ nên trừ kernel thay đổi nhiều tính kiến trúc cơng cụ bị ảnh hưởng, cịn thay đổi nhỏ khơng ảnh hưởng nhiều đến độ hiệu công cụ Mặt khác, phiên linux kernel thay đổi nhiều mặt tính năng, doanh nghiệp, tổ chức cần thời gian để áp dụng, triển khai nên công cụ đem lại giá trị thực tiễn cho doanh nghiệp https://cri-o.io/ 73 Tuy nhiên thực container triển khai nhiều hệ điều hành kernel khác Công cụ hỗ trợ tập trung kiểm thử bảo mật Docker container triển khai Kubernetes Trên thực thế, phương pháp công vào container Kubernetes nhiều đa dạng Số lượng mã khai thác thực cịn 7.3 Phương hướng phát triển tương lai Từ hạn chế luận văn tồn tại, sinh viên đề xuất số phương hướng phát triển thực sau: • Tiếp tục hồn thiện cơng cụ để tương thích với phiên hệ điều hành khác có nhân Linux • Tiếp tục hồn thiện bổ sung mã khai thác liên quan đến Docker container Kubernetes • Tiếp tục hồn thiện cập nhật đánh giá khía cạnh khác Docker container Kubernetes • Nghiên cứu tìm lỗ hổng bảo mật Như vậy, đề tài vài hạn chế mức độ hoàn thiện việc nghiên cứu phương pháp công Docker container Kubernetes Tuy nhiên, có thêm nguồn lực thời gian cơng sức, hạn chế khắc phục cải thiện dựa vào hương tiếp cận luận văn Luận văn hoàn thành nhiệm vụ đề ra, tìm hiểu, phân tích, thực hướng cơng thường sử dụng để khai thác hệ thống Docker container Kubernetes phát triển công cụ hỗ trợ kiểm thử bảo mật cho hệ thống triển khai Docker container Ngoài ra, đề tài mở phương hướng phát triển nghiên cứu vấn đề bảo đảm an toàn cho Docker container Kubernetes 74 Tài liệu tham khảo [1] Tahir Alyas et al “Container Performance and Vulnerability Management for Container Security Using Docker Engine” In: Security and Communication Networks 2022 (2022) [2] Clinton Cao et al “Learning State Machines to Monitor and Detect Anomalies on a Kubernetes Cluster” In: Proceedings of the 17th International Conference on Availability, Reliability and Security ARES ’22 Vienna, Austria: Association for Computing Machinery, 2022 isbn: 9781450396707 doi: 10.1145/3538969.3543810 url: https://doi.org/10.1145/3538969.3543810 [3] Borislav Đorđevi´c et al “Performance comparison of Docker and Podman containerbased virtualization” In: 2022 21st International Symposium INFOTEH-JAHORINA (INFOTEH) 2022, pp 1–6 doi: 10.1109/INFOTEH53737.2022.9751277 [4] Xin Lin et al “A Measurement Study on Linux Container Security: Attacks and Countermeasures” In: Dec 2018, pp 418–429 doi: 10.1145/3274694.3274720 [5] Zhenpeng Lin, Yuhang Wu, and Xinyu Xing “DirtyCred: Escalating Privilege in Linux Kernel” In: Proceedings of the 2022 ACM SIGSAC Conference on Computer and Communications Security CCS ’22 Los Angeles, CA, USA: Association for Computing Machinery, 2022, pp 1963–1976 isbn: 9781450394505 doi: 10.1145/ 3548606.3560585 url: https://doi.org/10.1145/3548606.3560585 [6] N VasanthaKumari and R Arulmurugan “Reorganizing Virtual Machines as Docker Containers for Efficient Data Centres” In: 3rd EAI International Conference on Big Data Innovation for Sustainable Cognitive Computing Ed by Anandakumar Haldorai et al Cham: Springer International Publishing, 2022, pp 201–211 isbn: 978-3-030-78750-9 [7] Shenglin Xu and Yongjun Wang “Defending against Return-Oriented Programming attacks based on return instruction using static analysis and binary patch techniques” In: Science of Computer Programming 217 (2022), p 102768 75