关于Electron框架应用的安全测试

Python微信订餐小程序课程视频

https://blog.csdn.net/m0_56069948/article/details/122285951

Python实战量化交易理财系统

https://blog.csdn.net/m0_56069948/article/details/122285941

Electron框架应用的安全测试

0.Electron相关简介

electron.js是一个运行时框架,它在设计之初就结合了当今最好的Web技术,核心是使用HTML、CSS、JavaScript构建跨平台的桌面应用。
作为一个跨平台的“集成框架”,它能轻松和多平台兼容。而所谓的“集成框架”也就是它将“Chromium”和“Node.js”很好的集成,并明确分工。
Electron负责硬件部分,“Chromium”和“Node.js”负责界面与逻辑,共同构成了成本低廉却高效的解决方案。
比如流行的VS Code,WhatsApp,WordPress等应用都是使用了electron框架来构建跨平台开发
特点如下:
1.摆脱了不同浏览器之间的差异和版本的限制
2.基于Node.js,有活跃的贡献者社区管理和第三方丰富的包支持
3.可以开发跨平台的桌面应用。只需要写一份代码,可以构建出三个平台的应用程序

a.优势

1.摆脱浏览器的沙盒机制,可以访问操作系统层面的东西。
2.跨平台,前端人员能在不学习其他语言的情况下,快速构建跨平台,带来统一的用户体验

b.劣势

1.打包的APP太大,简单的应用多大几十兆

2.引入Node.js的API具备接触系统底层的能力,控制不当易引发安全风险,直接从对浏览器的影响提升为对系统的影响。

1.与传统Web开发的区别与联系

​ 回顾以前的web开发,无论是HTML、CSS还是Java,都是运行在浏览器沙盒中的,无法越过浏览器的权限访问系统本身的资源,代码的能力被限制在了浏览器中。浏览器之所以这么做,为了安全的考虑。设想一下,使用浏览器的时候,会打开各样不同的网站,如果代码有能力访问并操作本地操作系统的资源,那将是可怕的事情。

​ 但开发桌面应用程序,如果无法访问到本地的资源肯定是不行的。

​ 而使用Electron架构的应用程序分成三个基础模块:主进程、渲染进程、进程间通信;

​ Electron将nodejs引入并作为主进程,可以访问和操作本地资源,使用原本在浏览器中不提供的高级API。同时主进程负责管理整个应用程序的生命周期以及所有渲染进程的创建和销毁。 在主进程中运行的脚本通过创建web页面来展示用户界面。它内置了完整的Node.js API,主要用于打开对话框以及创建渲染进程。此外,主进程还负责处理与其他操作系统交互、启动和退出应用程序。

​ 渲染进程是应用程序中的浏览器窗口。与主进程不同,Electron可以有许多渲染进程,且每个进程都是独立的。由于 Electron 使用了 Chromium 来展示 web 页面,所以 Chromium 的多进程架构也被使用到。 每个Electron 中的 web 页面运行在它自己的渲染进程中。正是因为每个渲染进程都是独立的,因此一个崩溃不会影响另外一个,这些要归功于Chromium的多进程架构。

2.对electron解包的一般思路

​ 在Electron项目开发中,resource\目录下的代码文件默认是明文可见的,如果没有对项目封装打包,就可以进行白盒审计,发现更多的问题,而如果只是使用npm执行asar对app.asar文件(resources目录里)合并归档,则会很容易被解包。而对Electron源码保护方案讨论由来已久。官方并没有打算提供解决方案。作者们认为,无论用什么形式去加密打包文件,密钥总归是需要放在包里。

​ 因为asar只是对源码的合并归档,并不提供加密之类的操作。 通过asar e的命令,可以很简单地进行解压和得到源码。

//1.安装npm
//2.全局安装 asar
npm install asar -g
//3.解包
用asar命令解包:asar e app.asar app

3.DOM-Based XSS—>RCE

  1. 由于electron框架开发出的应用,不只是一个浏览器。在Web浏览器中,基于安全策略考虑,web页面通常是在一个沙盒环境中运行的,不被允许去接触原生的资源。

然而在Electron中,允许页面(渲染进程)调用Node.js的API,原生具备操控系统底层的能力,所以页面可以与操作系统底层进行交互,如执行系统命令,那么DOM Based-XSS在electron就会提升为RCE,直接从对浏览器的影响提升为对系统的影响。

Electron是基于Chromium的内容模块实现的,但是从本质上来说它就不是一个浏览器。它可以给开发人员提供非常强大的功能,而且Electron的灵活性也可以有助于构建复杂的桌面应用程序。
所以,实际上Electron整合了Node.js,所以JavaScript可以直接访问操作系统并完全利用原生的桌面机制。

​ 如:假设在使用electron开发的应用中发现某处DOM based XSS,那么直接就可以提升为RCE,如下

