JavaScript键盘计时攻击

沙盒化JavaScript中的实用键盘计时攻击

摘要

按键会触发中断,这些中断可以通过软件侧信道被检测到,从而重建按键时序。击键时序攻击利用这些侧信道推断输入的单词、口令短语或创建用户指纹。尽管击键时序攻击被认为是有害的,但通常需要原生代码执行才能利用这些侧信道,因此在许多场景下可能并不实用。

在本文中,我们提出了首个在沙箱化JavaScript中的通用键盘计时攻击,能够针对任意其他标签页、进程和程序。该攻击违反了同源策略、HTTPS安全模型以及进程隔离机制。我们的攻击基于中断定时侧信道,此前该信道仅被通过原生代码所利用。与以往的攻击不同,我们不需要受害者运行恶意二进制程序或与恶意网站进行交互。相反,我们的攻击可在后台标签页中运行,甚至可能在最小化的浏览器窗口中展示恶意在线广告。

我们证明了可以精确观察用户输入个人识别码或密码时的键间计时,推断用户输入的网址,并区分共享计算机使用时间的不同用户。本攻击适用于个人计算机、笔记本电脑和智能手机,兼容多种操作系统和浏览器。作为应对所有已知JavaScript时序攻击的解决方案,我们提出了一种细粒度权限模型。

关键词 :JavaScript · 侧通道 · Interrupt · Keystroke · 指纹

1 引言

击键时序攻击是一种侧信道攻击,攻击者试图确定用户按键按下的确切时间戳。击键时序会泄露敏感信息,此前已有研究利用这些信息恢复出单词和句子 [39,49]。最近,已证明微架构攻击能够获取原生代码中的击键时序[15,25,32,36]。特别是,如果攻击者能够访问周期精确的计时源,则中断定时侧信道会泄露高度精确的击键时序[36]。

JavaScript 是使用最广泛的脚本语言,几乎被当今任何浏览器所支持。它通常用于创建交互式网站元素并丰富用户界面。然而,它不提供对原生指令、文件或系统服务的访问。尽管如此,在网站内的JavaScript沙箱中执行任意代码的能力也可能被利用来对网站访问者发起攻击,例如时序攻击[12]。

基于 JavaScript 的时序攻击最初由费尔滕和施耐德[12]提出,表明如果一个网站最近被访问过,则对该网站元素的访问时间会更短。除了针对浏览器历史 [12,21,46]的攻击外,还出现了更细粒度的攻击,能够恢复有关用户或其他被访问网站[8,16,22,40,41]的信息。Vila 和 K¨opf [43]指出,Google Chrome 中共享的事件循环会泄露有关其他浏览器标签页的时序信息,这些标签页共享负责渲染或输入/输出的工作进程。

先前的研究表明,硬件层面或操作系统层面引入的时序侧信道可以从JavaScript中被利用。Grusset al. [14]展示了页面去重攻击,Oren et al. [30]展示了通过缓存攻击推断鼠标移动和网络活动,Booth [6]基于CPU利用率对网站进行指纹识别。Gras et al. [13]表明,JavaScript中的精确计时信息可被利用以突破地址空间布局随机化。Schwarz et al. [37]提出了JavaScript中的 DRAM时序隐蔽信道。

在本文中,我们提出了首个在沙盒化 JavaScript 中的通用键盘计时攻击。我们的攻击基于中断计时侧信道,该侧信道此前仅通过原生代码被利用过。我们证明,即使没有访问原生指令的能力,也可以从 JavaScript 利用此侧信道。通过分析等长时间窗口内的指令吞吐量变化,我们可以检测到硬件中断,例如键盘输入。与以往 JavaScript 中的侧通道攻击不同,我们的通道为按键提供了更精确的信号,使我们能够观察到准确的键间计时。我们展示了如何利用这些信息推断用户输入的网址,并区分共享计算机使用时间的不同用户。

