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, 主机安全, 信号消除, 信息收集防护, 反侦察, 后端开发, 子域名枚举, 密码管理, 插件系统, 流量混淆, 渗透测试防御, 版权保护, 系统安全, 网络安全, 隐私保护, 零信任架构