实战演练:利用CloudFront实现域名伪装(Domain Fronting)

本文详细演示了如何使用AWS CloudFront配置域名伪装技术,包括设置正常源站与伪装源站、处理协议策略与SSL证书、利用Host头实现流量转发,并提供了curl测试方法及现成工具推荐。

域名伪装与CloudFront实战示例

本文是《域名伪装入门指南》的配套文章,将逐步指导如何设置用于域名伪装的站点及被伪装的站点。

演练环境角色

  • 伪装主机名:fronted.digi.ninja
  • “正常”源站:digi.ninja
  • “正常”CloudFront域名:d1pticz0uvhz4n.cloudfront.net(后续说明来源)
  • “恶意”源站:frontme.vuln-demo.com
  • “恶意”CloudFront域名:d1sdh26o090vk5.cloudfront.net(后续说明来源)

设置“正常”源站

若已有CloudFront托管站点可跳过此步,直接配置被伪装站点。

登录AWS账户,从服务菜单选择CloudFront,点击“创建分发”并选择“Web”选项。

在“源站设置”部分:

  • 在“源站域名”框中输入现有站点主机名(digi.ninja)
  • 在“源ID”框中为配置指定唯一名称
  • 注意:默认“源站协议策略”为“仅HTTP”。若源站支持HTTPS(如digi.ninja同时监听HTTP/HTTPS并启用HSTS重定向),必须修改此设置,否则通过伪装域名访问时将返回403错误

“默认缓存行为设置”中的所有选项可保持默认。

在“分发设置”部分:

  • 为增强真实性,将“SSL证书”改为“自定义SSL证书(example.com)”
  • 通过“使用ACM请求或导入证书”生成证书(支持DNS或邮件验证)
  • 在“备用域名(CNAME)”框中输入用于访问站点的主机名(fronted.digi.ninja)。未设置此项同样会导致通过主机名访问时返回403错误

完成配置后点击“创建分发”,系统将开始部署(状态显示“进行中”)。部署期间需为域名(fronted.digi.ninja)创建CNAME记录,指向CloudFront分配域名(如d1pticz0uvhz4n.cloudfront.net)。部署完成后状态变为“已部署”,即可通过自定义DNS名称和CloudFront域名访问。

若CloudFront URL可访问但自定义域名失败,需检查配置错误。每次重新部署可能耗时10-15分钟。

设置“恶意”源站

此步骤与前述类似:

  • 在“源站域名”字段输入要伪装的站点(frontme.vuln-demo.com)
  • 由于不直接通过自身名称或CloudFront名称访问,无需修改“分发设置”
  • 完成流程并开始部署

部署后应能通过分配的CloudFront域名(d1sdh26o090vk5.cloudfront.net)浏览站点。出现错误时需调试。

为何不设置“备用域名”?

  • 非必需:可在Host头中使用CloudFront域名而非真实源站引用
  • 安全优势:匿名CloudFront主机名比暴露真实源站更隐蔽。若活动被发现时源站已下线,调查方仅能获得无意义的随机字符串

测试域名伪装

所有组件就绪后,即可进行域名伪装!原理是:

  • 使用“正常”主机名(fronted.digi.ninja)建立网络连接
  • 在Host头中指定“恶意”CloudFront主机名(d1sdh26o090vk5.cloudfront.net)

使用curl测试:

1
2
curl -H "Host: d1sdh26o090vk5.cloudfront.net" \
https://fronted.digi.ninja/

结果成功! 基于DNS查询的连接检查显示请求发往“正常”站点(fronted.digi.ninja),但CloudFront收到HTTP请求后,根据Host头中的“恶意”CloudFront主机名返回数据。

寻找可用域名

若不想自行设置域名,可寻找现有资源。推荐工具与文章:

  • 《我如何识别93k个可伪装CloudFront域名》
  • 《通过CloudFront备用域名实现域名伪装》
  • FindFrontableDomains工具

相关文章

  • 《域名伪装入门指南》
  • 《使用Cloudflare实现域名伪装》
  • 《利用HTTP管道化隐藏请求》

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计