结论:SCA(软件成分分析)扫依赖——比对 SBOM 与漏洞库找出带 CVE 的第三方组件(log4j 类问题);SAST(静态分析)扫自有代码——不运行程序,从源码/字节码的数据流找注入、硬编码密钥等模式;DAST(动态分析)扫运行中的应用——黑盒发请求找 XSS、SQL 注入、配置错误。三者覆盖不同层面,CI/CD 里组合使用:SCA + SAST 进提交/构建阶段,DAST 进测试环境阶段。
展开:各自局限决定组合必要性:1)SCA 的盲区是自有代码和"有 CVE 但调用路径不可达"的误报——reachability 分析(是否真调到漏洞函数)在降噪;版本固定(lockfile)是它能精确的前提。2)SAST 的盲区是运行时行为(配置、环境、反射加载)与较高的误报率——数据流分析对框架魔法(Spring 注入、ORM)理解有限,需要规则调优与基线管理;优势是左移,IDE 阶段即可提示。3)DAST 的盲区是覆盖率——爬虫探不到需要复杂鉴权状态/多步流程的页面,API 要喂 OpenAPI 规范,扫描深度受时间约束;优势是零误报倾向(打出来的洞基本是真的)且不分语言。落地建议:门禁分级——高危 CVE/高危 SAST 规则 block 合并,中低危进工单;基线机制避免历史存量淹没新增问题。易错点:把扫描报告当安全终点——工具覆盖不了业务逻辑漏洞(越权、流程绕过),渗透测试与代码评审仍不可省。
追问方向:IAST(插桩式)为何准确率更高但部署更重、秘密扫描(gitleaks/trufflehog)与 SCA 在 CI 中的先后。