Phạm Văn Thư
Bảo mật và danh tính · AI-assisted content

Trivy: quét lỗ hổng và bí mật trước khi mùa sự kiện bắt đầu

Đăng ngày 12/10/2026

Mục lục bài nghiên cứu
Hình đại diện Trivy — bảo mật và quản lý danh tính mã nguồn mở

Trivy trả lời câu hỏi nào, và câu hỏi nào vẫn để lại cho đội kỹ thuật

Trivy là công cụ quét bảo mật được README mô tả là toàn diện và linh hoạt. Nó chia việc thành hai trục: đối tượng cần quét (target) như ảnh container, hệ thống tệp, kho Git từ xa, ảnh máy ảo và Kubernetes, và loại vấn đề cần tìm (scanner) như gói phần mềm và phụ thuộc, lỗ hổng đã biết (CVE), lỗi cấu hình hạ tầng, thông tin bí mật và giấy phép phần mềm. [1]

Công cụ trả lời được câu hỏi đại loại là trong gói này có thành phần nào đã bị công bố lỗ hổng, hay kho mã này có lộ khóa truy cập không. Nó không trả lời thay cho việc lỗ hổng nào thật sự bị khai thác trong hệ thống của bạn, ai sẽ vá và vá trước ngày nào. Kết quả quét là đầu vào của quy trình, không phải kết luận.

Khuyến nghị: nên thử khi tổ chức đã đóng gói phần mềm thành container hoặc có nhiều kho mã do đối tác viết, và có người xử lý kết quả. Chưa nên đặt làm cổng chặn bắt buộc ngay từ ngày đầu, vì báo động giả hoặc lỗ hổng chưa có bản vá sẽ làm kẹt quy trình phát hành.

Mùa sự kiện, mã nguồn mọc nhanh và bí mật rò theo

Một đơn vị tổ chức sự kiện thường phải dựng trang đăng ký, hệ thống bán vé, ứng dụng check-in và vài microsite trong vài tuần, đôi khi do nhiều đối tác lập trình khác nhau thực hiện. Sau sự kiện, các hệ thống ít được chăm sóc. Hai rủi ro lớn nảy ra: thư viện cũ mang lỗ hổng đã công khai và khóa truy cập quên trong kho mã.

Trivy đối ứng cả hai bằng cùng một giao diện dòng lệnh. Cú pháp tổng quát trong tài liệu là trivy kèm đối tượng, tùy chọn scanners và đích quét. Ví dụ quét ảnh container, quét thư mục dự án với các bộ quét vuln, secret và misconfig, hay quét cụm Kubernetes với báo cáo tóm tắt. [1][5]

Cần phân định rõ: quét tìm lỗ hổng so khớp thành phần với cơ sở dữ liệu lỗ hổng, còn quét bí mật tìm mẫu văn bản. Hai việc có độ tin cậy và cách xử lý khác nhau. Lỗ hổng được xếp theo mức độ, bí mật bị lộ thì phải thu hồi và thay mới chứ không chỉ xóa khỏi kho. [9]

Target, scanner và cơ sở dữ liệu: ba trục quyết định cách Trivy vận hành

Trục thứ nhất là target. README liệt kê năm loại đối tượng gồm container image, filesystem, git repository từ xa, virtual machine image và Kubernetes. [1] Trục thứ hai là scanner với năm nhóm: SBOM của gói hệ điều hành và phụ thuộc, lỗ hổng, lỗi cấu hình hạ tầng dạng mã (IaC), thông tin bí mật và giấy phép. [1]

Trục thứ ba là dữ liệu tri thức mà scanner dùng. Tài liệu self-hosting cho biết các cơ sở dữ liệu của Trivy được đóng gói thành ảnh OCI, gồm trivy-db, trivy-java-db và trivy-checks. [6] Cơ sở dữ liệu lỗ hổng phục vụ quét CVE, Java DB phục vụ nhận diện gói Java, còn checks là bộ kiểm tra cấu hình. Tài liệu kết nối cũng nói bộ checks được nhúng sẵn trong tệp nhị phân lúc build và dùng làm phương án dự phòng khi nguồn ngoài không truy cập được. [8]

