draugr-dev/draugr
GitHub: draugr-dev/draugr
Draugr 是一款开发者优先的安全扫描编排引擎,通过单个描述文件统一调度多种扫描器并输出标准化 SARIF 结果。
Stars: 0 | Forks: 0
# Draugr
[](https://github.com/draugr-dev/draugr/actions/workflows/ci.yml)
[](https://scorecard.dev/viewer/?uri=github.com/draugr-dev/draugr)
[](https://github.com/draugr-dev/draugr/releases)
[](LICENSE)
**描述你的应用。剩下的交给 Draugr。**
你只需在一个描述符 (`draugr.saga.yaml`) 中声明你对软件的*已知信息*——repo 在哪、构建了哪些容器镜像、暴露了哪些 endpoint、运行在什么基础设施上。Draugr 会推断出适用的安全控制,为每种控制运行合适的扫描器,并生成你可以信任的通过/失败证据。你可以自由更换扫描器——使用你已付费的工具,或者 Draugr 的开源默认工具。所有结果都会被标准化为 **SARIF**。
这是开源的核心引擎。
## 状态
🚧 **早期阶段,迭代迅速。** 目前已支持:
- **控制:** `images` (Trivy)、`sca` (Trivy fs)、`secrets` (Gitleaks)、`sast` (Semgrep)、
`iac` (Trivy config)。请参阅[集成目录](docs/integrations.md)。
- **Pipeline:** 端到端 `scan` (plan → scan → judge → report)、content-hash 缓存、
结果标准化为 SARIF。
- **优先级划分:** 声明组件的 `exposure` 和 `criticality`,Draugr 会将
每个发现按优先级 P1–P4 进行排名(使用 `--min-priority` 进行聚焦,使用 `--fail-on-priority` 进行拦截)。
- **发现(“Ravens”):** `survey` 用于发现 Kubernetes 镜像和 GitHub 组织 repo。
- **预检与工具:** `validate`(根据 schema 检查 Saga)、`doctor`(报告哪些
扫描器工具已存在/缺失/及其版本),以及 `tools install`(获取固定的、
经过 checksum 校验的扫描器到 `~/.draugr/bin`)——在扫描前发现问题并完成设置。
更多控制(DAST、headers、TLS、SBOM 等)已在路线图中。有关
对应关系,请参阅 [`docs/concepts.md`](docs/concepts.md)。
## 快速开始
**要求:** 你所使用的控制对应的外部扫描器——
[Trivy](https://github.com/aquasecurity/trivy)(`images`、`sca`)和
[Gitleaks](https://github.com/gitleaks/gitleaks)(`secrets`);repo 扫描需要 `git`。仅
在从源码构建时需要 Go 1.26+。
**从 release 安装(推荐):**
```
gh release download --repo draugr-dev/draugr \
-p "draugr_*_$(uname -s | tr A-Z a-z)_amd64.tar.gz" # omit a tag = latest
tar -xzf draugr_*_amd64.tar.gz draugr
sudo mv draugr /usr/local/bin/ && draugr version
```
Releases 已使用 cosign 签名并附带 SBOM——请参阅[安装与验证下载](docs/quickstart.md#1-install)
获取验证 checksum/signature 的 `curl` 步骤。
**或者从源码构建:**
```
git clone https://github.com/draugr-dev/draugr.git
cd draugr && make build # produces ./bin/draugr
./bin/draugr version
```
编写一个 `draugr.saga.yaml`(见 [`examples/`](examples/draugr.saga.yaml)):
```
release:
name: my-app
version: "1.0"
config:
controllers:
images:
enabled: true
components:
- name: web
images:
- image: alpine:3.19
```
扫描它:
```
draugr scan draugr.saga.yaml # prints a JSON verdict; exits non-zero on fail
draugr scan draugr.saga.yaml -o out/ # also writes out/report.json + out/results.sarif
draugr scan draugr.saga.yaml --fail-on warning
```
让发现功能为你编写描述符(Ravens):
```
draugr survey --github-org my-org -o draugr.saga.yaml
draugr survey --k8s-images --k8s-namespace prod --merge -o draugr.saga.yaml
```
完整演练:[`docs/quickstart.md`](docs/quickstart.md)。
## 在 CI 中使用 (GitHub Actions)
使用第一方 action 将 Draugr 添加到 repo 的 CI 和 code scanning 中。它会下载
经过 cosign 验证的 Draugr release,运行扫描,并将合并后的 SARIF 交给 GitHub code
scanning——在 Security 标签页中呈现为一个整洁的 **Draugr** 工具:
```
permissions:
contents: read
security-events: write # upload SARIF to code scanning
steps:
- uses: actions/checkout@v4
- id: draugr
uses: draugr-dev/draugr@v0.13.0 # pin a release; installs Draugr for you
with:
saga: draugr.saga.yaml
fail-on: warning # optional gate (default: error)
- if: always() # publish findings even when the gate fails
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: ${{ steps.draugr.outputs.sarif }}
```
每个控制所需的扫描器(Trivy、Gitleaks 等)仍必须存在于 runner 上——可以
一并安装它们,或使用 `draugr doctor` 检测它们的存在。请参阅
[在 CI 中运行](docs/quickstart.md#5-run-it-in-ci)获取完整的工作流和所有输入。
## 文档
**[完整文档索引 →](docs/README.md)**(按任务分组,包含 Saga / Norn / Skald / the Ravens 的“构建模块”词汇表)。
- [快速开始](docs/quickstart.md)——安装、首次扫描、首次 survey、CI 用法
- [概念](docs/concepts.md)——Saga、controller、scanner、surveyor、pipeline、verdict
- [Pipeline 阶段](docs/pipeline.md)——深入介绍每个阶段,包括 Norn (gate) 的工作原理
- [术语表](docs/glossary.md)——安全类别解释(SCA、SAST、DAST、SBOM 等)
- [集成目录](docs/integrations.md)——每个 controller/scanner/surveyor,包含各组件文档 + 许可证
- [更新日志](CHANGELOG.md)——面向用户的 release notes
- [CLI 参考](docs/cli.md)——每个命令和 flag
- [Saga 参考](docs/saga-reference.md)——逐字段介绍描述符
- [架构](docs/ARCHITECTURE.md) · [Plugin API](docs/plugin-api.md) · [命名](docs/naming.md)
## 安全与供应链
安全工具应当践行它所倡导的检查标准。Draugr 做到了:
- **标准输出**——每个发现都会被标准化为 **SARIF 2.1.0** (OASIS),因此结果可以
流入 GitHub / GitLab / Azure DevOps code scanning 以及任何支持 SARIF 的工具。
- **已签名的 release**——release 压缩包的 `checksums.txt` 已通过 **cosign**
(Sigstore) 进行 **keyless-signed**(无密钥签名),并打包进 `checksums.txt.sigstore.json` 中;请在安装前
验证它([步骤](docs/quickstart.md#1-install))。
- **SBOM**——每个 release 压缩包都会发布 Syft **SBOM**。
- **已验证的工具**——`draugr tools install` 获取通过 **SHA-256** 固定的 scanner,
并在上游有签名的情况下,同样验证其 **cosign** 签名。
- **我们扫描自己**——Draugr 会在每次提交 PR 时在其自己的 repo 上运行(dogfood 自我扫描),并且我们使用
**[OpenSSF Scorecard](https://scorecard.dev/viewer/?uri=github.com/draugr-dev/draugr)**
追踪我们的供应链安全态势(见上方徽章)。
- **报告漏洞**——请参阅 [SECURITY.md](SECURITY.md)。
## 开发
需要 Go 1.26+。
```
make build # build ./bin/draugr
make gate # full local gate: fmt, vet, golangci-lint, race tests + coverage, govulncheck
make test # run tests
```
### 可观测性
Draugr 使用 [Cobra](https://github.com/spf13/cobra) 作为 CLI,使用 `log/slog` 进行结构化
日志记录(`--log-level`、`--log-format json|text`),并使用 [OpenTelemetry](https://opentelemetry.io)
进行 trace 和 metrics。Telemetry 通过标准的 `OTEL_*` 环境变量
(例如 `OTEL_EXPORTER_OTLP_ENDPOINT`)选择开启——未设置时为无操作且零开销。日志和 span
永远不会携带机密信息。
## 许可证
Draugr 基于 [Apache License 2.0](LICENSE) 获得许可。
标签:AI应用开发, DevSecOps, EVTX分析, LLM防护, SARIF, SAST, 上游代理, 安全扫描, 日志审计, 时序注入, 用户代理, 盲注攻击