alexbarsan/AIStaticSecurityAnalyzer
GitHub: alexbarsan/AIStaticSecurityAnalyzer
基于 Roslyn 和 ML.NET 的 C# 静态应用安全测试工具,结合规则检测与 AI 置信度评分来识别代码漏洞并降低误报。
Stars: 0 | Forks: 0
# AI 静态安全分析器
AI 静态安全分析器是一个模块化的 C#/.NET 学位论文项目,用于静态应用安全测试 (SAST)。它使用 Roslyn 分析 C# 源代码,利用 CWE/CVE/CVSS 数据丰富检测结果,使用 ML.NET 对检测结果进行评分,导出 JSON 和 SARIF,并可作为 CI/CD 安全门禁。
## 当前状态
仓库已包含一个可用的垂直切片:
- `Analyzer.CLI` 负责协调扫描、NVD 同步、AI 训练、JSON 导出和 SARIF 导出。
- `Analyzer.CLI` 还提供了一种可重复的固定语料库评估模式,用于输出精确率/召回率报告。
- `Analyzer.Roslyn` 包含七条已实现的规则:
- 弱哈希 (`CWE-327`)
- 硬编码密钥 (`CWE-798`)
- SQL 注入 (`CWE-89`)
- 命令注入 (`CWE-78`)
- 路径穿越 (`CWE-22`)
- 不安全的反序列化 (`CWE-502`)
- 不安全的 XML 解析器配置 (`CWE-611`)
- `Analyzer.CVE` 将 NVD 数据存储在 SQLite 中,并通过 CWE 丰富检测结果。
- `Analyzer.AI` 训练并加载用于置信度评分的 ML.NET 模型,包含共享的特征提取和训练元数据、确定性划分元数据、评估摘要、可选的模型版本标签,以及用于输出精确率/召回率报告的可重复固定语料库评估模式。
- `Analyzer.Reporting` 编写具有稳定指纹的 JSON、SARIF 和 CSV 训练导出文件。
- `.github/workflows/code-scanning.yaml` 将 SARIF 上传到 GitHub Code Scanning。
- `Analyzer.Tests` 现已涵盖针对已实现规则的基于夹具的回归测试、报告快照、扫描输入行为、命令注入覆盖率、路径穿越覆盖率、不安全反序列化覆盖率、不安全 XML 覆盖率、配置回归切片、指纹稳定性以及 AI 特征/元数据回归测试。
代码库可以使用,但仍处于原型阶段。最重要的下一步不仅是“增加更多规则”,而是要强化扫描引擎、测试、配置和报告,以便后续添加的规则是可靠的且达到论文级别。
## 架构
- `Analyzer.CLI`
- 控制台入口点和命令编排
- `Analyzer.Core`
- 领域模型和核心接口
- `Analyzer.Roslyn`
- 基于 Roslyn 的分析引擎和安全规则
- `Analyzer.CVE`
- NVD API 客户端、SQLite 存储、检测结果丰富
- `Analyzer.AI`
- ML.NET 训练和推理
- `Analyzer.Reporting`
- JSON、SARIF 和 CSV 导出
- `Analyzer.Tests`
- 专注于 CSV 工作流、扫描输入行为和基于夹具的规则覆盖率的回归测试运行器
- `TempForTests`
- 临时样本输入,不是真正的自动化测试项目
## 确认的仓库现状
本 README 反映的是当前仓库的状态,而不仅仅是旧的上下文笔记:
- 这些项目目前的目标框架是 `net9.0`。
- 现在已经有了一个小型的自动化测试运行器,它包含了已实现规则的基于夹具的规则覆盖率、报告快照、CLI 集成覆盖率、CVE 丰富覆盖率以及 AI 训练往返覆盖率。
- 扫描引擎现在接受目录、`.csproj` 和 `.sln` 路径,并具有确定性的源文件排序。
- `.csproj` 扫描现在遵循基本的 `ProjectReference` 图,并避免了循环重复。
- 项目扫描范围现在是从已评估的 MSBuild `Compile` 和 `ProjectReference` 项中派生出来的,而不仅仅是原始的项目 XML 解析。
- 基本的分析器配置现在支持通过 `--config` 和 `--baseline` 禁用规则、排除路径、抑制检测结果以及基线模式。
- JSON 和 SARIF 报告现在公开了稳定的检测指纹,用于抑制和基线处理。
- CLI 现在打印的是经过 AI/过滤处理后最终导出的同一组检测结果。
- 测试工具现在包含基于夹具的规则回归测试、JSON/SARIF 快照检查、针对用法和退出代码的 CLI 集成覆盖率、CVE 丰富测试以及有效的 AI 训练往返测试。
- 规则注册被硬编码在 `RoslynCodeAnalyzer` 内部。
- CLI 参数解析是自定义的,并集中在 `Program.cs` 中。
- 当前的扫描引擎具有路径感知能力,但仍然不通过 MSBuild 工作区语义加载项目。
## 建议优先级
建议的实现顺序记录在以下文档中:
- [项目背景](docs/CODEX_CONTEXT_V2.md)
- [用户手册](docs/USER_MANUAL.md)
- [Feature 01](docs/features/01-project-aware-scan-engine.md) 到 [Feature 10](docs/features/10-ai-dataset-and-confidence-pipeline-v2.md)
简短版本:
1. 使扫描具备项目感知能力和确定性。
2. 添加自动化测试和规则夹具。
3. 已实现带有基础污点跟踪的 SQL 注入。
4. 已实现带有基础污点跟踪的命令注入。
5. 已实现带有基础污点跟踪的路径穿越。
6. 接下来是 AI 数据集和置信度流水线 v2。
## 开发规则
只要能在本地执行行为,所有功能开发都应从失败的自动化测试开始。
这是该项目目前预期的工作流程:
1. 为目标行为添加或扩展测试
2. 实现功能并使测试通过
3. 如果更改影响到后续工作,则更新文档/上下文文件
为了方便毕业论文的溯源,每个有意义的功能切片也应在该目录下添加一份简短的学术日志:`docs/academic_logs/`。
## 前置条件
- 装有 Visual Studio 2022 或 .NET SDK 的 Windows 系统
- 当前仓库目标:`.NET 9 SDK`
- 可选:`NVD_API_KEY`,用于获取更好的 NVD API 速率限制
如果你想要一个更稳定的论文基线,将解决方案迁移到 `.NET 8 LTS` 是一个有效的下一步更改。目前,代码和包引用均与 `.NET 9` 保持一致。
## 快速开始
### 命令概述
| 用法 | 简短描述 |
|---|---|
| `dotnet run --project Analyzer.CLI -- ` | 扫描目录、`.csproj` 或 `.sln` 并打印检测结果。 |
| `--json` | 生成 `analysis-report.json`。 |
| `--sarif ` | 为代码扫描工具生成 SARIF 输出。 |
| `--ai` | 应用 ML.NET 置信度评分。 |
| `--min-confidence <0..1>` | 过滤掉低置信度的检测结果。 |
| `--fail-on ` | 达到选定的严重性阈值时判定运行失败。 |
| `--config [file]` | 从 `analyzer.json` 或自定义文件加载分析器配置。 |
| `sync-nvd --days ` | 刷新本地 NVD 缓存。 |
| `train-ai [--model-version ]` | 从标记的 CSV 数据训练模型,并使用模型版本标记元数据。 |
| `evaluate-corpus [path]` | 使用固定的样本语料库评估分析器,并输出仅基于规则的精确率/召回率/F1 分数。 |
| `compare-corpus [path] [--min-confidence <0..1>]` | 在固定语料库上对比仅基于规则的结果与 AI 置信度过滤的结果。 |
| `--export-training [file.csv]` | 导出未标记的训练候选数据。 |
### 运行本地扫描
```
dotnet run --project Analyzer.CLI -- . --json
```
扫描路径现在可以是:
- 一个目录
- 一个 `.csproj`
- 一个 `.sln`
### 导出 SARIF
```
dotnet run --project Analyzer.CLI -- . --sarif analysis.sarif.json
```
### 使用 AI 评分
```
dotnet run --project Analyzer.CLI -- . --ai --min-confidence 0.70
```
### 因严重性导致流水线失败
```
dotnet run --project Analyzer.CLI -- . --fail-on high
```
### 同步 NVD 数据
```
dotnet run --project Analyzer.CLI -- sync-nvd --days 7
```
### 训练 AI 模型
```
dotnet run --project Analyzer.CLI -- train-ai
```
现在它将从标准的带标签数据集中进行训练:
- `Analyzer.AI/Training/training-labeled.csv`
## 输出
- `analysis-report.json`
- 包含摘要和检测结果的 JSON 报告
- `analysis.sarif.json`
- 用于 GitHub Code Scanning 的 SARIF 2.1.0 输出
- `cves.db`
- 用于 NVD 数据的本地 SQLite 缓存
- `ai-model.zip`
- 保存的 ML.NET 模型
- `ai-model.metadata.json`
- 包含训练日期、数据集大小、类别平衡、划分种子、评估摘要和 schema 版本的模型元数据
- `Analyzer.AI/Training/training-labeled.csv`
- 用于训练的标准带标签数据集
- `Analyzer.AI/Training/training-candidates.csv`
- 导出用于手动审查和标记的未标记候选行
## 已知缺陷
这些非常重要,应被视为真实的待办事项:
- 自动化测试仅涵盖了狭窄的 CSV/数据集切片
- 即使添加了扫描输入覆盖率,自动化测试范围仍然很窄
- 七条已实现的规则
- 基本的配置文件支持,用于禁用规则、排除路径、抑制检测结果和基线模式
- 用于项目文件选择的扫描输入现在已具备构建感知能力,尽管元数据引用的加载仍然比完整的设计时构建要轻量
- AI 训练/导出工作流需要更强的数据集规范性
- 代码仓库中的某些上下文文档现在已相对于代码显得过时
## 文档
- [docs/CODEX_CONTEXT_V2.md](docs/CODEX_CONTEXT_V2.md)
- [docs/USER_MANUAL.md](docs/USER_MANUAL.md)
- [docs/features/01-project-aware-scan-engine.md](docs/features/01-project-aware-scan-engine.md)
- [docs/features/02-automated-test-harness.md](docs/features/02-automated-test-harness.md)
- [docs/features/03-sql-injection-taint-analysis.md](docs/features/03-sql-injection-taint-analysis.md)
- [docs/features/04-command-injection-rule.md](docs/features/04-command-injection-rule.md)
- [docs/features/05-path-traversal-rule.md](docs/features/05-path-traversal-rule.md)
- [docs/features/06-insecure-deserialization-rule.md](docs/features/06-insecure-deserialization-rule.md)
- [docs/features/07-xxe-and-unsafe-xml-rule.md](docs/features/07-xxe-and-unsafe-xml-rule.md)
- [docs/features/08-configuration-suppressions-and-baseline.md](docs/features/08-configuration-suppressions-and-baseline.md)
- [docs/features/09-reporting-fingerprints-and-sarif-v2.md](docs/features/09-reporting-fingerprints-and-sarif-v2.md)
- [docs/features/10-ai-dataset-and-confidence-pipeline-v2.md](docs/features/10-ai-dataset-and-confidence-pipeline-v2.md)
- [docs/academic_logs/2026-04-22-feature-01-slice-2.md](docs/academic_logs/2026-04-22-feature-01-slice-2.md)
标签:Apex, XXE攻击, 人工智能, 插件系统, 机器学习, 用户模式Hook绕过, 静态应用安全测试