redhoundinfosec/scopecheck

GitHub: redhoundinfosec/scopecheck

一款跨平台CLI工具,用于在授权安全评估前验证目标IP和域名是否在授权范围内,生成审计追踪记录以确保合规。

Stars: 0 | Forks: 0

# scopecheck **在任何攻击行动之前,根据授权的参与范围验证目标。** ``` scopecheck validate 192.168.1.50 10.20.30.40 mail.acme.com ✓ 192.168.1.50 IN SCOPE (matches 192.168.1.0/24) ✗ 10.20.30.40 OUT OF SCOPE ✗ mail.acme.com EXCLUDED (excluded: mail.acme.com) ``` ## 功能介绍 scopecheck 是一个跨平台的 CLI 工具,用于检查目标(IP、CIDR、域名)是否属于您授权的参与范围内。它读取 YAML 范围定义文件并据此验证目标,生成清晰的通过/失败输出及审计跟踪记录。 ## 适用人群 - 渗透测试人员 - 红队操作员 - 紫队成员 - 安全顾问 - 漏洞赏金猎人 - 任何进行授权安全评估的人员 ## 授权使用声明 此工具专为支持**合法、授权的安全测试**而设计。它是一种帮助操作员保持在授权边界内的安全工具。在进行任何安全评估之前,请务必确保您拥有书面授权。 ## 不适用的场景 - **不**扫描、探测或与任何目标系统交互 - **不**解析 DNS 名称(纯粹的字符串/CIDR 匹配) - **不**解析范围文档(PDF、电子邮件、合同) - **不**替代法律审查或授权流程 - **不**提供 GUI 或 Web 界面 ## 安装说明 ### 预编译二进制文件 从 [Releases](https://github.com/redhoundinfosec/scopecheck/releases) 下载。 ### 从源代码构建 ``` git clone https://github.com/redhoundinfosec/scopecheck.git cd scopecheck go build -o scopecheck ./cmd/scopecheck/ ``` ### 交叉编译 ``` # Linux GOOS=linux GOARCH=amd64 go build -o scopecheck-linux-amd64 ./cmd/scopecheck/ # Windows GOOS=windows GOARCH=amd64 go build -o scopecheck-windows-amd64.exe ./cmd/scopecheck/ # macOS (Apple Silicon) GOOS=darwin GOARCH=arm64 go build -o scopecheck-darwin-arm64 ./cmd/scopecheck/ ``` ## 快速开始 ``` # 1. 创建 scope 文件 scopecheck init # 2. 使用您的 engagement 详情编辑 scope.yaml # 3. 验证 targets scopecheck validate 192.168.1.50 scopecheck validate --file targets.txt cat targets.txt | scopecheck validate --stdin ``` ## 范围文件格式 ``` version: 1 engagement: name: "Acme Corp Pentest Q1 2026" id: "RT-2026-001" start: "2026-01-15" end: "2026-02-15" scope: include: - "192.168.1.0/24" - "10.0.0.50" - "2001:db8::/32" - "*.acme.com" - "portal.acme.com" exclude: - "192.168.1.1" - "192.168.1.2" - "mail.acme.com" notes: "Authorized window: weekdays 22:00-06:00 EST only" ``` ### 支持的目标类型 | 类型 | 示例 | 描述 | |------|---------|-------------| | IPv4 地址 | `10.0.0.50` | 单个主机 | | IPv4 CIDR | `192.168.1.0/24` | 子网范围 | | IPv6 地址 | `2001:db8::1` | 单个主机 | | IPv6 CIDR | `2001:db8::/32` | 子网范围 | | 域名(精确) | `portal.acme.com` | 精确匹配 | | 域名(通配符) | `*.acme.com` | 所有子域名 | ### 关键规则 - **排除规则始终优先于包含规则** - 通配符 `*.example.com` 匹配 `sub.example.com`,但**不**匹配 `example.com` - 域名匹配不区分大小写 - 目标文件中的注释(以 `#` 开头的行)和空行将被忽略 ## 命令 ### `scopecheck init` 生成范围模板文件。 ``` scopecheck init # Creates scope.yaml scopecheck init --scope engagement.yaml # Custom filename ``` ### `scopecheck validate` 根据范围检查目标。 ``` # 单个 target scopecheck validate 192.168.1.50 # 多个内联 targets scopecheck validate 192.168.1.50 10.0.0.1 app.acme.com # 来自文件 scopecheck validate --file targets.txt # 来自 stdin (从其他工具 pipe) nmap -sL -n 192.168.1.0/24 | awk '/report/{print $5}' | scopecheck validate --stdin # 用于自动化的 JSON output scopecheck validate --file targets.txt --format json # CSV output scopecheck validate --file targets.txt --format csv # Verbose (显示 match 详情) scopecheck validate -v --file targets.txt # Quiet 模式 (仅 exit code) scopecheck validate -q --file targets.txt ``` ### `scopecheck audit` 查看范围检查的审计跟踪记录。 ``` scopecheck audit # Show all entries scopecheck audit --last 20 # Last 20 entries scopecheck audit -f json # JSON format scopecheck audit --clear # Clear audit log ``` ## 输出格式 ### 文本(默认) ``` scopecheck — Acme Corp Pentest Q1 2026 ✓ 192.168.1.50 IN SCOPE (matches 192.168.1.0/24) ✗ 192.168.1.1 EXCLUDED (matches 192.168.1.1) ✗ 10.20.30.40 OUT OF SCOPE ✓ app.acme.com IN SCOPE (matches *.acme.com) Summary: 2 in scope, 1 excluded, 1 out of scope (4 total) ``` ### JSON ``` { "engagement": "Acme Corp Pentest Q1 2026", "results": [ {"target": "192.168.1.50", "status": "in_scope", "matched_by": "192.168.1.0/24"}, {"target": "192.168.1.1", "status": "excluded", "matched_by": "192.168.1.1"}, {"target": "10.20.30.40", "status": "out_of_scope", "matched_by": ""} ], "summary": {"in_scope": 1, "excluded": 1, "out_of_scope": 1, "total": 3} } ``` ### CSV ``` target,status,matched_by 192.168.1.50,in_scope,192.168.1.0/24 192.168.1.1,excluded,192.168.1.1 10.20.30.40,out_of_scope, ``` ## 退出代码 | 代码 | 含义 | |------|---------| | 0 | 所有目标均在范围内 | | 1 | 一个或多个目标超出范围或被排除 | | 2 | 错误(输入无效、文件缺失等) | ## 示例工作流 ### 扫描前验证 ``` # 从 nmap discovery 生成 target 列表,然后在 full scan 前进行 validate nmap -sL -n 10.0.0.0/24 | awk '/report/{print $5}' > discovered.txt scopecheck validate --file discovered.txt || echo "STOP: Out-of-scope targets found" ``` ### 自动化测试的 CI/CD 门禁 ``` scopecheck validate -q --file targets.txt --format json if [ $? -ne 0 ]; then echo "Scope validation failed. Aborting." exit 1 fi ``` ### 参与报告的审计跟踪 ``` # Engagement 结束后,导出 audit log 用于 report scopecheck audit --format json > scope-audit-$(date +%Y%m%d).json ``` ## 全局标志 | 标志 | 简写 | 描述 | |------|-------|-------------| | `--scope ` | `-s` | 范围文件路径(默认:`scope.yaml`) | | `--format ` | `-f` | 输出格式:`text`、`json`、`csv` | | `--quiet` | `-q` | 抑制非必要输出 | | `--verbose` | `-v` | 显示详细匹配信息 | | `--no-color` | | 禁用彩色输出 | | `--no-audit` | | 禁用审计日志记录 | ## 审计日志 默认情况下,每次范围检查都会追加到当前目录下的 `.scopecheck-audit.jsonl` 文件中。每条记录包含: - 时间戳 (UTC) - 参与项目名称 - 检查的目标 - 结果 (in_scope, excluded, out_of_scope) - 匹配的规则 - 使用的范围文件 审计日志使用 JSONL 格式(每行一个 JSON 对象),文件权限设置为 `0600`。 ## 限制 - 无 DNS 解析 —— 目标按原样与范围定义进行匹配 - 通配符匹配仅为单级(`*.example.com` 不匹配 `example.com` 本身) - 不解析范围文档(PDF、DOCX) —— 您必须手动将范围转录为 YAML - IPv4 映射的 IPv6 地址(例如 `::ffff:192.168.1.1`)不会自动标准化 - v1 版本不支持端口级别的范围限制 ## 平台支持 | 平台 | 状态 | |----------|--------| | Linux (amd64, arm64) | 支持 | | Windows (amd64) | 支持 | | macOS (amd64, arm64) | 支持 | ## 路线图 请参阅 [ROADMAP.md](ROADMAP.md) 查看计划中的功能。 ## 安全提示 - 此工具从不接触网络。它是一个纯粹的验证/匹配工具。 - 将其作为接收范围授权和执行工具之间的**检查点**。 - 它不能替代法律审查、合同或授权文档。 - 审计日志提供了检查范围的证据,但并非防篡改的。 ## 许可证 MIT 许可证。请参阅 [LICENSE](LICENSE)。 ## 贡献指南 请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。 ## 安全策略 请参阅 [SECURITY.md](SECURITY.md)。
标签:Bug Bounty, CIDR计算, EVTX分析, Go语言, IP验证, Linux安全, YAML配置, 可自定义解析器, 域名匹配, 安全测试辅助, 文档结构分析, 日志审计, 白名单, 目标确认, 程序破解, 紫队, 网络安全, 范围验证, 防御性安全, 隐私保护