Hệ quả kiến trúc: kết quả quét phụ thuộc vào ba thứ có vòng đời khác nhau là phiên bản Trivy, phiên bản cơ sở dữ liệu và nội dung mục tiêu. Cùng một ảnh có thể cho kết quả khác sau một tuần chỉ vì cơ sở dữ liệu đã cập nhật. Tài liệu nhắc phải tự giữ cơ sở dữ liệu mới nếu đặt bản sao riêng. [6]

k8s summary — Trivy, bảo mật và quản lý danh tính mã nguồn mở
Hình 1. Minh họa trong kho mã nguồn chính thức của Trivy. Nguồn: aquasecurity/trivy @7c1b1fa. Hình ảnh và nhãn hiệu thuộc về chủ sở hữu tương ứng.

Dữ liệu đi đâu khi chạy quét: máy cục bộ, máy chủ Trivy và các kho bên ngoài

Ở chế độ độc lập, tiến trình Trivy dùng thư mục bộ nhớ đệm cục bộ để chứa các tệp cơ sở dữ liệu, đọc mục tiêu và tự so khớp. [6] Để làm được, nó cần kết nối tới những nguồn ngoài mà tài liệu air-gap liệt kê: cơ sở dữ liệu lỗ hổng, Java DB, bộ checks, VEX Hub, Maven Central cho một số trường hợp Java và các module Terraform từ xa. [8] Ngoài ra còn có tên miền check.trivy.dev dùng cho kiểm tra cập nhật và thu thập thống kê sử dụng, và kết nối này là tùy chọn. [8]

Chế độ client/server tách việc đó ra. Máy chủ giữ cơ sở dữ liệu lỗ hổng, còn máy khách không cần tải. Với image, rootfs, filesystem và repository, máy khách phân tích mục tiêu tại chỗ và gửi kết quả phân tích như danh sách gói lên bộ nhớ đệm chung của máy chủ. [7] Quét lỗ hổng và giấy phép chạy ở máy chủ. Quét cấu hình và bí mật vẫn chạy ở máy khách để không phải gửi các tệp có thể chứa thông tin nhạy cảm, và phần ghi chú cuối trang nói kết quả quét bí mật được gửi lên máy chủ sau khi đã che giá trị, còn bộ checks cũng được tải ở phía máy khách. [7]

Do đó nếu công ty muốn kiểm soát dữ liệu rời khỏi máy build, cần vẽ ra từng đường: máy build tới máy chủ Trivy, máy chủ tới kho cơ sở dữ liệu, và máy khách tới kho ảnh. Theo tài liệu client/server, tệp cấu hình và nội dung bí mật gốc không được gửi đi, nhưng danh sách gói và kết quả quét bí mật đã che giá trị thì có. [7] Đây là điểm cần đưa vào đánh giá quyền riêng tư của đối tác và khách hàng.

Những gì tài liệu xác nhận: cú pháp, bộ quét bí mật, cách bỏ qua tệp

README và hướng dẫn bắt đầu xác nhận mẫu dùng trivy đối tượng, tùy chọn scanners và đích quét, cùng ví dụ trivy image, trivy fs với scanners vuln,secret,misconfig và trivy k8s với báo cáo tóm tắt. [1][5] Có tích hợp được liệt kê như GitHub Actions, Kubernetes operator và plugin VS Code, được tài liệu giới thiệu là các ví dụ. [1][5]

Tài liệu quét bí mật nói tính năng này bật mặc định, quét mọi tệp văn bản thuần và cả tệp Python đã biên dịch .pyc. Có sẵn luật cho khóa AWS, tài khoản dịch vụ GCP, token cá nhân GitHub và GitLab, token Slack. Luật tùy biến, luật cho phép (allow rule) và tệp cấu hình chỉ định bằng --secret-config đều được mô tả. [9] Ví dụ kết quả trong tài liệu che phần giá trị khớp bằng dấu sao. [9]

