matthewrstone/puppet-vuln_scan
GitHub: matthewrstone/puppet-vuln_scan
Puppet/Bolt 模块,用于在 Linux 和 Windows 节点上自动化部署 Trivy 并批量执行漏洞扫描,同时集成 OpenSCAP 合规评估任务。
Stars: 0 | Forks: 0
# vuln_scan — Puppet/Bolt 模块
一个模块包含两项功能:
1. **`vuln_scan` 类** — 在 Linux 和 Windows 上安装 Trivy 二进制文件。
2. **`vuln_scan::trivy` 任务** — 运行 Trivy 并返回其 JSON 报告,PVS
会通过 PE Orchestrator 在你的集群中触发此任务,并为 VR 进行规范化处理。
无外部模块依赖。
## 安装 Trivy(`vuln_scan` 类)
为你希望 PVS 扫描的节点分类并分配 `vuln_scan` 类,以便在任务运行前安装好
Trivy。
```
# 最新 Trivy
include vuln_scan
# 指定版本并让 module 在 Linux 上安装 curl 前提依赖
class { 'vuln_scan':
version => '0.58.1',
manage_dependencies => true,
}
```
Hiera 等效配置:
```
vuln_scan::version: '0.58.1'
vuln_scan::manage_dependencies: true
```
主要参数:`version`('latest' 或指定版本)、`linux_install_dir`
(默认为 `/usr/local/bin`)、`windows_install_dir`(默认为 `C:\Program Files\trivy`,
会添加到系统 PATH 中)、`manage_dependencies`,以及用于离线镜像的 `linux_install_script_url` /
`windows_download_base`。该安装过程是幂等的 —— 如果指定了
固定版本,仅当已安装版本不一致时才会重新运行。
- **Linux** 使用官方的 Trivy 安装脚本将二进制文件放置在 `linux_install_dir` 中。
- **Windows** 下载发布版的 zip 压缩包,将 `trivy.exe` 解压到 `windows_install_dir`,并将其添加到 PATH 中。
## 扫描任务(`vuln_scan::trivy`)
运行已安装的 Trivy 二进制文件并返回一份**精简版**漏洞报告;
PVS 会收集每个节点的输出,并为 Puppet VR 进行规范化处理。
实现方式:`trivy.sh`(Linux/shell)和 `trivy.ps1`(Windows/PowerShell)。
每个脚本都会运行 Trivy,然后通过调用** Puppet agent 内置的
Ruby**(在其已知的绝对路径下:Linux 上为 `/opt/puppetlabs/puppet/bin/ruby`;
Windows 上为 `…\Puppet\puppet\bin\ruby.exe`)在节点上对 JSON 进行裁剪,以运行共享的
`files/trim.rb` 辅助脚本 —— 因此不依赖目标节点 PATH 中是否存在 `ruby`。
该任务不会返回 Trivy 的完整 JSON —— 完整 JSON 包含了冗长的描述、
参考 URL 列表以及多来源的 CVSS,并且可能会超过 orchestrator/PCP 的
消息大小限制(64 MiB)—— 任务仅返回 PVS 所需的字段:`id`、
`pkg`、`installed`、`fixed`、`type`、`severity`、`title`(已截断)以及 CVSS
`score`。在测试中,这使一份真实的报告体积减小了约 95%。
参数:`scan_type` (rootfs|fs|image)、`target`、`severities`、`trivy_path`、
`timeout`。为了进一步缩减体积,可以传入 `severities`(例如 `CRITICAL,HIGH`)以扫描
更少的结果。
输出 schema (`format: pvs-trivy-compact`):
```
{
"format": "pvs-trivy-compact",
"version": 1,
"os": { "family": "ubuntu", "name": "22.04" },
"findings": [
{ "id": "CVE-2023-4911", "pkg": "libc6", "installed": "2.35-0ubuntu3.1",
"fixed": "2.35-0ubuntu3.4", "type": "ubuntu", "severity": "HIGH",
"title": "glibc: buffer overflow…", "score": 7.8 }
]
}
```
## 任务:`vuln_scan::trivy`
参数:`scan_type` (rootfs|fs|image)、`target`、`severities`、`trivy_path`、`timeout`。
实现方式:`trivy.sh` (Linux/shell) 和 `trivy.ps1` (Windows/PowerShell)。
## OpenSCAP 任务 + 前置条件
随 Trivy 一起提供了两个 OpenSCAP 任务:
- **`vuln_scan::oscap`** — OVAL CVE 评估(自动推导发行版的 OVAL 源)。
- **`vuln_scan::oscap_xccdf`** — XCCDF 基准评分(CIS / STIG / PCI / HIPAA)
针对节点的 SCAP Security Guide 数据流执行。
两者都需要 OpenSCAP 工具链,并且(对于 XCCDF)节点上需要 SSG 内容。请为你的
OpenSCAP 目标节点分类并分配 **`vuln_scan::oscap_prereqs`**,以便统一管理这些内容:
```
include vuln_scan::oscap_prereqs
```
它会根据操作系统族安装:**oscap 扫描器**(Debian/Ubuntu 上为 `libopenscap8`,
RHEL 系列上为 `openscap-scanner`)、**bzip2 / xz**(用于压缩的 OVAL 源)以及
**SSG 内容**(Debian/Ubuntu 上为 `ssg-base` + `ssg-debderived`,
RHEL 系列上为 `scap-security-guide`)—— 数据流将存放于
`/usr/share/xml/scap/ssg/content/`。参数:`manage_content`(默认为 true)、
`scanner_packages` / `content_packages`(为其他发行版覆盖此列表)、
`package_ensure`。
## 部署到 PE
将该模块添加到你的控制仓库中,以便 Code Manager 将其同步到各个环境:
```
# Puppetfile
mod 'vuln_scan', local: true # or point at your git source
```
然后执行 `puppet code deploy production --wait`。确认其是否可用:
```
GET https://:8143/orchestrator/v1/tasks # look for vuln_scan::trivy
```
## PVS 发送的内容(参考)
```
POST https://:8143/orchestrator/v1/command/task
{
"environment": "production",
"task": "vuln_scan::trivy",
"params": { "scan_type": "rootfs", "target": "/" },
"scope": { "node_group": "" } // or {"query": ""} or {"nodes": [...]}
}
```
标签:AI合规, Cutter, Puppet, 实时处理, 插件系统, 运维自动化