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

Tài liệu nghiên cứu 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à, tổng hợp lý thuyết và thực hành, cung cấp kiến thức chuyên sâu

Trường đại học

Đại học Bách Khoa

Chuyên ngành

Khoa học máy tính

Người đăng

Ẩn danh

Thể loại

luận văn tốt nghiệp

2022

87
5
0

Phí lưu trữ

30 Point

Mục lục chi tiết

LỜI CAM ĐOAN

LỜI CẢM ƠN

TÓM TẮT LUẬN VĂN

1. GIỚI THIỆU ĐỀ TÀI

1.1. Đặt vấn đề

1.2. Nhiệm vụ, mục tiêu và phạm vi của đề tài

1.2.1. Nhiệm vụ

1.2.2. Mục tiêu

1.2.3. Phạm vi của đề tài

1.2.4. Ý nghĩa thực tiễn của đề tài

1.3. Bố cục luận văn

2. KIẾN THỨC VÀ CÔNG NGHỆ NỀN TẢNG

2.1. Một số khái niệm trong hệ điều hành Linux có liên quan

2.1.1. Giới thiệu về container

2.1.2. Giới thiệu về Docker

2.1.3. Lợi ích của Docker

2.1.4. Sơ bộ về cách thức vận hành của Docker

2.1.5. Một số thuộc tính cơ bản của Docker container

2.1.6. Xây dựng và quản lý image và container trong Docker

2.1.7. Giới thiệu về Kubernetes

2.1.8. Các vấn đề Kubernetes giải quyết

2.1.9. Những tính năng của Kubernetes

2.1.10. Mô hình hoạt động của Kubernetes

3. MỘT SỐ HƯỚNG TẤN CÔNG, KHAI THÁC LỖI BẢO MẬT TRÊN DOCKER CONTAINER

3.1. Tấn công thông qua những cấu hình không an toà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 quá 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 trên Container Engine

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

4. MỘT SỐ HƯỚNG TẤN CÔNG, KHAI THÁC LỖI BẢO MẬT TRÊN HỆ THỐNG KUBERNETES

4.1. Ma trận các mối đe dọa của Kubernetes

4.1.1. Ma trận các mối đe dọa của Kubernetes

4.1.2. Quy trình một cuộc tấn công đối với công nghệ Kubernetes

4.2. Các kỹ thuật tấn công được sử dụng trên Kubernetes

4.2.1. Bước 1: Initial Access

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.8. Bước 8: Lateral Movement

5. PHÂN TÍCH THIẾT KẾ HỆ THỐNG VÀ HIỆN 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 và đề 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 về Trivy

5.3. Phân tích và thiết kế hệ thống

5.3.1. Yêu cầu chức năng và yêu cầu phi chức năng

5.3.2. Lược đồ Use case

5.3.3. Mô tả Use case

5.3.4. Lược đồ tuần tự

5.4. Hiện thực công cụ

5.4.1. Tính năng đánh giá hệ thống

5.4.2. Tính năng khai thác hệ thống

5.5. Các công cụ và công nghệ hỗ trợ

6. KIỂM THỬ VÀ ĐÁNH GIÁ

6.1. Kiểm thử đánh giá trên 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

6.1.3. Kết quả đạt được

6.1.4. Phương hướng phát triển trong tương lai

7. TỔNG KẾT VỀ LUẬN VĂN TỐT NGHIỆP

DANH SÁCH HÌNH VẼ

DANH SÁCH BẢNG

Tóm tắt

I. Tổng Quan Về Nghiên Cứu Công Cụ Kiểm Thử Bảo Mật Docker và Kubernetes

Nghiên cứu công cụ kiểm thử bảo mật cho hệ thống Docker và Kubernetes đang trở thành một chủ đề nóng trong lĩnh vực an ninh mạng. Với sự phát triển mạnh mẽ của công nghệ container, việc đảm bảo an toàn cho các ứng dụng triển khai trên nền tảng này là rất quan trọng. Docker và Kubernetes là hai công nghệ phổ biến nhất hiện nay, nhưng cũng là mục tiêu của nhiều cuộc tấn công. Việc nghiên cứu và phát triển các công cụ kiểm thử bảo mật sẽ giúp phát hiện và khắc phục các lỗ hổng bảo mật, từ đó bảo vệ hệ thống một cách hiệu quả.

1.1. Khái Niệm Về Kiểm Thử Bảo Mật Hệ Thống