我们的攻击是通用的,可应用于任何使用中断进行用户输入的系统。我们证明了攻击代码既可在个人计算机和笔记本电脑上运行,也可在现代智能手机上运行。攻击者可以针对其他浏览器标签页、浏览器进程以及任意其他程序,绕过同源策略、HTTPS安全模型以及操作系统和浏览器级别的进程隔离。该攻击对整个系统和浏览器性能影响较小,且代码占用空间不足256字节,因此可轻易隐藏于现代JavaScript框架和恶意在线广告中。我们的攻击代码利用新的 JavaScript特性,在后台、后台标签页或锁定的手机上运行,从而能够窃取用于解锁手机的PIN输入信息。

为了验证我们的结果,我们还在 Java 中实现了该攻击,且不访问原生指令,仅使用低精度定时器。我们证明,在 Java 实现中可以观察到与 JavaScript 中相同的时序测量,且噪声水平更低。此外,我们证明在跨浏览器隐蔽通道中,两个网站可以通过网络中断进行通信。这些观察结果清楚地表明,吞吐量差异的来源是由硬件引起的,而非特定的软件实现。

我们的攻击分为两个阶段:一个在 JavaScript 中运行的在线阶段,以及一个在攻击者机器上运行的离线阶段。在离线阶段,我们采用机器学习技术,基于在线阶段收集的击键轨迹训练出准确的分类器。这些分类器使攻击者能够推断受害者打开了哪个网站,并对在同一物理机器上共享时间的不同用户进行指纹识别(例如,一个家庭共享一台计算机)。

我们的结果表明,侧信道攻击是一个基本问题,并不仅限于本地攻击者。我们提出一种细粒度权限模型,以应对所有已知的JavaScript时序攻击。浏览器通过限制对特定功能的访问,并提示用户按域名授予权限。

我们的主要贡献是:

– 我们展示了首个嵌入在网站中的、针对任意其他标签页、进程和程序的通用键盘计时攻击,该攻击基于JavaScript。
– 我们在个人计算机、笔记本电脑和智能手机上,使用不同的浏览器和操作系统进行了该攻击的演示。
– 我们证明了该攻击能够获取用户输入个人识别码或密码时精确的键间计时,推断用户输入的网址,并根据用户的输入行为区分共享计算机使用时间的不同用户。

概述 。本文其余部分的组织如下:在第2节中,我们提供背景信息。我们在第3节描述我们的攻击方法。在第4节中,我们展示我们的攻击在个人计算机和智能手机上的性能表现。我们在第5节讨论防御措施。最后,我们在第6节进行总结。

2 背景

2.1 键盘计时攻击

击键时序攻击获取输入序列中按键的精确时间戳。这些按键时间戳取决于多种因素,例如二元组、音节、单词、键盘布局和打字经验[33]。攻击者可以利用这些时序特征来获取有关用户或用户输入的信息。现有的攻击方法使用机器学习来推断输入的句子或恢复口令短语[38,39,49]。伊德鲁斯等人[19]表明,按键按下和按键释放事件可用于对用户进行指纹识别。

Linux操作系统提供了可用来生成精确按键计时轨迹的信息[39,49]。Zhang和Wang [49]证明了指令指针、堆栈指针、中断统计以及网络数据包统计可用作按键计时的侧信道。而Song等人[39]证明了SSH在交互模式下会泄露键间计时,Hogye等人[17]则表明,在具有显著流量的网络中,网络延迟实际上会掩盖这些键间计时。Ali等人[3]展示了利用Wi‐Fi信号可以检测按键并分类所输入的按键。Jana和Shmatikov [20]指出,与指令指针或堆栈指针相比,CPU使用率是更为可靠的按键计时侧信道。

示意图0

算法1. 中断定时攻击的在线阶段
输入 : threshold
now ← 获取时间戳();
当 true时执行
last ← now; now ← 获取时间戳();
如果 now − last > threshold 那么
报告(now, diff);

