关于 Draugr
Draugr 是面向 CI 和发布流程的安全扫描工具,适合需要汇总应用与基础设施风险的团队。它调用既有扫描器,并结合暴露度、重要性、可利用性和可达性为发现项排序。
主要功能
- 01覆盖 SAST、SCA、密钥与 IaC 扫描
- 02支持 DAST、镜像、云与 Kubernetes 检查
- 03按风险上下文排列发现项
- 04仅以新增发现项阻止变更
- 05输出 SARIF、JSON、HTML 等报告
适用场景
- 01在发布前检查应用及其运行环境
- 02让 CI 仅因新增安全问题失败
- 03将扫描结果提交至代码扫描平台
MCP 相关
通过 `draugr mcp` 将 Draugr 作为 MCP 服务提供给 AI 客户端。扫描使用已提交的项目描述文件;探测在线主机或向第三方发送数据等操作会先征求许可。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Draugr
通过单个文件在 CI 中进行安全扫描,并根据暴露程度、严重性、可利用性和可达性对每项发现进行排序。
描述你的应用。Draugr 会处理其余一切。
每个应用都存在一些没人刻意引入的问题:一个后来发现有漏洞的库、一条意外提交的密码,或一个敞开大门的服务器设置。Draugr 会找出这些问题,判断哪些问题对你的应用真正重要,并在发布前回答你真正想问的问题:这样发布安全吗?
它会替你运行 Trivy、Semgrep、Gitleaks 等成熟的开源扫描器,因此你不必在它们之间做选择、逐一配置,或阅读五份扫描结果。你只需在一个文件中描述一次你构建的内容:仓库所在位置、构建的镜像、对外开放的内容,以及运行所依托的基础设施。Draugr 会选择适用的检查,为每项检查运行合适的工具,并生成可交给他人查阅的证据。你可以接入已有的付费扫描器,也可以使用开源默认配置。
发现会排序,而不是简单列出。扫描器标注的“严重”描述的是漏洞在抽象情况下可能有多糟。对于你应用中可被陌生人访问的服务,同一漏洞可能需要立即处理;而在只有三人使用的内部工具中,它可能只需排入待办事项。扫描器无法区分这两者,因为差异不在代码里,而在你编写的文件中。并且,draugr diff 只会因新发现而阻止拉取请求,因此继承两百个已有问题不会让每次变更都无法合并。
快速入门 · 查看实际效果 · 检查内容 · 接入流水线 · 文档 · Draugr 不作何种保证 · 安全
查看实际效果
**优先级(P1–P4)并非严重性。**严重性描述的是漏洞在最坏情况下可能有多糟。优先级会结合漏洞所在应用部分的暴露程度和重要性进行权衡,而扫描器无法判断这些因素,因为它们不在代码里。
draugr-dev/draugr-demo 是一个刻意设置为易受攻击、并接入 Draugr 的应用:每项控制都会触发,发现会显示在仓库的 Security → Code scanning 标签页中,示例拉取请求则展示新增与修复的差异。
快速入门
curl -fsSL https://draugr.dev/install.sh | sh
安装到 ~/.local/bin,无需 sudo。安装前会进行验证,并说明运行了哪些检查:检查归档文件的 SHA-256 是否与发行版的 checksums.txt 一致;如果 PATH 中有 cosign,还会验证该文件的 cosign 签名。任何检查失败时都不会安装任何内容。脚本可在仓库中查看;其他安装方式,包括 Homebrew 和 go install,请参阅安装指南。
draugr init # describe this project in a draugr.saga.yaml
draugr tools install # fetch the scanners it needs, pinned and verified
draugr scan # scan what the descriptor describes
tools install 会根据旁边的描述文件选择安装内容,因此小型服务只会安装三个扫描器,而不是 Draugr 能配置的所有扫描器。为多个项目准备机器时,可使用 --all。
接下来,描述你实际交付的内容:
project: my-app
release:
version: "1.0"
config:
controls:
images:
enabled: true
components:
- name: web
images:
- image: alpine:3.19
draugr scan draugr.saga.yaml # console summary; exits non-zero on fail
draugr scan draugr.saga.yaml -o out/ # also writes report.json + results.sarif
draugr scan draugr.saga.yaml --format markdown # or html, junit, json, sarif
你的编辑器已经认识这个文件。 Draugr 的
JSON Schema 已在
SchemaStore 中注册,因此打开任何 *.saga.yaml 文件时,无需任何配置即可获得自动补全、悬停文档和拼写错误警告。
也可以让发现功能为你编写描述文件:
draugr survey github repos --org my-org -o draugr.saga.yaml
draugr survey k8s images --namespace prod -o draugr.saga.yaml
完整流程:快速入门。
要在真实仓库中设置吗? 请在置顶讨论中回复,说明仓库的内容以及你运行的扫描器;我们会与你一起编写描述文件,包括需要判断的暴露程度和关键性。
检查内容
每项控制都由 Draugr 调用的工具提供支持,而非打包在 Draugr 中,因此每个扫描器都遵循自己的许可证,你也可以替换它。
| 控制项 | 检查内容 | 默认配置 |
|---|---|---|
sca | 你所依赖的库中已知的漏洞 | Trivy、Grype;Mend 可选 |
secrets | 意外提交的密码和密钥,包括历史记录 | Gitleaks |
sast | 你编写的代码中可能让他人入侵的模式 | Semgrep;Go 可选 gosec |
iac | Terraform、Kubernetes 和 Dockerfile 中可能造成安全隐患的设置 | Trivy |
images | 容器镜像中包含的内容 | Trivy;Grype 可选 |
licenses | 你未编写的代码所附带的许可条款 | Trivy |
dast | 只能从运行中的应用外部发现的问题 | Nuclei;经身份验证,并根据 OpenAPI 规范运行 |
headers | 网站如何响应浏览器 | 原生 |
tls | 证书和加密 | 原生 |
kubernetes | 对照 CIS 基准检查你的 Kubernetes 集群 | 原生;kube-bench 可选 |
cloud | 对照 CIS 基准检查你的云账户当前状态 | Prowler |
threats | 你交互的对象是否列在公开的阻止列表中 | abuse.ch URLhaus |
provenance | 镜像是否由你预期的构建工具签名 | Sigstore cosign |
所有扫描器、它们发送的数据及其适用的许可条款: 集成目录。
此外还包括:内容哈希缓存、每个仓库和镜像的 SBOM、KEV/EPSS 丰富信息、各控制项的门槛,以及保留在报告中的抑制项,并附上提交者给出的原因,而非直接消失。
在你的流水线中
第一方 GitHub Action 会安装 Draugr、配置扫描器,并将合并后的 SARIF 交给代码扫描,在 Security 选项卡中显示一个简洁的 Draugr 工具:
permissions:
contents: read
security-events: write
steps:
- uses: actions/checkout@v4
- id: draugr
uses: draugr-dev/draugr@v0 # pin @vX.Y.Z for reproducible CI
with:
saga: draugr.saga.yaml
tools: true # provision the scanners the controls need
- if: always() # publish findings even when the gate fails
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: ${{ steps.draugr.outputs.sarif }}
GitHub Actions · GitLab,包含 include、GitLab 自有的报告格式,以及固定的合并请求评论 · Azure Pipelines,步骤模板
来自 AI 编码助手。 让它检查一项更改,它就会用自己找到的扫描器,在自己选择的范围内执行检查。draugr mcp 会通过 Model Context
Protocol 提供 Draugr,因此它会读取你已提交的描述文件。对于读取代码检出内容以外的扫描操作,例如探测在线主机或向第三方发送数据,会先征求你的同意。
claude mcp add draugr -- draugr mcp
文档
Draugr 不作何种承诺
通过判定意味着你配置的控制项未发现其要查找的问题。这并不代表你的软件是安全的。对于描述文件未声明的内容、你未启用的控制项,以及底层扫描器遗漏的内容,它不会作出任何说明。许可证发现结果仅供参考,不构成法律建议。Draugr 根据 Apache-2.0 许可提供,不附带任何保证。
详情包括扫描器适用的条款,以及扫描在线端点时你对授权所负的责任:范围与免责声明。
安全与供应链
安全工具应以身作则,接受自身检查。Draugr 做到了:
-
标准输出。每项发现都会规范化为 SARIF 2.1.0(OASIS),因此结果可流入 GitHub / GitLab / Azure DevOps 代码扫描,以及任何支持 SARIF 的工具。
-
签名发布版本 + 来源证明。发布归档中的
checksums.txt会使用 cosign(Sigstore)进行无密钥签名,并生成checksums.txt.sigstore.json捆绑包;每次发布都会提供 SLSA 构建来源证明(gh attestation verify …);安装前请先验证(操作指南)。 -
SBOM。每个发布归档都会附带 Syft SBOM。
-
经过验证的工具。
draugr tools install会下载通过 SHA-256 固定版本的扫描器;如果上游提供签名,也会验证 cosign 签名。此外,cosign 本身也可安装,因此验证过程无需依赖外部工具。 -
我们也会扫描自身。每次 PR 中,Draugr 都会扫描自己的仓库(自用测试);我们还通过 OpenSSF Scorecard(上方徽章)跟踪供应链安全状况。
该评分卡显示
SAST: 0,值得说明我们为何保留这个分数。本仓库确实会运行静态分析:每次扫描都会通过 Draugr 自带的sast控制运行 Semgrep 和 gosec;每个拉取请求还会通过golangci-lint再次运行 gosec。Scorecard 会检查一组它所识别的特定工具,而我们的工具不在其中。纯粹为了提高分数而添加第三个静态分析器,就像编写只触及代码、却不验证任何内容的测试:指标提高了,指标背后的实际属性却没有改善。我们宁愿分数不准确,也要确保分析真实有效。如果你想检查分析结果而非分数,可在仓库的 Security 选项卡中查看由扫描本身上传的发现。
-
报告漏洞。请参阅 SECURITY.md。
开发
需要 Go 1.26+。make build 会构建 ./bin/draugr;make gate 会运行完整的本地检查,包括 fmt、vet、lint、带覆盖率的竞态测试和 govulncheck。请参阅 CONTRIBUTING.md。
许可证
Draugr 根据 Apache License 2.0 授权。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。