在现代浏览器中,时序攻击一直是对用户隐私的威胁。为了减少此类攻击,现有的方法(如TorBrowser和Fermata)会在浏览器时钟中添加抖动,这样攻击者就无法准确地度量事件。然而,这样的防御只会提高攻击者的门槛,而不会从根本上减少定时攻击,只是需要比以前更长的时间来发动定时攻击。在本文中,提出了一种新的方法,称为确定性浏览器,它可以有效地防止现代浏览器中的时序攻击。借鉴物理学,引入了几个概念,如观察者和参考系。具体来说,一个JavaScript片段,参考帧中的观察者将始终获取相同的、固定的定时信息,以防止定时攻击;相反,一个用户将以不同的方式感知JavaScript,并且不会体验到性能下降。本文已经实现了一个原型,评估表明该原型可以抵御与浏览器相关的时序攻击。


1 背景知识


1.1 研究问题

  • 时序攻击(Timing Attacks) 属于侧信道攻击/旁路攻击(Side Channel Attack),侧信道攻击是指利用信道外的信息,比如加解密的速度,加解密时芯片引脚的电压,密文传输的流量和途径等进行攻击的方式。

举例说明:字符串间的比较
其实现是基于移位匹配。遇到任何不匹配则直接退出返回比较结果。
于是代码循环的次数不一样的导致执行耗时也是不一样的,时间的不同也就知道了大概是哪一位开始不同的。

  • 论文中所给的定义:时序攻击是指敌方试图使用物理时间的参考时钟来测量目标或秘密事件(目标机密)的持续时间。
    • 目标机密是一个对手不知道需要多长时间才能完成的事件
    • 参考时钟用于测量目标机密,隐式或显式的。
    • 攻击者是主体,目标秘密是客体,参考时钟是主体用来窃取客体的工具。

1.2 相关概念

  • 时序攻击是指敌方试图使用物理时间的参考时钟来测量目标或秘密事件(目标机密)的持续时间。
  • 成功发起时序攻击的必要条件攻击者(adversary),目标机密(target secret)和参考时钟(reference)三个关键要素,必须同时存在于运行时环境中。
  • 参考系(reference frames,RFs)有一个独立的时钟,有的还有一个观察者,观察者的工作是测量RF中事件的持续时间,即在事件开始和结束时进行两次观察,获得两个时间戳并计算间隔。一个重要特性是,一个RF中只能执行一个事件(例如,目标机密或隐式时钟滴答事件),不同的事件分别在不同的RF中执行。RFs可以根据观察者的存在进行分类,存在观察者的称为主RF,而另一个没有观察者称为辅助RF。当观察者不在时,RF中的时钟处于未定义状态,因为只有观察者存在时才能获得时序信息。然后,当观察者回来时,时钟就可以使用了。
  • 确定性:观察者可以不看时钟而根据已知的条件来测量任何事件的持续时间。

其他相关的定理和概念在讲解如何抵御的过程中提出,便于理解。


2 威胁模型


从三个方面介绍威胁模型:

  • 范围内攻击(In-scope Attacks):在威胁模型中加入了与浏览器相关的时序攻击。这样的攻击之所以成为可能,是因为对手可以使用参考时钟在客户端浏览器上测量目标机密的持续时间。也就是本文所要解决的问题。
  • 范围外攻击(Out-of-scope Attacks):将定时攻击中的目标机密限制为与浏览器相关,并根据其他方(如web服务器和用户)排除这些机密。这种限制是很自然的,因为我们只让浏览器具有确定性,而不是其他浏览器。也就是和浏览器无关的攻击不再本文研究范围内。
  • 激励示例(A Motivating Example)
    • 同步攻击采用时钟边缘技术,通过在主时钟的两个边缘之间多次重复该操作来测量一个小时钟,例如一个简单、廉价的JavaScript操作,如count++。然后,可以通过将主时钟的粒度除以执行的操作数来计算副时钟。
    • 异步攻击采用隐式时钟,来测量异步目标机密,例如解析第三方响应的时间。
    • 攻击过程分析:

同步攻击:(第1-8行)NextEdge函数试图找到时钟的下一个边缘(根据演出现在)并计算下一个时钟边缘执行的操作数。对于JavaScript指纹攻击(第9-12行),可以先跳过当前主时钟周期的其余部分(第11行),然后计算整个主时钟周期(第12行)中用于指纹识别的操作数。对于侧通道攻击(第13-21行),可以找到指纹(第14行),从新边开始(第15行),然后使用主时钟测量目标机密(第16-18行)。计算副时钟中的剩余周期(第19行),通过组合副时钟和主时钟(第20行)计算目标机密的持续时间。