//要利用electron的xss,只需要引入nodejs自带的命令执行模块child_process即可
//Electron框架,Dom XSS->RCE,比如弹计算器![](<span)"" onerror="require('child\_process').exec('calc.exe')">
![](1)'child_process').exec('calc.exe')>
![](<span)"1"/onerror=eval(`require("child\_process").exec("calc.exe");`);>
![](<span)# onerror="require('child_process').exec('calc.exe',null);">
![](<span)# onerror="require('electron').shell.openExternal('file:C:/Windows/System32/calc.exe')">

5.漏洞原理

应用开发使用了Electron框架,且nodeIntegration默认值为True,说明开启了Node.js扩展,那就能够调用node.js模块从XSS到RCE, 只要不进行严格的过滤,就会造成rce

<img src=1 onerror="require('child\_process').exec('calc.exe')">

注意:

Electron中使用了一个标记nodeIntegration用来控制页面对node的API的访问,只有nodeIntegration为true的时候,才可以使用如require,process这样的node API去访问系统底层资源。

5.修复方案

1. 使用 DOMPurify 过滤 XSS Payload,或者 React JSX;
2. 谨慎开启nodeIntegration参数,如果开启一定要对用户可控输入点做好充分的过滤,如特殊字符实体编码。可参考:https://www.electronjs.org/docs/latest/tutorial/security#2-do-not-enable-nodejs-integration-for-remote-content 
3.可使用webpack类似的前端构建工具,对项目代码进行加密混淆

​ 为了安全性,官方将 electron@v12.0.0 的 contextIsolation 的默认值改了。所以今后要在渲染进程里调用 require 的话,还需要加上 contextIsolation: false 。

6.总结