Tài liệu bỏ qua tệp cho phép dùng --skip-files và --skip-dirs, có mẫu glob như thư mục .terraform ở mọi độ sâu, và cấu hình qua tệp. Nó nhấn mạnh việc chọn hay bỏ qua tệp khác với việc lọc kết quả. [10] Có một điểm tài liệu chưa nhất quán rõ: hướng dẫn bắt đầu nói bộ quét mặc định của trivy image là lỗ hổng, còn trang quét bí mật nói bí mật bật mặc định. [5][9] Bài không giải quyết mâu thuẫn này, người dùng cần đối chiếu với trang tham chiếu CLI của đúng phiên bản.

Đội nào sẽ thấy giá trị rõ nhất

Trivy hợp với đội phát triển hoặc đội vận hành có sản phẩm phát hành theo chu kỳ và muốn một lớp kiểm tra tự động trước khi phát hành. Công cụ chạy được từ máy cá nhân đến máy chủ build, và README dẫn tới bản cài từ trình quản lý gói hay ảnh Docker. [1][5]

Ngành có nhiều dự án ngắn hạn và nhiều bên thứ ba cùng viết mã, như tổ chức sự kiện, agency truyền thông, thương mại điện tử theo mùa, sẽ dễ hưởng lợi vì khó có một người nắm toàn bộ thư viện đang dùng. Đây là nhận định thực hành của bài, chưa có số liệu hỗ trợ.

Không phù hợp nếu mong đợi một sản phẩm quản trị rủi ro trọn gói. README giới thiệu sản phẩm thương mại của Aqua xây trên Trivy cho nhu cầu quản trị an ninh đầy đủ, và FAQ trả lời rằng có bản trả phí do Aqua cung cấp. [1][4] Nếu thiếu người xử lý kết quả, việc quét chỉ tạo thêm một báo cáo không ai đọc.

Tình huống giả định: một đơn vị tổ chức sự kiện chuẩn bị mùa hội nghị cuối năm

Hãy hình dung một công ty tổ chức hội nghị và triển lãm tại miền Trung với đội kỹ thuật bốn người. Họ giữ hệ thống bán vé và đăng ký, ứng dụng check-in bằng mã QR, và mỗi sự kiện lớn có microsite riêng do agency bên ngoài dựng. Đây là tình huống giả định để minh họa, không phải mô tả một công ty có thật.

Đề xuất ba lớp kiểm tra. Lớp một: quét hệ thống tệp của kho mã bằng bộ quét bí mật để phát hiện khóa cổng thanh toán, tài khoản gửi thư hay token tin nhắn bị ghi cứng. Lớp hai: quét ảnh container của hệ thống bán vé trước mỗi lần phát hành để nhìn thấy lỗ hổng của gói hệ điều hành và thư viện. Lớp ba: quét tệp cấu hình hạ tầng nếu có, vì Trivy liệt kê quét IaC trong năm nhóm bộ quét. [1][9] Tất cả chỉ ở chế độ báo cáo trong giai đoạn đầu.

Quan hệ với đối tác cũng là một phần của bài toán. Hợp đồng với agency nên nêu rõ việc bàn giao kết quả quét trước khi nghiệm thu microsite, và quy tắc thu hồi khóa nếu lộ. Với dữ liệu người tham dự, công ty nên chạy quét trong mạng của mình, cân nhắc mô hình client/server để chỉ gửi danh sách gói chứ không gửi tệp nguồn. [7] Hạ tầng mạng ở Việt Nam có thể hạn chế hoặc chậm với một số máy chủ nước ngoài, nhưng nguồn đã đọc không bàn tới điều này, nên cần thử thực tế và dùng bản sao cơ sở dữ liệu nội bộ nếu cần. [6]

Đưa vào quy trình: nơi chạy, tần suất và cách xử lý kết quả

Có ba điểm đặt hợp lý. Máy lập trình viên để phát hiện sớm bí mật. Bước build tự động để quét ảnh trước khi đẩy lên kho. Lịch quét định kỳ cho ảnh đang chạy, vì lỗ hổng mới được công bố sau khi ảnh đã phát hành. Việc cuối cùng quan trọng, vì kết quả thay đổi theo cơ sở dữ liệu chứ không chỉ theo mã. [6]

