文章总结: 本文介绍了COINDEF,一种部署在V8JavaScript解释器内部的防御机制,通过强制执行带有执行上下文的AST结构完整性,全面防御Electron应用中的代码注入攻击。该系统采用混合分析技术收集AST结构特征,建立预期行为基线,在代码解释执行时强制实施这些特征规范。评估显示COINDEF能有效阻止漏洞利用,仅导致约3.96%的启动开销和可忽略的用户交互开销,为Electron应用提供了全面的安全防护。 综合评分: 86 文章分类: 漏洞分析,安全建设,应用安全,WEB安全,解决方案
论文速读 | S&P2025 | COINDEF:基于AST抽象语法树和V8引擎的Electron代码注入防御系统
原创
Real返璞归真
Real返璞归真
2025年12月14日 20:26 山东
前言
欢迎关注公众号【Real返璞归真】,我们将不定期分享CTF、二进制安全、安卓逆向等领域的前沿知识与技术内容。
image-20251206150705564
📥 资料获取:公众号后台回复【CoinDef】,一键打包下载论文(含双语对照翻译)+ PPT。
image-20251208111531409
一句话速览
本文提出了COINDEF,一种部署在JavaScript解释器(V8)内部的集中式防御机制,通过强制执行带有执行上下文的AST结构完整性,以低开销全面防御Electron应用中的代码注入及随后的远程代码执行攻击。
image-20251208104654504
image-20251208104659616
论文信息
标题
- COINDEF: A Comprehensive Code Injection Defense for the Electron Framework
- COINDEF:Electron框架的全面代码注入防御
发表会议
2025 IEEE Symposium on Security and Privacy (SP)
作者信息
- Zheng Yang(Georgia Institute of Technology)
- Simon P. Chung(Georgia Institute of Technology)
- Jizhou Chen(Georgia Institute of Technology)
- Runze Zhang(Georgia Institute of Technology)
- Brendan Saltaformaggio(Georgia Institute of Technology)
- Wenke Lee(Georgia Institute of Technology)
代码
代码:https://github.com/ian7yang/CoInDef(暂未更新)
关键词
- Electron框架(Electron Framework)
- 代码注入(Code Injection)
- 抽象语法树(Abstract Syntax Tree/AST)
- 运行时防护(Runtime Defense)
- V8引擎(V8 Engine)
摘要
The increasing popularity of cross-platform frameworks like Electron underscores the appeal of using familiar web technologies for desktop application development. Electron fuses the web and native environments into one single executable. However, this fusion creates unique vulnerabilities and significantly expands the attack surfaces for Electron applications, rendering traditional web defenses ineffective, as they are not designed to operate across both web and native contexts simultaneously. To address these challenges, we propose Coindef, a centralized defense mechanism that enforces the structural integrity of Abstract Syntax Trees (ASTs) with execution context. Coindef operates within the JavaScript engine, providing rapid, tamper-proof, and comprehensive mitigation against code injection attacks to Electron applications. Coindef employs hybrid profiling to collect AST structural profiles, establishing a baseline of expected behavior. Then, Coindef enforces these profiles for code as it is interpreted at runtime. In an evaluation of COINDEF on 20 representative real-world applications, we demonstrate its effectiveness in blocking exploits, incurring a 3.96% runtime overhead during application startup and negligible overhead during user interaction. Comparing Coindef to state-of-the-art defenses for Electron applications, we show that Coindef offers comprehensive protection against sophisticated code injection attacks through DOM manipulations and dynamic code execution.
随着 Electron 等跨平台框架⽇益流⾏,利⽤熟悉的 Web 技术开发桌⾯应⽤程序的吸引⼒愈发凸显。Electron 将 Web 环境与原⽣环境融合为单⼀可执⾏程序。然⽽这种融合带来了独特的安全漏洞,显著扩⼤了 Electron 应⽤的攻击⾯,使得传统 Web 防御机制失效——因为这些机制并⾮为同时跨 Web 和原⽣环境运作⽽设计。为应对这些挑战,我们提出 Coindef,这是⼀种通过执⾏上下⽂强化抽象语法树(AST)结构完整性的集中式防御机制。Coindef 运⾏于 JavaScript 引擎内部,为 Electron 应⽤提供快速、防篡改且全⾯的代码注⼊攻击防护。该⽅案采⽤混合分析技术收集 AST 结构特征,建⽴预期⾏为基线,随后在代码解释执⾏时强制实施这些特征规范。 在对 20 个典型实际应⽤的 COINDEF 评估中,我们证明其能有效阻⽌漏洞利⽤,仅导致应⽤程序启动时产⽣ 的运⾏开销,⽤⼾交互期间的开销可忽略不计。相较于Electron 应⽤的最先进防御⽅案,Coindef 能通过 DOM 操作和动态代码执⾏提供针对复杂代码注⼊攻击的全⾯防护。
研究动机与技术挑战
研究动机
Electron框架通过融合Web和原生环境使得开发跨平台桌面应用变得流行,但这引入了独特的攻击面。Web漏洞(如XSS)可能穿透沙盒,导致底层机器的远程代码执行(RCE)。现有的防御方案通常只针对Web或原生单一环境,无法有效应对Electron这种双重环境融合带来的复杂攻击 。
技术挑战
- 全面防护(Comprehensive Protection): 需要覆盖所有潜在的代码注入场景(如XSS、原型污染、客户端重定向等),包括第一方代码和第三方库,同时平衡安全性与可用性 。
- 极低开销(Negligible Runtime Overhead): 防御机制必须对运行时性能影响微乎其微,以免用户因卡顿而禁用防御 。
- 防篡改(Tamper-Proofing): 防御系统必须部署在攻击者无法触及的高权限层级(如解释器层),以防止被恶意代码绕过或修改 。
核心贡献与方法
贡献
开发了COINDEF,这是第一个针对Electron框架代码注入问题的全面防御系统。它在20个真实世界的Electron应用(包括Slack, Discord, VSCode等)中进行了评估,成功拦截了所有利用漏洞的攻击,且仅产生约3.96%的启动开销和可忽略的用户交互开销 。
方法
- 基于AST的结构签名(AST Structural Signature): 提出利用AST结构(节点类型、值、位置)作为代码的指纹。对于动态输入,采用占位符替换具体值,从而在允许合法数据变化的同时阻止恶意逻辑结构的注入 。
- 混合画像技术(Hybrid Profiling): 结合静态分析(确保代码覆盖的完整性)和动态分析(获取运行时上下文和动态生成的代码),构建应用程序的预期AST行为基线 。
- 解释器内联强制执行(In-Interpreter Enforcement): 将防御机制直接植入V8 JavaScript解释器中。作为所有代码(无论是Web端还是NodeJS端)执行的必经关卡,COINDEF在运行时将即将执行的代码AST与学习到的基线进行比对,若不匹配则拒绝执行 。
PPT论文分享
PPT内容分享+文字转录(部分修订版)。
前言
image-20251208105203418
❝
这篇论文的作者开发了一个名为CoinDef的防御系统。它是基于V8引擎和AST抽象语法树,针对Electron框架中命令注入的防御。
image-20251208105228359
❝
主要分为三个内容来讲:
- Electron框架是个什么东西以及框架中漏洞的成因。
- 作者如何针对这种漏洞,在传统安全防御机制的基础上,做一个创新设计出了CoinDef防御系统。
- 评价该系统。
Electron框架危机
image-20251208105258544
❝
第一部分:Electron框架
image-20251208105315553
❝
Electron是目前比较流行的桌面端软件开发框架(Windows、Linux和Mac平台),新版本QQ和VsCode都是基于Electron开发的。
相比于原生的桌面端软件开发,Electron融合了Web技术,可以把 Electron 应用想象成两个部分的结合。
如右图所示,它包括:
- 主进程(Main Process):它是一个 Node.js 运行环境。它负责创建应用窗口、调用系统原生API与操作系统交互(比如访问文件系统、显示原生菜单、通知等)。
- 渲染进程(Renderer Process):它是一个完整的 Chromium 浏览器内核。通过Blink引擎渲染和运行你的网页界面(HTML, CSS, JS)。
它们之间通过特定的 IPC(Inter-Process Communication,进程间通信)机制来传递消息和数据。
渲染进程又包括BrowserWindows和SubFrames:
- BrowserWindows存放软件本身的UI界面,可以通过IPC与MainProcess通信,进而调用系统API函数。
- 用户在框架中访问的其它网站会以SubFrames的形式打开,为了防止网站的一些危险操作,它们通过CSP内容安全策略限制了IPC通信和系统API的调用。相当于被放入浏览器沙箱。
Electron应用融合Web技术与原生系统API访问,带来新的攻击面,传统的纯NodeJS和浏览器安全机制不再有效,无法防御跨Web与原生环境的代码注入攻击。
右下角这张图就是在Electron框架中攻击者的攻击路径:
- 远程的攻击者会给你发一个受信任的地址:因为这个地址是受信任的,它可以通过 CSP 内容安全策略的检查。
- 受害者打开这个地址:如果发过来的网站它存在 XSS 漏洞。当然,这里也不一定非得是 XSS 漏洞,它可以是任何漏洞。这里的客户端会被 XSS 漏洞进行一个沙箱逃逸利用,回到上面这张图片的。它会获取了你的 dom 操作权限,以及你的V8引擎代码执行权限,这个时候它就可以通过IPC通信去调用系统的一些远程敏感API,进行一些危险的操作。
2022年Water Labbu攻击Meiqia应用事件:Meiqia是一个桌面端聊天软件,当时存在一个One-Click RCE漏洞,攻击者只需伪造恶意连接,用户点击一次后,攻击者就可以远控用户的机器。造成加密货币被盗和重大经济损失,凸显其现实威胁。
image-20251208105336915
❝
这里举了一个例子,讲解一下命令注入漏洞具体是一个什么东西?
它其实就是通过构造一些危险的输入,让你的程序按照你非预期的方式去执行一些危险的命令。
比如说这段PHP代码,它实现了一个非常简单的功能:用户输入主机地址,然后这个服务端他会调用命令去ping你主机的地址。这个时候如果我们伪造一下输入,在主机地址后面加一个分号,后面再跟一些危险的命令,这个时候。服务端就可以进行命令执行,执行非预期的操作。
image-20251208105352875
❝
再讲一下传统的 NodeJS 漏洞。比如说这个例子是 NodeJS 中一个原型链污染的漏洞,它提供了两个接口:merge和admin。
正常用户是访问不了 admin 接口的,它会检查对象中的 isAdmin 属性,只有属性为 true 的时候,才能去访问这个 admin 页面。
在JavaScirpt语言中,类似于其它语言的继承机制一样,它的对象中会有__proto__,即对象原型。如果用户修改原型的属性isAdmin为true后,无论之后创建什么对象,这个属性它都是存在的,这样的就实现了一个越权的访问。
想要修复这种漏洞非常简单。只需要在属性赋值的时候做一些过滤,就能修复这种漏洞。
image-20251208105413454
❝
然后再讲一下传统的Web漏洞。
例如,这个XSS漏洞,它这里面最危险的这一步操作就是读取用户的参数,然后使用document.write()把参数写到页面中,然后这个页面就会渲染用户的输入,造成 XSS 漏洞。
修复这种漏洞也非常简单,可以对用户的输入做一些过滤,或者干脆就不渲染用户的输入。
这两种都是对传统的漏洞的防御方式,这种漏洞的防御方式在 Electron 框架中是极其低效的。因为 Electron 框架发生漏洞的本质原因是两个进程之间进行 IPC 通信引发的。
image-20251208105445403
❝
比如说这个Electron配置错误导致的漏洞,它里面存在XSS的漏洞(也可以是其它漏洞)。
如果攻击者控制了用户的render process进程。它可以通过 IPC 机制去控制 main process,然后去通过 main process 去调用一些危险的 API 函数。
image-20251208105508399
❝
现有的一些方案:
- SYNNODE:监控软件的系统调用和模块加载。相当于给你的软件开了一个沙箱,它不能去防御像 XSS 这种 DOM 攻击。
- DOMTYPING:主要是去防御 XSS 攻击的。但它不能去防御一些 NodeJS 中的命令注入。、
- XGUARD:也是去过滤一些 XSS 注入。
CoinDef架构设计
image-20251208105535459
❝
为了解决 Electron 框架中的漏洞,作者设计了CoinDef防御系统。
image-20251208105607771
❝
它的创新点就是摒弃了传统的基于内容的安全,提出一种基于结构的安全监控。
具体的实现原理:修改 V8 引擎,V8引擎是解释 JavaScript 的代码的解释器。
他通过修改 V8 引擎中的代码。在 JS 进行解析或者 JIT 编译或者优化的环节。把 AST 抽象语法树给保存下来。在实际运行的过程中会检测程序实际执行的流程是不是和你预期的 AST 结构一致。
image-20251208105634905
❝
主要分为两个阶段:
第一阶段:学习阶段。去通过静态分析的方法,拿到 AST 抽象语法树。静态分析的话,它肯定会存在一些弊端,比如说,你在动态执行这个程序的时候,它可能会动态的加载一些代码或者模块,这个时候你静态 AST 分析就分析不到了。
第二阶段:执行阶段。遇到和静态分析中的 AST 不相符的时候,它会通过形式化验证的方法,暂且把它当成黑盒。它会通过形式化验证的方法去比较 AST 中是不是已经有了这一段代码。
如果符合 AST 执行的预期:说明执行是安全的,会直接通行。
如果不符合 AST 执行的预期:这个时候就有两种可能的情况发生,第一种情况,他认为你这个代码是比较安全的,把你更新到AST中,另一种就是他认为你这个代码是危险的,这个时候就会拦截你操作。这个地方可能会产生一些误报。
image-20251208105652065
❝
系统有三个优点:
- 最小修改:它在 V8引擎 中只需要少于150行代码的修改,就可以开发出CoinDef防御系统。
- 关键钩子:提升 AST 分析效率的一个东西。JavaScript的代码在被解析的时候,Electron 框架会调用它的函数去解析AST抽象语法树。作者通过修改 AST,在解析完的代码的时候,把解析的结果拿过来使用,这样的话。它就不需要去单独的解析这个代码。顺带着就把 AST 给生成了。
- 形式化验证:确保运行时的状态和你预期的AST是一致的。
评估与结果
image-20251208105713140
❝
第三部分就是评估一下它这个系统。
image-20251208105730930
image-20251208105757525
image-20251208105807075
image-20251208105834260
查看原文:《论文速读 | S&P2025 | COINDEF:基于AST抽象语法树和V8引擎的Electron代码注入防御系统》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论