mathiasconradt/sonarqube-sast-dast-correlation-skill

GitHub: mathiasconradt/sonarqube-sast-dast-correlation-skill

这是一款 Claude Code 技能,通过 AI 驱动的智能分析将 SonarQube 的静态代码扫描结果与 DAST 工具的运行时测试发现进行关联,帮助安全团队识别并优先处理经双重验证的可利用漏洞。

Stars: 0 | Forks: 0

# SonarQube SAST-DAST 关联技能 一个 Claude Code 技能,能够智能地将 SonarQube 的静态应用安全测试 (SAST) 结果与 SARIF 文件(StackHawk、ZAP 等)的动态应用安全测试 (DAST) 结果进行关联,以生成全面的安全关联报告。 ## ⚠️ 快速参考:问题标签 在 SonarQube 中标记关联问题时: - **标签**:仅使用 `dast-detected`(不使用其他标签!) - **清理**:在标记之前,自动移除所有现有的 `dast-detected` 标签和关联评论 - **评论**:添加带有严重性图标、置信度、endpoint/参数验证的详细关联评论 - **格式**:`{icon} **DAST Correlation - {CONFIDENCE}**`(🔴=BLOCKER/CRITICAL,🟠=MAJOR,🟡=MINOR,🔵=INFO) 有关完整的标记工作流,请参阅[实施指南 - 第 10 步](references/implementation-guide.md)。 ## ⚠️ 关键:什么是真正的关联? **真正的关联** = 同时被 SonarQube SAST 和 DAST 工具检测到的问题 ✅ **真正关联的要求:** - 必须具有有效的 SonarCloud/SonarQube issue key(例如,`AZ1EQ_E8sAPSAinx9_u2`) - 必须具有来自 SARIF 文件的匹配 DAST 发现 - 漏洞类别必须匹配(SQL injection ↔ SQL injection,XSS ↔ XSS 等) - Endpoint/文件位置必须匹配 ❌ **不属于关联:** - 没有相应 SAST 问题的 DAST 发现(即使您可以手动找到代码) - 由 DAST 检测到但未被 SAST 标记的配置问题(CORS、CSP headers 等) - 仅通过源代码分析发现问题但 SAST 工具未标记的情况 **示例:** - ✅ 真正关联:`login.ts:34` 中的 SQL 注入 - SonarQube 发布了 `AZ1EQ_E8...` + ZAP 确认可利用 - ❌ 非关联:CORS 配置错误 - DAST 发现了它,但 SonarQube 没有针对此配置问题的 issue key **为什么这很重要:** 只有真正的关联才能在 SonarQube 中被标记,因为它们具有 issue key。仅 DAST 的发现应在报告中单独记录。 ## 概述 安全测试通常涉及独立运行 SAST 和 DAST 工具,但手动关联它们的结果既耗时又容易出错。此技能使用 AI 驱动的分析自动化了关联过程,以: - **匹配漏洞**:检测同时被 SAST 和 DAST 工具发现的漏洞 - **验证可利用性**:通过确认代码级别的问题在运行时可被利用 - **确定修复优先级**:通过突出显示被两种测试方法确认的漏洞 - **生成详细报告**:包含污点流分析和指向结果的直接链接 - **标记关联问题**:在 SonarQube 中标记关联问题以供团队追踪 ## 关键特性 ### 🔍 智能关联分析 - **漏洞类型匹配**:将 SAST 规则(例如,`javasecurity:S3649`)映射到 DAST 发现(例如,`sql-injection`) - **Endpoint/组件映射**:将 Java controller 类追踪到 URI 路径 - **污点流分析**:匹配从 HTTP 请求到脆弱 sink 的数据流 - **置信度评分**:基于多个关联因素的 HIGH/MEDIUM/LOW 置信度级别 ### 🎯 支持的漏洞 - SQL Injection - Cross-Site Scripting (XSS) - Path Traversal - XML External Entities (XXE) - Command Injection - 以及更多... ### 📊 全面报告 - 包含严重性分布的执行摘要 - 带有 HIGH CONFIDENCE 标记的详细关联发现 - 仅 SAST 发现(代码级漏洞) - 仅 DAST 发现(运行时/配置问题) - 显示互补测试空白的覆盖率分析 - 按风险优先级排序的可操作建议 ### 🏷️ SonarQube 集成 - 自动使用 `dast-detected` 标记关联问题 - 向 SonarQube 问题添加详细的关联评论 - 包括污点流分析和 DAST 发现链接 - 支持在应用新关联之前清除旧标签 ## 安装 ### 前置条件 - [Claude Code](https://claude.ai/code)(CLI、桌面版或 Web 版) - 具有 API 访问权限的 SonarQube 实例 - SARIF 格式的 DAST 扫描结果(StackHawk、ZAP 等) ### 安装技能 ``` # 将此仓库克隆到您的 Claude Code skills 目录 cd ~/.claude/skills git clone https://github.com/mathiasconradt/sonarqube-sast-dast-correlation-skill.git # 或手动下载并解压到: # ~/.claude/skills/sonarqube-sast-dast-correlation-skill/ ``` 安装后,该技能将自动在 Claude Code 中可用。 ## 配置 ### SonarQube 凭据 该技能会自动从以下位置检测 SonarQube 配置: 1. **环境变量**(最高优先级): export SONAR_TOKEN="your-sonarqube-token" export SONARQUBE_URL="https://your-sonarqube-instance.com" export SONAR_PROJECT_KEY="your-project-key" 2. **项目中的 `.sonarlint/connectedMode.json`**: { "sonarQubeUri": "https://your-sonarqube-instance.com", "projectKey": "your-project-key" } 3. **项目中的 `sonar-project.properties`**: sonar.host.url=https://your-sonarqube-instance.com sonar.token=your-sonarqube-token sonar.projectKey=your-project-key 如果未找到凭据,技能将提示您提供。 ### DAST 扫描文件 将您的 DAST 扫描结果(SARIF 格式)放在您的项目目录中。支持的工具有: - StackHawk (`.sarif`) - OWASP ZAP (`.sarif`) - 任何兼容 SARIF 的扫描器 ## 使用方法 ### 基本用法 在 Claude Code 中,导航到您的项目目录并运行: ``` /sonarqube-sast-dast-correlation ``` 该技能将: 1. 自动检测 SonarQube 配置 2. 从 SonarQube 获取 SAST 问题(或使用缓存的 `sonar_issues.json`) 3. 列出可用的 SARIF 文件并要求您选择一个 4. 执行由 AI 驱动的深度关联分析 5. 生成全面的 Markdown 报告 6. 在浏览器中打开报告 7. 可选择在 SonarQube 中标记关联问题 ### 示例工作流 ``` # 1. 运行 SonarQube 扫描(如果尚未完成) sonar-scanner # 2. 运行 DAST 扫描(StackHawk 示例) hawkscan # 3. 导航到您的项目目录 cd /path/to/your/project # 4. 在 Claude Code 中运行 correlation skill /sonarqube-sast-dast-correlation ``` ### 交互式提示 该技能将指导您完成以下操作: 1. **现有报告**:选择打开现有报告或重新运行分析 2. **SAST 数据**:使用缓存的 `sonar_issues.json` 或从 SonarQube 获取最新数据 3. **DAST 文件**:选择要关联的 SARIF 文件 4. **标记**:可选择在 SonarQube 中标记关联问题 5. **标签清理**:选择在应用新标签之前是否清除现有标签 ## 输出文件 ### `sast-dast-correlation-report.md` 包含以下内容的综合关联报告: - 包含关键指标的执行摘要 - 严重性分布表 - 详细的关联发现 (HIGH CONFIDENCE) - 仅 SAST 发现 - 仅 DAST 发现 - 覆盖率分析 - 优先排序的建议 ### `correlations.json` 机器可读的关联数据: ``` { "correlations": [ { "sast_issue_key": "...", "sast_rule": "javasecurity:S3649", "sast_component": "SearchRepository.java", "sast_line": 23, "sast_message": "...", "sast_severity": "BLOCKER", "sast_flow_summary": "SOURCE: ... → SINK: ...", "dast_rule_id": "sql-injection", "dast_uri": "POST /", "dast_method": "POST", "dast_message": "...", "dast_level": "error", "correlation_reasoning": "...", "confidence": "high", "vulnerability_type": "SQL Injection" } ], "summary": { "total_correlations": 2, "high_confidence_count": 2, "vulnerability_types_correlated": ["SQL Injection", "XSS"] } } ``` ### `sonar_issues.json` 来自 SonarQube 的缓存 SAST 问题(已过滤以排除导入的 DAST 发现)。 ## 示例报告 ``` # SonarQube SAST-DAST 关联报告 **Generated:** 2026-03-29 **Project:** my-awesome-app ## 执行摘要 - **SAST Tool:** SonarQube - **DAST Tool:** StackHawk - **Total SAST Issues:** 102 - **Total DAST Issues:** 49 - **✅ Correlated Issues:** 2 **HIGH CONFIDENCE** ## 🔥 关联发现 - 高优先级 ### 🚨 关联 #1:SQL Injection #### SAST 发现(代码分析) - **File:** `SearchRepository.java:23` - **Taint Flow:** HomeController.java:31 (user input) → SearchRepository.java:23 (SQL concatenation) - 🔗 [View in SonarQube](...) #### DAST 发现(运行时测试) - **Endpoint:** `POST /` - **Method:** POST - 🔗 [View in StackHawk](...) **Confidence Level:** high ✅ ``` ## 工作原理 ### 1. 数据收集 - 通过 SonarQube API 获取 SAST 问题 - 过滤掉导入的 DAST 问题(例如,`external_StackHawk:*`) - 从 SARIF 文件解析 DAST 发现 ### 2. AI 驱动的关联 使用 Claude 的通用 agent 来: - 跨工具匹配漏洞类型 - 跟踪从 controller 到 endpoint 的代码路径 - 分析污点流(source → sink) - 基于多个因素评估置信度 ### 3. 报告生成 创建包含以下内容的综合 Markdown 报告: - 按置信度优先排序的关联发现 - 详细的污点流分析 - 指向 SonarQube 和 DAST 工具的直接链接 - 覆盖率空白分析 - 可操作的修复建议 ### 4. SonarQube 标记(可选) - 使用 `dast-detected` 标签标记关联问题 - 添加详细的关联评论 - 链接到 DAST 发现以便于参考 ## 优势 ### 🎯 专注于重要事项 并非所有 SAST 发现都具有实际可利用性。此技能可识别出 **经 DAST 测试确认可利用** 的那 2-5% 的 SAST 问题,使您的团队能够优先处理高置信度漏洞。 ### 📈 了解工具覆盖率 了解哪些漏洞类型由 SAST 覆盖,哪些由 DAST 覆盖: - **SAST 擅长**:代码级问题(XXE、path traversal、command injection) - **DAST 擅长**:运行时问题(security headers、CSRF、session management) - **两者均可检测**:SQL injection、XSS(关联时 = 最高优先级) ### ⚡ 节省时间 手动关联 100 多个 SAST 和 40 多个 DAST 发现可能需要数小时。此技能可在几分钟内完成分析,并为每个关联提供详细推理。 ### 🔗 无缝集成 可与您现有的工具配合使用: - SonarQube 用于 SAST - StackHawk、ZAP 或任何兼容 SARIF 的 DAST 扫描器 - 与 SonarQube 问题标记直接集成 ## 关联策略 ### 漏洞类型匹配 - 将 SonarQube 安全规则映射到 DAST CWE/漏洞 ID - 示例:`javasecurity:S3649` ↔ `sql-injection` ### Endpoint/组件映射 - 将 Java controller 类追踪到 HTTP endpoint - 示例:`HomeController POST "/"` ↔ `POST / ` DAST 发现 ### 污点流分析 - 检查从请求参数到脆弱 sink 的数据流 - 示例:`@RequestParam` → SQL query → 匹配 DAST SQL injection ### 置信度评分 - **HIGH**:相同漏洞类型 + 精确 endpoint 匹配 + 污点流对齐 - **MEDIUM**:相同漏洞类型 + 部分组件匹配 - **LOW**:仅漏洞类型相同 ## 使用场景 - **安全团队**:使用运行时利用证明来验证 SAST 发现 - **DevSecOps**:基于确认的可利用性确定漏洞修复的优先级 - **合规性**:证明全面的安全测试覆盖率 - **开发团队**:专注于修复最重要的漏洞 ## 支持的语言 关联逻辑适用于 SonarQube 和您的 DAST 工具支持的任何语言。污点流分析针对以下语言进行了优化: - Java (Spring Boot, Spring MVC) - 其他支持基本关联的语言 ## 故障排除 ### 未找到关联 如果分析未产生任何关联: - 确保 SAST 和 DAST 扫描的是同一个应用程序 - 验证 SARIF 文件包含实际发现(而不仅仅是 info 级别) - 检查 SAST 问题是否是真正的安全发现(而非代码质量问题) - Agent 可能需要更具体的指令(如有需要,技能会自动重试) ### SonarQube API 错误 - 验证 `SONAR_TOKEN` 具有正确的权限 - 确保可从您的机器访问 `SONARQUBE_URL` - 检查 `SONAR_PROJECT_KEY` 是否与您的项目匹配 ### SARIF 文件问题 - 确保 SARIF 文件遵循 [SARIF 2.1.0 规范](https://docs.oasis-open.org/sarif/sarif/v2.1.0/sarif-v2.1.0.html) - 使用以下命令验证:`cat your-file.sarif | jq .` ## 贡献 欢迎贡献!请随时提交 Pull Request 或为以下方面开启 Issue: - 支持额外的 DAST 工具 - 增强的关联策略 - 改进的报告格式 - 特定语言的污点流分析 ## 许可证 [MIT License](references/LICENSE) ## 致谢 由 Anthropic 使用 [Claude Code](https://claude.ai/code) 构建。 ## 支持 - **问题**:[GitHub Issues](https://github.com/mathiasconradt/sonarqube-sast-dast-correlation/issues) - **文档**:有关详细的实施工作流,请参阅 [SKILL.md](SKILL.md) - **Claude Code**:[claude.ai/code](https://claude.ai/code) **用 ❤️ 为 AppSec 社区而制**
标签:CISA项目, Claude Code, DAST, DevSecOps, LSASS转储, SARIF, SAST, SonarQube, StackHawk, TLS抓取, XSS, 上游代理, 代码安全, 动态应用安全测试, 安全测试, 恶意软件分析, 攻击性安全, 漏洞关联, 漏洞情报, 漏洞枚举, 盲注攻击, 自动化报告, 软件安全, 静态应用安全测试