Diao 等人 [11]基于/proc/interrupts实现了高精度键盘时序攻击。Mehrnezhad 等人 [27]利用 JavaScript传感器API,通过加速度计和陀螺仪等内置传感器检测移动设备上的触摸、长按、滚动和缩放操作。

缓存攻击还被用于获取按键时序。在缓存攻击中,攻击者通过观察受害者操作对缓存造成的影响,进而推断受害者执行了哪些操作。Ristenpart 等人 [34]展示了使用Prime+Probe缓存攻击进行击键时序攻击的方法。Gruss 等人 [15]证明了Flush+Reload缓存攻击可用于击键时序攻击。类似地,Pessl 等人[32]展示了利用DRAM作为侧信道对Firefox地址栏进行的击键时序攻击。

最近,研究表明可以通过时序攻击获取键盘中断时序,该攻击持续测量连续rdtsc调用之间的差值[36]。然而,如果攻击者仅控制受害者访问的网站,则无法实现这一点。在网站上运行的沙箱化JavaScript无法使用任何诸如rdtsc的原生指令。

2.2 中断时序攻击

最近,中断定时攻击已在原生代码中被证实可用于恢复按键时序[36]。中断定时攻击的基本思想是持续获取高分辨率时间戳并监控连续时间戳之间的差值,即自上一次测量以来经过了多长时间,如算法1中所述。每当测量进程被中断时,就会出现显著的差值。操作系统处理中断所消耗的时间越长,测得的差值就越高。尤其是由输入/输出设备(例如键盘)触发的中断,会在测量轨迹中产生明显可见的峰值。图1显示了在用户输入一句话时,原生攻击实现所获得的轨迹。用户按下按键的确切时间戳清晰可见,并可与其他事件区分开来。然而,该轨迹不仅包含键盘中断,因此不仅可以用于窃听用户输入,还可以监视任何其他引起一个或多个中断的事件,例如网络流量或重绘事件。攻击者可以通过后处理算法过滤出相关峰值,以监控输入的按键。

2.3 沙箱化JavaScript中的时序攻击

JavaScript 已发展成为最受广泛支持的脚本语言,尤其是因为它几乎被所有现代浏览器所支持。借助高度优化的即时编译技术,现代 JavaScript 引擎提供的性能可与原生代码实现相媲美。时间戳计数器为原生代码中的用户程序提供周期精确的时间戳,但无法从 JavaScript 中访问。相反,JavaScript 提供了高精度时间API 45 以获取亚毫秒级的时间戳。

基于该计时接口,已有多类攻击被成功演示。Van Goethem 等人 [41] 通过测量跨源资源执行时间的差值,成功提取了用户的私有数据。Stone [40] 指出,SVG 滤镜中的优化引入了时序侧信道,他证明了该侧信道可用于从 iframe 中提取像素信息。Booth [6] 则通过中央处理器利用率(即在加载和渲染页面时干扰基准函数的执行时间)对网站进行指纹识别。

Gruss 等人 [14]表明,可以在 JavaScript 中执行页面去重时序攻击,以确定用户当前打开的网站。Oren 等人 [30]表明,在 JavaScript 中实施缓存攻击是可行的。他们展示了如何在浏览器中执行Prime+Probe攻击,以构建缓存隐蔽通道,同时还可通过缓存监视用户的鼠标移动和网络活动。该攻击导致所有主流浏览器降低了 performance.now 方法的精度 [1,7,10]。W3C 标准现在推荐的分辨率为 5 µs,而 Tor 项目在 Tor 浏览器中将分辨率降低至更为保守的 100ms [28]。Gras 等人 [13]表明,JavaScript 中的精确的计时信息可被利用来攻破地址空间布局随机化。Vila 和 K¨opf [43]表明,Google Chrome 中共享的事件循环会泄露有关其他共享工作进程进行渲染和输入/输出操作的浏览器标签页的计时信息。他们利用这一侧信道来识别网页、建立隐蔽通信通道,并推断键间计时。

