datah4wk/Ghostructure

GitHub: datah4wk/Ghostructure

通过通配符DNS、统一TLS证书和标准化HTTP响应实现零信号子域名反枚举的防御基础设施

Stars: 0 | Forks: 0

# Ghostructure ### 通配符子域名反枚举基础设施 ## 问题所在 子域名枚举是任何针对性攻击的第一阶段。像 **amass**、**subfinder** 和 **gobuster** 这样的工具每秒解析数千个子域名,通过对响应进行指纹识别来映射组织的攻击面。标准设置通过两种方式泄露信息: 1. **DNS 层** — 真实子域名返回 A 记录,虚假子域名返回 NXDOMAIN 2. **HTTP 层** — 真实服务返回独特的响应(状态码、标头、主体大小),即使在拒绝访问时也是如此 这为攻击者提供了一个 **二元指示器**:真实或虚假。只要有足够的请求,每个内部服务都是可发现的。 ## Ghostructure 如何解决这个问题 Ghostructure 消除了攻击者可以用来区分真实子域名和虚假子域名的每一个信号,涵盖四个层面: | 层面 | 作用 | |-------|-------------| | **1. DNS 规范化** | 通配符 A 记录(`*.example.com → IP`)。没有子域名会返回 NXDOMAIN。每个可能的子域名都会解析。 | | **2. TLS 规范化** | 通过 DNS-01 挑战获取单一通配符证书。CT 日志中不包含每个子域名的证书。无 SNI 指纹识别。 | | **3. HTTP 响应规范化** | 对 *所有内容* 返回完全相同的 403 响应 —— 相同的状态码、相同的主体、相同的字节数(2,618 字节)—— 且无需 VPN 访问。 | | **4. 零信任访问** | NetBird/WireGuard 网格 VPN + Google Workspace SSO。服务仅通过 Traefik `ipAllowList` 响应经过认证的 VPN 对等端。 | 结果:攻击者扫描 100,000 个子域名会收到 100,000 个完全相同的响应。零信号。零区分。无从下手。 ## 架构 ``` *.example.com → Server IP (Wildcard DNS, no NXDOMAIN ever) │ ▼ ┌────────────────┐ │ Traefik v3.6 │ │ TLS Termination│ ← Wildcard cert (*.example.com) │ + Routing │ via DNS-01 / Let's Encrypt └───────┬────────┘ │ ┌───────────────┼───────────────┐ ▼ ▼ ▼ Without VPN With VPN Catch-All (known host) (NetBird) (unknown host) │ │ │ ipAllowList ipAllowList │ FAILS PASSES │ │ │ │ nginx Service nginx 403 page Content ✓ 403 page 2,618 B 200 OK 2,618 B │ │ └─────── IDENTICAL ─────────────┘ ``` **核心洞察:** 当在没有 VPN 的情况下访问已知子域名时,`ipAllowList` 中间件会拒绝它 —— 但 Traefik 的错误页面中间件会捕获该拒绝,并提供与兜底规则 *相同的 nginx 403 页面*。攻击者看不到任何区别。 ## 攻击面分析 | 侦察技术 | 之前(标准设置) | 之后(Ghostructure) | |---|---|---| | **DNS 子域名暴力破解** | 真实 → A 记录,虚假 → NXDOMAIN | 全部 → 相同的 A 记录 | | **HTTP 响应指纹识别** | 不同的状态码和主体 | 全部 → 相同的 403,2,618 字节 | | **证书透明度** | 单个证书泄露每个子域名 | 单一通配符证书,旧名称已轮换 | | **TLS 握手 / SNI 分析** | 每个子域名有不同的证书 | 全部使用相同的通配符证书 | | **基于时间的指纹识别** | 后端处理时间各异 | 速率受限的兜底规则统一了时间 | | **响应标头分析** | 特定服务的标头泄露技术栈 | 所有 403 均来自同一个 nginx 实例,所有路由均有安全标头 | ## 验证 ``` # 测试每个子域名返回相同的响应 for sub in admin staging test db api jenkins fake nonexistent; do curl -sk https://${sub}.example.com/ \ -w "${sub}: %{http_code} %{size_download}B\n" -o /dev/null done ``` 预期输出 —— 全部相同: ``` admin: 403 2618B staging: 403 2618B test: 403 2618B db: 403 2618B api: 403 2618B jenkins: 403 2618B fake: 403 2618B nonexistent: 403 2618B ``` 检查响应标头: ``` curl -sI https://anything.example.com/ -k ``` 预期 —— 无服务器标识,完整的安全标头: ``` HTTP/2 403 strict-transport-security: max-age=31536000; includeSubDomains; preload x-content-type-options: nosniff x-frame-options: DENY content-type: text/html content-length: 2618 ``` ## 技术栈 | 组件 | 角色 | |---|---| | **Traefik v3.6** | 反向代理、TLS 终结、路由、速率限制 | | **Let's Encrypt (DNS-01)** | 通配符证书颁发 | | **Spaceship DNS API** | 自动化 DNS 挑战解析 | | **NetBird (WireGuard)** | 零信任网格 VPN 覆盖 | | **Google Workspace SSO** | 通过 Dex IdP 提供的身份提供商 | | **nginx** | 静态 403 错误页面服务 | | **fail2ban** | 针对枚举和暴力破解的自动化 IP 封禁 | | **Docker Compose** | 服务编排 | | **Ubuntu 24.04** | 单一 VPS 主机 | ## MITRE ATT&CK 覆盖范围 | 技术 ID | 名称 | 缓解措施 | |---|---|---| | **T1595.003** | 主动扫描:字典扫描 | 通配符 DNS + 统一 403 响应消除了信号 | | **T1596.002** | 搜索开放技术数据库:DNS/被动 DNS | 通配符 DNS —— 没有可发现的唯一记录 | | **T1596.003** | 搜索开放技术数据库:数字证书 | 单一通配符证书,旧的子域名名称已轮换移除 | | **T1590.002** | 收集受害者网络信息:DNS | 任何子域名之间都不可能有信号差异 | ## 额外加固 除了核心的反枚举层之外,Ghostructure 还包括: - **兜底规则上的速率限制** — 每个 IP 5 请求/秒。扫描 10 万个子域名需要 5.5 小时,而不是几秒钟。 - **公共服务上的速率限制** — 每个 IP 10 请求/秒,允许突发。 - **fail2ban 集成** — 针对子域名枚举(60 秒内命中兜底规则 50 次 = 封禁 1 小时)和认证暴力破解的自动 IP 封禁。 - **JSON 访问日志** — 用于 SIEM 集成(Wazuh、Splunk、ELK)的结构化日志。 - **处处都有安全标头** — 所有响应(包括兜底规则)均包含 HSTS、X-Content-Type-Options、X-Frame-Options、Permissions-Policy。 ## 开始使用 1. 克隆此仓库 2. 查看 `configs/` 中的配置 —— 所有配置均使用 `example.com` 作为占位符 3. 将 `example.com` 全文替换为您的域名 4. 设置您的 DNS 提供商 API 凭证以进行 DNS-01 挑战 5. 使用 Docker Compose 部署 6. 运行 `scripts/verify-uniformity.sh yourdomain.com` 进行验证 详见 [`docs/architecture.md`](docs/architecture.md) 获取完整的技术深入解析。 ## 文档 - [`docs/threat-model.md`](docs/threat-model.md) — 威胁行为者、攻击向量和剩余风险 - [`docs/attack-surface-analysis.md`](docs/attack-surface-analysis.md) — 每种侦察技术的详细前后分析 - [`docs/architecture.md`](docs/architecture.md) — 完整架构、网络流和路由逻辑 ## 许可证 MIT — 详见 [LICENSE](LICENSE)。
标签:DNS 安全, GitHub, HTTP 响应标准化, NetBird, TLS 指纹, Traefik, VPN, Wildcard DNS, WireGuard, 主机安全, 信号消除, 信息收集防护, 反侦察, 后端开发, 子域名枚举, 密码管理, 插件系统, 流量混淆, 渗透测试防御, 版权保护, 系统安全, 网络安全, 隐私保护, 零信任架构