Electron 应用安全

admin 2024年10月12日10:16:06评论22 views字数 4266阅读14分13秒阅读模式
Electron 应用安全

Electron应用安全
Electronegativity

Electronegativity 是一种工具,用于识别基于 Electron 的应用程序中的错误配置和安全反模式。它利用 AST 和 DOM 解析来查找与安全相关的配置,如“Electron 安全检查表 - 开发人员和审计员指南”白皮书中所述。软件开发人员和安全审计员可以在使用 Electron 开发应用程序时使用此工具来检测和缓解潜在的弱点和实现错误。使用电负性时,仍然需要对 Electron (in) security 有很好的了解,因为该工具检测到的一些潜在问题需要手动调查。如果您对 Electron Security 感兴趣,请查看我们的 BlackHat 2017 研究 Electronegativity - A Study of Electron Security,并关注 Doyensec 的博客。

ElectroNG改进版

如果你需要更强大或更新的东西,基于Electronegativity的改进型SAST工具是Doyensec多年应用研发的结果。2020 年底,我们坐下来制定了项目路线图,并成立了一个开发团队来开发现在的 ElectroNG。您可以在最近的博客文章中阅读更多对 OSS 版本的一些主要改进。

Electron 应用安全

安装

Electron 应用安全

安装直接用npm即可

$ npm install @doyensec/electronegativity -g
基本使用

Electron 应用安全

-h即可查看该命令的一些常规参数

$ electronegativity -h
选择 描述

-V

输出版本号

-i, --输入

input (目录、.js、.html、.asar)
-l, --检查 仅运行以 CSV 格式传递的指定检查
-x, --exclude-检查 跳过以 CSV 格式传递的指定检查列表
-s, --严重性 仅返回具有指定严重性级别或更高级别的调查结果
-c, --置信度 仅返回具有指定置信度或更高置信度的调查结果
-o, --output <filename[.csv 或 .sarif]> 将结果保存到 CSV 或 SARIF 格式的文件中
-r, --relative 显示文件的相对路径
-v, --verbose 显示调查结果的描述,默认为 true
-u, --upgrade 运行 Electron 升级检查,例如 -u 7..8 来检查从 Electron 7 到 8 的升级
-e, --electron-版本 假设设置的 Electron 版本,覆盖检测到的版本,例如 -e 7.0.0 视为使用 Electron 7
-p, --parser-plugins 指定要使用的其他解析器插件,以逗号分隔,例如 -p optionalChaining
-h, --help 输出使用信息

使用电负性在包含 Electron 应用程序的目录中查找问题:

$ electronegativity -i /path/to/electron/app

使用电负性在存档中查找问题并将结果保存在 csv 文件中:asar

$ electronegativity -i /path/to/asar/archive -o result.csv

从 Electron 的一个版本升级到另一个版本时使用电负性来查找重大变化:

$ electronegativity -i /path/to/electron/app -v -u 7..8

注意:如果您遇到致命错误 “JavaScript heap out of memory”,您可以使用node --max-old-space-size=4096 electronegativity -i /path/to/asar/archive -o result.csv

忽略行或文件

Electronegativity 允许您使用注释禁用单个检查。例如,如果您希望特定检查忽略一行代码,则可以按如下方式禁用它:eng-disable

const res = eval(safeVariable); /* eng-disable DANGEROUS_FUNCTIONS_JS_CHECK */
<webview src="https://doyensec.com/" enableblinkfeatures="DangerousFeature"></webview> <!-- eng-disable BLINK_FEATURES_HTML_CHECK -->

任何内联注释 (, , ) 都将禁用对该行的指定检查。也可以使用蛇形大小写 ID () 或构造名称 () 提供多个检查名称:eng-disable// eng-disable/* eng-disable */DANGEROUS_FUNCTIONS_JS_CHECKdangerousFunctionsJSCheck

shell.openExternal(eval(safeVar)); /* eng-disable OPEN_EXTERNAL_JS_CHECK DANGEROUS_FUNCTIONS_JS_CHECK */

如果你在 or 文件顶部的任何代码之前放置一个指令,这将禁用整个文件的通过检查。eng-disable.js.html

关于全局检查和注释的注释eng-disable

在 v1.9.0 之前,无法使用代码注释禁用全局检查。如果您仍在使用旧版本,请使用 CLI 参数手动禁用检查列表(例如 )。请注意,使用注释可能不适用于某些更高级别的检查,例如 或 。对于这些情况,您可能希望使用标志从扫描中排除特定检查。-x-x LimitNavigationJsCheck,PermissionRequestHandlerJsCheck,CSPGlobalCheckCSP_GLOBAL_CHECKAVAILABLE_SECURITY_FIXES_GLOBAL_CHECK-x

CI/CD

Electronegativity Action 可以作为 GitHub CI/CD 管道的一部分运行,以获取“代码扫描警报”:

Electron 应用安全

编程

Electron 应用安全

您还可以使用与 CLI 类似的选项,以编程方式使用电负性electronegativity:

const run = require('@doyensec/electronegativity')// or: import run from '@doyensec/electronegativity';run({  // input (directory, .js, .html, .asar)  input: '/path/to/electron/app',  // save the results to a file in csv or sarif format (optional)  output: '/path/for/output/file',  // true to save output as sarif, false to save as csv (optional)  isSarif: false,  // only run the specified checks (optional)  customScan: ['dangerousfunctionsjscheck', 'remotemodulejscheck'],  // only return findings with the specified level of severity or above (optional)  severitySet: 'high',  // only return findings with the specified level of confidence or above (optional)  confidenceSet: 'certain',  // show relative path for files (optional)  isRelative: false,  // run Electron upgrade checks, eg -u 7..8 to check upgrade from Electron 7 to 8 (optional)  electronUpgrade: '7..8',  // assume the set Electron version, overriding the detected one  electronVersion: '5.0.0',  // use additional parser plugins  parserPlugins: ['optionalChaining']})    .then(result => console.log(result))    .catch(err => console.error(err));

结果包含全局和原子检查的数量、解析时遇到的任何错误以及发现的问题数组,如下所示:

{  globalChecks: 6,  atomicChecks: 36,  errors: [    {      file: 'ts/main/main.ts',      sample: 'shell.openExternal(url);',      location: { line: 328, column: 4 },      id: 'OPEN_EXTERNAL_JS_CHECK',      description: 'Review the use of openExternal',      properties: undefined,      severity: { value: 2, name: 'MEDIUM', format: [Function: format] },      confidence: { value: 0, name: 'TENTATIVE', format: [Function: format] },      manualReview: true,      shortenedURL: 'https://git.io/JeuMC'    },    {      file: 'ts/main/main.ts',      sample: 'const popup = new BrowserWindow(options);',      location: { line: 340, column: 18 },      id: 'CONTEXT_ISOLATION_JS_CHECK',      description: 'Review the use of the contextIsolation option',      properties: undefined,      severity: { value: 3, name: 'HIGH', format: [Function: format] },      confidence: { value: 1, name: 'FIRM', format: [Function: format] },      manualReview: false,      shortenedURL: 'https://git.io/Jeu1p'    }  ]}
END

原文始发于微信公众号(Urkc安全):Electron 应用安全

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月12日10:16:06
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Electron 应用安全https://cn-sec.com/archives/3255538.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息

  • 目录
  • 在线咨询

    13688888888
    QQ在线咨询

    微信

    微信
  • CN-SEC 中文网

    本页二维码