最近,一些研究探讨了JavaScript中的计时原语,这些原语能够恢复高精度时间戳 [13,24,37]。我们利用这些计时原语在沙箱化JavaScript中构建高精度的击键时序攻击。

3 无高分辨率定时器的沙盒击键时序攻击

我们的攻击遵循与原生代码中的中断时序攻击相同的思路[36]。它包括一个在受害机器上获取时序轨迹的在线阶段,以及一个用于后处理和评估的离线阶段。

在线阶段

在我们攻击的在线阶段,我们在沙箱化JavaScript中运行中断定时攻击。中断定时攻击的要求极低,最重要的是能够访问x86 rdtsc指令[36]。因此,按键中断定时攻击此前仅在原生代码中得到过验证。我们面临若干挑战:从远程网站执行按键中断定时攻击时,由于JavaScript既无法执行该指令,也无法在网站上运行无限循环。

JavaScript 中没有高分辨率时间戳可用,因为 performance.now 的分辨率被限制在 5µs 以内,以缓解侧信道攻击 [45]。因此,我们实现了一个计数器,通过持续递增一个值 [13,24,37,47] 来模拟单调时钟。递增的次数即指令吞吐量,与计数器函数被调度的时间成正比。因此,任何中断都会降低指令吞吐量,从而导致在固定时间段内的递增次数减少。由此,我们可以在固定时间间隔读取计数器的值,并根据自上一次间隔以来的递增次数推断计数器函数是否被中断。

由于 JavaScript 基于单线程事件循环,浏览器通常不允许网站使用无限循环,并在检测到此类结构时通知用户。常见的解决方案是使用 setTimeout 或 setInterval,在指定的毫秒数过后不断触发循环体的执行。然而,这些函数在重新调度相同代码之前强制要求至少 4ms 的暂停,导致其分辨率明显低于 performance.now 的分辨率。

为了克服此限制,我们引入了一种先前发布的计时原语的新变体[13,24,37],称为协作式无限循环切片。其思想是将无限循环切分为更小的有限循环,其中每个循环片段的执行时间大约为4毫秒。在运行此循环之前,我们使用 setTimeout并设置4毫秒的超时来调度下一个循环片段。因此,在理想情况下,无限循环的下一个片段会在当前片段执行完毕后立即运行,从而给人以真正的无限循环的印象。然而,由于高优先级事件(例如用户输入)仍然可以在循环片段之间被处理,浏览器保持响应状态,不会停止该无限循环。

算法2. 在JavaScript中实现的中断定时攻击
功能测量时间(id):
setTimeout(测量时间, 0, id+1);
counter ← 0
begin ←window.performance.now();
while(window.performance.当前时间() - begin)< 5 do
counter ← counter+1
发布(id, counter);

示意图1

图2显示了用户在浏览器地址栏中输入 URL https://www.yahoo.com/时测得的轨迹。如果未发生中断,计数器变量在4毫秒的完整时间窗口内,计数器已递增,以此定义基线。如果中断干扰了用于测量的JavaScript,则在同一时间窗口内计数器变量的递增次数减少,从而产生向下的峰值。因此,输入的字母会在测量轨迹中留下明显的痕迹,从而可以推断出单个按键。

离线阶段

