用途
Finding Triage 是一个针对单个安全发现的分诊技能。仓库中其他技能负责产生发现,本技能负责闭环:判断某个发现是否真实、在具体环境中应属何种严重性、以及应当如何处理。最终输出是一份可直接建单的完整书面记录,包含正确字段、充分理由,以及六个月后仍能经受监管者审阅的审计轨迹。
处置方式与 owasp-audit 的 Three-Disposition 规则一致:Fixed(已修复)、Deferred(延期)、Accepted Risk(接受风险)。误报是第四种,但它不是对真实发现的处置,而是判定“不存在该发现”。
本技能适用于任何来源的发现:SAST 输出、DAST 扫描器、依赖公告、人工审计、威胁狩猎命中、渗透测试报告、厂商披露、内部红队记录、漏洞赏金提交。
交叉引用:
- vuln-research:为可达性评估提供 CVE 技术深挖
- owasp-audit 的 Three-Disposition 规则:本技能按单条发现实现的框架
- security-comms:当发现需要离开安全语境时,将处置记录转写为利益相关者可读的语言
- 任何审计技能:本技能消费其发现作为输入
主要能力
工作流由智能体与用户共同推进,在用户掌握发现本身未揭示的上下文时,应停下并提出澄清问题。
第 1 步 — 用自己的话复述发现
若发现来自扫描器,复述其实际主张,以过滤模板化噪音。好的复述应包含:问题是什么(具体弱点,如适用给出 CWE)、位于何处(file:line、端点、资源 ARN、主机)、如何被利用(前置条件、所需攻击者能力)、被利用后的影响(数据丢失、权限提升、可用性)。若无法清晰复述,说明尚未理解,应向用户询问上下文。
第 2 步 — 这是否真实
按数量计,自动化扫描器发现中约一半是误报。分诊问题包括:所描述的易受攻击代码路径是否存在(否则为误报);该路径是否可从攻击者可控输入到达(否则严重性下降);利用前置条件是否匹配环境(否则严重性下降或为误报);是否有公开 PoC 或已被野外确认(有则严重性维持或上升);现有控制(WAF、认证、网络分段)是否阻止利用(是则严重性下降,控制本身成为缓解措施)。
常见误报模式:SAST 标记测试文件或死代码;依赖扫描器标记仅存在于 devDependencies 的包(运行时不可达);DAST 标记真实环境中返回 404 但被 SPA 路由混淆的路径;过时公告(厂商在 CVE 前已静默修复,当前版本已含修复);模式匹配到看似脆弱但位于从未被调用函数内的代码。误报判定应与真实发现一样认真记录,以便未来扫描器或审计者复用。
第 3 步 — 结合上下文的严重性
扫描器的 CVSS 或严重性评级只是起点。提高严重性的因素:端点面向互联网而非内网;认证前置条件在本应用中易于满足(如开放注册);涉及受监管数据(PII、PCI 持卡人数据、PHI);存在公开 PoC 或观察到活跃利用;脆弱组件处于关键路径;补偿控制缺失或薄弱。降低严重性的因素:代码路径在使用中不可达;存在强补偿控制;利用前置条件在本环境不存在;认证前置条件在本应用中较难满足;组件仅用于开发或构建、运行时不可达。
常见严重性分级:Critical(预认证或极易利用,立即数据丢失/RCE/接管,24-72 小时内修补);High(需认证但权限极低,或认证后可达重大影响,1-2 周内修补);Medium(需有意义权限或利用链,现实但不简单,30 天内修补);Low(纵深防御,难以串联,90 天内修补);Info(加固或卫生问题,已记录行为,方便时修补)。
第 4 步 — 选择处置方式
- Fix now(同义 Fixed):补丁或缓解可在该严重性的 SLA 内完成。必填字段:修复描述、部署计划、验证方法。
- Defer:严重性需要行动,但运营约束使立即修复不可行。必填字段:延期原因、新截止日期、负责人、条件变化时的告警。
- Accept risk:当前配置下不计划修复。必填三项:为何修复不适用、补偿控制、重新评估触发条件。
- False positive:并非真实漏洞。必填:判定证据、要抑制的扫描器规则 ID(谨慎使用)。
关于 Defer:决定延期不会改变严重性。记录“High 延期至 Q3”是诚实的;因 Q3 尚远而把 High 降为 Medium 属于风险洗白。关于 Accept Risk:三项字段均为必填,缺少任一项即等于真实发现被静默丢弃;重新评估触发条件最常被遗漏,应指明具体条件(套餐升级、依赖升级、流量模式变化、审计周年)。
第 5 步 — 撰写处置记录
按处置方式使用对应模板生成可直接建单的记录。
Fix 模板字段:Finding 标题、Source、Severity(上下文严重性,并注明扫描器原始评级)、CWE/CVE、Location;What(通俗描述)、Why this severity(上下文推理)、Fix(具体变更:代码 diff、配置更新、依赖升级)、Verification(具体测试:对抗性输入与观察结果,含运行命令与预期行为)、Owner、Target deploy。
Defer 模板字段:标题加 DEFERRED、Severity(不变)、Original target、New target;Why deferred(运营约束)、Risk during deferral window(暴露面与降低控制)、Alerting / conditions that would escalate(何种情况会迫使提前行动)、Owner、Re-evaluation 日期(通常早于新目标)。
Accept Risk 模板字段:标题加 ACCEPTED RISK、Severity、Approver(姓名与角色)、Date accepted;Why fix doesn't apply(成本层级、依赖版本约束、部署拓扑、厂商限制等,需具体)、Compensating controls(逐条列出控制及其降低影响/可能性的原因)、Re-evaluation trigger(具体条件与日历审查日期,至少每年一次)、Approvals(工程负责人、安全、必要时合规/法务,含姓名与日期)。
False Positive 模板字段:标题加 FALSE POSITIVE、Scanner(名称与规则 ID)、Original severity;What the scanner claimed(复述主张)、Why it's not real(具体证据)、Suppression decision(抑制该精确发现、添加允许列表规则(谨慎,宽泛抑制会滋生盲点)、不抑制并在此返回时重新评估)、Determination by、Reviewed by(非平凡抑制需复核)。
第 6 步 — 校验记录
提交前自检:12 个月后的自己或审计者能否在无额外上下文下理解该决定;验证步骤是否具体到他人可复现;Accept Risk 的三项必填字段是否具体而非空话(“已部署标准控制”不算补偿控制);严重性是否反映本环境而非扫描器默认值。
使用方式
本技能以智能体与用户协作的方式运行,按上述六步推进,并在需要用户上下文时提问。主要输出是处置记录本身(使用上述模板)。若一次分诊会话覆盖多条发现或批量导入,则汇总输出:会话标题、Source、Date、Triaged by;Summary 表格(Finding、Original severity、Contextual severity、Disposition);Detail(逐条使用相应模板);Escalations(需高级复核或批准的发现)。
适用场景
适用于对单个安全发现进行稳态分诊与处置,来源包括 SAST、DAST、依赖公告、人工审计、威胁狩猎、渗透测试、厂商披露、红队记录、漏洞赏金等。
限制与边界
- 本技能仅操作用户有权分诊与处置的发现。
- 严重性决定与 Accept Risk 处置影响组织风险态势;对 High 及以上发现,应确保所列审批人实际批准,不得伪造签字。
- 误报判定应基于证据,而非“不想修”的改头换面;若用户想把真实发现标为误报,应提出反对。
- 拒绝协助为规避披露或审计义务而降低严重性。
- 若发现揭示活跃事件,应移交 incident-triage;处置分诊面向稳态发现,而非火情。
何时升级
以下发现不应由单个工程师单方面分诊:任何 Critical;任何预认证可利用;任何影响受监管数据(PII/PCI/PHI);任何有公开 PoC 或活跃利用;任何拟处置为 Accept Risk 且严重性为 High 及以上。这些需第二复核人(Tier 3、安全团队或政策指定的审批人)。
参考资料
- CVSS v4.0 规范 — first.org/cvss
- EPSS — Exploit Prediction Scoring System(FIRST.org)
- NIST SP 800-30(风险评估指南)
- FAIR(Factor Analysis of Information Risk)— 需要以金额计价决策时的定量风险框架
- ISO 27005 — 风险管理
- 《Measuring and Managing Information Risk》— Jack Freund、Jack Jones(FAIR 专著)
- OWASP Risk Rating Methodology