ZENLIK02/HeimDall-SecurityV2
GitHub: ZENLIK02/HeimDall-SecurityV2
一款 DevSecOps 安全验证后端,通过结合 Semgrep SAST、LLM 推理和安全 DAST 验证来自动分类告警并降低误报。
Stars: 1 | Forks: 0
# Heimdall-SecurityV2
[](https://www.python.org/)
[](https://github.com/ZENLIK02/HeimDall-SecurityV2/actions/workflows/heimdall-devsecops.yml)
[](LICENSE)
[](CHANGELOG.md)
Heimdall 是**一个开源的 DevSecOps 验证后端,它利用 LLM 辅助推理和安全的 DAST 风格验证来减少 SAST 的误报**。
它面向希望测试静态分析结果是否能转化为有证据支撑的决策(`True Positive`、`False Positive` 或 `Needs Review`)的 AppSec 工程师、DevSecOps 团队、学生和研究人员。
Heimdall 是一个处于 alpha 阶段的研究/后端工具。它不是一个生产就绪的企业级平台,并且只能在您拥有或获得授权评估的仓库和目标上进行测试。
## 当前研究包摘要
当前的 Heimdall V2 包含一个用于研究和作品集展示的、可复现的、仅限本地主机的评估工作流。它旨在展示**安全优先的选择性验证**,而不是生产环境的漏洞扫描。
最终基准测试:
- 总告警数:`480`
- 合成 SAST 告警:`300`
- 活跃的本地验证固件:`180`
- 漏洞类别:`12`
- 基准真阳性:`292`
- 基准假阳性:`188`
- 活跃验证目标:`http://127.0.0.1:5005`
主要的活跃本地结果:
| 指标 | 数值 |
|---|---:|
| True Positives | 92 |
| False Positives | 0 |
| True Negatives | 44 |
| False Negatives | 0 |
| Needs Review | 344 |
| 覆盖率 | 0.2833 |
| 弃权率 | 0.7167 |
| 选择性精确率 | 1.0000 |
| 选择性召回率 | 0.3151 |
| 效用分数 | 0.1042 |
模式对比:
| 模式 | 精确率 | 召回率 | F1 | 覆盖率 | 人工审查 |
|---|---:|---:|---:|---:|---:|
| 仅 SAST | 0.6083 | 1.0000 | 0.7565 | 1.0000 | 0.0000 |
| 基于规则的过滤 | 0.8431 | 1.0000 | 0.9149 | 0.2125 | 0.7875 |
| 仅 LLM stub | 0.8517 | 1.0000 | 0.9199 | 0.4437 | 0.5563 |
| Heimdall 完整流水线 stub | 0.0000 | 0.0000 | 0.0000 | 0.3333 | 0.6667 |
| Heimdall 演练 mock | 0.0000 | 0.0000 | 0.0000 | 0.3333 | 0.6667 |
| Heimdall 活跃本地验证 | 1.0000 | 1.0000 | 1.0000 | 0.2833 | 0.7167 |
| GPT-4.1-mini 消融实验脚手架 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | 1.0000 |
解释:
- 活跃本地验证在其决定处理的案例上具有极高的精确度,但会有意对许多案例弃权。
- `Needs Review` 是一项安全功能,用于需要身份验证、角色状态、对象所有权、多步骤工作流、不受支持的 runtime 上下文或非本地验证的告警。
- GPT-4.1-mini 消融模式已搭建好脚手架,但默认会跳过,除非使用 API 环境变量显式启用。
- 这些结果仅受控于本地主机的证据。它们**不能**证明其具备生产就绪性或真实世界的漏洞覆盖能力。
运行最终的可复现工作流:
```
bash scripts/run_ieee_final_evaluation.sh
```
最新的一次完整运行通过了 `53` 项测试。
## 5 分钟快速入门
```
git clone https://github.com/ZENLIK02/HeimDall-SecurityV2.git
cd HeimDall-SecurityV2
pip install -r requirements.txt
python -m heimdall.cli experiment --dataset data/sample_alerts.jsonl --mode all --output reports/
python -m heimdall.cli validate --semgrep test_data/semgrep-results-sample.json --config heimdall.yml --output reports/
```
如需进行完整的 IEEE 风格本地基准测试,请使用:
```
bash scripts/run_ieee_final_evaluation.sh
```
预期生成的文件:
- `reports/summary.md`
- `reports/summary.json`
- `reports/results.csv`
- `reports/ci_summary.md`
## 解决的问题
SAST 工具非常有价值,因为它们可以跨代码库进行扩展,但它们产生的结果通常需要人工分类。Heimdall 添加了一个验证层,它可以:
- 接收 Semgrep JSON,
- 提取告警上下文,
- 默认通过 mock provider 使用结构化的 LLM 风格推理,
- 生成非破坏性的验证假设,
- 执行演练或已加入白名单的 DAST 风格验证,
- 解释最终决策,
- 生成对 CI/CD 友好的报告。
## 工作原理
```
flowchart LR
A[Semgrep SAST JSON] --> B[Context Extraction]
B --> C[Prompt Guard]
C --> D[LLM-Assisted Reasoning]
D --> E[Safe Payload Generation]
E --> F[Dry-Run / Allowlisted DAST]
F --> G[Response Analyzer]
G --> H[Decision Engine]
H --> I[Markdown / JSON / CSV Reports]
```
## 为什么可以安全地进行测试
- 默认启用演练验证。
- 默认启用 mock LLM 模式。
- 活跃的 DAST 仅限于已配置的 `allowed_targets`。
- 除非显式启用,否则会拦截类似生产环境的域名。
- 拒绝破坏性 payload 标记。
- 所有 DAST 尝试都会被记录。
- `Needs Review` 默认不会导致 CI 失败。
## CLI 命令
检查配置安全性:
```
python -m heimdall.cli check-config --config heimdall.yml
```
运行研究实验:
```
python -m heimdall.cli experiment --dataset data/sample_alerts.jsonl --mode all --output reports/
```
为 CI/CD 验证 Semgrep 输出:
```
python -m heimdall.cli validate --semgrep test_data/semgrep-results-sample.json --config heimdall.yml --output reports/
```
## GitHub Actions
工作流 `.github/workflows/heimdall-devsecops.yml` 会在 `push`、`pull_request` 和手动触发时运行。
它会:
- 安装依赖项,
- 安装 Semgrep,
- 运行 Semgrep,
- 保存 `semgrep-results.json`,
- 运行 Heimdall 验证,
- 将报告作为 artifact 上传,
- 在 GitHub 上下文可用时选择性地发布 pull request 评论,
- 仅根据 Heimdall 策略决定是否失败。
策略退出代码:
- `0`:未发现确认的高/严重等级 True Positive。
- `0`:仅存在 False Positive 或 Needs Review 的结果。
- `1`:发现确认的高/严重等级 True Positive,且策略要求失败。
- `2`:配置无效或不安全。
- `3`:runtime 错误。
## 报告
研究报告:
- `reports/summary.md`
- `reports/summary.json`
- `reports/results.csv`
- `reports/error_analysis.md`
CI/CD 报告:
- `reports/ci_summary.md`
- `reports/ci_results.json`
- `reports/ci_results.csv`
包含静态演示示例:
- `reports/demo_summary.md`
- `reports/demo_ci_summary.md`
## 示例输出
| 指标 | 数值 |
|---|---:|
| Semgrep 总发现数 | 4 |
| 确认的 True Positives | 0 |
| False Positives | 3 |
| Needs Review | 1 |
| 流水线状态 | PASSED |
| 报告路径 | `reports/ci_summary.md` |
示例结果表格:
| 规则 ID | 严重程度 | 文件 | 行号 | Heimdall 决策 | 证据 | 建议操作 |
|---|---|---|---:|---|---|---|
| python.flask.security.xss.reflected-xss | high | `test_apps/flask_vulnerable_app/app.py` | 18 | False Positive | 受控标记已被转义或无效。 | 记录防御性控制措施或调整 SAST 规则。 |
| python.flask.security.idor | low | `test_apps/flask_vulnerable_app/app.py` | 47 | Needs Review | 需要身份验证上下文。 | 在进行活跃验证之前进行人工审查。 |
## 本地漏洞测试应用
本地演示应用是故意设计成包含漏洞的,并且仅使用虚拟数据:
```
cd test_apps/flask_vulnerable_app
python -m pip install flask
python app.py
```
然后从仓库根目录运行 Heimdall:
```
python -m heimdall.cli validate --semgrep test_data/semgrep-results-sample.json --config heimdall.yml --output reports/
```
## Docker 演示
```
docker build -t heimdall-security-v2 .
docker run --rm -v "%cd%/reports:/app/reports" heimdall-security-v2
```
在 macOS/Linux 上:
```
docker run --rm -v "$PWD/reports:/app/reports" heimdall-security-v2
```
Docker 会在演练模式下运行示例验证命令。
## 当前限制
- 处于 alpha 阶段的研究后端。
- 默认的验证较为保守,且基于演练。
- 业务逻辑缺陷通常需要多步骤的授权上下文。
- 真正的 LLM provider 集成被有意置于 schema 验证之后。
- 包含的数据集较小且为合成数据。
- 外部目标验证需要仔细配置白名单。
## 路线图
请查看 `docs/roadmap.md` 了解公开的路线图。
简短版本:
- `v0.1.0-alpha`:Semgrep 接收、基线对比、演练验证、报告、GitHub Actions 演示。
- `v0.2.0`:PR 评论机器人、改进的 Semgrep 兼容性、更好的响应分析器、本地漏洞应用集成。
- `v0.3.0`:经过身份验证的测试支持、OpenAPI endpoint 映射、用于多文件上下文的 RAG。
- `v0.4.0`:GitLab CI 支持、Docker 镜像、PyPI 包。
## 关键词
建议的 GitHub topics:
`devsecops`, `sast`, `dast`, `semgrep`, `application-security`, `appsec`, `cybersecurity`, `llm-security`, `security-automation`, `ci-cd`, `github-actions`, `false-positive-reduction`, `vulnerability-validation`
## 贡献
欢迎提供外部测试反馈。从以下内容开始:
- `CONTRIBUTING.md`
- `SECURITY.md`
- `docs/community_feedback.md`
- `.github/ISSUE_TEMPLATE/devsecops_test_feedback.md`
请勿在公开的 issue 中分享真实的机密信息、生产环境目标详情或私有漏洞数据。
标签:C2, DevSecOps, DLL 劫持, Python, 上游代理, 动态应用安全测试, 大语言模型, 无后门, 网络攻击, 请求拦截, 逆向工具, 防御框架, 静态应用安全测试