潜在的定时攻击总是在一种或另一种情况下出现,但我认为我从未读过有人在互联网上实际执行过此类攻击的案例。
互联网上有没有成功的定时攻击案例?
假设网络延迟(抖动)使这些攻击变得不切实际可能很诱人。情况并非如此,因为易受攻击的机器经常使用TCP 时间戳,其中生成数据包的精确时间被编码到 TCP 标头中。无论流量到达需要多长时间,它创建的确切时间仍然存在。即使在禁用了时间戳的系统上,也可以通过多次重复测试并对结果取平均值来计算网络抖动,从而准确了解数据包时序。所以,考虑到这一点...
是的,定时攻击可以通过网络进行。最突出的例子是 OpenSSH 中的一个长期存在的漏洞,它允许简单的用户枚举。该问题是由于无效用户会使用默认的 Blowfish 触发密码比较。当使用有效用户时,将使用 SHA-2。虽然通常时间差异很小,但发送一个大密码(几千字节)会导致差异很明显。
从最初的错误披露:
当 SSHD 尝试对不存在的用户进行身份验证时,它将获取 SSHD 源代码中硬编码的假密码结构。在这个硬编码密码结构上,密码哈希基于 BLOWFISH ($2) 算法。如果使用 SHA256/SHA512 对真实用户密码进行哈希处理,则发送大密码 (10KB) 将导致服务器对不存在的用户的响应时间缩短。
针对这些类型的错误的攻击通常会利用这样一个事实,即根据您提供的输入采用不同的代码路径,从而导致比通常以纳秒为单位测量差异的低级架构时序攻击所见的明显更大的时序差异。来自未在恒定时间内执行的指令(刷新+刷新等)。
是的,当然,因为其中一种攻击是Spectre!针对 CPU 缓存计时的攻击以其使用Javascript执行的潜力而闻名,它将存储在浏览器中的关键用户数据泄露给任意网站。
(顺便说一下,这说明了这个想法:远程定时攻击有时可能被视为几乎无害的东西,但它们可能为更复杂的攻击奠定坚实的基础,建立在其他漏洞之上,并且难以追踪. 例如,如果在某个时候甚至会出现一个看似无害的客户端漏洞,那么定时攻击可能很容易演变成一个严重的问题。)
时间攻击总是被认为在 Internet 上不可行的原因基本上是往返时间增加了相当大的误差范围,这反过来又被认为会使时间问题对远程方来说非常模糊。然而,一般来说,RTT 在大多数情况下,只要在受害者一侧和攻击者一侧都具有良好的连接性(这太容易实现了),从统计上讲,它就足够稳定了。就此而言,时间问题也很稳定。
如果攻击者能够进行大量尝试以收集足够的数据来进行统计测量,他们通常可以对 RTT 进行调整,从而有效地消除对执行时间测量的模糊混淆。这是另一个如何实现的实际示例。
时间问题不容小觑。
正如在这个问题上关于基于计时攻击的用户枚举威胁的讨论所示......计时漏洞可能会在需要不同数量的工作来返回结果的任何时候突然出现,即使呈现的页面并非旨在披露用于处理请求的信息。
链接的问题专门涉及用户枚举漏洞,但类似的时间差异可能发生在任何需要获取资源并检查权限才能确定经过身份验证的用户是否具有权限的授权方案中。例如,可能可以辨别用户是否在其帐户上启用了某个功能,因为授权逻辑更复杂并且运行时间更长。
这种漏洞的严重程度将完全取决于攻击所披露信息的敏感性。