域名伪装技术101
域名伪装技术已存在多年,虽然我理解其概念,但直到最近与Chris Truncer合作进行红队测试时,才真正深入研究其实现细节。幸运的是,Chris是个好老师,当把技术拆解后会发现其原理相当简单。
HTTP请求基础
在讲解伪装技术前,先回顾网页获取流程:
-
网络连接阶段:
- 用户在浏览器输入含主机名的URL
- 操作系统执行DNS查询
- 基于查询结果的IP建立TCP连接
-
应用层阶段:
- HTTP/1.0时代,每个IP只能托管一个网站
- HTTP/1.1引入"Host"头部,支持基于主机名的虚拟主机
基础HTTP请求示例:
|
|
主机头实验
通过curl演示主机头与URL解耦:
|
|
CDN环境下的域名伪装
当网站部署在CDN(如Cloudflare/Azure/CloudFront)时:
- 域名通过CNAME指向CDN
- CDN配置"origin server"作为内容源
技术关键点:
- TLS握手仅验证连接域名证书(如bing.com)
- Host头在HTTP层传输(如google.com)
- 证书验证过程不会检查Host头
|
|
红队实战应用
案例场景:
- 目标公司使用基于域名的HTTPS流量过滤
- 选择CloudFront上信誉良好的域名作为前端
- C2服务器配置:
- 网络连接使用"清白"域名
- Host头指定攻击者控制的恶意域名
- CDN将流量路由到真实C2服务器
防御局限性
对于CDN托管域名的所有者:
- 无法阻止该技术滥用
- 攻击流量不会出现在正常日志中
- 仅可能通过DNS请求与流量不匹配发现异常(实际难以实现)
扩展应用
该技术同样适用于:
- 审查绕过(通过可信域名前置被禁网站)
- 需要配合自定义浏览器插件或本地代理修改Host头
配套实践指南:《CloudFront域名伪装实战示例》可供参考