Kiểm thử bảo mật hệ thống là quá trình đánh giá mức độ an toàn của một hệ thống thông qua việc phát hiện các lỗ hổng bảo mật. Điều này bao gồm việc kiểm tra các cấu hình, mã nguồn và các thành phần khác của hệ thống để đảm bảo rằng không có điểm yếu nào có thể bị khai thác.

1.2. Tầm Quan Trọng Của Docker và Kubernetes Trong An Ninh Mạng

Docker và Kubernetes không chỉ giúp tối ưu hóa quy trình phát triển phần mềm mà còn tạo ra những thách thức mới về bảo mật. Việc hiểu rõ cách thức hoạt động của chúng sẽ giúp các chuyên gia bảo mật phát triển các giải pháp hiệu quả hơn để bảo vệ hệ thống.

II. Những Thách Thức Trong Kiểm Thử Bảo Mật Docker và Kubernetes

Mặc dù Docker và Kubernetes mang lại nhiều lợi ích, nhưng chúng cũng tạo ra nhiều thách thức trong việc kiểm thử bảo mật. Các lỗ hổng bảo mật có thể xuất hiện từ nhiều nguồn khác nhau, bao gồm cấu hình sai, lỗ hổng trong mã nguồn và các vấn đề liên quan đến quản lý container. Việc phát hiện và khắc phục những vấn đề này là rất cần thiết để đảm bảo an toàn cho hệ thống.

2.1. Các Lỗ Hổng Thường Gặp Trong Docker

Docker có thể gặp phải nhiều lỗ hổng bảo mật, bao gồm việc để lộ Docker socket, sử dụng flag –privileged không cần thiết và cấp quyền capabilities vượt quá nhu cầu. Những vấn đề này có thể dẫn đến việc kẻ tấn công chiếm quyền kiểm soát hệ thống.

2.2. Thách Thức Bảo Mật Trong Kubernetes

Kubernetes cũng không tránh khỏi các vấn đề bảo mật. Các mối đe dọa như tấn công vào API server, khai thác lỗ hổng trong các pod và container là những thách thức lớn mà các tổ chức phải đối mặt khi triển khai hệ thống này.

III. Phương Pháp Kiểm Thử Bảo Mật Hệ Thống Docker và Kubernetes

Để đảm bảo an toàn cho hệ thống Docker và Kubernetes, cần áp dụng các phương pháp kiểm thử bảo mật hiệu quả. Các phương pháp này bao gồm kiểm thử xâm nhập, phân tích mã nguồn và sử dụng các công cụ tự động hóa để phát hiện lỗ hổng. Việc kết hợp nhiều phương pháp sẽ giúp tăng cường khả năng bảo vệ cho hệ thống.

3.1. Kiểm Thử Xâm Nhập Đối Với Docker

Kiểm thử xâm nhập là một phương pháp hiệu quả để phát hiện các lỗ hổng bảo mật trong Docker. Quá trình này bao gồm việc mô phỏng các cuộc tấn công để xác định các điểm yếu trong cấu hình và mã nguồn của container.

3.2. Sử Dụng Công Cụ Tự Động Hóa Kiểm Thử

Các công cụ tự động hóa như Trivy và Clair có thể giúp phát hiện lỗ hổng bảo mật trong Docker images và Kubernetes. Việc sử dụng các công cụ này giúp tiết kiệm thời gian và nguồn lực trong quá trình kiểm thử.

IV. Ứng Dụng Thực Tiễn Của Công Cụ Kiểm Thử Bảo Mật

Công cụ kiểm thử bảo mật cho Docker và Kubernetes không chỉ giúp phát hiện lỗ hổng mà còn cung cấp các giải pháp khắc phục. Việc áp dụng các công cụ này trong thực tiễn sẽ giúp các tổ chức bảo vệ hệ thống của mình một cách hiệu quả hơn. Các kết quả từ việc kiểm thử có thể được sử dụng để cải thiện quy trình phát triển phần mềm và tăng cường an ninh mạng.

4.1. Kết Quả Nghiên Cứu Về Bảo Mật Docker

Nghiên cứu cho thấy rằng việc áp dụng các công cụ kiểm thử bảo mật đã giúp phát hiện và khắc phục nhiều lỗ hổng trong Docker. Điều này không chỉ bảo vệ hệ thống mà còn nâng cao nhận thức về an ninh mạng trong tổ chức.

4.2. Ứng Dụng Công Cụ Kiểm Thử Trong Doanh Nghiệp

