用途
Scanner Pipeline 是一个安全扫描编排技能,用于在单个仓库或整个仓库群(fleet)中,按技术栈分层选择并运行确定性安全扫描器,统一输出格式,去重后把发现移交给修复代理。它的核心主张是:让代理去运行真实的安全工具,而不是让代理手动“黑”应用。扫描器每次运行结果一致;代理审查则取决于是否恰好检查到。
主要能力
- 按层选择工具:根据仓库锁文件、Dockerfile、*.tf、supabase/、Gemfile、go.mod、.github/workflows/ 等检测技术栈,为每一层选择一个工具,优先多生态系统工具。
- 覆盖扫描层:密钥(gitleaks 全历史、trufflehog
--only-verified)、代码 SAST(semgrep、Brakeman、gosec、CodeQL)、依赖(osv-scanner、bundle-audit、govulncheck、pip-audit)、基础设施/IaC/容器(trivy fs、checkov)、数据库 Supabase(安全顾问、自定义 semgrep 规则、RLS 查询)、实时应用(ZAP baseline、nuclei,受保护)。 - 非交互运行并统一输出:每个工具输出到
.security/out/下的独立文件(SARIF 或 JSON),再统一转换为仓库 findings 格式并导出 SARIF。 - 去重与指纹:按指纹(依赖、密钥、代码、IaC、数据库)跨工具合并同一根因的发现,保留所有工具的证据。
- 抑制管理:
.security/suppressions.yml每条记录包含理由、负责人和最长 90 天的过期时间;过期后重新浮现;代理可提议但需用户逐条批准。 - 仓库群模式:通过
gh repo list枚举非复刻、非归档仓库,浅克隆生产分支(密钥层需要完整历史,可用--filter=blob:none),并行运行流水线,汇总为 roll-up 表。 - CI 与计划:提供
.github/workflows/security-scan.yml脚手架,PR 时运行 gitleaks、osv-scanner、semgrep(diff-aware),每周全量扫描,支持workflow_call复用,SARIF 上传到 GitHub 代码扫描或作为工件保留;所有 Action 固定到完整 commit SHA,容器镜像固定到 digest。 - 移交修复:所有
needs_validation记录先经 finding-triage 分诊;每个修复代理只拿到一条合并记录(指纹、各工具证据、复跑命令、所属层技能);修复后重新运行同一工具确认指纹消失。
使用方式
- 确认授权:仓库所有权、仓库群模式需枚举的所有者/组织、实时目标仅限用户明确命名的自有域名、结果去向(本地文件、代码扫描或 issue;密钥发现不得进入公开 issue)。
- 检测技术栈并按层选工具,运行非交互命令,输出到
.security/out/(需加入 .gitignore)。 - 对 Supabase 数据库,可运行
supabase db advisors --linked或管理 API 获取安全顾问结果;使用自定义 semgrep 规则检测恒真 RLS 策略(如csr.collection_id = csr.collection_id),并用 SQL 查询pg_tables.rowsecurity = false检查未启用 RLS 的表。 - 密钥扫描使用全历史,
--redact或移除 Raw 字段,绝不打印密钥值;已验活的密钥视为 P0,先轮换再清理历史。 - 实时扫描遵循被动优先、低速率(如 nuclei
-rl 10)、仅限用户命名主机,出现 5xx 激增、限流、账户锁定等伤害迹象时停止并暂停。 - 统一输出格式、去重、应用抑制规则,生成
scanner-pipeline.md报告,包含技术栈、各层工具表、计划、抑制策略、首次运行统计和移交清单。 - 分诊后把每条发现交给对应修复代理;修复后复跑同一工具验证。禁止通过修改扫描器配置让发现消失。
适用场景
- 需要对单个仓库或整个组织仓库群进行标准化安全扫描。
- 需要把密钥、依赖、代码、IaC/容器、数据库、实时应用等多层扫描结果统一管理。
- 希望在 CI 中建立 PR 扫描和每周全量扫描流程。
- 需要将扫描发现自动路由给修复代理并跟踪关闭。
限制
- 仅负责编排,不进行深度解读;深度解读交给各层技能(secrets-audit、dependency-audit、container-audit、cloud-audit、owasp-audit)。
- 不进行主动利用;需要验证的发现交给 web-pentest 并遵循其授权步骤。
- 实时扫描仅限用户拥有并明确命名的主机,被动优先、低速率;不得扫描第三方或共享主机。
- 绝不打印、提交或发布密钥值。
- 不得削弱扫描器配置以通过 CI。
- 技能主要输出文件(scanner-pipeline.md、security-scan.yml、扫描器配置),且仅在目标仓库内写入;实时应用扫描器(nuclei、ZAP)不预批准,每次都会提示。
- 工具版本差异可能导致标志不同(如 gitleaks 8.19+ 使用 git/dir 子命令,osv-scanner v2 使用 scan source),需运行
--help确认后调整。 - GitHub 代码扫描上传仅在公开仓库或启用 GitHub Advanced Security 的私有仓库可用,否则保留 SARIF 工件。
- 资料中的“2026 年 10 月 45 应用扫描”等案例为原文示例,具体效果依赖实际环境。