防御Electron开发程序的逆向,从目前看方案比较有限,混淆后效果也不佳,和传统的二进制逆向相比,逆向难度不会太大。所以,electron比较适合拥抱开源生态的开发者,不适合个人及企业对保护源代码,保护自身的专利技术及知识产权的应用开发。

  • Electron框架应用的安全测试

  • 0.Electron相关简介

  • a.优势

  • b.劣势

  • 1.与传统Web开发的区别与联系

  • 2.对electron解包的一般思路

  • 3.DOM-Based XSS—>RCE

  • 5.漏洞原理

  • 5.修复方案

  • 6.总结

    __EOF__

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j3G8LHWA-1649783795900)(https://blog.csdn.net/xpro)]广陌道人 - 本文链接: https://blog.csdn.net/xpro/p/16135109.html

  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角**【[推荐](javascript:void(0)😉】**一下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401113.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Exchange 2010 创建设备室邮箱

其实创建设备邮箱和创建会议室邮箱都差不多&#xff0c;只是在新建邮箱的时候&#xff0c;邮箱的类型选择的不一样&#xff1b;1、打开Exchange管理控制台&#xff0c;展开“收件人配置”选择“邮箱”节点&#xff1b;在中间空白的地方右击选择“新建邮箱”&#xff1b;或者在操…

AC日记——3的幂的和 51nod 1013

3的幂的和 思路&#xff1b; 矩阵快速幂&#xff1b; sn-1 3 1 sn * 1  0 1    1 来&#xff0c;上代码&#xff1a; #include <cstdio> #include <cstring> #include <iostream> #include <algorithm>using namespace…

简单的Excel导出(两种方式)

最近项目里面有个周报Excel导出的功能&#xff0c;为了解决这个问题&#xff0c;我显示调研Excel内核的方式实现了&#xff0c;但是被告知该方法有诸多弊端&#xff08;1、服务器需要装相应版本的Excel&#xff1b;2、如果程序中途出错服务器会有很多Excel进程&#xff09;&…

一款开源的文件搜索神器,终于不用记 find 命令了

Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https://blog.csdn.net/m0_56069948/article/details/122285941 这是 HelloGitHub 推出的《讲解开源项目》系列&#xff0c;用一篇文章带你快速上…

C2审核模式(c2 audit mode)

C2审核模式&#xff08;c2 audit mode&#xff09;SQL Server C2 Audit 是为了满足美国国防部针对计算机的安全访问的安全评级要求而引入的。 SQL C2Audit 可以记录shutdown,restart,成功和失败的Login,成功或者失败访问数据库对象&#xff0c;所欲数据定义的执行&#xff0c;数…

project开发的程序设计与逻辑设计

非常多时候我们要做庞大project, 就像一棵大树, 方方面面都有自己的细枝末节&#xff0c;而作为开发员的我们&#xff0c;无法时时刻刻去保持对程序的全面认知&#xff0c;所以我们要把程序设计与逻辑设计区分开来。 那么什么是程序设计和逻辑设计&#xff0c;举个样例来说&…

Java中截取文件名不要后缀

例如&#xff1a;File f new File("d:/d/abc.txt");f.getName()获得的是abc.txt,如果不需要后缀.txt&#xff0c;只要abc可以这样做&#xff1a; String test f.getName().substring(0,f.getName().lastIndexOf("."));转载于:https://www.cnblogs.com/lu…

开发者必读:2022年移动应用趋势洞察白皮书

Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https://blog.csdn.net/m0_56069948/article/details/122285941 华为开发者联盟与艾瑞咨询联合发布《2022年移动应用趋势洞察白皮书》&#xff0c;本…

JS的注意点

JS的跨域访问问题。 http://www.cnblogs.com/rush/archive/2012/05/15/2502264.html JS能操作的范围:HTTP协议的内容。但是不能直接访问response。 JS不能操作哪些内容。比如HTTP的一些内容。但是能操作cookie。 JS可以直接发送Web Service的SOAP请求。 CAUTION: 不仅仅是JS, A…

NYOJ 1009 So Easy[Ⅰ]【简单题】

/* 题目大意&#xff1a;求三角形的外接圆 解题思路&#xff1a;c/sin(C)2R,先求出cos&#xff0c;在求出sin 关键点&#xff1a;直接调用库 解题人&#xff1a;lingnichong 解题时间&#xff1a;2014-10-18 10:19:33 解题体会&#xff1a;简单题 */ So Easy[Ⅰ] 时间限制&…

Java 阶段面试 知识点合集 - 我们到底能走多远系列(15)

我们到底能走多远系列&#xff08;15&#xff09; 扯淡&#xff1a;这些知识点来源是通过面试涉及到的&#xff0c;面的公司不多&#xff0c;知识点涉及也不多&#xff0c;我每次面试后都在备忘录里写下有用的东西&#xff0c;集合起来分享一下&#xff0c;因为是知识点&#x…

对比学习 ——simsiam 代码解析。

Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https://blog.csdn.net/m0_56069948/article/details/122285941 ​ 目录 1 &#xff1a; 事先准备 。 2 &#xff1a; 代码阅读。 2.1: 数据读取…

wiki常用语法

为什么80%的码农都做不了架构师&#xff1f;>>> 说明 输入 效果 作用在任何地方 斜体字 斜体字 斜体字 粗体字 粗体字 粗体字 粗体加斜体 粗体加斜体 粗体加斜体 下划线 &#xff08;推荐替代斜体&#xff09; <u>下划线</…

java===Runtime类

package 常用类.RunTime;import java.io.IOException;/**Runtime:没有构造方法摘要&#xff0c;说明该类不可以创建对象&#xff0c;又发现* 还有非静态方法&#xff0c;说明该类应该提供静态的放回该类对象的方法。而且只有一个&#xff0c;说明Runtime类使用了单例设计* 模式…

.NET 7 预览版2 中的 ASP.NET Core 更新

Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https://blog.csdn.net/m0_56069948/article/details/122285941 .NET 7 预览版2 现已推出&#xff0c;其中包括对ASP.NET Core 的许多重大改进。 以…

【ASP.NET Web API教程】3.3 通过WPF应用程序调用Web API(C#)

注&#xff1a;本文是【ASP.NET Web API系列教程】的一部分&#xff0c;如果您是第一次看本博客文章&#xff0c;请先看前面的内容。 3.3 Calling a Web API From a WPF Application (C#) 3.3 通过WPF应用程序调用Web API(C#) 本文引自&#xff1a;http://www.asp.net/web-api/…

java开发过程中的命名规范

为什么80%的码农都做不了架构师&#xff1f;>>> 最近在读项目的过程中&#xff0c;发现好多同事的代码并不是很规范&#xff0c;有的包名也按照了驼峰的写法&#xff0c;虽说这样不是不行&#xff0c;但个人认为开发过程中应该遵守这些规范&#xff0c;现整理规范如…

git 使用方法自用(勿进)本地开发分支推上线上开发分支

一、//查看状态 1.git status 二、//查看改了哪个文件夹 1.git diff 2.//会出现改了哪个文件夹src/components/partials/Slider.js 三、//查看改了的文件夹里面具体改了啥内容 1.git diff src/components/partials/Slider.js 四、提交所有 1. git add . 五、写备注…

SQLServer 优化SQL语句 in 和not in的替代方案

用IN的SQL性能总是比较低的&#xff0c;从SQL执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别&#xff1a; SQL试图将其转换成多个表的连接&#xff0c;如果转换不成功则先执行IN里面的子查询&#xff0c;再查询外层的表记录&#xff0c;如果转换成功则直接采用多个表的连接…

SVG 和 CSS3 实现一个超酷爱心 Like 按钮

Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https://blog.csdn.net/m0_56069948/article/details/122285941 在现代网页中&#xff0c;我们经常可以在一些文章、视频和图片页面上找到”Like”按…