README lưu ý có canary build được tạo ở mỗi lần đẩy lên nhánh main, nhưng nói rõ chúng có thể có lỗi nghiêm trọng và không khuyến nghị cho vận hành thật. [1] Do đó pipeline nên ghim phiên bản phát hành chính thức. Metadata thu thập cho biết bản mới nhất lúc kiểm tra là v0.75.0, đăng ngày 2026-10-01. Thông tin này nằm ngoài tệp được trích dẫn, và số phiên bản 0.x gợi ý cần đọc ghi chú phát hành trước mỗi lần nâng cấp.

Cho môi trường hạn chế mạng, tài liệu self-hosting mô tả sao chép ảnh OCI của cơ sở dữ liệu sang kho riêng bằng công cụ như crane, ORAS hay regclient, rồi dùng các tùy chọn --db-repository, --java-db-repository và --checks-bundle-repository để trỏ Trivy tới bản sao. Cũng có cách điền thủ công bộ nhớ đệm. [6] Phải tự cập nhật bản sao. Phần xử lý kết quả cần quy ước: ai phân loại, lỗ hổng nào bị bỏ qua có thời hạn và ghi lý do.

Công cụ quét cũng là phần mềm cần được bảo vệ

SECURITY.md của dự án nói rõ đây là dự án mã nguồn mở cung cấp nguyên trạng, không có cam kết hỗ trợ, và maintainer cố gắng xử lý báo cáo hết khả năng. [3] Đây là thông tin quan trọng cho tổ chức cần hợp đồng hỗ trợ: phải tìm nơi khác, chẳng hạn gói thương mại mà FAQ nhắc tới. [4]

Chính sách cũng liệt kê các chủ đề an ninh cần đọc trước khi dùng: tệp cấu hình, mẫu báo cáo tùy biến, triển khai client/server, plugin và module, module Terraform từ xa, thông tin đăng nhập registry, VEX và việc ghi vết yêu cầu HTTP. [3] Báo cáo lỗ hổng của chính Trivy gửi qua tính năng private vulnerability reporting, còn lỗ hổng của thư viện phụ thuộc thì mở thảo luận công khai. [3]

Với chế độ máy chủ, tài liệu có phần cân nhắc bảo mật khá cụ thể. Token điều khiển truy cập cả API quét lẫn bộ nhớ đệm nhưng không có quyền riêng cho từng máy khách và không cô lập người dùng, nên máy khách có truy cập có thể ghi và xóa mục trong bộ nhớ đệm chung, ảnh hưởng quét của người khác. Cần dùng máy chủ và bộ nhớ đệm riêng cho các bên không tin nhau. [7] Máy chủ mặc định nghe ở localhost:4954, phục vụ HTTP, nên khi mở ra ngoài phải đặt --token, giới hạn mạng và bọc TLS bằng reverse proxy. [7]

Còn ba điều thực tế. Một, quét bí mật chỉ phát hiện, không thu hồi. Hai, lưu báo cáo quét chứa đường dẫn và đoạn mã nên cần phân quyền xem. Ba, nếu cần chặn kết nối ra ngoài, phải tắt cả kiểm tra phiên bản lẫn thu thập thống kê, vì tài liệu nói chúng là hai cờ độc lập và chỉ tắt một cờ không đủ ngăn kết nối tới check.trivy.dev. [8]

Apache-2.0 cho mã, và những thứ giấy phép không nói thay

Tệp LICENSE là văn bản Apache License. README cũng gắn huy hiệu Apache-2.0 và metadata thu thập ghi giấy phép Apache-2.0 cho kho. [1][2] Giấy phép này cho phép dùng, sửa và phân phối, có điều khoản về bằng sáng chế. Bài không phải tư vấn pháp lý, tổ chức thương mại nên để pháp chế đọc văn bản.