异步攻击:sideChannelAsync函数(第25-28行)调用异步目标秘密函数,为了简单起见,我们只使用回调函数(第26行),隐藏函数中的细节。然后,通过setInterval函数调用隐式时钟,countFunc作为回调(第27行)。countFunc将以u间隔定期调用,直到调用回调,即目标机密完成执行。然后,可以根据执行countFunc的次数计算目标机密的持续时间(第24行)。


3 解决方案


3.1 方案提出

  • 已知,成功发起时序攻击的必要条件是对手,目标机密和参考时钟三个关键要素,必须同时存在于运行时环境中,那么一个自然的解决方案就出现了,就是从运行时环境中删除三个关键元素中的一个或多个,打破必要的条件。但是,这三个元素在浏览器中都是必需的,并且很难删除。因为对于攻击方的检测就是一个研究的大方向,其误报和漏报是难以避免的;再有目标机密如果是一种常见的浏览器操作,像是脚本解析,如果删除就将破坏浏览器功能; 最后,对于参考时钟来说,显式参考时钟是可以删除的,但是由许多隐式时钟有助于实现基本的浏览器功能,不能删除。
  • 但这个方案的思路是没有错的,要打破时序攻击发起的必要条件。本文中就做出了进一步的修改:在确定性浏览器的方案中,没有从整个运行时环境(也就是web浏览器)中删除关键元素,而是将web浏览器分解为几个较小的单元,并从这些较小的单元中删除一个或多个不同的关键元素。也就是说,从宏观的角度来看,这三个关键元素仍然存在于web浏览器中;从微观的角度来看,最多有两个元素存在于一个较小的单元中。
  • 引入的更小的单元就是前文所提及的参考系(reference frames,RFs)。

3.2 如何让RF具有确定性?

  • 一个理想而简单的解决方案是使每个RFs都具有确定性。但在某些情况下,这样的解决方案也是不可能的。例如,网络消息可能包含关于物理时钟的信息,因为它属于外部世界,没有办法使这种RF具有确定性。但在论文中,给出了一个定理: 如果具有目标机密的RF是确定性的,则无论在该RF中还是在另一RF中,攻击方观察者都无法推断目标机密。
  • 我们的目标是测量目标秘密时,观察者总是获得相同的定时信息。具体地说,确定性将目标机密规范化,以便从观察者的角度来看,目标秘密的结束时间戳和开始时间戳之间的增量始终是相同的,确定的,即使目标秘密在不同的运行时环境中多次发生。
  • 因此,我们不必让每个RFs都具有确定性,而是使得具有目标机密的RF是确定性的即可。

举例说明:确定性JavaScript RF

  • 为了执行JavaScript程序,浏览器(特别是JavaScript引擎部分)将解析JavaScript程序并将其转换为一种特殊的形式,称为操作码,有时也称为字节码。然后,根据执行模式,即解释器或即时(JIT)编译,操作码将被解释或转换为机器码以供执行。
  • 给定一组由程序生成的操作码(SO),一个固定的初始状态和一组固定的输入。仅当以下条件适用于在不同运行时环境中时, JavaScript-RF是确定性的。任意两个执行(E1和E2):对于E1和E2中的每个操作码(op∈SO):𝑡_𝑜𝑝1−𝑡_𝑜𝑝2=𝐶,其中𝑡_𝑜𝑝^𝑘是在Ek中执行操作码op时的时间戳,仅与E1和E2的开始时间相关的常数。
  • 确定性JavaScript RFs中有时钟定义,从防止定时攻击的角度来看,这些定义没有区别。考虑到简单性和性能开销,我们定义了一个在实现中使用的特定时钟,它基于以下条件进行计时:
    • (i)当有操作码运行时,时钟相对于执行的操作码进行计时。也就是有以下等式:t_now= t_strat+∑2_(op∈𝐸𝐽𝑂)▒unit_op 。其中EJO是已执行JavaScript操作码的集合,unit_op是该操作码的原子运行时间。正规化得𝒕_𝒏𝒐𝒘= 𝒕_𝒔𝒕𝒓𝒂𝒕+𝒄𝒐𝒖𝒏𝒕_𝑬𝑱𝑶×𝒖𝒏𝒊𝒕。
    • (ii)当没有运行操作码时,时钟可以根据任何标准进行计时。因为JavaScript没有执行,JavaScript RF中没有目标机密,更重要的是JavaScript RF中没有观察者测量目标机密。这种状态的关键是,当另一个RF与JavaScript RF通信时,我们需要同步两个RF中的时钟。时钟使JavaScript RF具有确定性。假设我们有两个分别执行相同JavaScript的t_start1和t_start2,对于任意的操作码op,我们将得𝑡_𝑜𝑝1−𝑡_𝑜𝑝2=(𝑡_𝑠𝑡𝑟𝑎𝑡1+𝑐𝑜𝑢𝑛𝑡_𝐸𝐽𝑂×𝑢𝑛𝑖𝑡)−(𝑡_𝑠𝑡𝑟𝑎𝑡2+𝑐𝑜𝑢𝑛𝑡_𝐸𝐽𝑂×𝑢𝑛𝑖𝑡)=𝑡_𝑠𝑡𝑟𝑎𝑡^1 −𝑡_𝑠𝑡𝑟𝑎𝑡^2=𝐶。