在攻击的离线阶段,对在线阶段收集的测量数据进行处理和分析。随着时间推移,攻击者可以收集数千条轨迹,以了解受害者的个体打字行为,或推断出输入的密码短语或PIN码。根据攻击者的目标不同,可采用不同的方法来评估所收集的数据。为了在测量轨迹中检测单个按键,我们对测量轨迹进行滤波以减少噪声,并通过手动检查目标设备的一条记录轨迹来推断按键的阈值。利用该阈值,我们可以进一步将记录轨迹中的点数降至最低,从而提高后续计算的性能。我们通过计算训练集与查询轨迹之间的相关性来构建分类器。为了对输入的单词进行分类,我们需要考虑到字符输入的时间点在轨迹中可能存在时间上的偏移。因此,我们采用k近邻分类(k‐NN)[4]并通过不同对齐方式计算该轨迹与训练集中每条轨迹的相关性。我们选择产生最高相关性的对齐方式,并据此决定匹配最佳的类别。尽管存在使用时间序列进行分类的更复杂的计算方法[5,35]是可行的[9,23,48],但我们表明,所记录测量数据的特征足够强,使得更简单的技术也能构建出高效且准确的分类器。

4 实际攻击与评估

在本节中,我们展示了JavaScript中断时序攻击的巨大攻击潜力。我们的攻击不依赖于任何特定的浏览器或操作系统,因此可以在个人计算机、笔记本电脑和智能手机上进行。我们证明了可以推断出用户在浏览器地址栏中输入的网站,并对共享同一台计算机的不同用户进行画像。此外,我们还表明,即使攻击代码在后台运行的网页浏览器中执行,该攻击也可用于获取用户解锁手机时输入的个人识别码(PIN)每一位数字的精确时间信息。

4.1 URL分类

在我们的第一个实验中,我们证明了通过在个人计算机上结合使用JavaScript击键时序攻击和机器学习技术,可以推断出用户在浏览器地址栏中输入的网址。

我们训练了一个分类器,成功地标记了用户在十大最受欢迎网站[2]的网址输入序列所生成的测量轨迹。本实验使用了搭载Intel i7‐6700K 处理器和运行 Linux系统的Firefox 52.0进行。

每个轨迹都包含带有相应计数器值(参见第3节)的时间戳以及相应的 URL。由于用户开始输入URL以及每次按下按键时存在微小的时间变化,因此轨迹的长度以及特征的位置,即描述按键动作的测量值特征,在轨迹中的位置也会有所不同。因此,我们需要以能够克服这些困难的方式构建我们的分类器。

在预处理步骤中,我们确定最大轨迹长度以及时间戳分辨率。分辨率可以通过所有样本中所有测量时间戳的最大公约数获得。最后,我们根据实际分辨率对每个样本创建线性插值。

分类器为未标记的轨迹分配一个类别标签,其中每个类别对应于我们用于训练分类器的一个URL。为了对新轨迹进行分类,我们计算该新轨迹与每个类别中固定数量的随机选取样本之间的相关性。由于用户开始输入URL的时间戳各不相同,我们需要针对不同对齐方式计算两条轨迹之间的相关性。因此,我们在一个固定的时间窗口内前后移动一条轨迹,以找到使相关性达到最大的对齐方式。每个类别的五个最高相关性的平均值决定该轨迹所属的类别,i.e.,我们选择平均相关性最高的类别。

我们通过使用k折交叉验证来评估我们的分类器。我们首先从每个类别收集的100次测量中随机抽取20个样本作为训练集,来自每一个

4.2 用户分类

作为第二个实验,我们评估是否可以区分不同的用户,以确定实际坐在个人计算机前的人是谁。为此,我们仅收集了4个不同人员在十大最受欢迎网站 [2]上的5条输入轨迹来训练分类器。每位用户的2条训练集轨迹和3条测试集轨迹的结果如图4中的混淆矩阵所示。尽管确定给定轨迹对应用户的难度要大得多,但我们的分类器整体识别率达到47.5%,仍优于随机猜测。

4.3 触摸屏交互

在我们的第三个实验中,我们证明了中断定时攻击同样适用于现代智能手机和不同的网页浏览器。尽管节能技术应使攻击更难实施,但如果测量程序在不同的标签页中运行,或浏览器应用在后台运行,攻击仍然可以实施。此外,我们还表明,该攻击可用于检测屏幕的锁定与解锁状态。

