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)