3.3 RF间如何进行通信?

一个RF与另一个RF通信时,需要同步时钟所使用的技术就是优先级队列, 具体来说,我们在队列中为主RF发送给其他RF的事件保留一个回调位置。为了实现这一点,主RF为队列中的每个回调预先分配一个预期的传递时间作为优先级,以便从主RF观察者的角度来看,回调将仅在该特定的固定时间传递。当多个事件在多个确定性rf中发生时,队列将以预先确定的固定顺序排列所有回调。
如何与优先级队列交互?

  • 当RF中的预期交付时间提前时,浏览器内核将主时钟移动到预期时间,并让RF处理事件。
  • 当RF中的预期交付时间落后于时钟时主RF将直接处理事件而不改变时钟。

然后来看一下图中四种情况。

  • 对于情况1,因为两个时钟在传送时钟同步,所以通信是确定性。
  • 对于情况2,我们可以认为事件是的预期交付时间交付的。但是,由于JavaScript是一种单线程语言,主RF在忙时无法处理事件。也就是说,主RF必须将事件的处理推迟到空闲时。因此,我们可以将交付和处理结合起来,因为即使事件已交付,主RF也无法通知和处理该事件。
    除了正常事件外,还有两个特殊事件:事件占位符和物理时钟保持器。事件占位符是一个虚拟插槽,指示实际事件应位于队列中的此位置,但事件尚未在辅助RF中完成。
  • 情况3:当主RF获取事件占位符时,主RF需要暂停自己的时钟,等待事件到达或取消。如果事件到达,它将替换事件持有者主RF处理该事件;如果事件被取消,主RF将处理队列中的下一个事件。物理时钟保持器是从当前物理时间到主RF时钟时间的映射。因为物理时钟一直在滴答作响,所以保持器的位置也会改变,即保持器的优先级将不断降低。这种保持架的使用是双重的。当具有物理时间的辅助RF尝试与主RF通信时,浏览器内核会将事件添加到队列中持有者的位置。
  • 情况4:在非常罕见的情况下,当主RF尝试获取物理时钟保持器(即主时钟的滴答声比物理时钟的滴答声快)时,browserkernel将暂停主RF,直到主时钟包含在物理时钟后面。原因是有物理时间的事件可以随时出现,如果主时钟更快,浏览器内核就无法将主时钟与物理时钟同步。为了防止这种情况,我们可以将设置为一个非常小的数字,这样主时钟就不能赶上最快机器中的物理时钟。

3.4 如何防止时序攻击?

如何防止同步时序攻击

  • 为了简单解释,我们假设一个JavaScript语句将形成一个操作码。
  • 在这种情况下,NextEage函数(第1-6行)的返回值始终为1,因为对于每个JavaScript语句(第4-6行),JavaScript RF的时钟将按操作码的单位时间unit_op前进.
  • 第6行start不等于performance.now(),只在第7行返回1。
  • JavaScript fingerprint固定为1(第11行)。
  • 对于侧信道攻击,在第16行和第18行之间只有一个操作码。因此,stop- star等于unit_op,并且fingerprint-remain保持为0,这使得持续时间为一个常量,即unit_op。

