[论文解读] KeyDrown: Eliminating Keystroke Timing Side-Channel Attacks
KeyDrown 是一种全面的防御机制,通过在内核级别注入大量虚假击键,并将其传播至所有软件层,彻底消除击键时间侧信道攻击。它通过确保真实击键与虚假击键在时间间隔和缓存行为上完全一致,防止通过中断监控、Prime+Probe 和 Flush+Reload 攻击进行检测,使攻击者无法区分两者,从而在评估中实现相对于随机分类的 0.0% 优势。
Besides cryptographic secrets, side-channel attacks also leak sensitive user input. The most accurate attacks exploit cache timings or interrupt information to monitor keystroke timings and subsequently infer typed words and sentences. Previously proposed countermeasures fail to prevent keystroke timing attacks as they do not protect keystroke processing among the entire software stack. We close this gap with KeyDrown, a new defense mechanism against keystroke timing attacks. KeyDrown injects a large number of fake keystrokes in the kernel to prevent interrupt-based attacks and Prime+Probe attacks on the kernel. All keystrokes, including fake keystrokes, are carefully propagated through the shared library in order to hide any cache activity and thus to prevent Flush+Reload attacks. Finally, we provide additional protection against Prime+Probe for password input in user space programs. We show that attackers cannot distinguish fake keystrokes from real keystrokes anymore and we evaluate KeyDrown on a commodity notebook as well as on two Android smartphones. We show that KeyDrown eliminates any advantage an attacker can gain from using interrupt or cache side-channel information.
研究动机与目标
- 解决现有对策在保护整个软件栈中击键处理方面存在的不足。
- 防止利用键盘中断时间的基于中断的侧信道攻击。
- 缓解针对缓存和内存访问模式的微架构侧信道攻击,如 Prime+Probe 和 Flush+Reload。
- 确保攻击者即使在拥有多个追踪数据的情况下,也无法区分真实击键与虚假击键。
- 提供一种对通用文本输入和密码字段均有效的防御机制,且无需修改应用程序。
提出的方法
- 在内核级别注入大量虚假击键,以隐藏真实击键时间,防止基于中断的侧信道分析。
- 统一真实与虚假击键的控制流和数据访问模式,防止在内核中利用 Prime+Probe 和 Flush+Reload 攻击。
- 仔细地将所有击键(包括虚假击键)通过共享库传播,以保持一致的缓存行为,防止基于缓存的侧信道泄露。
- 通过确保击键处理例程始终处于活动状态且在时间和内存访问上不可区分,保护用户空间应用程序免受侧信道泄露。
- 结合内核级别的中断注入与微架构混淆技术,在整个软件栈中彻底消除侧信道优势。
- 在主流 x86 笔记本和 Android 智能手机上对 KeyDrown 进行评估,以验证其在真实环境中的有效性。
实验结果
研究问题
- RQ1是否存在一种防御机制,能够完全消除从内核到用户空间整个软件栈中的击键时间侧信道攻击?
- RQ2虚假击键在多大程度上可以防止通过基于中断的侧信道分析被检测?
- RQ3当真实击键与虚假击键表现出完全相同的缓存和内存访问模式时,能否有效缓解 Prime+Probe 和 Flush+Reload 攻击?
- RQ4即使攻击者收集了多个时间追踪数据(如在密码输入场景中),是否仍能实现真实与虚假击键的不可区分性?
- RQ5该对策在实际条件下(包括在 Android 智能手机等移动平台)是否依然有效?
主要发现
- KeyDrown 有效防止攻击者区分真实击键与虚假击键,在侧信道分析中实现相对于随机分类器的 0.0% 优势。
- 该防御对基于中断的攻击以及微架构侧信道攻击(包括 Prime+Probe 和 Flush+Reload)均有效,适用于 x86 和 ARM 平台。
- 在主流笔记本及两款 Android 智能手机上的评估结果表明,KeyDrown 消除了所有基于时间或缓存信息的侧信道优势。
- 该机制在无需修改现有应用程序的前提下正常工作,前提是输入在用户输入完成后才被处理,例如在密码字段或文本输入表单中。
- KeyDrown 为基于浏览器的击键时间攻击(如针对 Chrome 事件队列的攻击)增加了可测量的噪声,有效中和了这些攻击。
- 该方案对其他来源的侧信道泄露(如基于加速度计的攻击或应用层行为,如实时自动补全)无效,这些情况不在本研究范围内。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。