Electron投毒攻击的研究
什么是Electron?
Electron是由Github开发,用HTML,CSS和JavaScript来构建跨平台桌面应用程序的一个开源库。 Electron通过将Chromium和Node.js合并到同一个运行时环境中,并将其打包为Mac,Windows和Linux系统下的应用来实现这一目的。通过Node它提供了通常浏览器所不能提供的能力。一个基础的Electron包含三个文件:package.json(元数据)、main.js(代码)和index.html(图形用户界面)。框架由Electron可执行文件(Windows中为electron.exe、macOS中为electron.app、Linux中为electron)提供。开发者可以自行添加标志、自定义图标、重命名或编辑Electron可执行文件
Electron的优点:
兼容性:虽然你还在用WEB技术进行开发,但是你不用再考虑兼容性问题了,你只需要关心你当前使用Electron的版本对应Chrome的版本,一般情况下它已经足够新来让你使用最新的API和语法了,你还可以手动升级Chrome版本。同样的,你也不用考虑不同浏览器带的样式和代码兼容问题
NodeJS环境:这可能是很多前端开发者曾经梦想过的功能,在WEB界面中使用Node.js提供的强大API,这意味着你在WEB页面直接可以操作文件,调用系统API,甚至操作数据库。当然,除了完整的 Node API,你还可以使用额外的几十万个npm模块
跨域:你可以直接使用Node提供的request模块进行网络请求,这意味着你无需再被跨域所困扰
强大的扩展性:借助node-ffi,为应用程序提供强大的扩展性

现在市面上已经有非常多的应用在使用Electron进行开发了,包括我们熟悉的VS Code客户端、GitHub客户端、Atom客户端等等

参考文章:
https://zhuanlan.zhihu.com/p/69109695
https://zh.wikipedia.org/wiki/Electron#
Electron投毒原理
Electron通常是通过ASAR进行打包以及分发应用程序的。因为ASAR可以将与应用程序相关的所有文件以及目录单独打包成一个独立的文件,也就是.asar文件(通常在resources文件夹下面),所以它最大的优势在与可以在多平台运行。而Electron投毒则是通过对ASAR文件进行解包之后在源代码以及依赖中植入恶意代码,或者调试模式注入代码,从而实现恶意命令执行、植入后门木马等行为,而且Electron通常带有可信的数字签名,所以植入的恶意代码不会破坏签名校验
攻击常用手法
node_modules投毒
通过对Electron应用程序中的node_modules依赖项中植入恶意代码,应用程序运行时会被加载并执行恶意操作,接下来我以typora为例,typora为例是一款非常好用的markdown编辑器


typora安装目录下的resources文件夹有一个node_modules.asar,对它进行解包


然后在raven库中植入恶意代码,因为这个库会在打开typora时会被加载,这里我们通过触发计算器来模拟演示执行恶意代码的效果

保存后通过ASAR再打包回去
asar pack ./node_modules_extract node_modules.asar
当我们重启typora的时候发现执行了恶意代码

入口文件投毒
攻击者可以在应用的入口文件(如main.js等)中注入恶意代码,当应用程序启动时,这些代码会被执行。下面我以程序员常用的代码编辑器vscode来演示,找到vscode的应用配置文件package.json,通过查看main字段,发现入口文件为out目录下面的main

随后我们找到out目录下面的main,并植入恶意代码,保存完同样用ASAR再打包回去,重启vscode可以发现触发了恶意代码


调试模式注入
通过chrome的inspect功能实现在调试模式下注入恶意代码,可以直接参考开源项目:https://github.com/djerryz/electron_shell