This commit is contained in:
author
2025-11-08 21:00:06 +08:00
parent 95a4182500
commit fc176f1b7d
1793 changed files with 2099698 additions and 0 deletions
+23
View File
@@ -0,0 +1,23 @@
### 讲讲 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)、文件上传漏洞等
- **匹配过程**:如果一个数据流路径符合某个漏洞规则,工具就会生成一个漏洞报告