Phạm vi chỉ gồm mã nguồn tại commit đã kiểm tra. Nó không tự động bao phủ cơ sở dữ liệu lỗ hổng, Java DB, bộ checks, VEX Hub, plugin hay module bên thứ ba vì chúng được lấy từ các kho và ảnh OCI khác. [6] Bài chưa đọc giấy phép của các kho đó nên không kết luận điều kiện sử dụng dữ liệu, một điều cần xác minh nếu định nhúng hoặc phân phối lại.

Thương hiệu và sản phẩm thương mại của Aqua là một tầng khác. README nói họ xây thêm tính năng trên Trivy và có bảng so sánh riêng dành cho người dùng Trivy. [1] Bài chưa đọc bảng đó, nên không nêu khác biệt cụ thể.

Chi phí: ít ở phần mềm, nhiều ở thời gian phân loại kết quả

Không có phí cấp phép cho mã Apache-2.0, nhưng có ba nhóm nguồn lực. Nhân lực gồm một người làm chủ cấu hình quét, người phân loại kết quả và người sửa lỗi ở các kho mã khác nhau. Hạ tầng gồm máy build có đủ băng thông và đĩa để giữ bộ nhớ đệm cơ sở dữ liệu, và nếu chọn chế độ máy chủ thì một dịch vụ chạy liên tục kèm bộ nhớ đệm.

Thời gian quét phụ thuộc kích thước mục tiêu. Tài liệu bí mật khuyên dùng --skip-dirs, --skip-files hoặc skip-patterns để quét nhanh hơn. [9] Bài không đưa số phút hay dung lượng vì nguồn đã đọc không có, và những con số ấy sẽ khác với từng ảnh.

Chi phí ẩn lớn nhất là dư lượng kết quả: lần quét đầu tiên thường tìm ra nhiều phát hiện cũ. Giả định của bài là nhóm cần dành thời gian riêng cho tồn đọng ban đầu, chia theo mức độ, thay vì bắt phải sạch tất cả mới được phát hành.

So với quét tích hợp trong kho ảnh, công cụ chuyên một việc và dịch vụ trả phí

Ở mức cách tiếp cận, có ba lựa chọn. Một là tính năng quét sẵn có của kho ảnh hoặc nền tảng mã nguồn, ít việc cài đặt nhưng thường gắn với một nền tảng. Hai là công cụ chuyên một việc như Grype cho lỗ hổng hoặc công cụ riêng cho bí mật. Ba là dịch vụ quản trị an ninh trả phí, trong đó có sản phẩm thương mại của Aqua mà README nhắc tới. [1]

Lợi thế mà tài liệu Trivy tự nêu là một công cụ cho nhiều mục tiêu và nhiều loại vấn đề, với bộ quét bí mật, cấu hình và giấy phép cùng một giao diện. [1] Điều này giảm số công cụ cần học nhưng đồng nghĩa việc phụ thuộc vào chất lượng của từng bộ quét. Bài không có dữ liệu so sánh độ chính xác hay tốc độ với bất kỳ công cụ nào, và không khẳng định công cụ nào tốt hơn.

Hạn chế đã biết và lúc không nên dùng

Trivy so khớp với dữ liệu đã công bố, nên không phát hiện được lỗ hổng chưa được ghi nhận. Ở chế độ client/server, các bộ quét cấu hình và bí mật vẫn chạy trên máy khách, tức là phải có Trivy ở cả hai phía. Bảng hỗ trợ ghi chế độ này dùng được với image, rootfs, filesystem và repository, còn config và Kubernetes thì không. [7]

Tài liệu air-gap cảnh báo hạ tầng công cộng có thể bị giới hạn tốc độ khi tải lớn, và kết nối với Maven Central trong môi trường kín không có cách tận dụng, chỉ có cờ --offline-scan để ngừng thử. [8] Ngoài ra, SECURITY.md nói không có cam kết hỗ trợ. [3] Các canary build không nên dùng trên hệ thống thật. [1]

