Chủ Nhật, 24 tháng 8, 2025

Sử dụng Trivy Container Scanner để Phát hiện Lỗ hổng

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.

Quét lỗ hổng Docker bằng trivy

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.

  1. 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.
  2. Cao – Nó có thể gây rò rỉ dữ liệu.
  3. Trung bình – Nó có thể làm cho hệ thống không khả dụng cho người dùng.
  4. 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:

  1. Hình ảnh container
  2. Hệ thống tệp
  3. 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.

  1. 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.
  2. 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.
  3. 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.
  4. 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:

  1. 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.
  2. 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.
  3. 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

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master