ĐẠ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 1
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 đây là cơng trình nghiên cứu của tôi. Tất cả những nội dung nghiên
cứu và trình bày trong luận văn là trung thực và chưa từng được cơng bố trước đây. Trong
luận văn có sử dụng số liệu và dẫn chứng từ nhiều nguồn khác nhau sẽ được chỉ rõ trong
phần trích dẫn tài liệu tham khảo. Nếu phát hiện bất kỳ sự gian lận nào, tơi xin chịu
hồn tồn trách nhiệm đối với luận văn của mình. Trường Đại học Bách Khoa và tập thể
hướng dẫn không liên quan đến bất kỳ vi phạm về tác quyền và bản quyền do tôi gây ra
trong quá trình thực hiện luận văn.
Sinh viên thực hiện đề tài
Võ Minh Long
iv
Lời cảm ơn
Q trình hồn thành luận văn là một hành trình đặc biệt, đã giúp tơi học được nhiều
kiến thức và trải nghiệm quý giá. Tất cả đều là tài sản quý báu và là hành trang vững
chắc cho tôi bước vào đời. Luận văn chắc chắn sẽ không thể hoàn thành nếu thiếu đi sự
hỗ trợ, giúp đỡ từ gia đình, thầy cơ, những người anh đi trước cùng những người bạn
đồng hành. Tại đây, tôi xin được 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 và biết ơn sâu sắc đến thầy Nguyễn An
Khương. Thầy là người đã truyền đạt rất nhiều kiến thức hữu ích, cả về mặt chuyên môn
lẫn cách thức học tập và làm việc khoa học. Em cảm ơn thầy vì sự chỉ dẫn tận tình và
đầy tâm huyết, đó chính là chất xúc tác to lớn để em có thể hồn thành luận văn này.
Xin được 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 và anh Nguyễn Hồng Sơn.
Các anh là những người đã luôn giúp đỡ, hỗ trợ và tư vấn những ý kiến chuyên môn quý
giá cho em. Đó là những đóng góp rất quan trọng và ý nghĩa đối với sự hoàn thiện của
luận văn.
Xin cảm ơn những người bạn trong câu lạc bộ An tồn thơng tin EFIENS. Những lời
nhận xét, góp ý và động viên của các bạn đã tiếp thêm niềm tin để mình có thể hồn
thành luận văn. Và hơn thế nữa, cảm ơn các bạn vì đã ln đồng hành cùng mình trong
chặng hành trình học hỏi và tìm hiểu lĩnh vực an tồn thơng tin.
Lời cuối cùng, con xin được 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 và động viên con. Cảm ơn gia đình vì đã
là nền tảng tuyệt vời nhất để con có thể hồn thiện luận văn, hồn thiện chính bản thân
mình.
v
Tóm tắt luận văn
Kiểm thử xâm nhập cơ sở hạ tầng nội bộ (thường được biết đến với tên gọi Internal
Infrastructure Penetration Testing) là quá trình kiểm tra một hệ thống máy tính hoặc hạ
tầng mạng bên trong một tổ chức bằng các phương pháp thử nghiệm để đánh giá mức độ
bảo mật của hệ thống đó và khả năng bị tấn công từ bên trong. Việc phát hiện, loại bỏ
các lỗ hổng bảo mật bên trong hệ thống là cơ sở vững chắc giúp tổ chức đảm bảo rằng
hệ thống của họ ln trong trạng thái an tồn nhất. Vì vậy, nhu cầu về việc kiểm tra bảo
mật cho cơ sở hạ tầng nội bộ là thiết yếu.
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
services cho hệ thống phần mềm của mình thì cơng nghệ đóng gói (hay được gọi là công
nghệ container) được ứng dụng rỗng rãi, đặt biệt là những 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 sự quan tâm của các kẻ tấn cơng. Từ
đây chúng ta có thể nhận thấy vấn đề đảm bảo an toàn cho cơ sở hạ tầng được triển khai
bằng công nghệ container ngày càng trở nên quan trọng hơn bao giờ hết.
Hiện tại có rất nhiều cơng nghệ container đang có trên thị trường, một số công nghệ
nổi tiếng như là Docker, LCX (Linux containers), rkt (Rocket). Song song với sự phát triển
đó, hệ thống quản lý container cũng ngày càng được mở rộng có thể kể đến Kubernetes,
OpenVZ, Docker Swarm.
Docker là một công cụ rất phổ biến trong lĩnh vực DevOps và quy trình xây dựng và
phát hành phần mềm (CI/CD). Docker cung cấp một cách để tạo ra các “containers”, đó
là các đoạn mã được chạy trong mơi trường được giới hạn và độc lập, giúp lập trình viên
dễ dàng triển khai và chạy các ứng dụng một cách dễ dàng, linh hoạt. Điều này giúp họ
dễ dàng quản lý, triển khai các ứng dụng và đảm bảo chúng hoạt động tốt trên bất kỳ hệ
thống nào triển khai chúng.
Nếu Docker được đánh giá là công nghệ container phổ biến nhất hiện nay thì Kubernetes được xem là hệ thống quản lý container phổ biến nhất trên thị trường. Cũng vì lí
do đó, đề tài của luận văn sẽ hướng đến mục tiêu hỗ trợ quá trình kiểm thử xâm nhập
cơ sở hạ tầng được triển khai trên nền tảng công nghệ Docker container được triển khai
trên hệ thống Kubernetes.
vi
Mục lục
Danh sách hình vẽ
ix
Danh sách bảng
xi
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
1.2.1 Nhiệm vụ . . . . . . . . . .
1.2.2 Mục tiêu . . . . . . . . . . .
1.2.3 Phạm vi của đề tài . . . . .
1.3 Ý nghĩa thực tiễn của đề tài . . . .
1.4 Bố cục luận văn . . . . . . . . . . .
.
.
.
.
.
.
.
1
1
2
2
2
3
3
3
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
5
8
8
9
9
10
11
13
22
22
22
23
24
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 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 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 . . . . . . . . . . . .
.
.
.
.
.
.
26
26
27
28
29
30
31
. . . .
đề tài
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
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.2 Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.1 Giới thiệu về container . . . . . . . . . . . . . . . . . .
2.2.2 Giới thiệu về Docker . . . . . . . . . . . . . . . . . . .
2.2.3 Lợi ích của Docker . . . . . . . . . . . . . . . . . . . .
2.2.4 Sơ bộ về cách thức vận hành của Docker . . . . . . . .
2.2.5 Một số thuộc tính cơ bản của Docker container . . . .
2.2.6 Xây dựng và quản lý image và container trong Docker
2.3 Kubernetes . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.1 Giới thiệu về Kubernetes . . . . . . . . . . . . . . . . .
2.3.2 Các vấn đề Kubernetes giải quyết . . . . . . . . . . . .
2.3.3 Những tính năng của Kubernetes . . . . . . . . . . . .
2.3.4 Mô hình hoạt động của 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
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.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
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ợ . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
52
52
53
53
53
57
61
61
62
63
65
66
66
69
70
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 . . . . . . . . . . . . . . . . . .
71
71
71
71
7 Tổng kết
7.1 Kết quả đạt được . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2 Hạn chế . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.3 Phương hướng phát triển trong tương lai . . . . . . . . . . . . . . . . . . .
73
73
73
74
viii
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Danh sách hình vẽ
1.1
Mối quan hệ giữa Docker container và Kubernetes trong hệ thống. . . . . .
2.1
2.2
2.3
Một số capabilities trong Linux . . . . . . . . . . . . . . . . . . . . . . . .
So sánh kiến trúc truyền thống với container . . . . . . . . . . . . . . . . .
Cách thức vận hành của Docker Nguồn: />images/architecture.svg . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4 Một số capabilities được cấp trong container . . . . . . . . . . . . . . . . .
2.5 Ảnh minh họa quá trình truy cập tệp tin file.txt trên 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 cơ bản với Docker image. . . . . . . . . . . . . . . . . . . . . . .
2.8 Các lệnh cơ bản hỗ trợ Docker image build. . . . . . . . . . . . . . . . . .
2.9 Ví dụ về các 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 của Docker volume . . . . . . . . . . . . . . . . . . . . .
2.12 Sơ đồ làm việc của kubectl . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
6
8
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 của Docker nằm trên host . . . . . . . . . . .
Ảnh minh hoạ khai thác thoát khỏi Docker để chiếm quyền quản trị của host
Ảnh minh hoạ khai thác chiếm quyền ở host thông qua sensitive mount . .
Ảnh minh hoạ cơ chế làm việc của runC . . . . . . . . . . . . . . . . . . .
Mơ hình các bước tấn cơng leo quyền trên Linux kernel được đề xuất bởi
Lingguang Lei và các cộng sự [4] . . . . . . . . . . . . . . . . . . . . . . .
4.1
Ma trận mối đe dọa dành cho Kubernetes và các ứng dụng được đóng gói
năm 2021 được cơng bố bởi Microsoft. Nguồn: rosoft.
com/en-us/security/blog/wp-content/uploads/2021/03/Matrix.png . 43
5.1
5.2
Bảng thống kê các lỗi tìm được trên các image của các cơng cụ.
Biểu đồ thể hiện số lỗi tìm được của các công cụ ba công cụ
container images phổ biến - nhóm 1 . . . . . . . . . . . . . . . .
Biểu đồ thể hiện số lỗi tìm được của các cơng cụ ba cơng cụ
container images phổ biến - nhóm 2 . . . . . . . . . . . . . . . .
Biểu đồ thể hiện số lỗi tìm được của các cơng cụ ba cơng cụ
container images phổ biến - nhóm 3 . . . . . . . . . . . . . . . .
5.3
5.4
ix
. . .
trên
. . .
trên
. . .
trên
. . .
. .
các
. .
các
. .
các
. .
28
29
31
32
33
. 54
. 55
. 55
. 56
5.5
Ảnh tổng quan về công cụ Trivy được lấy từ trang chủ của Trivy Nguồn:
/>5.6 Ảnh những hệ điều hành được hỗ trợ kiểm tra gói tin cài đặt có bị lỗi hay
không . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.7 Ảnh minh họa quá trình cài đặt và hướng dẫn sử dụng của Trivy . . . . .
5.8 Ảnh minh họa quá trình tải dữ liệu của Trivy. . . . . . . . . . . . . . . . .
5.9 Nguồn dữ liệu mà Trivy lấy đối với từng ngôn ngữ. . . . . . . . . . . . . .
5.10 Lược đồ Use case của Bcheck . . . . . . . . . . . . . . . . . . . . . . . . .
5.11 Lược đồ tuần tự của Bcheck . . . . . . . . . . . . . . . . . . . . . . . . . .
x
58
58
59
60
60
62
65
Danh sách bảng
4.1
Các cổng thường được sử dụng bởi Kubernetes . . . . . . . . . . . . . . . . 46
5.1
5.2
5.3
5.4
Bảng đánh giá các cơng cụ kiểm tra bảo mật
Use case: Đánh giá tình trạng hệ thống . . .
Use case: Liệt kê các mã khai thác . . . . .
Use case: Chạy mã khai thác . . . . . . . . .
6.1
6.2
Kết quả kiểm thử tính năng đánh giá hệ thống của công cụ Bcheck. . . . . 72
Kết quả kiểm thử tính năng khai thác hệ thống của công cụ Bcheck. . . . . 72
xi
tĩnh cho
. . . . .
. . . . .
. . . . .
ảnh Docker
. . . . . . .
. . . . . . .
. . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
57
63
64
64
1
Giới thiệu đề tài
1.1
Đặt vấn đề
Trong lĩnh vực công nghệ thông tin, sự phát triển luôn đi kèm với rủi ro. Bên cạnh sự
phát triển vượt bậc của công nghệ phần mềm thì hàng loạt cuộc tấn cơng đã xuất hiện
để chiếm quyền điều khiển, phá hoại các công ty cơng nghệ. Với thực tiễn đó, nhiều giải
pháp đã được đưa ra để giảm thiểu khả năng bị tấn công như là: thuê các chuyên gia bảo
mật về bảo vệ hệ thống, th dịch vụ kiểm tra tính an tồn hệ thống định kỳ, mở chương
trình săn lỗi nhận tiền thưởng (Bug Bounty),... Tuy nhiên không một doanh nghiệp nào
đủ tự tin và can đảm để tuyên bố rằng hệ thống của mình khơng thể bị tấn cơng. Điều
duy nhất họ có thể làm cho hệ thống của mình là cố gắng giảm thiểu khả năng bị tấn
công và thiệt hại xảy ra đến mức tối thiểu. Một trong những giải pháp được doanh nghiệp
quan tâm chính là xây dựng kiến trúc hạ tầng an tồn.
Ngày nay, cơng nghệ container ngày càng được ưa chuộng bởi sự tiện lợi, đơn giản
trong cách triển khai, vận chuyển phần mềm, dịch vụ. Trước khi có container, việc triển
khai ứng dụng 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 tạo ra nhiều trở ngại trong quá trình vận hành và phát triển phần mềm. Sau
khi container ra đời, nó đã giải quyết nhiều vấn đề cịn tồn đọng của mơ trình triển khai
truyền thống. Sự phát triển mạnh mẽ của công nghệ container làm cho các doanh nghiệp
có xu hướng “container hóa” mọi ứng dụng, dịch vụ của họ.
Docker và Kubernetes là hai cơng nghệ được thị trường ưa thích sử dụng. Báo cáo
năm 2020 của Flexera cho thấy rằng khoảng hai phần ba (≈ 65%) các tổ chức đang sử
dụng Docker và 14% các tổ chức dự định bắt đầu sử dụng nó tại một số điểm. Đối với
Kubernetes, 58% các tổ chức đã sử dụng và 22% người tham gia khảo sát nói rằng họ
đã lên kế hoạch áp dụng nó. Cuộc khảo sát về nhu cầu sử dụng Kubernetes năm 2022
của nhà cung cấp dịch vụ đám mây Civo1 cho thấy hơn 50% các tổ chức đang áp dụng
Kubernetes vào vận hành doanh nghiệp của họ. Hình 1.1 minh họa tổng quát mối quan
hệ giữa Docker container và Kubernetes trong một cơ sở hạ tầng (infrastructure system).
Kết quả của các cuộc khảo sát cho thấy xu hướng sử dụng Docker và Kubernetes ngày
càng nhiều. Song song với sự phát triển chúng cũng thu hút sự quan tâm của các kẻ
tấn cơng. Do đó, vấn đề bảo mật cho kiến trúc hạ tầng được triển khai bằng công nghệ
container cũng được ngày càng nhiều người quan tâm bởi cả người bảo vệ hệ thống và kẻ
tấn cơng hệ thống.
Với những lí do trên, đề tài này thực hiện với mục đích tìm hiểu, học tập các phương
pháp khai thác tấn cơng và xây dựng cơng cụ hỗ trợ q trình kiểm thử bảo mật cho
công nghệ Docker container và Kubernetes.
1
/>
1
Hình 1.1: Mối quan hệ giữa Docker container và Kubernetes trong hệ thống.
1.2
1.2.1
Nhiệm vụ, mục tiêu và phạm vi của đề tài
Nhiệm vụ
Đề tài này được thực hiện hai nhiệm vụ chính:
• Tìm hiểu, phân tích, hiện thực một số hướng tấn công thường được sử dụng để khai
thác các hệ thống Docker container và Kubernetes.
• Phát triển một cơng cụ hỗ trợ kiểm thử bảo mật cho hệ thống triển khai Docker
container.
1.2.2
Mục tiêu
Để thực hiện được hai nhiệm vụ trên, những mục tiêu cụ thể được đề ra bao gồm:
• Tìm hiểu sâu kiến thức nền tảng về kiến trúc, cách vận hành của cơng nghệ Docker
container và Kubernetes.
• Tìm hiểu, thu thập các lỗ hổng đã và đang tồn tại trên cơng nghệ Docker container
và Kubernetes. Tìm hiểu sâu các hướng tấn công, phương pháp khai thác trên nền
tảng công nghệ Docker container và Kubernetes. Hiện thực khai thác một vài lỗ
hổng phổ biến trên công nghệ Docker container chạy trên hệ điều hành Ubuntu.
• Tìm hiểu các cơng trình nghiên cứu, các cơng nghệ đang có để kiểm tra, đảm bảo
tính bảo mật cho cơng nghệ Docker container.
• Hiện thực cơng cụ tự động kiểm thử bảo mật cho Docker container, hỗ trợ cho công
việc kiểm tra xâm nhập cho kiến trúc hạ tầng.
• Cơng cụ có các yêu cầu và tính năng như sau:
– Đánh giá mơi trường Docker container để tìm kiếm các rủi ro về bảo mật như:
cấu hình sai, thơng tin nhạy cảm, lỗ hổng về kernel.
2
– Khai thác một số lỗ hổng để chứng minh mức độ thiệt hại của lỗ hổng được
tìm thấy.
1.2.3
Phạm vi của đề tài
Đề tài tiến hành nghiên cứu tổng hợp một số phương pháp khai thác tiêu biểu trên hai
công nghệ phổ biến là công nghệ Docker container và Kubernetes mà khơng xét đến các
cơng nghệ ít phổ biến hơn như là rkt, Windows Server Containers, LXC,...
Sử dụng Docker trên hệ điều hành Ubuntu 20.04 với Linux kernel Phiên bản
5.11.0-051100-generic làm môi trường thực nghiệm các phương pháp tấn công trên
Docker container. Trên Kubernetes, kubectl Phiên bản 1.25.0 sử dụng để xây dựng
môi trường kiểm thử các phương pháp tấn công trên Kubernetes. Tiến hành xây dựng
công cụ hỗ trợ q trình kiểm thử bảo mật cho Docker container.
Cơng cụ phát triển chỉ hỗ trợ kiểm thử bảo mật trên Docker container được triển khai
trên máy host2 hoặc trên hệ thống Kubernetes.
1.3
Ý nghĩa thực tiễn của đề tài
Kết quả của luận văn sẽ mang lại lợi ích cho hai đối tượng: lập trình viên và nhân viên
kiểm thử bảo mật (thường được gọi là pentester).
Với người lập trình, luận văn này hướng đến giúp tiết kiệm thời gian, công sức nghiên
cứu ở giai đoạn nhập môn. Giúp họ nắm được kiến trúc, cách thức vận hành của Docker
container, Kubernetes. Nắm được những lỗ hổng phổ biến trên Docker container, Kubernetes và biết cách phát hiện, ngăn chặn chúng. Người lập trình có thể sử dụng cơng cụ
được phát triển để xem mơi trường Docker container có an tồn hay khơng.
Với các nhân viên kiểm thử bảo mật trong lĩnh vực kiểm thử hạ tầng. Đề tài phát
triển công cụ giúp tự động hóa quy trình phát hiện và khai thác một số lỗ hổng trên
Docker container và Kubernetes. Công cụ giúp giảm thiểu thời gian, công sức, nguồn lực
trong quá trình kiểm thử bảo mật, đồng thời tạo tiền đề, cảm hứng cho các nhà nghiên
cứu về lĩnh vực tự động hóa khai thác lỗ hổng ở container và Linux kernel.
1.4
Bố cục luận văn
Báo cáo luận văn tốt nghiệp trải dài 7 chương, nội dung của từng chương trong báo cáo
sẽ bao gồm:
• 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 số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. Hình 2.1 minh họa một số quyền truy cập mà
Linux hỗ trợ.
• filesystem. 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).
5
Hình 2.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.
• namespaces. 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.
• LSMs (Linux Security Modules). Đâ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. 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. 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.
6
• daemon. 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. 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. 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. 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ự đố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. 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. 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.
7
2.2
2.2.1
Docker
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.
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 hố 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ớ.
1
/>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.
3
/>2
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. Họ có thể chia sẻ những ảnh này với nhau bằng cách
đưa lên kho chứa chung, công khai và gửi tới bạn bè, đồng nghiệp.
• Mơi trường cơ lập: Là một trong những tính năng quan trọng nhất của container.
Vì làm việc trong một mơi trường hồn tồn cơ lập với hệ thống, nên những ứng dụng
được triển khai trên container có thể chạy trên nhiều hệ điều hành như: Windows,
Linux, MacOS.
• Triển khai trên nhiều mơi trường: Nếu như với cách triển khai truyền thống,
bất kì sự thay đổi nào ở mơi trường đều có thể dẫn đến nguy cơ ứng dụng hoạt động
khơng đúng, thậm chí ngừng hoạt động thì với container, tất cả các thành phần cần
thiết để ứng dụng hoạt động đã được cài đặt và đóng gói trong container image.
Các phần mềm cho phép người dùng tạo, quản lý và chạy các container được gọi
là container engine. Một số container engine phổ biến trên thị trường như Docker,
Kubernetes.
2.2.2
Giới thiệu về Docker
Docker là công cụ phần mềm mã nguồn mở giúp tạo và chạy các ứng dụng một cách dễ
dàng, nhanh chóng trên các containers.
Docker cho phép các ứng dụng chạy độc lập với cơ sở hạ tầng của host, do đó chúng
ta có thể dễ dàng chia sẻ ứng dụng giữa các thiết bị mà không lo ngại sự khác biệt môi
trường thực thi giữa các host. Đồng thời với Docker, cơ sở hạ tầng trên host có thể được
quản lí giống như cách quản lí những ứng dụng.
2.2.3
Lợi ích của Docker
Docker thường được chọn để nghiên cứu và đem so sánh với những cơng nghệ ảo hóa
truyền thống, điển hình như Đorđevi´c et al [3], VasanthaKumari et al [6], Alyas et al. [1].
Trong các nghiên cứu của họ đều cho thấy rằng Docker có hiệu suất cao hơn so với những
cơng nghệ ảo hóa truyền thống.
Docker là một trong những cơng nghệ thành cơng nhất trong lĩnh vực ảo hóa bởi vì
sản phẩm có nhiều khả năng mà các phần mềm trước đó khơng có:
• Nhanh, phân phối nhất qn ứng dụng: Docker cho phép các nhà phát triển
làm việc trong các môi trường chuẩn, sử dụng các container được tải từ nơi cung cấp
các ứng dụng và dịch vụ, những container này được gọi là local container. Container
là một giải pháp cho quy trình làm việc CI/CD.
• Khả năng triển khai và mở rộng: Cơng nghệ ảo hóa dựa trên nền tảng contanier
đáp ứng cho khối cơng việc có khả năng linh động cao. Những container của Docker
có thể chạy trên máy của nhà phát triển, có thể chạy trên máy thật hoặc chạy trên
các máy ảo trong các trung tâm dữ liệu, các nhà cung cấp dịch vụ điện toán đám
mây hoặc trong các mơi trường hỗn hợp. Kích thước nhẹ và linh động giúp Docker
dễ dàng trong việc quản lí các công việc, mở rộng hoặc chia nhỏ các ứng dụng, dịch
vụ theo nhu cầu kinh doanh.
9
• Chạy được nhiều công việc hơn trên cùng một tài nguyên phần cứng:
Docker hoạt động hiệu quả cho cả mơi trường triển khai có mật độ cao, vừa hoặc
nhỏ, kể cả những nơi mà chúng ta cần làm việc với ít tài ngun. Vì tính chất nhẹ
và nhanh, khi triển khai ứng dụng trên Docker, người dùng có thể sử dụng nhiều
khả năng tính tốn hơn để thực hiện mục tiêu của mình.
2.2.4
Sơ bộ về cách thức vận hành của Docker
Cách thức vận hành của Docker được thể hiện ở Hình 2.3. Docker client sẽ nói chuyện với
Docker daemon để xây dựng, chạy, phân phối Docker container. Docker client và daemon
có thể chạy trên cùng một hệ thống hoặc Docker client có thể kết nối tới một trình điều
khiển Docker daemon từ xa. Các thành phần trong Hình 2.3 bao gồm:
Hình 2.3: Cách thức vận hành của Docker
Nguồn: />• Docker daemon (dockerd): Docker daemon là một daemon được sử dụng bởi hệ
thống Docker để quản lý và thực hiện các tác vụ liên quan đến việc tạo và chạy các
container trên hệ thống. Docker daemon là một chương trình mã nguồn mở và là
một phần cốt lõi của hệ thống Docker. Nó chạy trong nền và đượ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ý Docker khác. Docker daemon cung
cấp các tác vụ cơ bản như tạo và quản lý các container, quản lý các tập tin và dữ
liệu trong các container và liên kết các container với nhau và với hệ thống. Nó cũng
là nơi mà các lệnh Docker được gửi đến và xử lý.
• Docker client (docker): Docker client là một chương trình mã nguồn mở dùng để
kết nối và giao tiếp với Docker daemon trên hệ thống. Docker client cung cấp một
giao diện dòng lệnh hoặc lệnh để người dùng có thể gửi các lệnh đến Docker daemon
và nhận phản hồi từ nó. Docker client cũng cung cấp các cơng cụ để quản lý các
container, tạo và chạy các container, và quản lý các tập tin và dữ liệu trong các
container. Docker client là một phần cốt lõi của hệ thống Docker và thường được
cài đặt cùng với Docker daemon trên hệ thống.
• Docker container: Docker container là một loại container xây dựng theo chuẩn
OCI (Open Container Initiative)4 , một chuẩn được tạo ra để định nghĩa cách xây
4
/>
10
dựng và sử dụng các container trên nền tảng hệ điều hành Linux. Docker container
có thể được sử dụng để chạy các ứng dụng trên một hệ điều hành Linux mà không
làm thay đổi cấu trúc hệ điều hành gốc của máy tính.
• Docker image: Docker image là một tệp định dạng đặc biệt dùng để chứa mã
nguồn và các tập tin cần thiết để tạo ra một Docker container. Docker image bao
gồm các thông tin về cách cài đặt và cấu hình hệ thống, các tập tin và các thư viện
cần thiết cho chương trình hoặc dịch vụ được chạy trong container, và các lệnh để
khởi động và quản lý container. Docker image là một phần quan trọng của hệ thống
Docker, được sử dụng bởi Docker daemon và Docker client để tạo ra và quản lý các
container trên hệ thống.
• Docker registry: Docker registry là một dịch vụ mã nguồn mở dùng để lưu trữ và
chia sẻ các Docker objects5 , chủ yếu là các Docker images. Docker registry cung cấp
một nơi để người dùng và các nhóm có thể lưu trữ và chia sẻ các Docker images của
họ với nhau. Docker registry cũng cung cấp các tính năng như kiểm soát phiên bản,
quản lý phạm vi truy cập, quản lý các phiên bản cũ và khơng cịn được sử dụng
của các image. Docker registry là một phần quan trọng của hệ thống Docker, được
sử dụng bởi cả Docker daemon và Docker client để tìm kiếm, tải xuống, tải lên các
Docker images.
2.2.5
Một số thuộc tính cơ bản của Docker container
Một trong những điểm nổi bật của công nghệ container nằm ở cơ chế đóng gói chương
trình cùng mơi trường hoạt động. Cơ chế này giúp container tách biệt hoàn tồn với mơi
trường thực thi của host. Do đó, ứng dụng có thể triển khai trên các hệ điều hành khác
nhau, vận chuyển giữa các máy mà không lo bị lỗi thực thi do môi trường trên nhiều
máy khác nhau. Thực tế ở các doanh nghiệp triển khai phần mềm đều có ít nhất hai mơi
trường: mơi trường để phát triển dành cho các lập trình viên và mơi trường
vận hành để triển khai các sản phẩm đến người dùng. Sử dụng container sẽ giúp
quá trình di chuyển các sản phẩm từ môi trường phát triển sang môi trường sản phẩm
nhanh chóng, tiện lợi và giảm rủi ro. Bên cạnh đó, việc cơ lập mơi trường thực thi ứng
dụng với môi trường host giúp cho vấn đề bảo mật được nâng cao. Nếu một ứng dụng
đang triển khai bị kẻ tấn cơng khai thác và chiếm quyền điều khiển thì chúng sẽ bị hạn
chế trong môi trường thực thi của ứng dụng, không thể gây hại cho hệ thống container
khác và host.
Để đảm bảo sự độc lập, Docker container đã sử dụng một số thuộc tính của hệ điều
hành Linux (đã được nhắc đến ở Tiểu mục 2.1, như là:
• Credentials. Docker container sử dụng credentials để 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.
• Capabilities. Mặc định, Docker container chỉ một số quyền được bật cho container
để đảm bảo tính an tồn cho máy host khi triển khai. Hình 2.4 minh họa về một số
quyền được cấp khi triển khai container. Trong quá trình vận hành, nếu cấp quyền
khơng hợp lý có thể dẫn tới rủi ro máy host khi bị tấn công từ container.
• Filesystem. Hệ thống thư mục root filesystem trong container được cô lập với
những container khác và host.
5
Docker object là một khái niệm chung để mô tả các đối tượng liên quan đến hệ thống Docker, bao
gồm Docker image, Docker container, các tập tin và dữ liệu được liên kết với chúng
11
Hình 2.4: Một số capabilities được cấp trong container
Hệ điều hành Linux, sử dụng OverlayFS (đã đề cập ở Tiểu mục 2.1) để xây dựng
root filesystem cho Docker container. Do đó, với quyền root từ host, chúng ta vẫn
có thể truy cập vào hệ thống root filsystem của container.
Hình 2.5: Ảnh minh họa quá trình truy cập tệp tin file.txt trên Docker container từ host.
Hình 2.5 cho thấy tệp tin file.txt đang nằm trong container có thể truy cập thơng
qua đường dẫn /var/lib/docker/overlay2/hash_value/diff/file.txt
• Namespaces: Docker namespace là một tính năng của Docker, một hệ thống quản
lý container trên Linux. Docker sử dụng các namespaces để tạo ra môi trường được
độc lập cho mỗi container trên hệ thống, giúp container chạy như là một hệ thống
độc lập và không bị ảnh hưởng bởi các container khác trên hệ thống.
12
Hình 2.6: Ảnh minh họa cơ lập khơng gian người dùng
Hình 2.6 minh hoạt cơ chế cơ lập khơng gian người dùng bằng namespace của Docker
container. Người dùng với UID có giá trị 0 trên container nhưng với host, UID của
người dùng này có giá trị là 1048579. Điều đó cho thấy, một người dùng có tồn
quyền trên container nhưng có thể khơng có quyền hạn gì ở máy host.
Ngồi ra, Docker container còn sử dụng các cơ chế bảo mật do hệ điều hành Linux cung
cấp như là cgroups, LSMs, seccomp tăng cường mức độ an toàn cho hệ thống.
2.2.6
Xây dựng và quản lý image và container trong Docker
Tiểu mục này giành cho các lập trình viên có rất ít kiến thức về Docker. Hiểu rõ và thành
thạo các câu lệnh của Docker là tiền đề giúp đọc giả hiểu sâu sắc về nguyên nhân dẫn
đến các cuộc tấn cơng trên Docker container sẽ được trình bày ở chương 3.
Docker images. Các lệnh cơ bản với docker images như sau:
Hình 2.7: Các lệnh cơ bản với Docker image.
1. Dockerfile
Dockerfile là một file dạng text khơng có phần đi mở rộng, chứa các đặc tả về
một trường thực thi phần mềm, cấu trúc cho Docker Image. Từ những câu lệnh đó,
13