mcpField
S
scanning-iac-and-images-with-trivy

scanning-iac-and-images-with-trivy

github.com/mukul975安全35.2k68 次安装8 周前更新
代码仓库

关于 scanning-iac-and-images-with-trivy

面向开发和安全团队的 Trivy 扫描工作流技能,用于在 CI/CD 中检查镜像、基础设施即代码和依赖项。它还涵盖 SBOM 生成、SARIF 输出及按策略阻断构建。

主要功能

  1. 01扫描镜像和依赖项中的漏洞
  2. 02检查 IaC 配置错误
  3. 03检测硬编码机密和软件许可证
  4. 04生成并重新扫描 SBOM
  5. 05输出 SARIF 并按策略阻断构建

适用场景

  1. 01在镜像推送前设置 CI/CD 安全门禁
  2. 02部署前审计 Terraform 或 Kubernetes 配置
  3. 03生成 SBOM 并随新漏洞披露重新评估
  4. 04检查代码仓库中的硬编码凭据

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill scanning-iac-and-images-with-trivy

安装后在 Claude Code 中输入/scanning-iac-and-images-with-trivy确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE
references/
api-reference.md
standards.md
scripts/
agent.py

详细介绍

使用 Trivy 扫描 IaC 和镜像

概述

Trivy(由 Aqua Security 开发)是一款功能全面的开源安全扫描器,可针对广泛的目标发现漏洞(CVE)、错误配置(IaC)、密钥、软件许可证以及软件供应链弱点:容器镜像、文件系统、Git 仓库、虚拟机镜像、Kubernetes 集群和 SBOM 文档。它被广泛采用为 CI/CD 管线中的“左移”门禁,因为它速度快、以单个静态二进制文件运行、无需 Agent,并支持机器可读的输出格式(JSON、SARIF、CycloneDX、SPDX),以便与代码扫描仪表盘集成。

Trivy 内置四个主要扫描器,可通过 --scanners 开关切换:

  • vuln —— 操作系统软件包和语言依赖项漏洞检测(对照 Trivy 漏洞数据库进行 CVE 匹配)。
  • misconfig —— 基础设施即代码和配置错误配置检测(Terraform、CloudFormation、Kubernetes 清单、Dockerfile、Helm),使用内置和自定义 Rego 策略。
  • secret —— 硬编码密钥/凭据检测(API 密钥、令牌、私钥)。
  • license —— 软件许可证识别与策略执行。

本技能涵盖构建基于 Trivy 的扫描工作流,为 CI/CD 管线设置门禁:在推送前扫描镜像、在应用前扫描 IaC、生成并重新扫描 SBOM,以及在违反策略时使构建失败。检测这些弱点可防御 MITRE ATT&CK 技术 T1525(植入内部镜像),即攻击者在镜像仓库中植入恶意或存在漏洞的镜像,以便在整个环境中部署。

何时使用

  • 在将漏洞和错误配置扫描集成到 CI/CD 管线中,作为镜像推送或基础设施应用前的质量/安全门禁时。
  • 在部署前审计镜像仓库中的容器镜像是否存在已知 CVE 时。
  • 在验证 Terraform、CloudFormation、Kubernetes、Dockerfile 或 Helm IaC 是否存在安全错误配置时。
  • 在生成 SBOM(CycloneDX/SPDX)以实现供应链透明度,并在之后针对新披露的 CVE 重新扫描该 SBOM 时。
  • 在扫描正在运行的 Kubernetes 集群,以发现存在漏洞的工作负载和配置错误的 RBAC/资源时。
  • 在对依赖项强制执行许可证合规策略时。

前提条件

  • 一台 Linux/macOS/Windows 主机或 CI 运行器,且具有网络访问权限以下载 Trivy 漏洞数据库。
  • 如果按名称扫描本地镜像或使用容器化 Trivy,则需要 Docker(可选)。
  • 安装 Trivy(Aqua Security 官方方法):
# Debian/Ubuntu (APT repository)
sudo apt-get install -y wget gnupg
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 generic main" | sudo tee /etc/apt/sources.list.d/trivy.list
sudo apt-get update
sudo apt-get install -y trivy

# RHEL/CentOS (YUM repository), macOS (Homebrew), and install script
brew install trivy
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sudo sh -s -- -b /usr/local/bin

# Containerized usage (no install)
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy:latest image python:3.10-alpine

# Verify
trivy --version
  • 对于隔离网络或受限速的环境,可使用 trivy image --download-db-only 预下载数据库,并按需预下载 Java/策略包。

目标

  • 扫描容器镜像中的操作系统和语言漏洞,并在超过严重性阈值时使构建失败。
  • 扫描 IaC(Terraform/Kubernetes/Dockerfile)中的错误配置。
  • 检测仓库或文件系统中的硬编码密钥。
  • 生成 CycloneDX 或 SPDX SBOM,并重新扫描其漏洞。
  • 输出 SARIF 以供 GitHub 代码扫描使用,输出 JSON 以供程序化门禁使用。
  • 使用 --exit-code 将 Trivy 接入 CI/CD 管线以强制执行策略。

MITRE ATT&CK 映射

技术 ID名称战术相关性
T1525植入内部镜像持久化Trivy 在存在漏洞或恶意的镜像/层以及嵌入的密钥被植入镜像仓库并传播到运行中的工作负载之前,即可检测到它们。

工作流

1. 扫描容器镜像中的漏洞

对镜像仓库中的镜像运行仅漏洞扫描,限制为高危/严重发现,并忽略没有可用修复的 CVE:

