基于中国国家标准(GB/T 34943/34944/34946/39412)的代码安全审计技能,理论上支持所有编程语言的源代码安全漏洞扫描和检测。该技能利用 Agent 的 LLM 能力进行智能审计,无需 API Key 和外部 LLM 客户端。
测试环境:已在 GLM-5 模型下测试通过
- 全语言支持: Java、C/C++、C#、Python、Go、JavaScript、TypeScript、PHP、Ruby、Rust 等 16+ 种语言
- 国标覆盖: GB/T 34943-2017 (C/C++)、GB/T 34944-2017 (Java)、GB/T 34946-2017 (C#)、GB/T 39412-2020 (通用基线)
- 双层审计架构: 规则引擎快速扫描 + LLM 深度语义分析
- LLM审计优势: 跨文件调用链分析、业务逻辑漏洞、组合攻击链、上下文关联分析
- 智能防幻觉: 两级自动验证机制(创建时验证 + 报告前批量验证)
- 多维去重: 基于文件路径、行号、漏洞类型的智能去重
- 双国标映射: 有专用标准的语言使用双映射,无专用标准的使用 GB/T 39412 单映射
- 标准报告: 按国标章节分类,生成合规审计报告
- 无需编译: 直接审计源代码
# 克隆项目
git clone https://github.com/goodhal/gbt-code-audit-skill.git
cd gbt-code-audit-skill
# 无需安装依赖(仅使用 Python 标准库)在 AI Agent 中加载技能,然后按照以下流程使用:
# 步骤 0-1: 学习流程 + 语言判定(Agent 会自动完成)
# 步骤 2: 创建 findings 目录
mkdir -p findings/baseline findings/llm_audit
# 步骤 3: 快速扫描(自动执行,正则匹配)
python scripts/skill.py quick_scan --target=/path/to/code
# 步骤 4: 学习标准(Agent 学习国标规则,输出确认)
# 步骤 5: LLM 审计(独立审计,不看 baseline 目录)
# - 专注调用链分析、业务逻辑漏洞
# - 创建 llm_audit md 文件
# 步骤 6: 生成报告
python scripts/skill.py finalize_report --project=my-project
# 步骤 7: 审计完成(输出报告路径)| 语言类型 | 适用标准 | 映射格式 |
|---|---|---|
| 有专用标准(双映射) | 专用标准 + GB/T 39412-2020 | GB/T349XX-规则;GB/T39412-规则 |
| Java | GB/T 34944-2017 + GB/T 39412-2020 | 双映射 |
| C/C++ | GB/T 34943-2017 + GB/T 39412-2020 | 双映射 |
| C# | GB/T 34946-2017 + GB/T 39412-2020 | 双映射 |
| 无专用标准(单映射) | 仅 GB/T 39412-2020 | GB/T39412-规则 |
| Python/Go/JS/PHP/Rust 等 | GB/T 39412-2020 | 单映射 |
GB/T 39412-2020 是通用基线,适用于所有语言的代码安全审计。
覆盖的安全领域:
- 输入验证与数据清洗
- 命令注入、SQL注入、代码注入
- 路径遍历、XSS、CSRF
- 硬编码密码、弱加密、弱哈希
- 敏感数据泄露、日志安全
- 内存安全、并发安全
- 会话管理、认证授权
- SQL 注入、命令注入、代码注入
- 不安全反序列化(RCE)
- 硬编码密钥/凭证
- XXE、SSRF
- XSS、CSRF
- 路径遍历
- 弱加密/弱哈希
- 敏感数据泄露
- 空指针解引用、资源泄漏
- 整数溢出、缓冲区溢出
- 错误信息泄露
- 日志注入
- 代码质量问题
- 死代码、未使用的变量
- 不充分的随机数
- 弱密码策略
快速扫描 → 基线入库 → LLM 深度审计 → 生成报告
- 学习流程: Agent 阅读 SKILL.md 和国标规则文件
- 语言判定: 通过文件扩展名判断语言类型
- 创建目录: 创建 findings/baseline 和 llm_audit 目录
- 快速扫描: 使用正则 + 外部工具检测常见漏洞
- 基线入库: 创建 md 文件 + 状态判定(有效/误报)+ 上下文检查
- LLM 审计: 独立审计 + 创建 md + 逐个验证
- 生成报告: 去重 + 批量验证 + 生成最终报告
LLM 审计相比传统工具能发现:
- 跨文件调用链: 用户输入从 A 文件传递到 B 文件的危险函数
- 业务逻辑漏洞: 认证绕过、权限越权、状态篡改
- 组合攻击链: 信息泄露 + 身份伪造 → 账户接管
- 上下文关联: 变量用途、函数语义、数据流分析
findings/baseline/*.md— 快速扫描发现的漏洞(所有文件已通过 validate_finding 验证)findings/llm_audit/*.md— LLM 独立审计发现的漏洞(所有文件已通过 validate_finding 验证)audit_report_YYYYMMDD_HHMMSS.md— 最终审计报告(含汇总表格和详细发现)
| 工具 | 说明 | 命令行用法 |
|---|---|---|
quick_scan |
快速扫描:正则 + Bandit/Semgrep/Gitleaks | python scripts/skill.py quick_scan --target=<path> |
validate_finding |
验证发现:完整性和质量检查 | python scripts/skill.py validate_finding <md_file> |
finalize_report |
收尾报告:去重 + 验证 + 生成 | python scripts/skill.py finalize_report --project=<name> |
validate_finding 验证内容:
- 必填字段(13个字段完整性)
- 国标映射(格式正确性、双映射/单映射)
- 代码片段(行号准确性、防幻觉)
- 问题描述(字数≥20)
- 修复方案(字数≥20)
质量判断由 LLM 负责:问题描述是否说明漏洞原因/风险、修复方案是否合理可行
gbt-code-audit-skill/
├── scripts/ # 核心代码目录
│ ├── skill.py # 核心审计引擎
│ ├── constants.py # 常量定义
│ ├── patterns.py # 快速扫描模式
│ └── validation.py # 验证函数
├── SKILL.md # 技能定义文档
├── README.md # 项目说明
├── CLAUDE.md # Claude Code 工作指导
├── docs/ # 文档目录
│ ├── workflow/ # 流程文档
│ ├── reference/ # 国标规则和映射
│ └── vulnerabilities/ # 漏洞知识库
├── test-samples/ # 测试样例
│ ├── java/
│ ├── python/
│ ├── cpp/
│ └── csharp/
└── findings/ # 审计发现(运行时生成)
├── baseline/ # 快速扫描结果
└── llm_audit/ # LLM 审计结果
当前版本:2.4.1
更新日志:
- v2.4.0: 代码文件组织优化,所有代码文件移动到 scripts 目录
- v2.3.0: 支持16+种语言、双国标映射、LLM审计优势发挥指引、validate_finding 扩展验证
- v2.2.0: 重构代码消除冗余、添加去重统计输出
MIT License
欢迎提交 Issue 和 Pull Request!