周五的论文推荐为大家介绍来自国际知名的网络安全研究团队——清华大学NISL实验室出品的最新NDSS 2023研究论文 A Security Study about Electron Applications and a Programming Methodology to Tame DOM Functionalities (作者包括我们都很熟悉的陈建军老师和段海新老师,品质保证~)
这篇论文分析了使用Eletron
框架开发的桌面应用中的安全问题,其实就是典型的web安全攻击——cross-site scripting(XSS)和无脚本(scriptless)攻击。同时,论文指出,由于输入的多样性,开发人员很难设计出万无一失的过滤器(sanitizer)来防御这些攻击,所以作者从另一个层面上实施了更为有效的防御措施:通过修改Chromium,实现了定制的 TypeBuilder 和 TypeEnforcer 进行安全防护。
Eletron
框架是由GitHub主导开发的开源框架,允许开发人员使用Web技术创建跨平台桌面应用程序。由于Electron应用通过HTML,CSS和JavaScript进行开发,在带来便利的同时,也把传统的web安全风险引入到了桌面应用中来。(上了年纪的读者可能会联想起当年微软Windows Longhorn里面引入的那个Avalon显示引擎?)
尽管开发人员和框架设计者对web安全攻击的风险有所了解和防范,但是想要精确过滤掉所有的有害输入,往往没那么简单,我们来看一个示例:
在上面这个例子中,原有的sanitization机制“好心办坏事”,首先是client端会把未定义的test1和test2这两个样式属性给移除掉;其次,服务器端本来会检查不合法的HTML内容,但是图中test1之后所有标记了下划线的部分,都被解析为test1的值(因为test1之后有一个冒号),结果反而绕过了安全检查;最后,内容里面的/*x*/会被当成代码注释,在实际渲染的时候消失掉。这一系列“猛如虎”的操作下,最后反而导致一个恶意的图片链接被插入到页面中去!下图就是在Microsoft Teams的聊天窗口中发送这个攻击内容,导致所有client最后无意识地去访问了恶意图片(由于是client主动访问,会泄露使用者的IP地址信息等隐私数据)
另一个问题是在APP中使用的Eletron
框架承担的浏览器的职责,但是却缺乏像浏览器那样的严格安全策略。例如下图这个SSH客户端——Grasshopper,它表面上是把ssh terminal的内容显示在程序窗口上,实际上这个程序窗口用了一个WebView类似的组件来渲染,所以一旦ssh terminal里面显示的内容包含了一些恶意注入的脚本内容(且刚好被用户鼠标选中,引起一个popup效果),就会触发Grasshopper去加载并执行它们:
当然,大家喜爱的Visual Studio Code也没能逃过攻击的魔爪(编辑部再次批判一下我们的读者,为什么要使用臃肿的VS Code而不换成轻量级的EmEditor这样的文本编辑利器):
为了彻底杜绝此类攻击,作者指出,必须把网页中的data和object进行区分,这就需要引入更为严格的定义模型。在本文中,简单来说,作者为HTML中的DOM-tree引入了Dom-tree type这个限定选项,开发者可以在开发过程中设定好允许的Dom-tree type(而不是去做各种输入的过滤),然后在发布后的程序中,作者加入了两个新组件TypeBuilder和TypeEnforcer:前者一方面可以通过试运行(test-run)给开发人员提供合法的Dom-tree type的建议,另一方面在实际运行中会为页面中所有的Dom-tree生成相应的Dom-tree type,然后丢给后者去进行白名单检查。这样就实现了更为严格的输入数据检查。
作者对31个使用了Eletron
框架开发的APP部署了基于TypeBuilder和TypeEnforcer的安全防护,然后进行了测试,发现所有的已知攻击都能成功检测,而且并不会影响正常功能的使用。在性能开销方面,作者使用Speedometer 2.0 benchmark进行测试,发现在执行特定的action操作时,如果执行频率是 10 actions/sec,基本上不会有什么额外的性能开销,只有执行频率到达 100 actions/sec 时,才会有比较大的开销(26%)
作者在附录中还给出了BNF格式的DOM-tree type描述,大家可以去看看:
论文:https://www.ndss-symposium.org/wp-content/uploads/2023/02/ndss2023_f305_paper.pdf
原文始发于微信公众号(安全研究GoSSIP):G.O.S.S.I.P 阅读推荐 2023-03-10