SAST(静态应用安全测试)
SAST(静态应用安全测试) 是什么?
SAST(静态应用安全测试)在不执行代码的前提下,对源代码、字节码或二进制进行自动化分析,以发现注入、不安全 API 或弱加密等安全缺陷。
SAST 将代码解析为中间表示——抽象语法树(AST)、控制流图(CFG)和数据流图(DFG)——然后应用模式规则或污点分析,来检测映射到 CWE 标识符的不安全构造。污点分析是其核心引擎:它标记不可信的源(一个 HTTP 参数、一次文件读取),追踪这些数据如何在变量与函数调用之间传播,并在其未经过公认的净化器(sanitiser)而抵达危险的汇点(sink)(一条 SQL 查询、exec、一个 HTML 响应)时给出检测结果。由于全程不执行任何代码,SAST 可以运行在 IDE、pre-commit 钩子和 CI 中,远在代码交付之前就完成扫描。
它的盲区也早有记载。SAST 在确定性缺陷(SQL 注入、XSS 汇点、硬编码密钥、弱加密)上表现出色,但在运行时不可达的路径上会产生误报,并且会遗漏配置类、认证逻辑类以及仅在运行时才显现的缺陷——因此成熟的项目会将其与 SCA 和 DAST 搭配使用。调优规则集和分诊噪声才是真正的运营成本。OWASP ASVS 和 NIST SSDF 等标准都将静态分析列为一项验证控制。常见引擎包括 Semgrep、GitHub CodeQL(它将代码作为数据库进行查询)、SonarQube、Checkmarx、Fortify 与 Snyk Code。
flowchart LR
SRC[源代码 / 字节码] --> P[解析为 AST + CFG + DFG]
P --> T[污点分析 + 规则]
SO[不可信源] -. 追踪数据流 .-> T
T --> SK{"是否未经净化器<br/>即抵达汇点?"}
SK -->|是| F[映射到 CWE 的检测结果]
SK -->|否| OK[无告警]
F --> TR[分诊:修复或标记为误报]● 示例
- 01
在每个拉取请求上使用 Semgrep 配合 OWASP Top 10 规则集进行扫描。
- 02
使用 GitHub CodeQL 在合并前检测某 Java 服务中的路径遍历漏洞。
● 常见问题
SAST(静态应用安全测试) 是什么?
在不执行代码的前提下,对源代码、字节码或二进制进行自动化分析,以发现注入、不安全 API 或弱加密等安全缺陷。 它属于网络安全的 应用安全 分类。
SAST(静态应用安全测试) 是什么意思?
在不执行代码的前提下,对源代码、字节码或二进制进行自动化分析,以发现注入、不安全 API 或弱加密等安全缺陷。
如何防御 SAST(静态应用安全测试)?
针对 SAST(静态应用安全测试) 的防御通常结合技术控制与运营实践,详见上方完整定义。
SAST(静态应用安全测试) 还有哪些其他名称?
常见的别称包括: 静态分析, 白盒测试。