saintmalik/k8sradar

GitHub: saintmalik/k8sradar

k8sradar 是一个面向 Kubernetes 平台和通用软件资产的 CLI 漏洞扫描器,专为 CI/CD 流水线设计,支持基于严重性等级的构建拦截和多种格式的安全报告输出。

Stars: 0 | Forks: 0

# k8sradar Kubernetes 平台和通用软件资产的 CLI 漏洞雷达。 k8sradar 会扫描 provider 组件版本或任意的 OSV 包,并使用 CVSS 严重性、EPSS 利用概率和 CISA KEV 状态来丰富扫描结果。它以 Grype 为模型,专为 CI/CD 构建:传入你的技术栈,获取报告,并对构建进行拦截控制。 ## 安装 下载发布的二进制文件或从源码构建: ``` go install github.com/saintmalik/k8sradar/cli/cmd/k8sradar@latest ``` ## 快速开始 ``` # EKS cluster 的默认控制台表 k8sradar eks --k8s-version 1.31 # 从 config file 读取 stack 并生成 JSON + SARIF k8sradar -f stack.yaml -o json,sarif --output-dir ./reports # 扫描任意 software assets k8sradar --asset go/k8s.io/kubernetes@1.31.2 --asset deb/nginx@1.25.3 ``` ## 用法 ``` k8sradar [provider] [flags] ``` Provider 可以作为位置参数(`k8sradar eks`)或通过 `--provider` 传递。如果你只想扫描通用资产,请省略 provider。 ### 标志 | 标志 | 描述 | |------|-------------| | `[provider]` | 位置 provider,例如 `eks`、`gke`、`aks` | | `-p, --provider` | Provider(位置参数的替代方案) | | `-v, --k8s-version` | Kubernetes 版本 | | `-n, --node-os` | 节点操作系统 | | `-c, --component name=version` | 组件覆盖;可重复使用 | | `--asset ecosystem/package@version` | 通用资产;也接受 `pkg:type/name@version`;可重复使用 | | `-f, --config` | YAML/JSON 配置文件;`-` 表示从 stdin 读取 | | `-o, --output` | 输出格式:`table`、`json`、`txt`、`sarif`、`html`(默认为 `table`) | | `--output-dir` | 生成报告文件的目录(默认为 `.`) | | `-F, --output-file` | 用于单一文件格式输出的明确文件 | | `--fail-on` | 如果发现达到或超过该严重级别的漏洞则退出代码为 1:`Critical`、`High`、`Medium`、`Low` | | `--slack-webhook` | Slack 入站 webhook URL | | `--slack-token` | Slack bot OAuth token | | `--slack-channel` | Slack 频道 ID(与 token 配合使用) | | `--slack-disable-file` | 即使有 token 也跳过 Slack 文件上传 | | `--sync` | 在扫描前运行缓存同步 | | `--db-path` | SQLite 缓存路径(默认为 `./data/k8sradar.db`) | | `--manifest-dir` | Provider manifest 目录 | | `--nvd-api-key` | 可选的 NVD API key | ### 配置文件 ``` provider: eks k8s_version: "1.31" node_os: al2023 components: - name: kubernetes version: "1.31.2" assets: - name: nginx package: nginx ecosystem: Debian version: "1.25.3" output: [json, html] output_dir: ./reports fail_on: High slack: webhook: https://hooks.slack.com/services/... token: xoxb-... channel: C1234567890 ``` CLI 标志会覆盖配置文件中的值。可以在不指定 provider 的情况下传递资产。 ## 报告格式 | 格式 | 描述 | |--------|-------------| | `table` | 默认的控制台表格 | | `json` | 包含摘要和发现的完整扫描报告 | | `txt` | 易读的纯文本摘要 | | `sarif` | 用于 GitHub Code Scanning 和 CI 的 SARIF 2.1.0 格式 | | `html` | 独立的 HTML 报告(无外部资源) | 可以同时请求多种格式:`-o json,html,sarif,txt`。 ## 查看 HTML 报告 ``` # 提供单个 report 服务 k8sradar serve --file ./reports/k8sradar-report.html # 提供 report 目录服务 k8sradar serve --dir ./reports ``` 这是一个轻量级的静态文件服务器,用于在本地查看生成的 HTML。它不是部署的 Web UI。 ## Slack 集成 - **仅 Webhook**:发布丰富的摘要区块。报告文件仍会写入本地。 - **Bot token + 频道 ID**:发布摘要并上传每个生成的报告文件。 ## 退出代码 | 代码 | 含义 | |------|---------| | `0` | 扫描成功且拦截检查通过 | | `1` | 发现达到或超过 `--fail-on` 严重级别的漏洞 | | `2` | Runtime 错误 | ## 环境变量 | 变量 | 描述 | |----------|-------------| | `K8SRADAR_OUTPUT` | 默认的输出格式列表 | | `K8SRADAR_OUTPUT_DIR` | 默认的报告目录 | | `K8SRADAR_FAIL_ON` | 默认的 `--fail-on` 严重级别 | | `K8SRADAR_SLACK_WEBHOOK` | Slack webhook URL | | `K8SRADAR_SLACK_TOKEN` | Slack bot OAuth token | | `K8SRADAR_SLACK_CHANNEL` | Slack 频道 ID | | `DB_PATH` | SQLite 缓存路径(默认为 `./data/k8sradar.db`) | | `MANIFEST_DIR` | Provider manifest 目录 | | `NVD_API_KEY` | 可选的 NVD API key | ## CI 示例 ``` - name: Scan EKS stack run: k8sradar eks --k8s-version 1.31 --fail-on High -o sarif --output-filereport.sarif - name: Upload SARIF uses: github/codeql-action/upload-sarif@v3 with: sarif_file: report.sarif ``` ## 开发 ``` # 构建 CLI binary make build # 运行测试 go test ./... ``` ## 许可证 Copyright (c) 2026 Abdulmalik Salawu. k8sradar 采用 **GNU Affero General Public License v3.0** (AGPLv3) 授权。 你可以自由地 fork、使用和修改此软件,包括用于商业用途。但是,任何衍生作品也必须在 AGPLv3 下授权,并且如果你通过网络提供该软件(例如作为托管服务),你必须向该服务的所有用户提供完整的源代码。 这确保了 k8sradar 及其所有衍生作品保持开源。有关全文,请参阅 [LICENSE](LICENSE)。
标签:EVTX分析, Go, Homebrew安装, Ruby工具, 日志审计, 软件成分分析 (SCA)