Nhiều doanh nghiệp đã áp dụng công cụ kiểm thử bảo mật để đảm bảo an toàn cho hệ thống của mình. Việc này không chỉ giúp phát hiện lỗ hổng mà còn tạo ra một môi trường phát triển an toàn hơn cho các ứng dụng.

V. Kết Luận Và Tương Lai Của Nghiên Cứu Bảo Mật Docker và Kubernetes

Nghiên cứu về bảo mật cho Docker và Kubernetes là một lĩnh vực đang phát triển nhanh chóng. Với sự gia tăng của các cuộc tấn công mạng, việc phát triển các công cụ kiểm thử bảo mật là rất cần thiết. Tương lai của nghiên cứu này sẽ tập trung vào việc cải thiện các phương pháp kiểm thử và phát triển các công cụ mới để bảo vệ hệ thống một cách hiệu quả hơn.

5.1. Xu Hướng Phát Triển Trong Bảo Mật

Xu hướng phát triển trong bảo mật Docker và Kubernetes sẽ tập trung vào việc tự động hóa quy trình kiểm thử và phát hiện lỗ hổng. Các công nghệ mới như AI và machine learning có thể được áp dụng để nâng cao hiệu quả kiểm thử.

5.2. Tương Lai Của Công Cụ Kiểm Thử Bảo Mật

Công cụ kiểm thử bảo mật sẽ tiếp tục phát triển để đáp ứng nhu cầu ngày càng cao về an ninh mạng. Việc tích hợp các công nghệ mới sẽ giúp cải thiện khả năng phát hiện và khắc phục lỗ hổng bảo mật trong hệ thống.

08/07/2025

Trích đoạn nội dung tài liệu

Chương 1: Giới thiệu chung về nội dung đề tài, các giai đoạn thực hiện và tổng quan báo cáo. • Chương 2: Trình bày các kiến thức nền tảng về Docker container và Kubernetes. • Chương 3: Trình bày các hướng tấn công, khai thác đối với Docker container. • Chương 4: Trình bày các hướng tấn công, khai thác đối với Kubernetes.

• Chương 5: Phân tích thiết kế hệ thống và hiện thực công cụ. • Chương 6: Đưa ra tập kiểm thử và đánh giá độ hiệu quả của công cụ. 2 Thuật ngữ host được sử dụng để nói đến máy tính hoặc hệ thống máy tính đang chạy mà container đang triển khai trên đó. 3 • Chương 7: Tổng kết về Luận văn tốt nghiệp, trình bày những hạn chế và hướng phát triển trong tương lai.

4 2 Kiến thức và công nghệ nền tảng 2.1 Một số khái niệm trong hệ điều hành Linux có liên quan Container được xây dựng và triển khai trên nền tảng của hệ điều hành Linux vì thế sẽ có nhiều khái niệm liên quan đến hệ điều hành Linux được sử dụng xuyên suốt luận văn. Mục đích của phần này cung cấp thông tin về một số khái niệm này. • Linux kernel: Linux kernel là lõi của hệ điều hành Linux. Nó là phần cốt lõi của hệ thống, chịu trách nhiệm quản lý tài nguyên hệ thống, điều khiển các thiết bị và cung cấp các dịch vụ cơ bản cho các chương trình đang chạy trên hệ thống.

Nó là một phần không thể thiếu của hệ thống Linux và là nơi mà các thay đổi cơ bản đến từ các nhà phát triển được thực hiện. Kể từ bây giờ cho đến hết luận văn, thuật ngữ “kernel” sẽ được sử dụng để chỉ Linux kernel. • credentials: Trong Linux, credentials là thuật ngữ đề cập đến thông tin xác định người dùng và kiểm soát truy cập người dùng đến các tài nguyên. Thông tin này thường bao gồm user ID (UID) và group ID (GID) của người dùng và các nhóm mà người dùng đang là thành viên.

Nhân kernel quản lý thông tin này trong một cấu trúc được gọi là credentials structure, cấu trúc này được liên kết với mỗi tiến trình đang chạy trên hệ thống. • capablilities: Trong hệ điều hành Linux, capabilities đề cập đến các quyền truy cập được gán cho các tiến trình. Cabilities được sử dụng để kiểm soát quyền truy cập của các tiến trình đến các tài nguyên hệ thống, chẳng hạn như các tập tin và các thiết bị. Bằng cách phân chia các quyền truy cập thành các khả năng riêng biệt, hệ điều hành có thể điều chỉnh mức độ truy cập của các tiến trình đến các tài nguyên một cách linh hoạt hơn.1 minh họa một số quyền truy cập mà Linux hỗ trợ.

