Đừng để hacker “ghé thăm” rồi mới tá hỏa
Anh em mình thường có thói quen “mì ăn liền”: code xong, build image, thấy app chạy lên là đẩy thẳng lên production. Nhưng tin mình đi, cảm giác sướng run người đó sẽ sớm thành thảm họa nếu bạn bỏ qua khâu bảo mật.
Mình từng chứng kiến một hệ thống bị chiếm quyền điều khiển chỉ vì dùng thư viện cũ có lỗ hổng từ 2 năm trước. Lúc đó, cả team phải thức trắng đêm để cô lập container và vá lỗi trong hoảng loạn. Từ sự cố “vỡ trận” đó, mình rút ra bài học: Bảo mật phải được ưu tiên ngay từ bước build (Shift Left Security). Đừng đợi đến khi hệ thống chạy rồi mới đi tìm lỗ hổng.
Thực tế, một base image “khủng” như node:latest có thể vác theo hơn 600 lỗ hổng bảo mật (CVE) ngay khi bạn vừa kéo về. Đó là lý do bạn cần Trivy. Đây là công cụ cực kỳ lợi hại để soi lỗi trong Docker image và Kubernetes manifest mà không làm chậm quy trình làm việc.
Tại sao Trivy lại “phủ sóng” rộng rãi đến vậy?
Nếu bạn cần một công cụ quét nhanh, không cần cài đặt rườm rà hay cấu hình database phức tạp, Trivy chính là chân ái. Công cụ mã nguồn mở này từ nhà Aqua Security có khả năng quét “trúng đích” rất nhiều thành phần:
- OS Packages: Phát hiện lỗi trong các gói hệ điều hành như Alpine, Ubuntu hay RHEL.
- Language Packages: Tìm lỗ hổng trong thư viện Python (pip), Node.js (npm), Go và Java.
- Infrastructure as Code (IaC): Soi lỗi cấu hình sai trong Dockerfile, Kubernetes và cả Terraform.
Điểm cộng lớn nhất là Trivy không cần chạy daemon hay cài agent. Bạn chỉ cần tải một file thực thi duy nhất là có thể bắt đầu quét ngay lập tức. Nó cực kỳ linh hoạt để nhét vào các pipeline CI/CD như GitHub Actions hay GitLab CI.
Thực hành: Cài đặt và sử dụng Trivy trong 3 nốt nhạc
1. Cài đặt nhanh
Trên Linux, bạn chỉ cần một dòng lệnh duy nhất để đưa Trivy vào hệ thống:
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin v0.48.3
Chạy xong, hãy gõ trivy --version để kiểm tra. Nếu thấy phiên bản hiện ra là bạn đã sẵn sàng “đi săn” lỗ hổng.
2. Quét Docker Image thực tế
Hãy thử so sánh con số cụ thể. Quét thử image python:3.9 (bản đầy đủ) bằng lệnh:
trivy image python:3.9
Bạn sẽ thấy hàng trăm lỗi hiện ra. Bây giờ, hãy lọc lại chỉ xem những lỗi cực kỳ nghiêm trọng bằng tham số severity:
trivy image --severity HIGH,CRITICAL python:3.9-slim
Kết quả sẽ gọn hơn nhiều. Nhìn vào đây, bạn sẽ biết chính xác mình cần nâng cấp package nào hoặc có nên đổi sang base image an toàn hơn như Distroless hay Alpine không.
3. Kiểm tra file cấu hình Kubernetes
Trivy còn soi được cả file YAML. Giả sử bạn có file deployment.yaml và muốn biết mình có lỡ cấp quyền root quá đà cho container hay không:
trivy conf ./k8s-manifests
Nó sẽ cảnh báo ngay nếu bạn quên giới hạn CPU/RAM hoặc để container chạy ở chế độ privileged. Những lỗi nhỏ này thường là cửa ngõ để hacker chiếm quyền kiểm soát toàn bộ cluster.
Tự động hóa bảo mật với GitHub Actions
Đừng để việc quét lỗi phụ thuộc vào trí nhớ của con người. Chúng ta sẽ bắt GitHub Actions tự động quét mỗi khi có code mới. Nếu phát hiện lỗi mức CRITICAL, pipeline sẽ tự dừng và không cho phép merge code.
Đây là mẫu file .github/workflows/security.yml tối giản mà mình thường dùng:
name: Security Scan
on:
push:
branches: [ main ]
jobs:
trivy-scan:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Build image
run: docker build -t my-app:${{ github.sha }} .
- name: Run Trivy
uses: aquasecurity/trivy-action@master
with:
image-ref: 'my-app:${{ github.sha }}'
exit-code: '1'
severity: 'CRITICAL,HIGH'
Việc đặt exit-code: '1' sẽ làm pipeline bị đỏ nếu tìm thấy lỗi nghiêm trọng. Điều này buộc team phải xử lý vấn đề bảo mật trước khi muốn triển khai lên production.
Kinh nghiệm “xương máu” để không bị ngộp lỗi
Lần đầu quét, có thể bạn sẽ sốc vì danh sách lỗi dài dằng dặc. Đừng hoảng, hãy áp dụng 3 quy tắc sau:
- Dùng flag
--ignore-unfixed: Chỉ tập trung vào những lỗi đã có bản vá. Những lỗi chưa có cách sửa từ nhà cung cấp thì cứ tạm thời bỏ qua để đỡ rối mắt. - Ưu tiên Image bản Slim/Alpine: Thay vì
node:latest(thường hơn 500 lỗi), hãy dùngnode:alpine. Số lượng lỗi có thể giảm xuống còn dưới 10, cực kỳ dễ quản lý. - Lên lịch quét định kỳ: Một image hôm nay sạch không có nghĩa là tuần sau vẫn an toàn. Hãy tạo một CronJob để quét lại các image đang chạy trên server mỗi tuần một lần.
Lời kết
Trivy không phải là chiếc đũa thần giúp hệ thống an toàn tuyệt đối. Tuy nhiên, nó giúp bạn chặn đứng đến 90% các rủi ro phổ biến. Thay vì mất hàng giờ xử lý sự cố, hãy dành ra 5 phút để tích hợp công cụ này. Chúc anh em có những đêm ngon giấc, không còn nỗi lo server bị “gõ cửa” lúc nửa đêm!