Không nên đặt Trivy làm cổng chặn cứng khi chưa tinh chỉnh bỏ qua và bản ghi ngoại lệ, khi không có người xử lý, hoặc khi phải gửi dữ liệu nhạy cảm tới máy chủ không tin cậy. Mọi đánh giá ở đây là đọc tài liệu, chưa đo độ chính xác.

Thí điểm bốn tuần trên ba kho mã và hai ảnh container

Tuần một: chọn ba kho mã gần đây và hai ảnh container của hệ thống bán vé. Chạy bộ quét bí mật trên kho, quét lỗ hổng trên ảnh, lưu báo cáo ở thư mục hạn chế quyền. Tiêu chí: mọi kết quả được xếp loại thật, giả, hay chấp nhận rủi ro bởi hai người độc lập, và nhóm ghi lại tỉ lệ báo động giả của chính mình.

Tuần hai và ba: thêm tệp cấu hình bỏ qua có lý do và thời hạn, tích hợp vào bước build ở chế độ chỉ báo cáo, thử bản sao cơ sở dữ liệu nội bộ và cờ trỏ kho riêng. [6][10] Thử thêm chế độ client/server với token và TLS qua reverse proxy trong mạng thử nghiệm. [7] Tiêu chí: pipeline không thêm quá ngưỡng thời gian do nhóm đặt trước, và khi mạng ngoài bị chặn, quy trình vẫn chạy được bằng bản sao.

Tuần bốn: đánh giá và quyết định. Tiêu chí thoát gồm số bí mật thật được phát hiện và thu hồi, thời gian từ phát hiện đến xử lý, và ý kiến của lập trình viên về độ ồn. Nếu báo động giả làm quá nửa kết quả, chưa chuyển sang chế độ chặn, hãy chỉnh luật và quay lại thí điểm.

Kết luận: quét sớm, quét thường xuyên, và quyết định bằng người

Trivy gom nhiều kiểu kiểm tra vào một công cụ với mô hình target và scanner rõ ràng, có bộ quét bí mật, hướng dẫn chạy trong môi trường hạn chế mạng và phần cân nhắc bảo mật cho chế độ máy chủ. [1][6][7][8][9] Giấy phép Apache-2.0 phù hợp với nhiều tổ chức, nhưng dữ liệu đi kèm và hỗ trợ cần xem riêng. [2][3]

Với đơn vị tổ chức sự kiện, giá trị nằm ở việc phát hiện sớm khóa rò rỉ và thư viện cũ trong những hệ thống dựng gấp. Điều đó chỉ có tác dụng khi kết quả có người nhận, có quy tắc xử lý và có chu kỳ quét lại.

Nếu một hệ tri thức nội bộ như của phamvanthu.com có kho mã và ảnh container riêng, quy trình tương tự có thể áp dụng, nhưng đó chỉ là gợi ý ứng dụng.

Nguồn và phương pháp

Dự án nằm trong kho lưu trữ GitHub Trending với 80 lần xuất hiện từ 2026-01-01 đến 2026-10-08, và trang bằng chứng ngày 2026-01-01 xếp nó ở vị trí 11 trong danh sách Go. [11] Kho lưu chỉ gồm danh sách Python, Go, JavaScript và Swift, thiếu ngày 2026-09-03 và 2026-10-12, và không phải top 100 chính thức.

Bài dựa trên commit 7c1b1fa19f1628132a9e8377fed127682500d87d, ngày 2026-10-09, kiểm tra ngày 2026-10-12. Các tệp đã đọc gồm README, LICENSE, SECURITY.md, FAQ, hướng dẫn bắt đầu, tài liệu self-hosting, chế độ client/server, air-gap, quét bí mật và bỏ qua tệp. [1][2][3][4][5][6][7][8][9][10]

Đây là nghiên cứu tại bàn, không phải công bố khoa học đã bình duyệt. Chưa có phần mềm nào được cài, chạy hay đo. Tình huống tổ chức sự kiện là đề xuất giả định. Nội dung kho được coi là dữ liệu tham chiếu.

Xem mã nguồn Trivy trên GitHub

Khám phá nghiên cứu của BDSG Foundation

Trao đổi về ứng dụng công nghệ cho doanh nghiệp