手机通常使用显示在屏幕上的软键盘。屏幕上的每次点击都会引发一个重绘事件,该事件在测量轨迹中清晰可见,从而更容易检测用户何时触摸屏幕。虽然重绘事件足以监控键盘上的点击,但我们希望能够识别设备上的任何点击,无论其是否引发重绘事件。因此,我们的测试网站实现了一个模仿PIN键盘的自定义触摸区域。该触摸区域既不注册任何事件,也不改变其外观。因此,对该PIN键盘的触摸不应触发任何事件,从而消除了轨迹中所有非触摸中断本身引起的事件。我们已在网络上提供了此实验的代码。¹

为了交叉验证我们观察到的是否确实是硬件事件而非某些浏览器内部事件,我们在一个原生Android应用中实现了相同的中断检测算法。为了使记录的轨迹获得可比较的结果,我们以与Firefox和Chrome相同的方式将定时器分辨率降低至 5µs。

在我们的实验中,我们使用了一台运行Android 6.0.1的谷歌Nexus 5设备,该设备搭载高通MSM8974 Snapdragon 800 SoC,配备Chrome 44.0.2403.133和 Firefox 54.0a1。我们的第二台测试设备是小米Redmi Note 3,搭载联发科 MT6795 Helio X10,运行Android 5.0.2,配备Chrome 57.0.2987.132和 Firefox 52.0.2。此外,我们还使用了表1中列出的所有设备,通过JavaScript实现记录轨迹以进行视觉检查。表1还显示了我们是否能够仅通过视觉检查检测到按键和屏幕锁定,而无需机器学习。

设备 SoC 按键 屏幕锁定
谷歌Nexus 5 高通 MSM8974 骁龙 800
小米Redmi Note 3 联发科 MT6795 HelioX10
Homtom HT3 联发科 MTK6580
三星 Galaxy S6 三星 Exynos 7420
一加 One 高通 MSM8974AC Snapdragon 801
OnePlus 3T 高通 MSM8996 Snapdragon 821

¹ https://github.com/IAIK/interruptjs.

图5显示了在谷歌Nexus 5上的原生Android应用中的击键时序攻击,其中用户点击屏幕两次,然后滑动一次,再点击一次。由点击手机引起的各个中断可以通过后续代表触摸和释放事件的两个峰值轻松识别。如果用户在屏幕上滑动,则会触发多个中断,每次坐标变化都会触发一个中断。这会导致出现许多可见的峰值,因此可以区分滑动和点击。

我们的JavaScript实现的击键时序攻击在Chrome中成功运行,并能够区分点击和滑动,如图6所示。尽管与原生实现相比,JavaScript 中的测量包含更多噪声,但精确的点击时序仍可轻松提取,并支持进一步更复杂的攻击。

图7显示了在小米Redmi Note 3上两次点击、一次滑动和一次额外点击的相同轨迹。令人惊讶的是,由中断引起的峰值向上凸起,而不是人们可能预期的向下凹陷。我们观察到,每当触摸屏幕时,小米Redmi Note 3会提高CPU频率。因此,尽管中断会消耗一些中央处理器时间,但由于CPU频率显著升高,第3节中描述的计数器可以更频繁地递增。我们通过在小米Redmi Note 3上运行基准测试套件验证了这一行为。该基准测试套件已经在执行基准测试的同时在屏幕上滑动时,速度可快达30%。尽管此功能可能有助于更高效地处理触摸中断并显得响应更快,但它也打开了一个新的侧信道,使得检测点击和屏幕事件变得更加容易。我们还在原生Java实现中验证了相同的行为,其峰值更高,从而可以更可靠地检测点击和滑动事件。在OnePlus 3T上,我们根本无法检测到按键。我们怀疑这是由于big.LITTLE架构所致,该架构将CPU密集型的浏览器任务转移到高性能ARM核心上,而中断则由较小的核心处理。因此,当发生硬件中断时,浏览器不会被中断。

监视其他应用程序和个人识别码解锁

