关于electron

electron是chromium和nodejs的组合,主要使用了chromium的浏览器功能,并使用nodejs扩展了其文件系统访问、命令执行等功能。

由于使用的是chromium的content模块(渲染库),而不是完整的浏览器,所以同源策略需要electron自行控制;而且其扩展功能更需要仔细过滤及控制

 

安全性checklist

一、定时更新electron,包括chromium和nodejs模块

因为electron自身还在高速迭代中,会不断修复很多安全性bug

 

二、禁用nodeIntegration(重要)

启用nodeIntegration即开启nodejs扩展功能;electron APP界面一般是BrowserWindow和webview标签,都是用来加载html页面的。

若开启nodeIntegration,在html页面中可以执行命令<img/src=x οnerrοr="require('child_process').exec('gnome-calculator')">打开计算器

不建议加载远程不安全的html页面,因为即使禁用了node,默认也是可以访问file域,造成数据泄露

加载可信页面,要注意用户交互产生的XSS,因为结合node的强大功能,xss可以造成命令执行

 

三、使用https,并保证证书校验(重要)

 

排查allowRunningInsecureContent属性,排查是否忽略证书错误.on('certificate-error', 和.setCertificateVerifyProc(,及导入证书.importCertificate(

 

四、使用sandbox属性

虽然禁用了nodeIntegration,还有一些扩展API是暴露的,比如 window.open返回的BrowserWindowProxy。使用sandbox属性会禁止这些扩展API,但进程间通信受到了限制(具体见开发文档)

BrowserWindow支持sandbox属性,webview暂不支持

 

五、审查preload脚本,启用contextIsolation属性

preload脚本会无视nodeIntegration和sandbox,排查BrowserWindow的preload 的javascript脚本是否启用contextIsolation(类似chrome插件机制)

六、过滤命令行参数

比如设置代理功能和开启调试功能,排查appendArgument、appendSwitch、proxy-server、–debug

 

七、检测危险网站

监听跳转事件.webContents.on('will-navigate',,过滤危险网址。最好使用外部浏览器打开

 

八、监听权限请求事件

 geolocation,打开弹窗等权限,必须实现.setPermissionRequestHandler(,否则外部网址可以恶意使用。若使用外部浏览器打开链接,则不需要关心

 

九、慎用insertCSS, executeJavaScript、eval、openExternal函数

十、禁止popups

webview的allowpopups可以打开新window,默认是禁止的

 

十一、检测自定协议

 

setAsDefaultProtocolClient
• registerStandardSchemes
• registerServiceWorkerSchemes
• registerFileProtocol
• registerHttpProtocol
• registerStringProtocol
• registerBufferProtocol

 

十二、启用CSP

同浏览器CSP,搜索webRequest.onHeadersReceived实现,或meta标签中

十三、下载并打开可执行文件(重要)

下载可执行文件,建议对其重命令,或只提供打开所在文件夹功能,避免打开文件之后执行命令

 

 

使用工具扫描

源码一般存在app.asar中,安装asar工具解包app.asar文件,然后使用electronegativity扫描源码

调试工具

https://github.com/bytedance/debugtron

抓包测试

如果APP使用net/http模块,不能使用fiddler等抓包,需使用wireshark;如果使用chromium的ajax等,则可以用fiddler抓包

参考

1、工具:https://github.com/doyensec/electronegativity

2、安全建议:https://electronjs.org/docs/tutorial/security#%E6%B8%85%E5%8D%95%EF%BC%9A%E5%AE%89%E5%85%A8%E5%BB%BA%E8%AE%AE