muksri1/domain-recon

GitHub: muksri1/domain-recon

一款被动式域名安全控制审查工具,通过 Web 仪表盘和 CLI 对域名的 DNS、邮件认证、TLS、HTTP 安全标头等配置进行评分,帮助用户快速评估并改善域名安全态势。

Stars: 0 | Forks: 0

# 🛡️ Domain Recon — 安全控制审查 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/muksri1/domain-recon/actions/workflows/ci.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) [![Python 3.9+](https://img.shields.io/badge/python-3.9%2B-blue.svg)](https://www.python.org/) 一款轻量级工具,接收**域名**并审查其周边发布的**安全控制**,然后将结果呈现为带有 **CSV 导出**功能的 **Web 仪表盘**。专为学习研究和防御性安全态势检查而构建。 它执行的所有操作都是**被动**的:仅读取公开可用的数据和目标自身发布的记录。它**不进行任何漏洞利用、暴力破解或侵入性扫描**。请仅在你拥有或获得授权评估的域名上使用它。 ![Domain Recon 仪表盘](https://raw.githubusercontent.com/muksri1/domain-recon/main/docs/dashboard.png) ## 审查内容 | 类别 | 审查的控制项 | |----------|-------------------| | **DNS 足迹** | A / AAAA / MX / NS 记录、域名服务器冗余性与多样性、IPv6 | | **电子邮件身份验证** | SPF(策略强度)、DMARC(策略与报告)、DKIM(常用选择器发现) | | **DNS 完整性** | DNSSEC 签名、CAA 颁发限制 | | **TLS / 证书** | 证书有效性与过期时间、颁发者、SAN、协商协议、旧版 TLS 1.0/1.1 支持 | | **HTTP 安全标头** | HSTS、CSP、X-Frame-Options、X-Content-Type-Options、Referrer-Policy、Permissions-Policy、HTTP→HTTPS 跳转、Cookie 标志、信息泄露标头 | | **域名注册** | 注册商、注册与过期日期、注册商锁定、注册局 DNSSEC 委派(通过 RDAP) | | **攻击面** | 从公共证书透明度日志(crt.sh)中发现的子域名、看似敏感的主机名 | 每项发现都会获得一个状态(**PASS / WARN / FAIL / INFO**)、严重程度、通俗的解释以及修复建议。整体的 **0–100 评分和字母等级** 概括了安全态势。 ## 快速开始 ``` # 安装依赖 (Python 3.9+) pip install -r requirements.txt # 启动 dashboard python app.py # 打开 http://127.0.0.1:5000 并输入 domain ``` 更喜欢使用 **容器**?无需本地 Python 环境: ``` docker build -t domain-recon . docker run --rm -p 5000:5000 domain-recon # open http://localhost:5000 ``` 想把 **CLI 加入你的 PATH**?安装该软件包: ``` pip install . domain-recon example.com --csv out.csv ``` ### 命令行 ``` python cli.py example.com # print a report to the terminal python cli.py example.com --csv out.csv # also save findings as CSV python cli.py example.com --json out.json # also save the full report as JSON ``` 当任何控制项出现 **FAIL** 时,CLI 将以非零状态退出,因此它可以作为 CI pipeline 的拦截门禁。 ### 无需扫描进行体验 打开 **http://127.0.0.1:5000/?demo=1** 查看离线示例报告,或者分享一个**深链接**(如 `http://127.0.0.1:5000/?domain=example.com`)以自动运行扫描。 ## HTTP API | Endpoint | 描述 | |----------|-------------| | `GET /api/scan?domain=example.com` | JSON 报告 | | `GET /api/scan.csv?domain=example.com` | CSV 下载 | | `GET /api/demo` | 内置示例报告(离线) | | `GET /healthz` | 健康检查 | ## 项目布局 ``` app.py Flask web server (dashboard + JSON/CSV API) cli.py Command-line runner reconlib/ scanner.py Orchestrates all checks (parallel, time-bounded), scores results models.py Finding model, scoring utils.py Domain normalization, DNS resolver export.py CSV serialization demo.py Offline sample report for demo mode checks/ One module per control family templates/index.html Dashboard markup static/style.css Dashboard styling (light/dark aware) static/app.js Dashboard logic + client-side CSV export tests/ Offline unit tests Dockerfile Container image for the dashboard .github/workflows/ CI: ruff lint + pytest on Python 3.9–3.12 ``` ## 开发 ``` pip install -e ".[dev]" # install with ruff + pytest ruff check . # lint pytest -q # run the offline test suite ``` ## 评分机制 每项检查初始赋予域名 100 分。未通过的发现会根据状态和严重程度扣除相应的惩罚分数(例如,像缺少 SPF 记录这样的高严重性 FAIL 比低严重性的 WARN 扣除更多分数)。最终结果将映射到一个字母等级:A ≥ 90,B ≥ 80,C ≥ 70,D ≥ 60,否则为 F。INFO 级别的发现绝不会影响分数——它们仅用于描述足迹和攻击面,而不是缺陷。 ## 注意事项与局限性 - **DKIM** 使用特定于提供商的选择器名称,因此在探测中未发现记录并不能证明未配置 DKIM —— 该项将被报告为 INFO,而不是 FAIL。 - **crt.sh** 可能会响应缓慢或受到速率限制;该项检查会降级为 ERROR 状态的发现,而不是导致整个扫描失败。 - 需要具备对 DNS、目标 80/443 端口、`rdap.org` 和 `crt.sh` 的网络出站访问权限。 ## 许可证 MIT — 详见 [LICENSE](LICENSE)。
标签:GitHub, Python, 安全合规, 安全工具库, 实时处理, 无后门, 网络代理, 网络安全, 被动侦察, 请求拦截, 逆向工具, 防御态势评估, 隐私保护