electron是chromium和nodejs的组合,主要使用了chromium的浏览器功能,并使用nodejs扩展了其文件系统访问、命令执行等功能。
由于使用的是chromium的content模块(渲染库),而不是完整的浏览器,所以同源策略需要electron自行控制;而且其扩展功能更需要仔细过滤及控制
因为electron自身还在高速迭代中,会不断修复很多安全性bug
启用nodeIntegration即开启nodejs扩展功能;electron APP界面一般是BrowserWindow和webview标签,都是用来加载html页面的。
若开启nodeIntegration,在html页面中可以执行命令打开计算器
不建议加载远程不安全的html页面,因为即使禁用了node,默认也是可以访问file域,造成数据泄露
加载可信页面,要注意用户交互产生的XSS,因为结合node的强大功能,xss可以造成命令执行
排查allowRunningInsecureContent属性,排查是否忽略证书错误.on('certificate-error', 和.setCertificateVerifyProc(,及导入证书.importCertificate(
虽然禁用了nodeIntegration,还有一些扩展API是暴露的,比如 window.open返回的BrowserWindowProxy。使用sandbox属性会禁止这些扩展API,但进程间通信受到了限制(具体见开发文档)
BrowserWindow支持sandbox属性,webview暂不支持
preload脚本会无视nodeIntegration和sandbox,排查BrowserWindow的preload 的javascript脚本是否启用contextIsolation(类似chrome插件机制)
比如设置代理功能和开启调试功能,排查appendArgument、appendSwitch、proxy-server、–debug
监听跳转事件.webContents.on('will-navigate',,过滤危险网址。最好使用外部浏览器打开
geolocation,打开弹窗等权限,必须实现.setPermissionRequestHandler(,否则外部网址可以恶意使用。若使用外部浏览器打开链接,则不需要关心
webview的allowpopups可以打开新window,默认是禁止的
setAsDefaultProtocolClient
• registerStandardSchemes
• registerServiceWorkerSchemes
• registerFileProtocol
• registerHttpProtocol
• registerStringProtocol
• registerBufferProtocol
同浏览器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