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, 实时处理, 插件系统, 运维自动化