trivy image \
  --scanners vuln \
  --severity HIGH,CRITICAL \
  --ignore-unfixed \
  --format table \
  python:3.10-alpine

扫描保存为 tarball 的镜像(当镜像已构建但尚未推送时很有用):

docker save myorg/app:1.4.0 -o app.tar
trivy image --input app.tar --severity CRITICAL --format json --output app-vulns.json
2. 对镜像启用多个扫描器

同时运行漏洞、错误配置、密钥和许可证扫描器:

trivy image \
  --scanners vuln,misconfig,secret,license \
  --severity MEDIUM,HIGH,CRITICAL \
  myorg/app:1.4.0

扫描镜像内嵌的配置(等同于 Dockerfile 的构建历史及历史记录中的密钥):

trivy image --image-config-scanners misconfig,secret myorg/app:1.4.0
3. 扫描基础设施即代码(错误配置)

使用 config 目标扫描 Terraform / Kubernetes / Dockerfile / Helm / CloudFormation 目录中的错误配置:

# Scan a Terraform / IaC directory
trivy config \
  --severity HIGH,CRITICAL \
  --format table \
  ./infra

# Scan with custom Rego policies and a specific policy namespace
trivy config \
  --config-policy ./policies \
  --policy-namespaces user \
  ./infra

或者使用 fs(文件系统)目标并显式指定错误配置扫描器:

trivy fs --scanners misconfig,secret --severity HIGH,CRITICAL ./infra
4. 扫描仓库并检测密钥

扫描本地工作树(或远程仓库)中锁文件的漏洞和硬编码密钥:

# Local filesystem (dependencies + secrets)
trivy fs --scanners vuln,secret --severity HIGH,CRITICAL .

# Remote Git repository
trivy repository --scanners vuln,secret https://github.com/myorg/myrepo
5. 生成并重新扫描 SBOM

从镜像生成 CycloneDX SBOM,然后扫描该 SBOM 本身以查找漏洞(这样当新的 CVE 被披露时,可以对已存储的 SBOM 重新评估):

# Generate CycloneDX SBOM
trivy image --format cyclonedx --output sbom.cdx.json myorg/app:1.4.0

# Generate SPDX SBOM
trivy image --format spdx-json --output sbom.spdx.json myorg/app:1.4.0

# Re-scan the SBOM for vulnerabilities later
trivy sbom --severity HIGH,CRITICAL sbom.cdx.json
6. 为代码扫描仪表盘输出 SARIF

生成可供 GitHub Advanced Security / 代码扫描摄取使用的 SARIF:

trivy image \
  --format sarif \
  --output trivy-results.sarif \
  --severity HIGH,CRITICAL \
  myorg/app:1.4.0
7. 通过退出码控制 CI/CD 流水线

使用 --exit-code 1,以便在存在达到或高于所选严重级别的发现项时,让流水线步骤失败。将“全部报告”的运行(退出码 0)与“强制执行”的运行(退出码 1)分开:

# 1) Informational report (never fails the build)
trivy image --severity LOW,MEDIUM,HIGH,CRITICAL --exit-code 0 --format table myorg/app:1.4.0

# 2) Enforcement gate (fails build on HIGH/CRITICAL with a fix available)
trivy image \
  --severity HIGH,CRITICAL \
  --ignore-unfixed \
  --exit-code 1 \
  --format json --output gate.json \
  myorg/app:1.4.0

使用官方 action 的 GitHub Actions 步骤示例:

- name: Run Trivy image scan (gate)
  uses: aquasecurity/trivy-action@master
  with:
    image-ref: 'myorg/app:1.4.0'
    format: 'sarif'
    output: 'trivy-results.sarif'
    severity: 'HIGH,CRITICAL'
    ignore-unfixed: true
    exit-code: '1'
8. 管理误报和数据库

使用 .trivyignore 文件抑制已接受风险的发现项,并保持数据库为最新:

# .trivyignore — one CVE/AVD/secret rule ID per line
echo "CVE-2023-12345" >> .trivyignore
echo "AVD-AWS-0089"   >> .trivyignore

# Refresh DBs explicitly (useful for caching layers in CI)
trivy image --download-db-only
trivy image --download-java-db-only

# Scan a Kubernetes cluster (summary report)
trivy k8s --report summary --severity HIGH,CRITICAL cluster

工具与资源

工具 / 资源用途链接
Trivy核心扫描器命令行https://github.com/aquasecurity/trivy
Trivy Documentation官方文档(目标、扫描器、标志)https://trivy.dev/latest/docs/
trivy-actionGitHub Actions 集成https://github.com/aquasecurity/trivy-action
Trivy Operator集群内 Kubernetes 持续扫描https://github.com/aquasecurity/trivy-operator
Trivy vulnerability DB开源漏洞数据源https://github.com/aquasecurity/trivy-db
CycloneDXTrivy 输出的 SBOM 标准https://cyclonedx.org/

验证标准

  • 已安装 Trivy,且 trivy --version 报告有效版本。
  • 已对容器镜像进行漏洞扫描并应用严重级别过滤。
  • 已使用多个扫描器(漏洞、错误配置、密钥、许可证)扫描镜像。
  • 已使用 trivy config 扫描 IaC 目录并审查错误配置。
  • 已对仓库运行密钥扫描。
  • 已生成 CycloneDX/SPDX SBOM 并使用 trivy sbom 成功重新扫描。
  • 已为代码扫描仪表盘生成 SARIF 输出。
  • CI/CD 门禁通过 --exit-code 1 在 HIGH/CRITICAL 发现项上使构建失败。
  • 已为已接受风险的发现项配置 .trivyignore 并记录理由。

评论

支持 Markdown