Files
Sec-Interview/_book/Chapter20/20-13.md
T
2025-11-08 21:00:06 +08:00

23 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
### 讲讲 Fortity 等代码审计工具原理
**Fortify 等代码审计工具的原理**
Fortify、Checkmarx、SonarQube 等自动化代码审计工具,其核心原理是**静态应用安全测试(Static Application Security Testing, SAST**。它们不对程序进行实际运行,而是通过分析程序的**源代码、字节码或二进制文件**,来识别其中的安全漏洞
这就像一个医生在给病人看病时,不是通过观察病人的症状,而是直接通过分析病人的基因图谱来预测潜在的疾病风险。
这些工具的工作流程通常分为以下几个阶段:
1. **解析(Parsing** 这是工具的第一步,也是最重要的一步。它会像编译器一样,对输入的源代码进行词法分析、语法分析和语义分析,将代码转换为一个更容易分析的中间表示,通常是**抽象语法树(Abstract Syntax Tree, AST**
- **目的**:将代码的文本形式转换为结构化的数据,方便后续的分析
2. **数据流分析(Data Flow Analysis** 这个阶段是 SAST 工具的核心。它会追踪程序中**数据的流动路径**,特别是从**外部输入源(Source)**到**敏感操作(Sink**的路径
- **外部输入源(Source)**:指那些可能被用户控制的输入,例如 HTTP 请求的参数(`$_GET``$_POST`)、文件上传、数据库查询结果等
- **敏感操作(Sink)**:指那些可能引发安全漏洞的操作,例如执行系统命令(`system()`)、执行 SQL 查询(`mysqli_query()`)、写入文件等
- **分析过程**:工具会模拟数据从 Source 流向 Sink 的过程。如果发现一个未经验证或过滤的外部输入直接进入了敏感操作,它就会标记为一个潜在的漏洞
- **例如**:当一个用户输入的 `$username` 直接被拼接到 SQL 查询语句中,工具就会识别出这是一个潜在的 SQL 注入漏洞
3. **控制流分析(Control Flow Analysis** 这个阶段分析程序执行的**所有可能的路径**。它会构建一个**控制流图(Control Flow Graph, CFG**,来模拟程序在不同条件分支(`if/else``for``while`)下的执行路径
- **目的**:结合数据流分析,判断漏洞是否在**可达的执行路径**上。如果一个漏洞位于一个永远不会被执行到的代码块中,那么它就是一个假阳性
- **例如**:一个敏感操作被放在一个永远为 `false``if` 语句中,那么工具会识别出这个漏洞无法被触发
4. **规则匹配(Rule Matching** Fortify 等工具内置了一个庞大的**漏洞规则库**,这些规则定义了各种已知的漏洞模式。在分析了数据流和控制流之后,工具会将分析结果与规则库进行匹配
- **规则库**:包含了各种语言(Java、PHP、Python 等)的常见漏洞,例如命令注入、跨站脚本(XSS)、文件上传漏洞等
- **匹配过程**:如果一个数据流路径符合某个漏洞规则,工具就会生成一个漏洞报告