draugr-dev/draugr

GitHub: draugr-dev/draugr

Draugr 是一款开发者优先的安全扫描编排引擎,通过单个描述文件统一调度多种扫描器并输出标准化 SARIF 结果。

Stars: 0 | Forks: 0

# Draugr [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/draugr-dev/draugr/actions/workflows/ci.yml) [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/draugr-dev/draugr/badge)](https://scorecard.dev/viewer/?uri=github.com/draugr-dev/draugr) [![最新发布](https://img.shields.io/github/v/release/draugr-dev/draugr?sort=semver)](https://github.com/draugr-dev/draugr/releases) [![许可证](https://img.shields.io/github/license/draugr-dev/draugr)](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, 上游代理, 安全扫描, 日志审计, 时序注入, 用户代理, 盲注攻击