Trivy: Security Scanner
Overview
Trivy is a comprehensive security scanner for containers and other artifacts that detects:
- Vulnerabilities in OS packages (Alpine, RHEL, Debian, Ubuntu, etc.)
- Language-specific packages (Bundler, Composer, npm, yarn, Cargo, etc.)
- Misconfigurations (Kubernetes, Docker, Terraform, AWS, etc.)
- Secrets (API keys, passwords, tokens)
- SBOM generation (Software Bill of Materials)
- License compliance
Key Features
1. Multi-Purpose Scanner
- Vulnerability Scanner: OS packages + application dependencies
- Misconfiguration Scanner: IaC, Kubernetes, Dockerfiles
- Secret Scanner: Detect exposed credentials
2. Simple & Comprehensive
- Single binary, no dependencies
- No pre-requisites (DB, libraries, etc.)
- Quick first scan (under 10 sec for most images)
3. CI/CD Friendly
- Easy to integrate in pipelines
- JSON, SARIF, template outputs
- Exit codes for CI failures
Architecture
βββββββββββββββββββββββββββββββββββββββββββ
β Trivy Client β
β βββββββββββ¬ββββββββββ¬βββββββββββββββ β
β β Scanner β Cache β Output β β
β β Engine β Layer β Formatter β β
β βββββββββββ΄ββββββββββ΄βββββββββββββββ β
βββββββββββββββββββββ¬ββββββββββββββββββββββ
β
βββββββββββββββββΌββββββββββββββββ
β Local β Remote β
β Database β Registry β
β (Vuln DB) β (Images) β
βββββββββββββββββ΄ββββββββββββββββ
Components:
- Scanner Engine: Detects vulnerabilities/misconfigs
- Cache Layer: Stores vulnerability DB locally
- Output Formatter: Multiple output formats
- Vulnerability DB: Built-in, auto-updated
Common Commands & Flags
Basic Scanning
# Scan container image
trivy image <image_name>
# Scan filesystem
trivy fs <directory>
# Scan repository
trivy repo <repo_url>
# Scan Kubernetes cluster
trivy k8s --report summary allOutput Formats
trivy image --format table alpine:latest # Default
trivy image --format json alpine:latest # JSON
trivy image --format template alpine:latest # Custom Go template
trivy image --format sarif alpine:latest # SARIF for GitHubScan Types
# Specific scanners
trivy image --scanners vuln,misconfig,secret <image>
trivy config . # IaC misconfigurations
trivy rootfs / # Root filesystemSeverity & Filtering
# Filter by severity
trivy image --severity HIGH,CRITICAL alpine:latest
# Ignore specific vulnerabilities
trivy image --ignore-unfixed alpine:latest
trivy image --ignorefile .trivyignore alpine:latest
# Limit results
trivy image --limit 10 alpine:latestCache Management
# Clear cache
trivy --clear-cache
# Skip update
trivy image --skip-db-update alpine:latest
# Download DB only
trivy --download-db-onlyCI/CD Integration
# Exit with code on findings
trivy image --exit-code 1 alpine:latest
# Scan with timeout
trivy image --timeout 5m alpine:latest
# Quiet mode
trivy image --quiet alpine:latestRegistry Authentication
# Private registry
trivy image --username <user> --password <pass> private.reg/image
# Docker config
trivy image --input <docker-save.tar>Practical Examples
1. Quick Container Scan
trivy image ubuntu:latest2. CI Pipeline Scan
trivy image \
--format sarif \
--output results.sarif \
--exit-code 1 \
--severity CRITICAL,HIGH \
myapp:latest3. Multi-target Scan
# Scan multiple images
trivy image --input images.txt
# Scan directory with specific scanners
trivy fs --scanners misconfig,secret /path/to/iac4. SBOM Generation
# Generate CycloneDX SBOM
trivy image --format cyclonedx myapp:latest
# Output to file
trivy image --format spdx-json --output sbom.spdx.json myapp:latestConfiguration File
Create .trivy.yaml:
db:
skip-update: true
cache:
dir: "/custom/cache"
misconfiguration:
include:
- "dockerfile"
- "kubernetes"
severity:
- CRITICAL
- HIGHIntegration Points
- GitHub Actions:
aquasecurity/trivy-action - GitLab CI:
trivytemplate - Jenkins:
trivyplugin - Kubernetes: Operator or admission controller
- Harbor: Built-in integration
Performance Tips
- Use Cache: Default location
~/.cache/trivy - Skip DB Update in CI if recent scan
- Limit Scanners to only what you need
- Use Severity Filters to reduce noise
- Scan Slim Images for faster results
Comparison Advantage
| Feature | Trivy | Alternatives |
|---|---|---|
| Ease of Use | Single binary | Complex setups |
| Speed | <10s first scan | Minutes for first scan |
| Coverage | Vuln+Config+Secrets+SBOM | Usually single-purpose |
| Maintenance | Self-contained | External DB required |
Trivyβs all-in-one approach makes it ideal for DevSecOps pipelines where simplicity, speed, and comprehensive coverage are critical.