Page 215 - 《软件学报》2021年第8期
P. 215
罗武 等:浏览器同源策略安全研究综述 2497
及获得内存写能力(如修改元数据).根据 Jia 等人 [22] 对安全漏洞的分析,Chrome 于 2014 年~2016 年间
存在 599 个安全漏洞,其中 104 个漏洞允许攻击者获得内存读写能力,每个 Chrome 的版本平均存在 6
个内存漏洞.这意味着浏览器内存攻击与浏览器安全增强将是长期存在的研究内容.
• 对同源策略的影响:对浏览器的 3 类内存攻击均对同源策略产生了破坏性的影响.其中,代码注入攻击
与代码重用攻击的最终目的都是在渲染进程内执行任意代码,这将能够直接绕过同源策略的限制来
访问跨源资源;仅数据攻击可以作用在与同源策略有关的元数据或者其他数据上,前者将导致攻击者
可以欺骗同源策略的安全监控器,而后者意味着攻击者可能绕过同源策略以访问跨源资源.
表 9 对抵抗以上 3 类攻击的防御方案进行了总结分析,包括防御机制类型、能抵抗的攻击类型、对浏览器
引入的性能开销以及对浏览器代码的修改数量.我们从防御机制类型的角度来对这些方案进行总结讨论.
• W^X 与控制流完整性通常被认为是分别解决代码注入与重入攻击的有效方式.目前,主流浏览器中已
经实现了 W^X 保护 [114] .然而,控制流完整性为浏览器带来了不可忽略的开销.例如,Niu 等人 [118] 的方案
引入了 14.6%的开销,这使得其在浏览器中应用还有一些距离.
• 地址空间随机化几乎能用来抵抗所有类型的内存攻击,但必须要求随机化后内存段的基址很难被攻
击者找到,因此需要谨慎处理指针以及维护内存段的机制.
• 利用特殊 JIT 编译器特性的攻击可以被相应的防御机制所抵抗,如针对于大常数的常数盲化机制与
JavaScript 代码重写机制.然而,常数盲化机制引入了 15%~80%的性能开销性能的需求,这使得其不能
应用于 1 到 2 字节的常数上,而使用 1 到 2 字节常数进行内存攻击是可行的 [20] ;JavaScript 重写机制对
Chrome 与 Edge 浏览器分别引入了 21%与 24%的开销,且需要网络代理的辅助 [21] ,这对于要求性能与
易用性的浏览器来说是很难接受的.
• 内存隔离机制能从根本上解决内存攻击问题,但通常意味着对浏览器现有架构的修改, 如 Site Isoltion
架构[33]对 Chrome 修改或增加了 450k 行数的源代码,这在实现以及推广上均存在较大的问题.此外,
对浏览器的架构修改也可能引入额外的开销,如何确保性能,也是需要考虑的问题.
Table 9 Comparison on memory defenses schemes in browsers
表 9 浏览器内存防御方案对比
防御方案 防御机制类型 应对攻击 性能开销 浏览器代码修改数量
Chen 等人 [112] W^X 代码注入攻击 Chrome 的 V8 引擎:0.5%; 3K SLOC
Safari 的 JavaScript 引擎:0.1%
Crane 等人 [113] W^X 代码注入攻击 Chrome 的 V8 引擎:7.8% −
Athanasakis 常数盲化 代码注入攻击; IE 的 Chakra
等人 [20] 代码重用攻击 引擎:15%-80% −
Niu 等人 [118] 控制流完整性 代码重用攻击 Chrome 的 V8 引擎:14.6% 811 SLOC
Maisuradze 等人 [21] JavaScript 重写 代码重用攻击 Chrome:21%;Edge:24% −
内存隔离 代码注入攻击; Firefox 的
Frassetto
等人 [116] 与地址空间 代码重用攻击; SpiderMonkey 2673 SLOC
随机化 仅数据攻击 引擎: 9.8%
Reis 等人 [33] 内存隔离 仅数据攻击 Chrome: 9-13% (内存开销) 450k SLOC
5.5 小 结
Web 的发展与浏览器对即时编译的需求,使得内存攻击者们逐渐将浏览器作为攻击目标.代码注入攻击、
重用攻击与仅数据攻击的发起,将会直接破坏浏览器所实施的同源策略,导致攻击者几乎可以无限制地访问受
害者 frame 的资源.JavaScript 代码重写是解决内存攻击的一种方案,但性能与对目前网站的兼容性限制了其实
用性.基于浏览器加固的方案将是应对内存攻击的主流,如浏览器从单进程演变到多进程模型乃至目前的
SiteIosltion 即是典型的体现.不论如何,内存攻防对抗将使得浏览器同源策略安全在曲折中增强.