虽然Vila和K¨opf[43]的攻击仅限于监视攻击者打开的标签页或弹窗,但我们的攻击不受此限制,可用于监视系统上运行的任何其他应用程序。实际上,Vila和K¨opf的攻击依赖于渲染进程事件循环引起的时间差,因此只能攻击共享同一渲染进程的标签页或窗口。相比之下,我们的中断时序攻击并不局限于浏览器及其子进程,因为它能够监控目标设备上触发中断的所有其他事件。此外,我们的攻击还提供了更高的分辨率,从而能够更可靠地检测由用户输入触发的中断。

图8显示了受害者在小米Redmi Note 3的Chrome浏览器中打开一个运行测量代码的网站时的轨迹。此外,受害者还打开了一个无痕模式的标签页,并多次点击屏幕。我们甚至可以检测到这些在不同标签页中的用户交互,因为该攻击利用了Web Worker,而Web Worker在后台运行时不会被节流。因此,无痕模式无法为我们的攻击提供任何防护。

在下一个场景中,我们证明了我们的攻击不仅限于浏览器应用程序的进程,还可以用来监视其他任何应用程序。受害者在小米Redmi Note 3的Firefox应用中访问运行测量程序的网站,并继续使用手机,切换到其他标签页或应用程序,随后锁定了屏幕。一段时间后,受害者再次打开屏幕,此时锁屏界面会提示受害者输入PIN码代码。最后,受害者输入PIN码,解锁手机。图9展示了该场景的轨迹。我们可以清楚地观察到屏幕关闭时CPU频率降低以节省电量,以及屏幕再次开启的时间点。此外,我们可以提取出受害者输入4位PIN码的确切时间戳以及随后的重绘事件。

4.4 隐蔽通道

在第四个实验中,我们基于该攻击实现了一种隐蔽通信信道。这使我们能够估算出可以检测到的中断最大数量。我们建立了一个包含一个发送方和一个接收方的单向通信。接收方只需发起中断计时攻击来感知任何中断。发送方必须触发中断以发送“1”比特,或保持空闲以发送“0”比特。目前没有JavaScript API能够显式地触发中断,因此我们需要一个能够隐式触发中断的API。

我们使用 XMLHttpRequest 从无效的 URL 获取网络资源。每个无法从缓存中获取服务的 XMLHttpRequest 都会建立网络连接,从而产生 I/O 中断。即使 URL 无法解析,无论是因为没有互联网连接还是 URL 无效,我们仍然能够观察到这些 I/O 中断。这种基于硬件中断的隐蔽通道绕过了现代浏览器中的多种保护机制。

跨标签通道

使用跨标签页的隐蔽通道会破坏两种安全机制。首先,同源策略——该策略阻止不同域名脚本之间的任何通信——不再适用。因此,脚本能够跨越域边界进行通信。其次,由于浏览器的安全模型,HTTPS 页面无法加载 HTTP 内容。但对于该隐蔽通道而言,这种安全模型不再成立。

跨浏览器通道

由于中断定时不仅限于一个进程,该隐蔽通道能够规避诸如每网站一进程或每标签页一进程等策略,这些策略本用于防止网站或标签页共享进程资源。该隐蔽通道甚至可以用作跨浏览器通信通道。我们测试了从Firefox到Chrome的传输,实现了与跨标签页场景相同的传输速率。该通信通道还可以与以无痕模式运行的浏览器实例建立连接。

在所有场景中,接收方使用每比特 40 毫秒的恒定采样间隔,从而实现 25 比特每秒的原始传输速率。因此,我们也能在所有这些场景中每秒监听 25 次中断,这足以监控即使是最快速打字者的按键[33]。为了通过隐蔽通道可靠地传输数据,我们可以应用莫里斯等人提出的技术[26]。

5 防御措施

5.1 一种针对JavaScript的细粒度权限模型

