Bài viết này bao gồm các bước cần thiết để bảo mật hình ảnh Docker của bạn chống lại các lỗ hổng tiềm ẩn bằng cách sử dụng Trivy Container Scanner.
Trivy là gì?
Trivy là một công cụ quét bảo mật mã nguồn mở quét các lỗ hổng trong container và các tài nguyên khác. Nó có một cơ sở dữ liệu nội bộ gọi là trivy-db chứa thông tin về các lỗ hổng khác nhau.
Nó được tạo và duy trì bởi AquaSecurity
Trivy không chỉ quét lỗ hổng mà còn đưa ra các đề xuất để giải quyết vấn đề và liên kết đến dữ liệu lỗ hổng để biết thêm thông tin.
Trivy có thể truy cập một loạt thông tin lỗ hổng từ các cơ sở dữ liệu lỗ hổng khác nhau và sử dụng dữ liệu lỗ hổng từ các cơ sở dữ liệu đó để phát hiện các vấn đề bảo mật. Một số cơ sở dữ liệu lỗ hổng bao gồm National Vulnerability Database (NVD), Red Hat Security Data và Alpine SecDB.
Khi quét, Trivy so sánh các gói phần mềm và thư viện trong thư mục hoặc hình ảnh container với thông tin trong cơ sở dữ liệu lỗ hổng và nếu tìm thấy sự trùng khớp, điều đó có nghĩa là gói hoặc thư viện trong hình ảnh container có lỗ hổng. Sau đó, Trivy báo cáo các lỗ hổng này cùng với các chi tiết khác như mức độ nghiêm trọng, phiên bản bị ảnh hưởng và các đề xuất sửa chữa.
Trivy cập nhật cơ sở dữ liệu của nó mỗi 6 giờ. Khi bạn bắt đầu quét, trivy tự động cập nhật cơ sở dữ liệu để bạn không cần phải theo dõi các bản cập nhật cơ sở dữ liệu.
Một tính năng quan trọng khác của Trivy là tạo SBOM. Nó cung cấp một danh sách chi tiết tất cả các thành phần được sử dụng trong phần mềm, bao gồm các thư viện mã nguồn mở và bên thứ ba.
Cài đặt Trivy
Hãy xem cách cài đặt Trivy trên Ubuntu, làm theo các bước dưới đây để cài đặt Trivy.
Đối với các nền tảng khác, vui lòng truy cập trang cài đặt chính thức.
Bước 1: Đầu tiên, cài đặt các phụ thuộc cần thiết cho Trivy bằng lệnh dưới đây:
sudo apt-get install wget apt-transport-https gnupg lsb-release
Bước 2: Tải khóa công khai và kho lưu trữ Trivy bằng các lệnh dưới đây:
wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | gpg --dearmor | sudo tee /usr/share/keyrings/trivy.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/trivy.gpg] https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main" | sudo tee -a /etc/apt/sources.list.d/trivy.list
Bước 3: Cập nhật kho lưu trữ bằng lệnh update.
sudo apt update -y
Bước 4: Cài đặt Trivy bằng lệnh:
sudo apt install trivy
Để xác minh cài đặt và hiểu tất cả các tùy chọn có sẵn, chạy lệnh trợ giúp trivy sau.
trivy -h
Bạn sẽ nhận được kết quả như dưới đây.
trivy -h
Cách sử dụng
trivy [cờ toàn cục] lệnh [cờ] mục tiêu
trivy [lệnh]
Quét một hình ảnh container
trivy image python:3.4-alpine
Quét một hình ảnh container từ tệp tar
trivy image --input ruby-3.1.tar
Quét hệ thống tệp cục bộ
trivy fs .
Chạy ở chế độ máy chủ
trivy server
Lệnh Quét
aws [THỬ NGHIỆM] Quét tài khoản AWS
config Quét các tệp cấu hình để tìm các cấu hình sai
filesystem Quét hệ thống tệp cục bộ
image Quét một hình ảnh container
kubernetes [THỬ NGHIỆM] Quét cụm Kubernetes
repository Quét một kho lưu trữ từ xa
rootfs Quét rootfs
sbom Quét SBOM để tìm lỗ hổng
vm [THỬ NGHIỆM] Quét một hình ảnh máy ảo
Lệnh Quản lý
module Quản lý các module
plugin Quản lý các plugin
Lệnh Tiện ích
completion Tạo tập lệnh tự động hoàn thành cho shell được chỉ định
convert Chuyển đổi báo cáo JSON của Trivy sang định dạng khác
help Trợ giúp về bất kỳ lệnh nào
server Chế độ máy chủ
version Hiển thị phiên bản
Cờ:
--cache-dir string thư mục cache (mặc định "/Users/bibinwilson/Library/Caches/trivy")
-c, --config string đường dẫn cấu hình (mặc định "trivy.yaml")
-d, --debug chế độ gỡ lỗi
-f, --format string định dạng phiên bản (json)
--generate-default-config ghi cấu hình mặc định vào trivy-default.yaml
-h, --help trợ giúp cho trivy
--insecure cho phép kết nối máy chủ không an toàn
-q, --quiet ẩn thanh tiến trình và đầu ra nhật ký
--timeout duration thời gian chờ (mặc định 5m0s)
-v, --version hiển thị phiên bản
Sử dụng “trivy [lệnh] –help” để biết thêm thông tin về một lệnh.
Sử dụng Trivy để Quét Lỗ hổng
Bất cứ khi nào bạn chạy lệnh Trivy để quét lỗ hổng, nó sẽ tải xuống cơ sở dữ liệu liên quan trước và so sánh nó với các lỗ hổng được liệt kê trong cơ sở dữ liệu.
Trivy hiển thị mức độ rủi ro của lỗ hổng là nghiêm trọng, cao, trung bình và thấp.
- Nghiêm trọng – Đây là lỗ hổng nghiêm trọng nhất cần được khắc phục càng sớm càng tốt vì nó có thể cho phép kiểm soát quản trị hệ thống.
- Cao – Nó có thể gây rò rỉ dữ liệu.
- Trung bình – Nó có thể làm cho hệ thống không khả dụng cho người dùng.
- Thấp – Có thể giải quyết trong quá trình bảo trì thường xuyên.
Chúng ta có thể sử dụng Trivy để quét các mục tiêu sau:
- Hình ảnh container
- Hệ thống tệp
- Kho lưu trữ Git từ xa
Cũng có các tính năng thử nghiệm để quét cấu hình Kubernetes & AWS.
Trivy sử dụng các lệnh khác nhau để quét các mục tiêu được đề cập ở trên.
Hình ảnh sau đây cho thấy các thành phần cấp cao và quy trình quét container.
Quy trình Quét Hình ảnh Docker với Trivy
Quét Hình ảnh Container với Trivy
Để bắt đầu, bạn cần cài đặt trivy trên hệ thống của mình hoặc nút CI agent nơi bạn muốn triển khai quét hình ảnh Docker.
Bạn có thể tìm thấy các bước cài đặt tại trang cài đặt chính thức của Trivy
Quét hình ảnh Docker bằng Trivy rất dễ dàng. Bạn chỉ cần chạy lệnh trivy sau với tên hình ảnh bạn muốn quét.
trivy image <tên docker image>
Ví dụ, tôi có một hình ảnh có tên techiescamp/pet-clinic-app
trên máy tính của mình. Đó là một hình ảnh Docker với ứng dụng java spring boot
Tôi có thể quét hình ảnh bằng lệnh sau. Trivy quét cả lỗ hổng trong hình ảnh và tệp jar java là một phần của hình ảnh. Kết quả quét sẽ được hiển thị ở định dạng dễ đọc.
trivy image techiescamp/pet-clinic-app:1.0.0
Kết quả quét cho thấy không có lỗ hổng cao hoặc nghiêm trọng trong hình ảnh.
Ngoài ra, nó hiển thị 2 lỗ hổng cao cho tệp jar bên trong hình ảnh Docker.
Kết quả quét jar trong hình ảnh Docker của Trivy
Trivy có thể được sử dụng theo nhiều cách. Dưới đây là một số ví dụ về cách sử dụng nâng cao:
Quét theo mức độ nghiêm trọng
Trivy có thể quét các lỗ hổng có mức độ nghiêm trọng cụ thể. Để làm điều này, sử dụng cờ --severity <mức độ nghiêm trọng>
để chỉ định mức độ nghiêm trọng của lỗ hổng mà bạn cần quét.
trivy image --severity CRITICAL techiescamp/pet-clinic-app:1.0.0
Đầu ra dưới dạng JSON
Trivy cũng có thể cung cấp đầu ra dưới dạng JSON. Để làm điều này, sử dụng cờ --format json
, nó sẽ hiển thị kết quả quét dưới dạng JSON.
trivy image --format json techiescamp/pet-clinic-app:1.0.0
Bỏ qua các lỗ hổng đã được sửa
Có những lỗ hổng không thể sửa ngay cả khi các gói được cập nhật (không được vá/không được sửa). Trivy có thể quét hình ảnh bỏ qua các lỗ hổng đó. Để làm điều này, sử dụng cờ --ignore-unfixed
.
trivy image --ignore-unfixed java:0.1
Quét Hình ảnh Docker dạng tar
Có những tình huống bạn có thể có hình ảnh Docker ở định dạng tar. Trong trường hợp này, bạn có thể sử dụng trivy để quét hình ảnh ở định dạng tar.
Ví dụ,
trivy image --input petclinic-app.tar
Quét Trivy trong Quy trình Xây dựng Hình ảnh Docker
Trivy đóng vai trò quan trọng trong quy trình CI/CD về xây dựng docker image. Các tổ chức sử dụng trivy để quét lỗ hổng trong quy trình CI/CD để đảm bảo một hình ảnh an toàn được triển khai trong sản xuất.
Khi sử dụng trong quy trình CI/CD, công việc pipeline nên thất bại nếu có bất kỳ lỗ hổng nào trong hình ảnh. Mức độ nghiêm trọng phụ thuộc vào tuân thủ bảo mật của tổ chức. Ví dụ, một số tổ chức có thể có hướng dẫn nghiêm ngặt để làm thất bại bản dựng cho cả mức độ nghiêm trọng CAO và NGHIÊM TRỌNG.
Bây giờ, cách tốt nhất để làm thất bại bản dựng là sử dụng mã thoát.
Để làm điều này, sử dụng cờ --severity
và --exit-code 1
với lệnh trivy như dưới đây. Nó sẽ làm cho Trivy thoát với mã thoát khác không nếu tìm thấy bất kỳ lỗ hổng nào cho các mức độ nghiêm trọng được chỉ định
trivy image --severity HIGH,CRITICAL --exit-code 1 techiescamp/pet-clinic-app:1.0.0
Ngoài ra, bạn có thể gửi báo cáo lỗ hổng như một thông báo thất bại bản dựng đến các nhà phát triển và kỹ sư DevOps.
Một cách tiếp cận được khuyến nghị là sử dụng tệp cấu hình Trivy để đặt các giá trị mặc định cho một lần quét. Bạn có thể sử dụng tệp này để đáp ứng các yêu cầu quét cụ thể cho nhu cầu dự án của bạn.
Dưới đây là một ví dụ về tệp trivy.yaml
timeout: 10m
format: json
dependency-tree: true
list-all-pkgs: true
exit-code: 1
output: result.json
severity:
- HIGH
- CRITICAL
scan:
skip-dirs:
- /lib64
- /lib
- /usr/lib
- /usr/include
security-checks:
- vuln
- secret
vulnerability:
type:
- os
- library
ignore-unfixed: true
db:
skip-update: false
Dưới đây là cú pháp để sử dụng tệp cấu hình
trivy image --config đường/dẫn/đến/trivy.yaml tên-hình-ảnh-của-bạn:tag
Tạo Bảng Kê Khai Phần mềm (SBOM)
Một SBOM là danh sách đầy đủ tất cả các thành phần được sử dụng trong một ứng dụng phần mềm, chẳng hạn như thư viện, framework và module, bao gồm cả phiên bản của chúng.
Nó giúp xác định các lỗ hổng tiềm ẩn, quản lý giấy phép và duy trì phần mềm hiệu quả hơn.
Ví dụ, các lỗ hổng như Log4j (CVE-2021-44228) ảnh hưởng đến nhiều tổ chức. Với SBOM, các tổ chức có thể nhanh chóng tìm kiếm trên toàn bộ hệ sinh thái phần mềm của mình để xác định ứng dụng hoặc dịch vụ nào sử dụng Log4j và thực hiện các biện pháp khắc phục.
Trivy có thể tạo SBOM ở định dạng CycloneDX và SPDX.
Sử dụng lệnh dưới đây để tạo SBOM ở định dạng CycloneDX hoặc SPDX.
trivy image --format spdx-json --output result.json techiescamp/pet-clinic-app:1.0.0
trivy image --format cyclonedx --output result.json techiescamp/pet-clinic-app:1.0.0
Trivy cũng có khả năng quét lỗ hổng bằng cách sử dụng tệp SBOM, sử dụng lệnh sau để quét lỗ hổng bằng tệp SBOM
trivy sbom result.json
Quét Hệ thống Tệp
Lệnh được sử dụng để quét hệ thống tệp được đưa ra dưới đây:
trivy fs <đường dẫn thư mục>
Ví dụ, nếu đường dẫn thư mục là Documents/jenkins-pipeline/ thì lệnh sẽ là:
trivy fs Documents/jenkins-pipeline/
Nó sẽ quét thư mục và hiển thị lỗ hổng trong thư mục như dưới đây.
Quét Kho lưu trữ Git
Lệnh được sử dụng để quét kho lưu trữ Git được đưa ra dưới đây:
trivy repo <URL kho lưu trữ>
Nếu bạn đang sử dụng kho lưu trữ riêng tư, bạn cần cung cấp mã thông báo git của bạn để xác thực như dưới đây.
export GITHUB_TOKEN=<mã thông báo git>
trivy repo <URL kho lưu trữ>
Bạn cũng có thể xem hướng dẫn video chính thức về Trivy scanner để xem Trivy hoạt động.
Trivy Quét Gì Trong Hình ảnh Container?
Dưới đây là các yếu tố chính trong hình ảnh Docker được quét bởi Trivy.
- Trivy có thể quét lỗ hổng trong nhiều trình quản lý gói, bao gồm apt, yum, apk và npm. Điều này có nghĩa là Trivy có thể quét lỗ hổng trong các hình ảnh sử dụng nhiều phụ thuộc phần mềm khác nhau.
- Trivy có thể quét lỗ hổng trong cả hình ảnh Linux và Windows. Điều này có nghĩa là bạn có thể sử dụng Trivy để quét các hình ảnh sẽ chạy trên máy chủ Linux hoặc Windows.
- Trivy có thể quét lỗ hổng trong các hình ảnh được lưu trữ ở nhiều định dạng khác nhau, bao gồm hình ảnh Docker, tệp tar và hệ thống tệp. Điều này có nghĩa là bạn có thể sử dụng Trivy để quét các hình ảnh được lưu trữ ở nhiều vị trí khác nhau.
- Trivy có thể quét lỗ hổng trong các hình ảnh Docker chạy trong các môi trường khác nhau, bao gồm các container Docker thông thường và Kube pod. Điều này có nghĩa là bạn có thể sử dụng Trivy để quét các hình ảnh đang chạy trong bất kỳ môi trường nào mà bạn sử dụng.
Lợi ích của Quét Lỗ hổng Hình ảnh Container với Trivy
Xem xét sự gia tăng lỗ hổng, có nhiều lợi ích của việc quét hình ảnh Docker với Trivy.
Một số lợi ích bao gồm:
- Xác định lỗ hổng: Trivy có thể xác định lỗ hổng trong các gói được sử dụng trong hình ảnh Docker của bạn. Điều này đặc biệt hữu ích trong việc vá hình ảnh cơ sở và xây dựng hình ảnh ứng dụng.
- Cải thiện tình trạng bảo mật: Bằng cách quét hình ảnh của bạn để tìm lỗ hổng, bạn có thể cải thiện tình trạng bảo mật của tổ chức.
- Tuân thủ Bảo mật: Nhiều tổ chức được yêu cầu kiểm tra hình ảnh Docker của họ để tìm lỗ hổng như một phần của tuân thủ bảo mật. Bạn có thể đạt được các tiêu chuẩn này với sự trợ giúp của Trivy.
Tham khảo
Using Trivy Container Scanner to Detect Vulnerabilities (Comprehensive Guide)
Website không chứa bất kỳ quảng cáo nào, mọi đóng góp để duy trì phát triển cho website (donation) xin vui lòng gửi về STK 90.2142.8888 - Ngân hàng Vietcombank Thăng Long - TRAN VAN BINH
=============================
Nếu bạn không muốn bị AI thay thế và tiết kiệm 3-5 NĂM trên con đường trở thành DBA chuyên nghiệp hay làm chủ Database thì hãy đăng ký ngay KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE, được Coaching trực tiếp từ tôi với toàn bộ bí kíp thực chiến, thủ tục, quy trình của gần 20 năm kinh nghiệm (mà bạn sẽ KHÔNG THỂ tìm kiếm trên Internet/Google) từ đó giúp bạn dễ dàng quản trị mọi hệ thống Core tại Việt Nam và trên thế giới, đỗ OCP.
- CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
- Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
2 khóa học online qua video giúp bạn nhanh chóng có những kiến thức nền tảng về Linux, Oracle, học mọi nơi, chỉ cần có Internet/4G:
- Oracle cơ bản: https://bit.ly/admin_1200
- Linux: https://bit.ly/linux_1200
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội
=============================
cở sở dữ liệu, cơ sở dữ liệu quốc gia, database, AI, trí tuệ nhân tạo, artificial intelligence, machine learning, deep learning, LLM, ChatGPT, DeepSeek, Grok, oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty