一、SAST(静态应用程序安全测试)
- 全称:Static Application Security Testing
- 作用:SAST 是一种白盒测试方法,在不运行应用程序的情况下,直接分析其源代码、字节码或二进制代码。它通过检查代码的语法、结构、控制流和数据流来识别编码缺陷、安全漏洞和合规性问题。其核心目的是在软件开发生命周期的早期从内部发现漏洞。
- 代表工具:
- 商业工具:Checkmarx、Fortify Static Code Analyzer(SCA)、Synopsys Coverity。
- 开源/免费工具:SonarQube(兼具代码质量与安全)、Semgrep、FindSecBugs(针对Java)。
- 使用场景:
- 开发人员在集成开发环境(IDE)中编写代码时进行实时扫描。
- 在代码提交(Git Commit)或合并请求(Pull/Merge Request)时,在持续集成/持续部署(CI/CD)流水线中自动触发扫描,阻止存在漏洞的代码合并。
- 需要对所有代码路径(包括未激活的分支)进行深度代码审计时。
二、DAST(动态应用程序安全测试)
- 全称:Dynamic Application Security Testing
- 作用:DAST 是一种黑盒测试方法,在应用程序正在运行时(通常已部署在测试环境),从外部模拟黑客的攻击行为(如注入、跨站脚本等)对其进行测试。它的目的是通过分析应用程序的响应来发现其运行时可被利用的安全漏洞、配置错误和逻辑缺陷,从而验证其实际防护能力。
- 代表工具:
- 商业工具:Acunetix、Burp Suite Professional、IBM Security AppScan。
- 开源/免费工具:OWASP ZAP (Zed Attack Proxy,最流行的免费工具)、Burp Suite Community Edition(功能受限)。
- 使用场景:
- 应用程序完成构建并部署到测试环境(如Staging环境)后,进行安全验收测试。
- 作为渗透测试的辅助,进行自动化漏洞扫描。
- 用于发现配置错误、服务器问题、身份验证和会话管理等运行时特有的安全问题。
三、SCA(软件成分分析)
- 全称:Software Composition Analysis
- 作用:SCA 不主要分析自研代码,而是专注于管理和扫描应用程序所依赖的第三方开源组件(如库、框架、模块)。它通过比照已知的漏洞数据库(如CVE),识别这些组件中存在的已知安全漏洞,并分析其许可证合规性风险,从而管理由第三方代码引入的安全与法律风险。
- 代表工具:
- 商业工具:Snyk、Black Duck、Mend(原名WhiteSource)。
- 开源/免费工具:OWASP Dependency-Check、Trivy。
- 使用场景:
- 在CI/CD流水线中集成,在构建时扫描依赖,防止含有高危漏洞的组件被打包到制品中。
- 对项目仓库进行定期扫描,监控新披露的漏洞是否影响现有项目。
- 在软件发布前,进行许可证合规性审计,避免法律风险。
| 特性维度 | SAST (静态应用程序安全测试) | DAST (动态应用程序安全测试) | SCA (软件成分分析) |
|---|---|---|---|
| 全称 | Static Application Security Testing | Dynamic Application Security Testing | Software Composition Analysis |
| 核心作用 | 从内部发现漏洞:在不运行代码的情况下,直接分析源代码的语法、结构、数据流,发现编码缺陷和安全漏洞。 | 从外部验证防护:在应用程序运行时,模拟黑客攻击行为,从外部测试其安全性,发现可被利用的运行时漏洞。 | 管理第三方风险:识别软件中使用的第三方开源组件,并分析其存在的已知漏洞、许可证合规等问题。 |
| 测试对象 | 源代码 (Source Code)、字节码 (Bytecode)、中间码 (IR) | 正在运行的应用程序 (如Web应用、API) | 软件项目所依赖的库、框架(包管理器文件,如package.json, pom.xml) |
| 测试时机 | 开发早期 (编码、构建时) | 开发后期 (测试、预发布阶段) | 开发全程 (编码、构建、部署后监控) |
| 代表工具 | 商业: Checkmarx, Fortify, Coverity 开源/免费: SonarQube, Semgrep, FindSecBugs | 商业: Acunetix, Burp Suite Professional, AppScan 开源/免费: OWASP ZAP, Burp Suite Community Edition | 商业: Snyk, Black Duck, Mend 开源/免费: OWASP Dependency-Check, Trivy |
| 使用场景 | - 开发者编码时在IDE中实时检测。 - 代码提交后或PR/MR时在CI流水线中自动触发扫描。 - 需要对全部代码路径(包括未激活分支)进行深度分析时。 | - 应用程序部署到测试环境后,进行安全验收测试。 - 定期对生产或预生产环境进行自动化安全扫描。 - 发现配置错误、环境问题和身份验证逻辑缺陷等运行时问题。 | - CI流水线中,防止包含已知高危漏洞的组件被合并或构建。 - 定期扫描已部署的应用,监控新披露的漏洞是否影响现有产品。 - 软件发布前进行许可证合规审计。 |
| 优点 | - 发现早,修复成本低。 - 覆盖全部代码路径。 - 定位精准(精确到文件行号)。 | - 误报率较低,发现的都是可被利用的漏洞。 - 无需源代码,适合黑盒测试。 - 能发现运行时和环境相关的漏洞。 | - 专门针对第三方风险,这是现代应用的主要威胁来源。 - 基于漏洞数据库(CVE),准确性高。 - 能有效管理许可证合规法律风险。 |
| 缺点 | - 误报率较高。 - 无法发现运行时和配置类漏洞。 - 对某些框架和库的支持有限。 | - 发现晚,修复成本高。 - 覆盖性依赖于测试用例,无法扫描未暴露的代码。 - 定位模糊,需要开发人员手动排查代码。 | - 仅针对已知漏洞,无法发现自定义的业务逻辑漏洞。 - 如果漏洞未修复,可能需要等待组件更新或寻找临时解决方案。 |
总结与比喻
- SAST 就像一位 “代码审查专家” 。在编写蓝图(编码)时,他仔细检查设计图纸(源代码),找出其中的结构性和逻辑性错误。
- DAST 就像一位 “实战渗透测试员” 。在房子建成(应用运行)后,他尝试各种方法(模拟攻击)来撬开门窗,测试房子的实际安保能力。
- SCA 就像一位 “食材质检员” 。他不关心你的菜谱(业务逻辑),只关心你用的原材料(开源组件)是否新鲜、安全、符合标准(无漏洞、许可证合规)。
最佳实践:现代软件开发(DevSecOps)中,这三者不是选择题,而是组合拳。开发编码完成时,通过编译执行静态测试(SAST),查找代码中的语法错误或者逻辑漏洞;同时可以扫描依赖包中的安全漏洞(SCA);代码运行后,可执行动态测试(DAST)

3181

被折叠的 条评论
为什么被折叠?