为了阻碍和缓解我们的中断计时攻击以及其他类似的JavaScript侧信道攻击,我们提出了一种针对在网页浏览器中运行的JavaScript的更细粒度的权限模型。例如,Firefox现有的权限系统仅允许管理对有限数量API的访问控制。然而,由于许多网站并不需要Web Worker等功能,用户应能够在单个页面级别上允许此类功能。如果一个运行潜在恶意代码的在线广告请求访问非常用API的权限,JavaScript的细粒度权限模型将阻止其进一步执行。

5.2 通用的防御措施

迈尔斯 [29]评估了Windows上恶意软件中各种用户模式键盘记录技术的实现方式,并建议通过注入虚拟按键生成随机键盘活动,这些虚拟按键会被恶意软件截获。此外,奥尔托拉尼 [31]分析了噪声信道中阻碍真实按键检测所需的噪声的统计特性。尽管这两者均无法防御中断计时攻击,施瓦茨等人 [36]发布了一种概念验证的对抗措施,旨在防御此类攻击。该对抗措施注入大量伪造按键,这些伪造按键会通过内核驱动传播到用户空间应用程序。我们已验证,该对抗措施成功注入了伪造按键,这些按键在我们的实现中无法与真实中断区分开来。

Kohlbrenner 和 Shacham [24]实现了模糊时间概念 [18,42],以消除高分辨率定时器。虽然这会阻止我们当前实现中的攻击,但我们仍可采用施瓦茨等人 [37]和 Gras 等人 [13]建议的实验性SharedArrayBuffer,获得最高达 2纳秒的分辨率,从而重新启用我们的攻击。

6 结论

在本文中,我们提出了首个与浏览器和操作系统无关的基于JavaScript的击键计时攻击。我们的攻击基于捕获中断时序,可在台式机、笔记本电脑以及智能手机上实施。由于其代码大小不足256字节,可轻松隐藏于现代JavaScript框架或在线广告中,且不被受害者察觉。我们通过推断按键的精确时间戳以及移动设备上的点击和滑动操作,展示了该攻击的潜力。基于这些键盘敲击轨迹,我们构建了分类器,用于检测用户访问过的网站以及识别共享计算机使用时间的不同用户。该攻击具有高度实用性,因其可在浏览器在后台运行时工作,从而监视其他标签页和应用程序。此外,由于攻击在手机处于锁定状态时仍可执行,我们证明了其能够监控用于解锁手机的PIN输入。最后,作为针对本攻击及其他类似JavaScript中侧信道攻击的解决方案,我们提出了一种浏览器的细粒度权限模型。

【源码免费下载链接】:https://renmaiwang.cn/s/9a9wv 西门子1FK7系列伺服电机作为工业自动化领域的核心设备,在精确控制机械运动与位置方面发挥着重要作用。该系列产品集成了多项先进技术,展现出卓越的性能与可靠性,并广泛应用于机器人技术、机床制造、包装机械等多个领域。其主要特点包括:快速响应能力(高转矩和加速度),精确位置与速度控制,节省空间的同时便于集成和安装,丰富的产品系列以满足不同需求,先进的散热系统确保稳定运行,以及操作维护极为便捷的服务支持。通过提供多种法兰尺寸和转轴设计选项,用户可根据具体需求选择合适的设备配置。此外,1FK7电机配备先进冷却系统和专业的技术支持服务:电话前缀区分服务中心或技术支持部门,并附有分机号或部门代码;用户可拨打北京服务中心电话010开头的号码进行技术咨询,青岛服务中心则为0532开头。紧急技术支持可通过上述联系方式快速获取帮助。西门子作为全球知名工业自动化解决方案提供商,在产品性能、售后服务等方面均处于行业领先地位,并通过在线支持和远程诊断等服务提升用户设备运行效率。产品说明书是操作与维护的重要参考依据,用户应仔细阅读以确保安全可靠的操作流程。同时,掌握正确的联系方式和操作规范对提高生产效率至关重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值