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绕过, 静态应用安全测试