没有想过,简单的一段JavaScript代码就能嗅探出浏览器标签页上的信息,甚至找出你的访问记录?更有甚者,就连Tor浏览器都不放过。
——没错,最近有一篇论文中就分析了这一问题。
作者 | Thomas Claburn
译者 | 弯月
责编 | 郭芮
出品 | CSDN(ID:CSDNnews)
近期,计算机专家们演示了一种旁路攻击技术,能越过最近浏览器引入的隐私防御策略,跟踪浏览器的行为,甚至连Tor浏览器都不能幸免。其结论是,一个浏览器标签页中的恶意JavaScript代码可以嗅探其他标签页,并找出你曾经访问过的网站。
这些信息可以让广告商根据你的兴趣定向推送广告,或者仅仅是收集你的个人兴趣供以后使用。
研究者Anatoly Shusterman、Lachlan Kang、Yarden Haskal、Yosef Melster、Prateek Mittal、Yossi Oren、Yuval Yarom分别来自以色列内盖夫的Ben-Gurion大学,澳大利亚的阿德莱德大学,和美国的普林斯顿大学,他们发现了一种基于处理器缓存的网站指纹攻击技术,能利用JavaScript收集访问过的网站的信息。
描述该技术的论文发布在ArXiv上,题为“Robust Website Fingerprinting Through the Cache Occupancy Channel”(https://arxiv.org/pdf/1811.07153.pdf)。
“我们演示的这种攻击能泄露‘人类的秘密’:攻击者获知用户访问过的网站,就能获知用户的很多秘密,如性取向、宗教信仰、政治倾向、健康状况等。”Ben-Gurion大学的Yossi Oren和阿德莱德大学的Yuval Yarom在本周给The Register的邮件中说。
因此,虽然这种攻击并不像远程攻击技术那样能执行任意代码或泄露核心内存,但Oren和Yarom怀疑,他们的浏览器指纹方法有可能会被用来窃取计算机的密码,如加密的秘钥,或已安装的易受攻击的软件。
有些情况下,这种攻击甚至能对那些期待利用Tor来保守访问网站的秘密的用户产生严重的影响。
旁路攻击(或称“短暂执行攻击”)需要观察计算机系统的某个部分,收集信息以推断其他特权信息。今年发现的Spectre、Meltdown和Foreshadow等脆弱性都有潜在的可能性通过旁路攻击触发。
Oren和Yarom说,该攻击技术运行在比Spectre更底层的地方。“一些Spectre不能运行的地方(比如跨越进程边界),这种攻击也能运行,而且用来防御Spectre的CPU补丁也不能阻止它。而另一方面,Spectre攻击能获得的信息比我们的攻击方法更详细。”
减轻这类攻击的一种方式是限制对高精度定时器的访问,因为旁路数据可以通过高精度定时器获得。例如,在Spectre和Meltdown最初被发现时,Mozilla就说它会在Firefox浏览器中降低时间源的精度,或者干脆禁用它。
但最新的浏览器指纹技术并不需要高精度定时器,因为它的攻击目标是浏览器的处理器缓存占用。
“缓存占用的度量就是在一端固定时间内整个缓存被访问的占多少百分比。”Oren和Yarom解释。“浏览器非常占用内存,因为它要从网络上接收大量数据,并在屏幕上绘制各种输出结果。这意味着它在加载页面时会占用相当多的缓存。”
而且,这种攻击方式并不依赖于缓存的布局,因此用来降低风险的缓存布局随机化技术对此毫无用处。该攻击方式也不会被基于网络的指纹防御措施影响,因为浏览器不是从网络上获取数据,而是从响应缓存中获取数据。
自动识别
这种指纹攻击技术使用了JavaScript来衡量网页加载时的长期处理器缓存访问延迟,然后利用深度学习技术,将这些数据与攻击者事先收集的数据比较,从而自动识别出相似的模式,判断出对于某个网站的访问。
换句话说,可能通过测量浏览器在获取和渲染网页时对处理器CPU缓存的访问情况,来获知用户是否浏览某个网站。某个标签页内的恶意JavaScript脚本可以监视缓存访问,来确定缓存的访问模式和指纹,从而判断其他标签页访问过的网站。
“‘传统’的机器学习技术要求人类去寻找数据的哪些‘特征’可能与攻击有关。”Oren和Yarom解释道。“但在哪些特征最适合进行哪些类型的攻击方面也有很多研究。在深度学习中,计算机扮演专家的角色,试图自己找到这些特征。这样我们就能直接从数据获得结果。人类研究者可能比我们的机器学习算法找到更好的特征,这些信息用于改进该攻击。”
专家们考虑了两个场景:一个是封闭世界的数据集,包含100个网站,每个网站采取了100个数据点;另一个是开放世界的数据集,能够从5000个网站中分辨出100个敏感的网页。
在封闭数据集上使用利用主流浏览器,研究者能准确地分类出70~90%的网站访问记录。使用Tor之后,攻击的准确率降到了47%,但如果同时考虑其他数据,准确率能提高到大约72%。开放世界的数据集也显示出类似的结果,即70~90%,对于Tor,如果不仅考虑最佳输出,而是检查前五位的结果的话,准确度能达到83%。
如果目标仅仅是确定某个访问过的网站是否敏感,那么开放世界数据集的准确度能提高到99%以上。
Oren和Yarom说,他们的工作显示通过限制对精确计时的访问很难防御他们的旁路攻击。
“我们的工作演示了整个过程是不重要的——我们完全不需要高精度的计时器进行攻击。”他们说,“类似地,一些用于防御Spectre的措施会将网站隔离到多个进程中。我们证明了这些措施是不够的。我们发现,可以从一个标签页侦测其他标签页,甚至可以从一个浏览器侦测同一台计算机上运行的其他浏览器。”
他们在最后总结道,在任何时间点,运行少于一个浏览器标签页都会有潜在的隐私风险。打开第二个标签页时,其中的JavaScript就能嗅探到第一个标签页中的内容。完全禁用JavaScript能阻止这种攻击,但同时也禁止了许多依赖JavaScript的网站。而且他们说,可视化应该只是遍历特性,而不是安全特性。
“如果你要同时访问敏感的网站和非敏感网站,那就用两台电脑。”他们说。
原文:https://www.theregister.co.uk/2018/11/21/unmasking_browsers_side_channels/
本文为 CSDN 翻译,如需转载,请注明来源出处。
oogle Chrome、Internet Explorer、Mozilla Firefox、Safari,这些对于当今大多数使用互联网的人来说并不陌生。在当今时代,我们都非常熟悉这些网络浏览器,这是世界上使用最广泛的软件。在那个顶部宽大的白色框中,您以写下要导航到的任何网站地址,例如 www.facebook.com、www.google.com、www.medium.com,然后立即显示该页面。你有没有想过该网站是如何出现在你的屏幕上的?
浏览器是一种软件程序,用于在万维网上呈现和探索内容。这些内容(包括图片、视频和网页)使用超链接(类似于网页地址)进行连接,并使用统一资源标识符 (URL) 进行分类。第一个是由万维网本身的发明者蒂姆·伯纳斯-李(Tim Berners-Lee)于1990年创建的。在那之后,现在有许多网络浏览器可供消费者使用,具有多功能功能。
浏览器始终需要服务器(旨在处理请求并通过本地网络或 Internet 将数据传送到其他(客户端)计算机的计算机)。当您在浏览器的地址栏中输入任何网页的任何URL(统一资源定位器)时,它会从服务器获取包含图像,PDF,视频,Flash文件的HTML文件,解释它们,然后将其显示在屏幕上。
但是,浏览器如何解释这些HTML文件?现在,浏览器如何解释这些HTML文件?浏览器显示网页方式的 HTML 和 CSS 规范由 W3C(万维网联盟)组织维护,该组织是万维网的主要国际标准组织。
当在 Web 浏览器中键入任何 URL 时,为了加载页面,它首先必须找到 Web 服务器的 IP 地址。它要求操作系统 (OS) 检查本地缓存中的服务器名称。如果它存在于缓存中,则渲染引擎将渲染网页。
者:kevinylzhao,腾讯音乐前端开发工程师
浏览器缓存策略对于前端开发同学来说不陌生,大家都有一定的了解,但如果没有系统的归纳总结,可能三言两语很难说明白,甚至说错,尤其在面试过程中感触颇深,很多候选人对这类基础知识竟然都是一知半解,说出几个概念就没了,所以重新归纳总结下,温故而知新。
浏览器缓存一般分为两类:强缓存(也称本地缓存)和协商缓存(也称弱缓存)。
浏览器发送请求前,会先去缓存里查看是否命中强缓存,如果命中,则直接从缓存中读取资源,不会发送请求到服务器。否则,进入下一步。
当强缓存没有命中时,浏览器一定会向服务器发起请求。服务器会根据 Request Header 中的一些字段来判断是否命中协商缓存。如果命中,服务器会返回 304 响应,但是不会携带任何响应实体,只是告诉浏览器可以直接从浏览器缓存中获取这个资源。如果本地缓存和协商缓存都没有命中,则从直接从服务器加载资源。
按照本地缓存阶段和协商缓存阶段分类:
上述代码的作用是告诉浏览器当前页面不被缓存,事实上这种禁用缓存的形式用处很有限:
a. 仅有 IE 才能识别这段 meta 标签含义,其它主流浏览器仅识别“Cache-Control: no-store”的 meta 标签。
b. 在 IE 中识别到该 meta 标签含义,并不一定会在请求字段加上 Pragma,但的确会让当前页面每次都发新请求(仅限页面,页面上的资源则不受影响)。
在 HTTP 请求和响应的消息报头中,常见的与缓存有关的消息报头有:
上图中只是常用的消息报头,下面来看下不同字段之间的关系和区别:
a. Last-Modified 标注的最后修改只能精确到秒级,如果某些文件在 1 秒钟以内,被修改多次的话,它将不能准确标注文件的新鲜度;
b. 某些文件也许会周期性的更改,但是它的内容并不改变(仅仅改变的修改时间),但 Last-Modified 却改变了,导致文件没法使用缓存;
c. 有可能存在服务器没有准确获取文件修改时间,或者与代理服务器时间不一致等情形。
浏览器可以在内存、硬盘中开辟一个空间用于保存请求资源副本。我们经常调试时在 DevTools Network 里看到 Memory Cache(內存缓存)和 Disk Cache(硬盘缓存),指的就是缓存所在的位置。请求一个资源时,会按照优先级(Service Worker -> Memory Cache -> Disk Cache -> Push Cache)依次查找缓存,如果命中则使用缓存,否则发起请求。这里先介绍 Memory Cache 和 Disk Cache。
200 from memory cache
表示不访问服务器,直接从内存中读取缓存。因为缓存的资源保存在内存中,所以读取速度较快,但是关闭进程后,缓存资源也会随之销毁,一般来说,系统不会给内存分配较大的容量,因此内存缓存一般用于存储较小文件。同时内存缓存在有时效性要求的场景下也很有用(比如浏览器的隐私模式)。
200 from disk cache
表示不访问服务器,直接从硬盘中读取缓存。与内存相比,硬盘的读取速度相对较慢,但硬盘缓存持续的时间更长,关闭进程之后,缓存的资源仍然存在。由于硬盘的容量较大,因此一般用于存储大文件。
下图可清晰看出差别:
200 from prefetch cache
在 preload 或 prefetch 的资源加载时,两者也是均存储在 http cache,当资源加载完成后,如果资源是可以被缓存的,那么其被存储在 http cache 中等待后续使用;如果资源不可被缓存,那么其在被使用前均存储在 memory cache。
CDN Cache
以腾讯 CDN 为例:X-Cache-Lookup:Hit From MemCache 表示命中 CDN 节点的内存;X-Cache-Lookup:Hit From Disktank 表示命中 CDN 节点的磁盘;X-Cache-Lookup:Hit From Upstream 表示没有命中 CDN。
从上图能感受到整个流程,比如常见两种刷新场景:
IndexedDB 就是浏览器提供的本地数据库,能够在客户端存储可观数量的结构化数据,并且在这些数据上使用索引进行高性能检索的 API。
异步 API 方法调用完后会立即返回,而不会阻塞调用线程。要异步访问数据库,要调用 window 对象 indexedDB 属性的 open() 方法。该方法返回一个 IDBRequest 对象 (IDBOpenDBRequest);异步操作通过在 IDBRequest 对象上触发事件来和调用程序进行通信。
常用异步 API 如下:
在 16 年曾基于 IndexDB 做过一整套缓存策略,有不错的优化效果:
SW 从 2014 年提出的草案到现在已经发展很成熟了,基于 SW 做离线缓存,让用户能够进行离线体验,消息推送体验,离线缓存能力涉及到 Cache 和 CacheStorage 的概念,篇幅有限,不展开了。
localStorage 属性允许你访问一个 Document 源(origin)的对象 Storage 用于存储当前源的数据,除非用户人为清除(调用 localStorage api 或者清除浏览器数据), 否则存储在 localStorage 的数据将被长期保留。
sessionStorage 属性允许你访问一个 session Storage 对象,用于存储当前会话的数据,存储在 sessionStorage 里面的数据在页面会话结束时会被清除。页面会话在浏览器打开期间一直保持,并且重新加载或恢复页面仍会保持原来的页面会话。
通过了解浏览器各种缓存机制和存储能力特点,结合业务制定合适的缓存策略,善用缓存是基本功,可以用于时常审查负责的业务,可能就会发现个别业务并没有运用到位,共勉。
*请认真填写需求信息,我们会在24小时内与您取得联系。