原文作者:Wu LUO, Xuhua DING, Pengfei WU, Xiaolei ZHANG, Qingni SHEN, and Zhonghai WU
原文标题:ScriptChecker: To tame third-party script execution with task capabilities capabilities
原文链接:https://ink.library.smu.edu.sg/cgi/viewcontent.cgi?article=7875&context=sis_research
笔记作者:nerd@SecQuan
文章小编:cherry@SecQuan
简介
该文为发表于NDSS 2022的ScriptChecker: To Tame Third-party Script Execution With Task Capabilities。由于第三方脚本在使用上的便利性,88.45%的网站至少包含一个第三方脚本。然而,由于这些脚本具有访问所有资源的完全权限,调用这样的第三方脚本函数可能会导致意外,甚至是恶意代码执行。在本篇论文中,作者提出了ScriptChecker,这是一种基于浏览器的JS脚本检测框架,可以根据主机网页的指令有效地限制第三方脚本的执行。与现有基于JavaScript层运行的现有方案不同,ScriptChecker利用上下文分离和浏览器的安全监视器来对执行不受信任代码的任务实施按需地访问控制。主机页面可以在创建任务时灵活地为其分配资源访问能力。因此,ScriptChecker在安全性、可用性和性能方面优于现有技术。
方法
ScriptChecker框架如下图所示,它可以在JS引擎的帮助下,以Chrome安全监视器为中心,对有风险的第三方脚本执行强制的按需权限检查。它不依赖于JavaScript层的攻击向量,因此能够弥补现有方案中的不足。
ScriptChecker的基本思想是在新的Chrome任务中启动第三方脚本执行,该任务具有主机指定的能力,既强制限定了浏览器执行脚本时的访问控制权限。ScriptChecker架构主要由三个关键组件组成:
-
用于上下文隔离的第三方脚本的执行沙箱 -
基于能力的任务访问控制权限系统 -
一组异步执行被调用函数的API
首先,ScriptChecker引入了上下文沙箱,让有风险的代码可以在其中运行,而其他代码仍保留在默认的主上下文中。沙盒具有完整的JS API集来访问DOM对象和系统资源。与已有的沙箱方案相比ScriptChecker引入的上下文沙箱并非用于限制脚本对JS对象和API的访问,而是仅用于上下文分离。对于有风险的脚本,ScriptChecker将其事件侦听器注册到DOM元素中,并移动至沙箱运行,Chrome在主上下文和沙箱上下文中定位并执行这两个侦听器。这样做的目的是使得第三方脚本对主机JS对象的访问变成跨上下文的访问,让其能够被Chrome安全监视器检查。为了实现这一功能,ScriptChecker对Chrome进行了微小的更改,如下图所示。通过将一个个名为windowRisky的对象添加到主上下文(windowRisky中的每个元素都指向一个上下文沙箱中的对象),这样主机脚本就可以包含并调用多个第三方脚本了,并以不同的权限隔离它们。类似的,ScriptChecker将windowMain对象添加到沙箱中,使得第三方脚本使用它来引用主上下文中的JS对象。
之后,ScriptChecker为主机脚本提供了一个权限字典,从而生成针对第三方脚本访问跨上下文JS对象、DOM对象和系统资源的能力的动态组合策略。为了生成这一权限组合策略,ScriptChecker根据主机脚本中的设定或脚本生成时的继承关系,在创建任务期间为其创建一组所需的权限集合,并将其附加到任务中。作者将ScriptChecker生成的权限集合称为“能力”,可以看出其思路比较贴近于权限白名单,既只允许执行显式给出的一些功能,对于其他的没有给出的能力全部限制其执行。在脚本实际运行阶段,ScriptChecker通过Chrome的安全监视器根据执行任务功能中指定的能力进行权限控制,不允许第三方脚本访问能力限定外的资源。特殊的,没有能力的任务是值得信赖的,因为它们不会执行任何有风险的JS代码。
此外,为了使用ScriptChecker框架来限制第三方脚本,Web开发人员必须改变调用这些风险函数的方式,以便它们能够被框架驱动单独运行。为此,ScriptChecker还提供了一套API用于为被调用的风险函数创建新任务。最后,ScriptChecker还对Chrome进行了改造,使得这些API能够在脚本包含阶段和侦听器执行阶段去执行有风险的代码。
实验
在实验阶段,作者针对ScriptChecker的效果与性能进行多种对比测试,测试结果如下表所示。与无限制的第三方脚本执行过程相比较,ScriptChecker的主要时间延迟来自异步函数执行、沙箱上下文创建和基于能力权限检查。
由上表可以看到,常用的各种第三方脚本,如图形库和实用程序库的平均性能损失分别为3%到9%之间。并且,ScriptChecker与现有方案相比,在性能、可用性和安全性都具有一定优势。
安全学术圈招募队友-ing
有兴趣加入学术圈的请联系 secdr#qq.com
原文始发于微信公众号(安全学术圈):基于任务能力的JS脚本访问控制框架