Trong hệ điều hành Linux, thuật ngữ filesystem đề cập đến cách mà dữ liệu được lưu trữ và quản lý trên thiết bị lưu trữ như đĩa cứng hoặc thiết bị flash. Hệ thống tập tin cung cấp các chức năng như tạo, xóa và đọc/ghi các tập tin và thư mục trên thiết bị lưu trữ, quản lý việc truy cập các tài nguyên bằng cách sử dụng các quyền truy cập và capabilities. Một số hệ thống tập tin phổ biến trên Linux bao gồm ext4 (fourth extended file system), XFS (High Performance Scalable File System) và Btrfs (B-Tree File System).1: Một số capabilities trong Linux • cgroups. cgroups (control groups) là một tính năng của hệ điều hành Linux, cho phép người dùng giới hạn và quản lý các tài nguyên của các tiến trình trên hệ thống.

Cgroups giúp người dùng có thể đặt giới hạn cho các tiến trình như sử dụng CPU, bộ nhớ và dung lượng đĩa, giúp cho hệ thống hoạt động hiệu quả hơn và tránh việc một tiến trình chiếm quá nhiều tài nguyên của hệ thống. Cgroups cũng giúp cho việc quản lý và theo dõi các tiến trình trên hệ thống Linux trở nên dễ dàng hơn. Trong Linux, không gian tên (namespaces) là một cơ chế cho phép tách biệt các tiến trình trên hệ thống bằng cách tạo ra các không gian riêng biệt cho mỗi tiến trình. Namespaces cung cấp một tập hợp các tài nguyên riêng biệt cho tiến trình đang chạy trong đó, chẳng hạn như các tên tập tin, bộ nhớ, các bộ đếm thời gian và các tên thiết bị.

Điều này giúp ngăn chặn các tiến trình truy cập vào các tài nguyên của các tiến trình khác và đảm bảo rằng các tiến trình có thể chạy một cách độc lập với nhau. Đây là một công nghệ bảo mật cho Linux, cho phép người quản trị hệ thống cấu hình và quản lý các chức năng bảo mật khác nhau trên hệ thống của họ. LSMs giúp xây dựng các giải pháp bảo mật cho hệ thống Linux trở nên linh hoạt và cho phép người quản trị hệ thống tùy chỉnh các chức năng bảo mật theo nhu cầu của họ. seccomp là tên viết tắt của “secure computing mode” trong Linux.

Nó là một cơ chế bảo mật cho phép người dùng cấu hình quyền truy cập của các tiến trình trên các lời gọi hệ thống. Nó giúp người dùng bảo vệ máy tính của họ khỏi các cuộc tấn công bằng cách giới hạn quyền truy cập của các tiến trình. OverlayFS là một giao diện tập tin đặc biệt trong Linux, cho phép bạn gắn hai hoặc nhiều hệ thống tập tin lớn lên nhau để tạo ra một hệ thống tập tin mới. Điều này cho phép bạn sử dụng các tập tin và thư mục từ các hệ thống tập tin dưới đáy như là các tập tin và thư mục trong hệ thống tập tin gốc, trong khi vẫn có thể ghi đè lên chúng bằng cách sử dụng một hệ thống tập tin bên trên.

OverlayFS có thể được sử dụng cho nhiều mục đích khác nhau, như tạo ra một hệ thống tập tin độc lập cho một chương trình hoặc dịch vụ, hoặc để tạo ra một bản sao lưu của hệ thống tập tin hiện tại mà không cần phải sử dụng rất nhiều dung lượng đĩa. daemon là một loại chương trình trong hệ điều hành Linux và các hệ điều hành tương tự. Đặc điểm của daemon là nó chạy trong nền và thường được dùng để thực hiện các tác vụ hệ thống, như quản lý các dịch vụ mạng, quản lý bộ nhớ, hoặc theo dõi và ghi lại các hoạt động trên hệ thống. Daemon thường không được làm việc trực tiếp với người dùng hoặc các ứng dụng khác trên hệ thống, thay vào đó nó thường được quản lý và điều khiển bởi hệ thống hoặc bởi các tiện ích quản lý hệ thống khác.

