Một container image bao gồm một image manifest, một hệ thống tệp và một cấu hình image. 1
Ví dụ, hệ thống tệp của một container image cho ứng dụng Java sẽ có hệ thống tệp Linux, JVM và file JAR/WAR đại diện cho ứng dụng của chúng ta.
Nếu bạn đang làm việc với container, một phần quan trọng trong pipeline CI/CD nên là quá trình quét các container image này để phát hiện các lỗ hổng đã được biết.
Điều này giúp bạn có thông tin giá trị về số lượng lỗ hổng bên trong container image, giúp ngăn chặn việc triển khai ứng dụng có lỗ hổng lên môi trường production và tránh bị tấn công do các lỗ hổng này.
Lấy ví dụ về lỗ hổng Log4Shell được phát hiện cuối năm 2021.
Không đi sâu vào chi tiết, nếu ứng dụng của bạn có lỗ hổng này, kẻ tấn công có thể thực thi mã tùy ý trên máy chủ của bạn.
Điều này càng nghiêm trọng hơn khi lỗ hổng nằm trong một thư viện Java phổ biến nhất - Log4j. Điều này rất tệ!
Vậy làm sao biết ứng dụng của bạn có bị ảnh hưởng không?
Câu trả lời là Image Scanning.
Quá trình quét container image bao gồm việc kiểm tra bên trong container image, lấy danh sách các package đã cài đặt (có thể là gói Linux, Java, Go, JavaScript, v.v.), đối chiếu danh sách này với cơ sở dữ liệu lỗ hổng đã biết cho từng package, và cuối cùng tạo ra danh sách các lỗ hổng cho container image đó.
Có rất nhiều công cụ quét container image mã nguồn mở và thương mại, bạn có thể cài đặt và bắt đầu quét container image ngay lập tức, cả trên máy cá nhân hoặc trong pipeline CI/CD.
Hai công cụ phổ biến là Trivy và Grype. Một số công cụ thương mại như Snyk (cần tài khoản, có gói miễn phí) và VMware Carbon Black (cần tài khoản, không có gói miễn phí).
Việc quét một container image đơn giản như cài đặt một trong các công cụ này và chạy lệnh:
$ grype ubuntu:latest
✔ Vulnerability DB [updated]
✔ Pulled image
✔ Loaded image
✔ Parsed image
✔ Cataloged packages [101 packages]
✔ Scanned image [16 vulnerabilities]
NAME INSTALLED FIXED-IN TYPE VULNERABILITY SEVERITY
bash 5.1-6ubuntu1 deb CVE-2022-3715 Medium
coreutils 8.32-4.1ubuntu1 deb CVE-2016-2781 Low
gpgv 2.2.27-3ubuntu2.1 deb CVE-2022-3219 Low
libc-bin 2.35-0ubuntu3.1 deb CVE-2016-20013 Negligible
libc6 2.35-0ubuntu3.1 deb CVE-2016-20013 Negligible
libncurses6 6.3-2 deb CVE-2022-29458 Negligible
libncursesw6 6.3-2 deb CVE-2022-29458 Negligible
libpcre3 2:8.39-13ubuntu0.22.04.1 deb CVE-2017-11164 Negligible
libsystemd0 249.11-0ubuntu3.6 deb CVE-2022-3821 Medium
libtinfo6 6.3-2 deb CVE-2022-29458 Negligible
libudev1 249.11-0ubuntu3.6 deb CVE-2022-3821 Medium
login 1:4.8.1-2ubuntu2 deb CVE-2013-4235 Low
ncurses-base 6.3-2 deb CVE-2022-29458 Negligible
ncurses-bin 6.3-2 deb CVE-2022-29458 Negligible
passwd 1:4.8.1-2ubuntu2 deb CVE-2013-4235 Low
zlib1g 1:1.2.11.dfsg-2ubuntu9.2 deb CVE-2022-42800 Medium
Với lệnh này, chúng ta đã quét container image ubuntu:latest
và phát hiện ra có 16 lỗ hổng.
Mỗi lỗ hổng có một mức độ nghiêm trọng, dựa trên điểm số CVSS. Mức độ nghiêm trọng từ Low
đến Critical
.
16 lỗ hổng nghe có vẻ nhiều, nhưng không có lỗ hổng nào ở mức Critical
.
Cột FIXED-IN
trong bảng kết quả để trống, nghĩa là chưa có bản vá cho các lỗ hổng này ở phiên bản mới hơn của các gói đó.
Điều này là bình thường vì ubuntu:latest
là phiên bản mới nhất của container image Ubuntu chính thức.
Thông thường các container image này được cập nhật thường xuyên, nên bạn không nên thấy nhiều lỗ hổng (đặc biệt là lỗ hổng đã có bản vá).
Điều này có thể không đúng với các container image cũ, container image không chính thức, hoặc container image của bạn nếu bạn không chú ý cập nhật.
Ví dụ, nếu quét một container image cũ 2 năm của tổ chức springio
trên Docker Hub, bạn sẽ thấy nhiều lỗ hổng hơn:
$ grype springio/petclinic:latest
✔ Vulnerability DB [no update available]
✔ Pulled image
✔ Loaded image
✔ Parsed image
✔ Cataloged packages [213 packages]
✔ Scanned image [167 vulnerabilities]
NAME INSTALLED FIXED-IN TYPE VULNERABILITY SEVERITY
bash 4.4.18-2ubuntu1.2 deb CVE-2022-3715 Medium
bash 4.4.18-2ubuntu1.2 4.4.18-2ubuntu1.3 deb CVE-2019-18276 Low
coreutils 8.28-1ubuntu1 deb CVE-2016-2781 Low
dpkg 1.19.0.5ubuntu2.3 1.19.0.5ubuntu2.4 deb CVE-2022-1664 Medium
e2fsprogs 1.44.1-1ubuntu1.3 1.44.1-1ubuntu1.4 deb CVE-2022-1304 Medium
gcc-8-base 8.4.0-1ubuntu1~18.04 deb CVE-2020-13844 Medium
gpgv 2.2.4-1ubuntu1.4 2.2.4-1ubuntu1.6 deb CVE-2022-34903 Medium
gpgv 2.2.4-1ubuntu1.4 2.2.4-1ubuntu1.5 deb CVE-2019-13050 Low
gpgv 2.2.4-1ubuntu1.4 deb CVE-2022-3219 Low
gzip 1.6-5ubuntu1 1.6-5ubuntu1.2 deb CVE-2022-1271 Medium
h2 1.4.200 2.0.202 java-archive GHSA-7rpj-hg47-cx62 High
h2 1.4.200 2.0.206 java-archive GHSA-h376-j262-vhq6 Critical
h2 1.4.200 java-archive CVE-2021-23463 Critical
h2 1.4.200 java-archive CVE-2021-42392 Critical
h2 1.4.200 java-archive CVE-2022-23221 Critical
h2 1.4.200 2.1.210 java-archive GHSA-45hx-wfhj-473x Critical
jackson-databind 2.11.4 2.12.7.1 java-archive GHSA-jjjh-jjxp-wpff High
jackson-databind 2.11.4 2.12.7.1 java-archive GHSA-rgv9-q543-rqg4 High
jackson-databind 2.11.4 java-archive CVE-2022-42004 High
jackson-databind 2.11.4 java-archive CVE-2020-36518 High
jackson-databind 2.11.4 java-archive CVE-2022-42003 High
jackson-databind 2.11.4 2.12.6.1 java-archive GHSA-57j2-w4cx-62h2 High
jquery 2.2.4 java-archive CVE-2019-11358 Medium
jquery 2.2.4 java-archive CVE-2020-11022 Medium
jquery 2.2.4 java-archive CVE-2015-9251 Medium
jquery 2.2.4 java-archive CVE-2020-11023 Medium
jquery 2.2.4 java-archive CVE-2007-2379 Medium
jquery-ui 1.11.4 java-archive CVE-2021-41184 Medium
jquery-ui 1.11.4 java-archive CVE-2016-7103 Medium
jquery-ui 1.11.4 java-archive CVE-2021-41182 Medium
jquery-ui 1.11.4 java-archive CVE-2021-41183 Medium
libc-bin 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2020-29562 Low
libc-bin 2.27-3ubuntu1.4 deb CVE-2016-20013 Negligible
libc-bin 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2020-6096 Low
libc-bin 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2020-27618 Low
libc-bin 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2022-23218 Low
libc-bin 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2016-10228 Negligible
libc-bin 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2019-25013 Low
libc-bin 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2021-3326 Low
libc-bin 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2021-3999 Medium
libc-bin 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2022-23219 Low
libc-bin 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2021-35942 Low
libc-bin 2.27-3ubuntu1.4 deb CVE-2009-5155 Negligible
libc-bin 2.27-3ubuntu1.4 deb CVE-2015-8985 Negligible
libc6 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2021-3999 Medium
libc6 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2016-10228 Negligible
libc6 2.27-3ubuntu1.4 deb CVE-2009-5155 Negligible
libc6 2.27-3ubuntu1.4 deb CVE-2016-20013 Negligible
libc6 2.27-3ubuntu1.4 deb CVE-2015-8985 Negligible
libc6 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2021-3326 Low
libc6 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2021-35942 Low
libc6 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2020-27618 Low
libc6 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2020-6096 Low
libc6 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2020-29562 Low
libc6 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2022-23218 Low
libc6 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2022-23219 Low
libc6 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2019-25013 Low
libcom-err2 1.44.1-1ubuntu1.3 1.44.1-1ubuntu1.4 deb CVE-2022-1304 Medium
libext2fs2 1.44.1-1ubuntu1.3 1.44.1-1ubuntu1.4 deb CVE-2022-1304 Medium
libgcc1 1:8.4.0-1ubuntu1~18.04 deb CVE-2020-13844 Medium
libgcrypt20 1.8.1-4ubuntu1.2 1.8.1-4ubuntu1.3 deb CVE-2021-40528 Medium
libgcrypt20 1.8.1-4ubuntu1.2 1.8.1-4ubuntu1.3 deb CVE-2021-33560 Low
libgmp10 2:6.1.2+dfsg-2 2:6.1.2+dfsg-2ubuntu0.1 deb CVE-2021-43618 Low
libgnutls30 3.5.18-1ubuntu1.4 3.5.18-1ubuntu1.6 deb CVE-2021-4209 Low
libgnutls30 3.5.18-1ubuntu1.4 deb CVE-2018-16868 Low
libgnutls30 3.5.18-1ubuntu1.4 3.5.18-1ubuntu1.6 deb CVE-2022-2509 Medium
libhogweed4 3.4-1ubuntu0.1 3.4.1-0ubuntu0.18.04.1 deb CVE-2021-3580 Medium
libhogweed4 3.4-1ubuntu0.1 3.4.1-0ubuntu0.18.04.1 deb CVE-2018-16869 Low
liblz4-1 0.0~r131-2ubuntu3 0.0~r131-2ubuntu3.1 deb CVE-2021-3520 Medium
liblzma5 5.2.2-1.3 5.2.2-1.3ubuntu0.1 deb CVE-2022-1271 Medium
libncurses5 6.1-1ubuntu1.18.04 deb CVE-2019-17594 Negligible
libncurses5 6.1-1ubuntu1.18.04 deb CVE-2021-39537 Negligible
libncurses5 6.1-1ubuntu1.18.04 deb CVE-2022-29458 Negligible
libncurses5 6.1-1ubuntu1.18.04 deb CVE-2019-17595 Negligible
libncursesw5 6.1-1ubuntu1.18.04 deb CVE-2019-17595 Negligible
libncursesw5 6.1-1ubuntu1.18.04 deb CVE-2021-39537 Negligible
libncursesw5 6.1-1ubuntu1.18.04 deb CVE-2022-29458 Negligible
libncursesw5 6.1-1ubuntu1.18.04 deb CVE-2019-17594 Negligible
libnettle6 3.4-1ubuntu0.1 3.4.1-0ubuntu0.18.04.1 deb CVE-2021-3580 Medium
libnettle6 3.4-1ubuntu0.1 3.4.1-0ubuntu0.18.04.1 deb CVE-2018-16869 Low
libpcre3 2:8.39-9 deb CVE-2017-11164 Negligible
libpcre3 2:8.39-9 2:8.39-9ubuntu0.1 deb CVE-2020-14155 Negligible
libpcre3 2:8.39-9 2:8.39-9ubuntu0.1 deb CVE-2019-20838 Low
libsepol1 2.7-1 2.7-1ubuntu0.1 deb CVE-2021-36086 Low
libsepol1 2.7-1 2.7-1ubuntu0.1 deb CVE-2021-36085 Low
libsepol1 2.7-1 2.7-1ubuntu0.1 deb CVE-2021-36087 Low
libsepol1 2.7-1 2.7-1ubuntu0.1 deb CVE-2021-36084 Low
libss2 1.44.1-1ubuntu1.3 1.44.1-1ubuntu1.4 deb CVE-2022-1304 Medium
libssl1.1 1.1.1-1ubuntu2.1~18.04.9 1.1.1-1ubuntu2.1~18.04.15 deb CVE-2022-0778 High
libssl1.1 1.1.1-1ubuntu2.1~18.04.9 1.1.1-1ubuntu2.1~18.04.20 deb CVE-2022-2097 Medium
libssl1.1 1.1.1-1ubuntu2.1~18.04.9 1.1.1-1ubuntu2.1~18.04.13 deb CVE-2021-3712 Medium
libssl1.1 1.1.1-1ubuntu2.1~18.04.9 1.1.1-1ubuntu2.1~18.04.13 deb CVE-2021-3711 High
libssl1.1 1.1.1-1ubuntu2.1~18.04.9 1.1.1-1ubuntu2.1~18.04.17 deb CVE-2022-1292 Medium
libssl1.1 1.1.1-1ubuntu2.1~18.04.9 1.1.1-1ubuntu2.1~18.04.19 deb CVE-2022-2068 Medium
libstdc++6 8.4.0-1ubuntu1~18.04 deb CVE-2020-13844 Medium
libsystemd0 237-3ubuntu10.47 237-3ubuntu10.56 deb CVE-2022-2526 Medium
libsystemd0 237-3ubuntu10.47 deb CVE-2022-3821 Medium
libsystemd0 237-3ubuntu10.47 237-3ubuntu10.49 deb CVE-2020-13529 Low
libsystemd0 237-3ubuntu10.47 237-3ubuntu10.49 deb CVE-2021-33910 High
libtinfo5 6.1-1ubuntu1.18.04 deb CVE-2019-17595 Negligible
libtinfo5 6.1-1ubuntu1.18.04 deb CVE-2021-39537 Negligible
libtinfo5 6.1-1ubuntu1.18.04 deb CVE-2019-17594 Negligible
libtinfo5 6.1-1ubuntu1.18.04 deb CVE-2022-29458 Negligible
libudev1 237-3ubuntu10.47 237-3ubuntu10.49 deb CVE-2020-13529 Low
libudev1 237-3ubuntu10.47 237-3ubuntu10.49 deb CVE-2021-33910 High
libudev1 237-3ubuntu10.47 deb CVE-2022-3821 Medium
libudev1 237-3ubuntu10.47 237-3ubuntu10.56 deb CVE-2022-2526 Medium
locales 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2022-23219 Low
locales 2.27-3ubuntu1.4 deb CVE-2016-20013 Negligible
locales 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2021-3999 Medium
locales 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2016-10228 Negligible
locales 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2019-25013 Low
locales 2.27-3ubuntu1.4 deb CVE-2009-5155 Negligible
locales 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2021-35942 Low
locales 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2022-23218 Low
locales 2.27-3ubuntu1.4 deb CVE-2015-8985 Negligible
locales 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2020-27618 Low
locales 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2020-29562 Low
locales 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2021-3326 Low
locales 2.27-3ubuntu1.4 2.27-3ubuntu1.5 deb CVE-2020-6096 Low
log4j-api 2.13.3 java-archive CVE-2021-45105 Medium
log4j-api 2.13.3 java-archive CVE-2021-44832 Medium
log4j-to-slf4j 2.13.3 java-archive CVE-2021-44832 Medium
log4j-to-slf4j 2.13.3 java-archive CVE-2021-45105 Medium
logback-core 1.2.3 1.2.9 java-archive GHSA-668q-qrv7-99fm Medium
login 1:4.5-1ubuntu2 deb CVE-2013-4235 Low
login 1:4.5-1ubuntu2 1:4.5-1ubuntu2.2 deb CVE-2018-7169 Low
ncurses-base 6.1-1ubuntu1.18.04 deb CVE-2022-29458 Negligible
ncurses-base 6.1-1ubuntu1.18.04 deb CVE-2019-17595 Negligible
ncurses-base 6.1-1ubuntu1.18.04 deb CVE-2019-17594 Negligible
ncurses-base 6.1-1ubuntu1.18.04 deb CVE-2021-39537 Negligible
ncurses-bin 6.1-1ubuntu1.18.04 deb CVE-2021-39537 Negligible
ncurses-bin 6.1-1ubuntu1.18.04 deb CVE-2022-29458 Negligible
ncurses-bin 6.1-1ubuntu1.18.04 deb CVE-2019-17595 Negligible
ncurses-bin 6.1-1ubuntu1.18.04 deb CVE-2019-17594 Negligible
openssl 1.1.1-1ubuntu2.1~18.04.9 1.1.1-1ubuntu2.1~18.04.13 deb CVE-2021-3712 Medium
openssl 1.1.1-1ubuntu2.1~18.04.9 1.1.1-1ubuntu2.1~18.04.19 deb CVE-2022-2068 Medium
openssl 1.1.1-1ubuntu2.1~18.04.9 1.1.1-1ubuntu2.1~18.04.20 deb CVE-2022-2097 Medium
openssl 1.1.1-1ubuntu2.1~18.04.9 1.1.1-1ubuntu2.1~18.04.13 deb CVE-2021-3711 High
openssl 1.1.1-1ubuntu2.1~18.04.9 1.1.1-1ubuntu2.1~18.04.15 deb CVE-2022-0778 High
openssl 1.1.1-1ubuntu2.1~18.04.9 1.1.1-1ubuntu2.1~18.04.17 deb CVE-2022-1292 Medium
passwd 1:4.5-1ubuntu2 1:4.5-1ubuntu2.2 deb CVE-2018-7169 Low
passwd 1:4.5-1ubuntu2 deb CVE-2013-4235 Low
perl-base 5.26.1-6ubuntu0.5 5.26.1-6ubuntu0.6 deb CVE-2020-16156 Medium
snakeyaml 1.27 java-archive GHSA-w37g-rhq8-7m4j Medium
snakeyaml 1.27 1.32 java-archive GHSA-9w3m-gqgf-c4p9 Medium
snakeyaml 1.27 1.31 java-archive GHSA-3mc7-4q67-w48m High
snakeyaml 1.27 1.31 java-archive GHSA-c4r9-r8fh-9vj2 Medium
snakeyaml 1.27 1.31 java-archive GHSA-hhhw-99gj-p3c3 Medium
snakeyaml 1.27 1.31 java-archive GHSA-98wm-3w3q-mw94 Medium
spring-core 5.3.6 java-archive CVE-2022-22950 Medium
spring-core 5.3.6 java-archive CVE-2022-22965 Critical
spring-core 5.3.6 java-archive CVE-2021-22096 Medium
spring-core 5.3.6 java-archive CVE-2022-22968 Medium
spring-core 5.3.6 java-archive CVE-2022-22970 Medium
spring-core 5.3.6 java-archive CVE-2022-22971 Medium
spring-core 5.3.6 java-archive CVE-2021-22118 High
spring-core 5.3.6 java-archive CVE-2016-1000027 Critical
spring-core 5.3.6 java-archive CVE-2021-22060 Medium
tar 1.29b-2ubuntu0.2 1.29b-2ubuntu0.3 deb CVE-2021-20193 Low
zlib1g 1:1.2.11.dfsg-0ubuntu2 1:1.2.11.dfsg-0ubuntu2.2 deb CVE-2022-37434 Medium
zlib1g 1:1.2.11.dfsg-0ubuntu2 1:1.2.11.dfsg-0ubuntu2.1 deb CVE-2018-25032 Medium
zlib1g 1:1.2.11.dfsg-0ubuntu2 deb CVE-2022-42800 Medium
Ở đây, không chỉ có nhiều lỗ hổng Critical
hơn, mà còn có nhiều lỗ hổng đã được vá ở phiên bản mới hơn của các dependency. Điều này có nghĩa là chỉ cần nâng cấp phiên bản dependency là có thể loại bỏ lỗ hổng và làm container image an toàn hơn.
Tất nhiên, không phải lúc nào cũng đơn giản như vậy. Đôi khi, phiên bản mới của dependency có thể thay đổi API gây lỗi cho mã nguồn, thay đổi hành vi hoặc thậm chí có thể có lỗi mới mà bạn muốn tránh cho đến khi được sửa.
Một điều nữa là kiểu quét này chỉ phát hiện lỗ hổng đã biết. Tức là, các lỗ hổng đã được các nhà nghiên cứu bảo mật phát hiện và gán mã CVE. Có thể vẫn còn lỗ hổng chưa được phát hiện và vẫn tồn tại trong mã/dependency của bạn (Log4Shell tồn tại từ 2013 nhưng đến 2021 mới bị phát hiện).
Tóm lại, quét container image không phải là giải pháp hoàn hảo. Nếu công cụ quét báo không có lỗ hổng, không có nghĩa là bạn hoàn toàn an toàn.
Việc khắc phục lỗ hổng có thể đơn giản như nâng cấp hoặc hạ cấp phiên bản dependency, nhưng đôi khi sẽ phức tạp hơn vì có thể cần sửa mã nguồn.
CVEs
Trong bảng lỗ hổng của công cụ quét, bạn sẽ thấy các mã bắt đầu bằng CVE-
:
bash 4.4.18-2ubuntu1.2 deb CVE-2022-3715 Medium
CVE là viết tắt của Common Vulnerability and Exposures.
Đây là hệ thống giúp theo dõi lỗ hổng và dễ dàng tìm kiếm chúng.
Mỗi khi phát hiện lỗ hổng mới, nó sẽ được gán mã CVE bởi CNA (CVE Numbering Authority) và liên kết với tất cả các thành phần bị ảnh hưởng.
Sau đó, thông tin này sẽ được cập nhật vào các cơ sở dữ liệu lỗ hổng và các công cụ quét container image có thể sử dụng để cảnh báo về các CVE/lỗ hổng có trong container image của bạn.
Tóm tắt
Bây giờ bạn đã biết tại sao quét container image lại quan trọng và nó giúp bảo mật hơn như thế nào. Trong ngày 15 chúng ta sẽ tìm hiểu sâu hơn về cách các công cụ quét container image hoạt động, bao gồm SBOM và cơ sở dữ liệu lỗ hổng.
Các bài viết là bản tiếng Việt của tài liệu 90DaysOfDevOps của Micheal Cade và có qua sửa đổi, bổ sung. Tất cả đều có license [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License][cc-by-nc-sa].