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模板, 加密, 图数据库, 密码管理, 恶意软件分析, 插件系统, 日志审计, 漏洞扫描器, 请求拦截