KirkpatrickPrice-RavenEye/raveneye_vulnerability_scanner
GitHub: KirkpatrickPrice-RavenEye/raveneye_vulnerability_scanner
Raveneye 是一款基于 YAML 模板的快速漏洞扫描器,整合 Web DAST 扫描与 AWS 云错误配置检查,以单一二进制文件提供证据优先的安全评估能力。
Stars: 0 | Forks: 1
# Raveneye 漏洞扫描器
一款快速、基于模板的漏洞扫描器,它将 Nuclei 风格的 YAML
模板与包含丰富证据的扫描结果以及云错误配置检查相结合 —— 全部封装在
单个独立二进制文件中。
- **基于模板** —— 只需编写 YAML 文件即可添加 Web 检查,无需编写代码。
- **证据优先** —— 每个扫描发现(finding)都包含请求、响应证据、
影响说明和修复建议。
- **Web + 云** —— 包含 HTTP/DAST 模板 *以及* Go 原生的 AWS 错误配置检查。
- **适配 CI 的输出** —— 支持 JSON、可分享的 HTML,以及用于 GitHub 代码扫描的 SARIF。
- **安全状况分析** —— 加权 A-F 评级、威胁排名、趋势历史记录。
- **单一二进制文件** —— 内嵌模板;只需一个文件,无需 runtime,无需安装任何依赖。
## 安装
**Homebrew**(设置好 tap 之后 —— 参见 [docs/homebrew-tap.md](docs/homebrew-tap.md)):
```
brew install brianlowe/tap/raveneye_vulnerability_scanner
```
**预编译二进制文件:**从 [Releases](https://github.com/brianlowe/raveneye_vulnerability_scanner/releases) 页面下载适用于您操作系统/架构的
压缩包,并将
`scanner` 放到您的 `PATH` 中。该二进制文件是独立的(内嵌了模板)。
**从源码编译**(需要 Go 1.24+):
```
go build -o scanner ./cmd/scanner
```
**Docker:**
```
docker build -t raveneye_vulnerability_scanner .
docker run --rm raveneye_vulnerability_scanner scan --targets https://example.com --category web
```
## 快速开始
```
# Web 扫描,人类可读的 HTML 报告
scanner scan --targets https://example.com --category web --format html -o report.html
# 仅高/严重级别的 templates,JSON 输出到 stdout
scanner scan --targets https://a.com,https://b.com --min-severity high
# 业务感知评分 + 发现感知的网络扫描
scanner scan --targets https://app.example.com,api.example.com \
--criticality app.example.com=critical,api.example.com=high \
--discover
# AWS 账户配置错误扫描(使用您的默认 AWS credential chain)
scanner cloud --provider aws --format sarif -o aws.sarif
# 浏览器 UI
scanner serve # then open http://localhost:8080
# Lint templates
scanner validate
```
## 命令
| 命令 | 用途 |
|---------|---------|
| `scan` | 对一个或多个 HTTP 目标运行模板 |
| `cloud` | 扫描云账户的错误配置 (AWS) |
| `serve` | 启动浏览器 UI |
| `validate` | Lint 模板并报告解析/验证错误 |
| `version` | 打印版本信息 |
运行 `scanner -h` 查看完整的 flags。
### `scan`(关键 flags)
| Flag | 默认值 | 描述 |
|------|---------|-------------|
| `--targets` | *(必填)* | 逗号分隔的目标 |
| `--category` | all | `web`, `cloud`, `infra` (逗号分隔) |
| `--severity` | all | `critical,high,medium,low,info` |
| `--min-severity` | — | 仅运行处于/高于此严重级别的模板 |
| `--tags` | — | 按模板 tags 过滤 |
| `--templates` | `templates` (否则使用内置) | 模板目录或文件 |
| `--threads` | 30 | 最大并发 worker 数 |
| `--rate-limit` | 0 | 每个目标的最大请求/秒 (0 = 不限) |
| `--discover` | false | 发现开放端口并跳过要求端口关闭的 infra 模板 |
| `--discover-timeout` | 1.2s | 发现模式下每个候选端口的 TCP 超时时间 |
| `--timeout` | 30s | 每个请求的超时时间 |
| `--insecure` | false | 跳过 TLS 验证 |
| `--format` | json | `json`, `html`, `sarif`, `csv` |
| `--criticality` | — | 目标关键性映射:`target=critical|high|medium|low,...` |
| `--fail-on-severity` | — | 如果任何发现的严重性达到/超过此级别,则以退出码 2 退出 |
| `--fail-on-known-exploited` | false | 如果存在任何 CISA-KEV 相关的发现,则以退出码 2 退出 |
| `--fail-on-priority` | 0 | 如果任何发现的优先级分数 >= 阈值,则以退出码 2 退出 |
| `--fail-on-score-below` | 0 | 如果安全状况分数低于阈值,则以退出码 2 退出 |
| `--output`, `-o` | stdout | 将报告写入文件 |
| `--dry-run` | false | 显示扫描计划,不发送任何请求 |
如果省略 `--templates` 并且工作目录中不存在 `templates/` 目录,
则将使用**嵌入在二进制文件中的内置模板集**。
### `cloud` (AWS)
凭据从 `--creds ` 解析(见下文),否则使用标准的 AWS
凭据链(环境变量、`~/.aws` 或 IAM role)。如果未找到有效凭据,
扫描将快速失败并显示清晰的错误信息。
当前的 AWS 检查:
| 检查项 | 严重性 |
|-------|----------|
| 未启用 MFA 的 Root 账户 | critical |
| 可公开访问的 S3 存储桶 (ACL) | high |
| 在敏感端口上对 `0.0.0.0/0` 开放的安全组 | high |
| 可公开访问的 RDS 实例 | high |
| 未启用 MFA 的 IAM 用户 | medium |
| 超过 90 天的 IAM 访问密钥 | medium |
| 未加密的 RDS 存储 | medium |
Cloud flags:
| Flag | 默认值 | 描述 |
|------|---------|-------------|
| `--format` | json | `json`, `html`, `sarif`, `csv` |
| `--criticality` | — | 账户关键性:`critical|high|medium|low` |
| `--fail-on-severity` | — | 如果任何发现的严重性达到/超过此级别,则以退出码 2 退出 |
| `--fail-on-known-exploited` | false | 如果存在任何 CISA-KEV 相关的发现,则以退出码 2 退出 |
| `--fail-on-priority` | 0 | 如果任何发现的优先级分数 >= 阈值,则以退出码 2 退出 |
| `--fail-on-score-below` | 0 | 如果安全状况分数低于阈值,则以退出码 2 退出 |
## 模板格式
模板采用 YAML 格式。最小示例:
```
id: web-example-check # unique, lowercase kebab-case
name: "Human-readable name"
severity: high # critical | high | medium | low | info
category: web # web | cloud | infra (or a list)
metadata:
cwe: [79]
owasp_top_10: "A03:2021 – Injection"
references:
- "https://owasp.org/..."
requests:
- method: GET
url: "{{target}}/search?q={{payload}}" # or use `path: /search`
payloads:
- ""
matchers:
- type: contains # status | contains | word | regex | header | response | response_time
part: body # body | header | response | status
value: ""
matchers_condition: and # and | or (default: and)
evidence:
impact_summary: "What an attacker can do"
business_risk: "Why it matters"
remediation:
- verification: "How to confirm the fix"
tags: [xss, injection]
```
**占位符:**`{{target}}` 会被替换为每个目标;`{{payload}}` 会被
替换为每个 payload(每个 payload 发起一次请求)。
**匹配器:**
- `status` — 比较状态码(`condition: eq|not_eq|gt|lt`)。
- `contains` / `word` / `response` / `header` — 对选定的 `part` 进行子字符串匹配。
- `regex` — 对选定的 `part` 进行 RE2 匹配。
- `response_time` — 使用 `min`/`max`(以毫秒为单位)进行时间检查(适用于盲注/基于时间的问题)。
多个 `values:` 默认以 OR(或)逻辑组合(使用 `match_all: true` 表示 AND(与))。
`condition: not_eq` 反转子字符串/正则表达式的匹配结果(例如,断言某个 header
*不存在*)。
请参阅 `templates/` 目录中的 14 个可用示例,并参考
[CONTRIBUTING.md](CONTRIBUTING.md) 以添加您自己的模板。
## 输出格式
- **JSON** — 机器可读;标准的结果数据结构。
- **HTML** — 独立的、可分享的报告,按严重性分组。
- **SARIF** — 适用于 GitHub 代码扫描和 IDE 查看器的 SARIF 2.1.0。
- **CSV** — 包含威胁和关键性列的电子表格/工单导入。
## 评分与优先级排序
- **风险分数 (`0.0`–`10.0`)** — 严重性 + 可利用性信号。
- **置信度 (`0.00`–`1.00`)** — 发现结果的匹配器强度信号。
- **优先级分数 (`0.00`–`10.00`)** — 结合风险、置信度、威胁排名和资产关键性的综合分诊分数。
- **威胁排名** — CISA KEV 中的 CVE 会被标记为 `known_exploited` 并提升级别。
- **安全评级 (`A+`–`F`)** — 基于所有发现结果的加权安全状况分数。
用于评级的资产关键性权重:
- `critical`: `x1.6`
- `high`: `x1.3`
- `medium`: `x1.1`
- `low` / 未设置: `x1.0`
这将传播到报告 JSON(`target_criticality`、`asset_criticality`)、主机明细和趋势历史记录中。
## 发现与服务指纹识别
使用 `--discover` 时,将针对每个目标分两个阶段对 infra 模板进行预过滤:
1. **端口可达性**:对候选的 infra 端口进行快速的 TCP 检查。
2. **服务家族提示**:轻量级指纹(SSH banner,Redis `PING`,
TLS 握手,HTTP `HEAD`,FTP 问候语,SMTP 问候语,MySQL 握手,
PostgreSQL SSL 探测,SMB 协商响应)以检测可能的服务家族
(`ssh`, `redis`, `tls`, `http`, `ftp`, `smtp`, `mysql`, `postgres`, `smb`)。
要求端口关闭的 infra 模板将被跳过。如果模板映射到
特定家族(例如 `ssh` 或 `redis`),并且发现阶段识别出不同的
服务家族,该模板也会被跳过。
## CI/CD
开箱即用的 GitHub Actions 工作流(Web + AWS)以及容器镜像已在
[docs/ci-cd.md](docs/ci-cd.md) 中详细说明。SARIF 上传的结果将显示在
代码库的 **Security → Code scanning**(安全 → 代码扫描)选项卡中。
## 架构
```
cmd/scanner CLI entry point (scan / cloud / serve / validate)
internal/
template YAML schema, loader (disk + embedded), filtering
matcher matcher evaluation
engine concurrent worker pool + per-target rate limiting
finding finding model, de-duplication, severity summary
report JSON / HTML / SARIF reporters
cloud/aws AWS misconfiguration checks (SDK-interface based)
credential credential-file loading
web embedded browser UI
templates/ built-in template set (embedded into the binary)
```
依赖项刻意保持在最低限度:`gopkg.in/yaml.v3` 和 AWS SDK for
Go v2(仅由云检查使用)。
## 路线图
- 更多 AWS 检查;Azure 和 GCP 提供商
- 在 Web UI 中进行云扫描
- 扩展模板库的覆盖范围
## License
MIT — 详见 [LICENSE](LICENSE)。
标签:AWS, DAST, DPI, EVTX分析, Go, Ruby工具, SARIF, YAML模板, 加密, 图数据库, 密码管理, 恶意软件分析, 插件系统, 日志审计, 漏洞扫描器, 请求拦截