导语:今天就来介绍一个在Black Hat 2017提出的技术问题。

timg.jpg

前言

Black Hat 2017可谓成果丰硕,除了各种安全工具和理论出现之外,也出现了许多新的安全研究方向,比如Doyensec的联合创始人Luca Carettoni就介绍了关于Electron安全方面的新思路 https://twitter.com/lucacarettoni 。为了对他的这个思路有更深入的了解,我在会后和他讨论了可能基于Electron应用程序的设计漏洞和运行漏洞,特别是在安全防护框架到位的情况下,黑客如何绕过这些漏洞,比如,也可以通过跨站脚本来呈现不可信内容来实现可靠的远程执行代码(RCE)。

了解nodeIntegration标志

其实对信息安全方面有所了解的开发人员都知道,在整合了Node.js的应用中直接呈现不受信任的远程或本地内容是非常危险的。正是出于这一方面的考虑,Electron框架提供了两种不同的机制来帮助应用程序在“沙盒环境”中呈现不受信任的资源:

BrowserWindow机制

2.jpg

WebView机制

3.jpg

在上面的例子中,将nodeIntegration标志设置为false。即使在渲染器进程中运行了Node.js引擎,页面中运行的JavaScript将无法访问全局引用。

寻找绕过nodeIntegration的方法

现在应该明白为什么nodeIntegration是框架的关键安全相关设置,这种机制中的漏洞可能会导致完全的主机攻击,简单地渲染不受信任的网页。作为一个网络极客,我使用这种漏洞将传统的XSS变成了RCE。由于所有Electron应用程序都与框架代码捆绑在一起,因此在整个生态系统中解决这些漏洞也是复杂的。

在我的研究中,我已经广泛分析了所有的项目代码变化,以发现先前发现的实际绕过案例,目的是研究Electron的设计漏洞。只有掌握了这些知识,才能找到绕过漏洞的办法。

通过研究官方文档,我很快就发现了Electron的“glorified”JavaScript API引起的与标准浏览器的显着偏差。当创建一个新窗口时,Electron返回一个BrowserWindowProxy的实例。该类可用于操纵子浏览器窗口,从而颠覆同源策略(SOP)。

绕过SOP的第一种办法:

4.jpg

绕过SOP的第二种办法:

5.jpg

绕过SOP的第二种办法使用的评估机制可以用下图解释:

1502332787226014.png

另外的源代码审查揭示了存在特权的URL(类似于浏览器的特权区域)。通过设计将SOP-bypass与在 lib/renderer/init.js中定义的特定特权URL相结合,我意识到我可以覆盖nodeIntegration设置。

1502332795872219.png

包括影响1.6.7版本之前的所有Electron发布的nodeIntegration绕过的简单但可靠的Poc:

8.jpg

2017年5月10日,我通过Electron邮件向维护者报告了此问题。在几个小时之内,我收到了一个答复,他们已经在修复了,因为特权的chrome-devtools://在我报告的前几天已经被发现。

缓解措施

1.升级到最新的Electron版本,因为Electron使用Chromium和Node.js,影响这些组件的漏洞可能会影响应用程序的安全性。通过将Electron更新到最新版本,你可以确保关键漏洞(例如nodeIntegration绕过)已经被修补,并且不能被利用来滥用你的应用程序。

2.采用安全编码的方式,你的应用程序的第一道防线是你自己的代码。通常的网络漏洞(如XSS)对Electron的安全性影响较大,因此强烈建议采用安全软件进行应用搭建并执行定期的安全测试。

3.了解所使用的的框架,目前流行的浏览器所采用的特定规则以及安全机制并不能适用于Electron(例如同源策略),应采取深度防范机制来缓解这些漏洞。详细信息,请参Electron木安全演示和Electron安全清单的白皮书

4.使用最新的“沙箱”实验功能,即使nodeIntegration被禁用,Electron的当前实现也不能完全缓解加载不可信资源引入的所有风险。因此,建议使用利用Chromium的沙箱功能。沙箱渲染器没有运行Node.js环境(除了预加载脚本之外),渲染器只能通过IPC将任务委派给主进程来对系统进行更改。请注意,目前<webview>标签等还不支持沙箱检测。

源链接

Hacking more

...