SMAP (Secure Memory Access Protection) là một tính năng trong nhân Linux giúp bảo vệ bộ nhớ hệ thống khỏi truy cập không được phép. Nó làm điều này bằng cách thiết lập một không gian địa chỉ riêng cho mã và dữ liệu của kernel, điều này ngăn chặn mã từ người dùng truy cập bộ nhớ kernel trực tiếp. SMEP (Supervisor Mode Execution Protection) là một tính năng của hệ điều hành Linux để ngăn chặn các ứng dụng với chế độ người dùng thực thi mã trong không gian bộ nhớ của hệ điều hành. Đây là một biện pháp bảo mật quan trọng giúp ngăn chặn mã độc điều khiển hệ điều hành và có thể gây hại cho hệ thống.

ASLR (Address Space Layout Randomization) là một tính năng bảo mật của Linux kernel nhằm ngẫu nhiên hóa các địa chỉ bộ nhớ được sử dụng bởi một số phần quan trọng nhất định của hệ điều hành, chẳng hạn như chính kernel và các thư viện dùng chung. Điều này khiến kẻ tấn công khó dự đoán vị trí của mã hoặc dữ liệu cụ thể trong bộ nhớ giúp ngăn chặn chúng khai thác thành công các lỗ hổng trong hệ thống. ASLR là một công cụ quan trọng để chống lại phần mềm độc hại và các mối đe dọa bảo mật khác. KASLR có chức năng giống với ASLR, làm ngẫu nhiên hóa các địa chỉ bộ nhớ của kernel.

SUID (set user ID upon execution) là một tùy chọn trong Linux, nó cho phép một tệp tin có thể được chạy với quyền của người dùng khác so với người dùng đang chạy nó. Ví dụ, nếu một tệp tin có SUID được đặt thành root, khi người khác chạy nó, tệp tin sẽ được chạy với quyền root và cho phép nó thực hiện các hành động có đặc quyền cao hơn so với người dùng bình thường. Tuy nhiên, sử dụng SUID có thể gây nguy hiểm cho bảo mật hệ thống nếu không được sử dụng một cách cẩn thận.1 Giới thiệu về container Container là một giải pháp nhằm đóng gói phần mềm và tất cả các thành phần liên quan (thư viện lập trình, cấu hình tham số,. ) nhằm cô lập và quản lý truy cập vào tài nguyên hệ thống.

Sự khác biệt giữa triển khai theo cách truyền thống và theo container được thể hiện ở Hình 2.2: So sánh kiến trúc truyền thống với container Hiệu suất làm việc là một điểm mạnh của container khi so sánh với những công nghệ truyền thống. Trước khi có container, việc triển khai ứng dụng lên môi trường vận hành (production) phải đi kèm với các thư viện, tệp tin cấu hình và các thành phần liên quan. Điều này không ảnh hưởng nhiều tới doanh nghiệp vì khi đó mọi người vẫn theo các mô hình phát triển phần mềm waterfall1. Tuy nhiên, trong vài năm trở lại đây, khi các công ty bắt đầu hướng tới việc sử dụng micro services2 cho các phần mềm của mình thì mô hình truyền thống đã bắt đầu hạn chế và không còn phù hợp, đặc biệt là các công ty đang sử dụng mô hình phát triển Scrum3.

Hạn chế cần phải đề cập đến chính là thời gian downtime khi cập nhật một phiên bản mới vì sẽ phải đồng bộ tất cả các thư viện, tệp tin cấu hình,. với nhau mới có thể hoạt động bình thường. Sau khi container ra đời, nó đã giải quyết các khó khăn sau đây cho doanh nghiệp: • Tự động hóa: Container giúp tự động hoá việc triển khai lên môi trường vận hành tiện lợi và nhanh chóng. • Dễ dàng cập nhật: Dễ dàng cập nhật các phiên bản mới mà không bị Downtime.

• Low Hardware Footprint: Sử dụng những tính năng của hệ điều hành như cgroups, namespaces để tạo ra môi trường độc lập, giảm thiểu thời gian overhead của bộ xử lý trung tâm (CPU) và bộ nhớ.org/software-engineering-classical-waterfall-model/ 2 Microservice là một kiểu kiến trúc phần mềm, trong đó một hệ thống phần mềm được xây dựng bằng cách sử dụng nhiều dịch vụ nhỏ và độc lập, mỗi dịch vụ chỉ có một mục đích rõ ràng.org/ 8 • Triển khai nhanh chóng và có thể tải sử dụng: Container được triển khai nhanh chóng vì nó không cần phải cài đặt toàn bộ dựa trên hệ điều hành. Chúng được xây dựng dựa trên các container images. Người dùng có thể sử dụng ảnh này nhiều theo nhu cầu của mình.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