Janakar-cloud/Domain_Analayzer
GitHub: Janakar-cloud/Domain_Analayzer
一款集成化的域名情报与安全评估工具,通过CT日志、DNS、TLS、WHOIS及威胁情报接口持续监控组织的外部攻击面并生成可审计报告。
Stars: 0 | Forks: 0
### 域名情报
域名情报(Domain Intelligence)是一个对 Windows 友好的 Python 应用程序,旨在帮助安全和 IT 团队了解其组织域名上的暴露情况。它查询公共记录、检查证书并审查网站内容,以突出显示潜在风险和需要修复的区域。您可以在本地运行它,通过简单的 Web UI 查看结果,并导出报告。
## 功能说明
- 查找过去曾颁发过证书的子域名。
- 列出 DNS 记录(地址、邮件服务器、文本记录)。
- 检查网站的 TLS 证书(颁发者、过期时间)。
- 查询域名注册详细信息(whois、年龄、过期时间)。
- 可选调用 SSL Labs 快速获取 TLS 评级。
- 跟踪重定向,查看站点是否存在跳转或降级安全性。
- 扫描首页及少量同站链接,查找意外暴露的机密信息(API keys, tokens)。
- 标记可能面临接管风险的子域名。
- 保存清晰、可导出的报告及小型证据快照。
## 快速开始
- 前置条件:Python 3.9+ 和 PowerShell
- 创建并激活虚拟环境,然后安装依赖项:
```
py -m venv .venv
.\.venv\Scripts\Activate.ps1
py -m pip install -r requirements.txt
```
- 启动后端 API (FastAPI) 和前端 (Streamlit):
```
# Backend (端口 8000)
py -m uvicorn src.server:app --host 127.0.0.1 --port 8000 --reload
# Frontend (端口 8501)
py -m streamlit run src/webui/app.py --server.port 8501
```
- 访问 http://127.0.0.1:8501 使用 UI。输入域名(每行一个)并运行分析。UI 使用固定的内部扫描配置文件(扫描选项已隐藏)。
- 或者直接调用 API:
```
$body = @{ domains=@("example.com"); output_formats=@("json","csv","html"); skip_modules=@(); workers=12; fast_mode=$true } | ConvertTo-Json
Invoke-RestMethod -Method Post -Uri http://127.0.0.1:8000/scan -ContentType "application/json" -Body $body
```
## 性能调优(不跳过检查)
- Fast Mode(快速模式):限制超时时间和 SSL Labs 轮询,同时保持所有模块开启。
- Advanced Tuning(高级调优):在 UI 展开栏中,调整每个模块的限制(CT 超时和最大子域名数、DNS/TLS/WHOIS/Redirect 超时、SSL Labs 轮询/尝试/缓存时间)。
- Concurrency(并发):增加 Workers(工作线程)以更快地扫描多个域名。
## 配置
- 编辑 [config.yaml](config.yaml) 以设置默认值:启用的模块、超时、速率限制、输出路径和规则。
- API 密钥放在 .env.local 中(可选):ABUSEIPDB_KEY, OTX_KEY, VT_KEY, CRIMINALIP_KEY, URLSCAN_KEY。
- 代理:根据需要设置 `proxy.enabled` 和 HTTP/HTTPS 代理 URL。
- 输出:报告保存在 `output/` 下,证据保存在 `evidence/` 下。
## 技术架构
- Backend(后端):FastAPI (`src/server.py`) 暴露 `/health` 和 `/scan` 端点。
- Frontend(前端):Streamlit (`src/webui/app.py`) 提供 Posture(态势)、DNS、Certificate(证书)、Reputation(信誉)、Findings(发现)等标签页。
- Scanner(扫描器):针对每个域并发编排模块 (`src/scanner.py`),应用速率限制并收集结果。
- Modules(模块):`src/modules/` 中的可插拔分析器,用于 CT、DNS、TLS、WHOIS、SSL Labs、重定向、内容扫描、接管检测和威胁情报(本地 + 可选外部)。
- Reporters(报告器):`src/reporters/` 中的 JSON/CSV/HTML 生成机器可读和人类友好的输出。
- Config(配置):`src/core/config.py` 加载 YAML + .env 并提供模块设置(包括运行时的 Fast Mode 覆盖)。
## 模块逻辑(工作原理)
- Certificate Transparency (`ct_enumeration`):查询 crt.sh JSON,提取名称,过滤有效子域名,通过 `max_subdomains` 限制数量,并为敏感命名添加发现。
- DNS Enumeration (`dns_enumeration`):使用带有解析器超时的 dnspython 收集 A, AAAA, CNAME, NS, MX, TXT, SOA;分析 SPF/DMARC/DKIM、名称服务器充分性以及悬空 CNAME。
- TLS Inspection (`tls_inspection`):通过 Python `ssl` 连接读取证书详情(CN, SANs, 颁发者, 有效性),标记过期、不匹配、弱算法/密钥和自签名证书。
- WHOIS Lookup (`whois_lookup`):在线程中包装 python-whois 以强制执行超时;解析注册商、组织、国家、日期和年龄;标记新注册或即将过期的域名以及 DNSSEC 状态。
- SSL Labs (`ssllabs`):调用公共 API;优先使用缓存结果;在有限尝试次数内轮询;将评级映射到严重性并列出协议和已知的 TLS 漏洞。
- Redirect Analysis (`redirect_analysis`):通过 SSL 验证跟踪重定向;汇总跳转次数和潜在的降级风险。
- Content Scanner (`content_scanner`):
- 获取首页(如果开启深度扫描,则包括浅层同源链接),并进行 SSRF 安全的 IP 验证。
- 限制正文大小和请求超时;记录标头、哈希和片段。
- 使用精选的正则表达式模式和熵评分来标记可能的机密信息;分配置信度(低/中/高)并存储 `raw_data.hits` 用于 UI 表格渲染。
- 根据检测到的最高置信度添加严重性发现。
- Takeover Detection (`takeover_detection`):检查悬空 CNAME(无法解析的目标)作为潜在的接管候选项。
- Local Reputation (`threat_intel.local_reputation`):基于 TLS 过期、WHOIS 年龄、高风险 TLD、重定向、接管风险和内容扫描严重性计算风险评分;添加整体信誉发现。
- External Threat Intel(外部威胁情报,可选):当提供密钥时集成 AbuseIPDB, OTX, VirusTotal, CriminalIP, URLScan。
## 报告(生成方式)
- 对于每个域名,模块在扫描器下运行并填充 `DomainResult`(子域名、DNS、TLS 证书、WHOIS、重定向、最终 URL、发现、错误、已执行模块)。
- 然后报告器进行序列化:
- JSON:每个域名的完整结构化结果,包括证据和 `raw_data.hits`。
- CSV:扁平化的摘要行;以及每个域名的完整资产清单 CSV。
- HTML:人类可读的仪表板,带有严重性着色和与 UI 对齐的部分。
- 输出位于 `output/` 中,文件名带有时间戳;证据文件(标头、哈希、片段)位于 `evidence//` 下。
## 安全与合规
- SSRF 防护:仅在解析的 IP 为公共/非保留地址时才获取内容。
- HTML 安全性:UI 转义内容并为内容命中渲染紧凑的表格。
- 速率限制:模块级别的上限可减少提供商负载并避免封禁。
- 合法使用:仅针对您拥有/管理或已获得明确测试许可的域名运行。
## API 参考
- `GET /health` → `{ "status": "ok" }`
- `POST /scan` → 字段:
- `domains: List[str]`
- `output_formats: ["json","csv","html"]`
- `skip_modules: List[str]`(可选)
- `workers: int`(并发)
- `fast_mode: bool`(保持模块开启,缩短超时/轮询)
- 内容覆盖:`content_scanner_deep_scan: bool`, `content_scanner_link_limit: int`, `content_scanner_timeout_ms: int`
- 高级覆盖:`ct_timeout`, `ct_max_subdomains`, `dns_timeout`, `tls_timeout`, `whois_timeout`, `redirect_timeout`, `ssllabs_timeout`, `ssllabs_poll_interval_seconds`, `ssllabs_max_attempts`, `ssllabs_max_age`
- 响应包含 `reports`、`summary`(严重性计数、总计)和完整的 `results`。
## CLI 使用
- 单个域名:
```
py cli.py --domain example.com
```
- 从文件批量扫描域名:
```
py cli.py --input domains.txt
```
- 为先前的结果生成报告:
```
py cli.py report --output csv html
```
## 部署
- 使用脚本以方便操作:
```
# 设置
.\scripts\deploy.ps1 -Setup
# 启动 Backend
.\scripts\deploy.ps1 -StartBackend
# 启动 Frontend
.\scripts\deploy.ps1 -StartFrontend
```
## 必需的 API 密钥(可选)
- AbuseIPDB: ABUSEIPDB_KEY
- AlienVault OTX: OTX_KEY
- VirusTotal: VT_KEY
- CriminalIP: CRIMINALIP_KEY
- URLScan: URLSCAN_KEY(私有扫描需要)
- Google Safe Browsing: GOOGLE_SAFE_BROWSING_KEY
- SecurityTrails (Passive DNS): SECURITYTRAILS_KEY
- 注意:本地信誉和内容扫描无需外部密钥即可运行;SSL Labs 不需要密钥。
## 仓库清理
- 生成的工件会被 .gitignore 忽略(`output/`、`evidence/`、`logs/`)。
- 要清除本地工件:
```
.\scripts\cleanup_repo.ps1
```
## 故障排除
- SSL Labs 缓慢或不可用:启用 Fast Mode,减少 `ssllabs_max_attempts`,并增加 `ssllabs_max_age` 以优先使用缓存。
- WHOIS 停顿:该模块强制执行自己的超时;如果注册表缓慢,结果可能不完整。
- YAML 规则错误:在 `local_rules.yaml` 中使用正确的引号并保持正则表达式简单;应用程序会记录解析警告。
- 代理使用:在 `config.yaml` 中设置 `proxy.enabled` 和 HTTP/HTTPS URL。
## 使用案例
- 外部攻击面发现
- Shadow IT 和被遗忘的子域名识别
- 证书生命周期监控
- 电子邮件安全态势评估 (SPF/DMARC)
- 威胁猎杀和 SOC 调查
- 持续的外部资产清单
## 免责声明
此工具仅用于授权的内部安全测试。请勿将其用于您不拥有或管理的域名。滥用可能违反法律或提供商的服务条款。
标签:AI合规, AV绕过, CT日志, DNS分析, ESC4, FastAPI, GitHub, Kubernetes, OSINT, Python, Streamlit, TLS检测, WHOIS查询, 动态插桩, 协议探测, 反取证, 域名情报, 威胁情报, 子域名接管, 安全评估, 实时处理, 密码管理, 开发者工具, 数据展示, 无后门, 红队, 访问控制, 证书透明性, 逆向工具, 防御性安全