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, 上游代理, 代码安全, 动态应用安全测试, 安全测试, 恶意软件分析, 攻击性安全, 漏洞关联, 漏洞情报, 漏洞枚举, 盲注攻击, 自动化报告, 软件安全, 静态应用安全测试