Page 213 - 《软件学报》2021年第8期
P. 213
罗武 等:浏览器同源策略安全研究综述 2495
的完备性,网络代理将首先解析 JavaScript 代码所对应的抽象语法树,然后遍历抽象语法树来移除大常数,最后
根据更新后的抽象语法树来生成重写后的 JavaScript 代码.
重写后的JavaScript语句
造成大常数注入的
JavaScript语句 (将大常数作为字符串保存在内存中,使得
编译后的指令使用大常数的内存地址)
Fig.13 Examples of removing big constants (e.g., 0x1234) through rewriting JavaScript [21]
图 13 通过 JavaScript 重写的大常数(如 0x1234)消除示例 [21]
5.3 仅数据攻击及防御
5.3.1 攻击方案
仅数据攻击同样能够被用来绕过或欺骗同源策略的安全监控器.Jia 等人 [22] 发现,浏览器的同源策略安全监
控器依赖浏览器渲染进程维护的元数据来进行策略实施.图 14 中给出了 Chrome 浏览器的同源策略实施的部分
代码,其中,SecurityOrigin 类为每个 frame 维护了对应的元数据,包括 URL 与源等信息.该代码中第 2 个 if 语句
判断了 SecurityOrigin 对象是否相同,也即是否同源.然而,第 1 个 if 语句表明了如果攻击者能够通过仅数据攻击
将 m_universalAccess 修改为 true,Chrome 的同源策略实施将会被绕过.Jia 等人利用了 Chrome 的一个已知漏洞
来使得攻击者 frame 里的 JavaScript 代码能够访问任意内存地址的数据,并且利用 Chrome 处理 HTML 标签的
一些特性来绕过了浏览器中的地址随机化保护,最终使得攻击者直接定位到 m_universalAccess 的内存地址,并
对其进行修改.攻击者 frame 可以内嵌 DropBox 或 GooglePlay 等云服务的 frame(受害者 frame),然后利用该仅
数据攻击,攻击者可以绕过同源策略来在受害者 frame 中点击按钮,如从 GooglePlay 中下载恶意应用.此后,云服
务将下载的恶意应用同步到用户本地,打破浏览器多进程模型维护的用户本地与网页的边界,实现木马程序的
注入.
SecurityOrigin为Chrome
中维护“源”等元数据的类
同源检查,其中this为主体
的源,other为客体的源
Fig.14 Part of source code of same-origin policy enforcement in Chrome [22]
图 14 Chrome 中同源策略实施的部分源代码 [22]
Rogowski 等人 [23] 在 Jia 的工作基础上,更进一步地提出了内存制图(memory cartography)技术来简化仅数
据攻击的构造过程.内存制图技术包含 4 个步骤:首先,攻击者在线下访问目标应用并执行受害者用户可能会执
行的操作,与此同时,攻击者暂停浏览器运行并对渲染进程进行内存扫描来获取足够多的数据指针;此后,攻击
者利用扫描到的数据指针制定内存地图,这其中需要考虑到地址的随机化问题;接下来,攻击者需要找到浏览器