如何防止异步时序攻击

  • 在sidechannelasync函数中,当在函数targetSecretAsync(第26行)中调用异步目标机密时,浏览器内核将在优先级队列中放置一个事件占位符,该队列具有预期的传递时间,例如在td处,并创建一个确定的RF来执行异步机密。也就是说,由于确定性,t_d-t_init是一个常数。
  • 当setInterval函数被调用时,浏览器内核将创建另一个等待的RF,并在优先级队列中放置一个事件占位符,预期传递时间为t_init+u,其中u是第27行的变量。因为setInterval引入的隐式时钟是用来测量targetSecretAsync的,所以u应该小得多很小,就是这样,EventPlaceHolderForSetInterval应位于优先级队列中目标机密的值之前。因此,执行函数countFunc(第23行),然后为setInterval创建另一个事件占位符。余数函数
    执行round((td-tinit)/u)次回调。
  • 如果目标机密完成执行,目标机密的占位符将被回调替换,回调可以立即执行;否则,JavaScript RF将在那里等待占位符被回调替换。总之,在本例中,我们有三个RF:JavaScript RF、DOM RF用于setTimeout和确定性RF用于执行目标机密。回调测量的持续时间始终是round((td-tinit)/u)*u,一个确定的值。因此,可以防止异步攻击。

4 论文内容复现


4.1 环境的配置

  • 下载并安装 Visual Studio 2019 的社区版本,安装时,必须勾选以下组件:
    • “Desktop development with C++”(在 Windows group 下)—— Windows组件下的使用C++桌面开发
    • “Game development with C++ ”(在 Mobile & Gaming group 下)—— 移动与游戏组件下的使用C++游戏开发

  • 此外,确保选择了以下组件:
    • “Windows 10 SDK”(最低版本为 10.0.17134.0)
    • “C++ ATL for v142 build tools (x86 and x64)”

  • 从 Mozilla 下载 MozillaBuild 软件包。接受默认设置。

  • 在桌面上创建 c:\mozilla-build\start-shell.bat 的快捷方式。

4.2 编译运行

  • 在终端窗口中,cd 进入源码目录并键入
cd /c/source   
  
./configure  --enable-activex --enable-activex-scripting --enable-static --disable-shared --enable-application=browser

make

  • 当 mach 编译完成后,您将得到通过你硬盘驱动器上源代码编译的自制 Firefox 版本,并可以运行。
  • 使用./mach run命令来运行。
  • 相同攻击下,在firefox和deterfox的对比:
    SVG Filter Test

Script Parsing Test

Image Decoding Test


5 分析


从三个方面评估:鲁棒性,性能开销,兼容性。

5.1 鲁棒性

与四个现有的浏览器-Firefox,Google Chrome,FuzzyFox,4和Tor Browser进行比较

  • 【第一、二行】Clock-edge Attack——时钟边缘攻击,Clock-edge-m专门针对FuzzyFox的修改版本。除DeterFox和FuzzyFox之外的所有浏览器都易受原始版本的影响,即辅助时钟可用于以准确度测量目标机密。DeterFox和FuzzyFox都会显示恒定时间,使其无法测量目标秘密。对于修改版本,除DeterFox之外的所有浏览器都很脆弱。
  • 【第三至六行】侧信道攻击(Goethem的论文中提到的攻击方式)。(Script Parsing Attacks脚本解析攻击和Image Loading Attacks图像加载攻击)将文件大小从1MB更改为20MB,并观察加载或解析时间。每个文件大小的实验重复15次,丢弃前六个结果,因为浏览器有时在启动期间繁忙加载系统文件,这会影响结果。DeterFox的解析时间是一个恒定的确定性数字,即DeterFox对脚本解析攻击完全可靠。其次,传统Firefox和Google Chrome的解析时间与文件大小成线性关系,TorBrowser和FuzzyFox的解析时间是关于文件大小的阶梯曲线。当文件大小略有不同时,两个浏览器都可以小规模地抵御这种解析攻击,但是当文件大小差别很大时,例如2MB差异时,两个浏览器就都不行。

    类似地,DeterFox的加载时间是恒定的,表明DeterFox对这种图像加载攻击具有鲁棒性,并且传统的Firefox和Google Chrome都容易受到攻击,因为加载时间随着文件大小线性增加而增加。其次,FuzzyFox的解析时间仍然是一个有一些波动的阶梯曲线。也就是说,如果文件大小差别很大,例如差异为5MB,FuzzyFox也容易受到这种攻击。最后,Torbrower当文件大小小于4MB时,时间保持为常数,而当文件大小大于5MB时,时间线性增加。也就是说,TorBrower在加载大文件时也容易受到攻击。
  • 【第七、八行】Cache Attacks -缓存攻击(Oren论文中提及),在原始版本中,Chrome和Firefox很脆弱,但Torbrower器,FuzzyFox和DeterFox鲁棒性较强。因为Torbrower和FuzzyFox都只限制侧面/隐蔽信道的带宽,所以创建了一个修改版本,表明隐蔽通道仍然是可以进行攻击的。
  • 【第九行】SVG Filtering Attacks-SVG过滤攻击(Stone论文中提及)。用Stone论文中提到的feMorphology SVG滤波器对两幅图像(一幅尺寸为1920×1080,另一幅尺寸为200×200)进行侵蚀操作,并使用requestAnimationFrame测量操作时间。两幅图像都是使用RGB颜色的混合随机生成的,执行攻击20次。除DeterFox之外的所有其他浏览器都很脆弱。

5.2 性能开销

  • 通过JavaScript Benchmark和Alexa 100强网站来评估DeterFox的性能
  • 使用一个名为Dromaeo的JavaScript性能测试套件来评估DeterFox的性能开销,Dromaeo中的每个测试至少要执行5次,如果无法达到显著的错误级别,则可能最多执行10次。接下来,将结果拟合到t分布中,以计算95%的置信区间。
  • 根据Alexa 100强网站评估DeterFox的性能开销。具体来说,测量了四种浏览器中排名前100的网站的加载时间,并给出了加载时间的累积分布函数(CDF)。
  • DeterFox的开销来自两部分:计数器和优先级队列。递增行为需要时间,计数器会带来开销。但是因为递增行为非常便宜,开销很小。如果只有一个事件等待,优,先级队列不会带来任何开销。当队列中有两个(或两个以上)事件时,如果阻止事件排在另一个事件之后的事件排在第一位,则这种安排将导致开销。然而,在实践中,如Alexa 100强网站所示,这种情况很少发生,即使发生,另一个事件也会在短时间内出现,这给DeterFox带来的开销很少。所以DeterFox的性能开销是很小的

5.3 兼容性

  • 从三个角度来评估DeterFox的兼容性:Mochitest(莫氏试验)、Alexa 100强网站以及热门网站的登录功能。
  • Mochitest是来自Mozilla的一个全面的自动化测试框架,Mozilla将在每次发布之前使用Mochitest测试Firefox。从Firefox nightly 51.0a1中使用的Mochitest包含878556个单独的测试,这些测试分为41264个类别,从Mozilla官方网站下载的标准Linux虚拟机上运行8小时。结果表明,DeterFox通过了97.6%的测试,即10339个测试失败,10358个测试正常,其余测试通过。我们看了这些失败的案例,发现与传统的Firefox相比,DeterFox还失败了1502次测试。有趣的是,有493个测试阻止了成功,但是传统的Firefox失败了。
  • 过比较DeterFox与传统Firefox浏览器的截图,我们评估了DeterFox的兼容性。因为现代网站包含许多广告,即使是连续两次访问同一网站也可能呈现出不同的效果。因此,我们手动查看这些网站,其中DeterFox和Firefox的屏幕截图相似度小于0.9。总共有63个网站通过了最初的测试,我们手动检查了其余37个网站,所有差异都是由动态内容引起的,例如不同的广告和新闻更新。总而言之,DeterFox与Alexa 100强网站兼容,也就是说,在呈现这些网站的首页时不会造成明显的差异。
  • 评估几个流行网站的登录功能。从电子邮件、社交网络、在线购物、视频和JavaScript游戏等网站类别中选择最受欢迎的网站。我们的手动检查表明我们可以成功地执行相应的操作。

6 总结


  • 以上就是对于Deterministic Browser这篇论文中的研究内容、研究方法、评估手段的理解和介绍。
  • 该论文是CCS'17上的一篇论文,四名作者都来自理海大学。
  • 论文优势:提出了确定性浏览器,是第一个将确定性引入web浏览器并可证明可以防止与浏览器相关的时序攻击的方法。在Firefox浏览器上实现了一个名为DeterFox的确定性浏览器原型。评估表明,DeterFox能够抵御文献中现有的定时攻击,并且与现实世界的网站兼容。
  • 与论文相关的值得研究的方向:时序攻击的检测。许多方法侧重于基于熵等高级信息的提取来检测定时侧或隐蔽信道。也可以采用确定性的方法,通过非确定性事件对定时信道进行回放和检测。此处的研究将时序攻击局限于与浏览器相关,可以将这种方法拓展于其他方面,比如信息的传送、密钥的分发等,避免攻击者通过时序攻击监听信息,增强保密性和可用性。
 posted on 2020-06-30 20:22  捞起月亮的渔民  阅读(423)  评论(0编辑  收藏  举报