Chrome扩展攻击指南(一):基础知识
2024-11-24 12:36:41 Author: blog.xlab.app(查看原文) 阅读量:6 收藏

浏览器扩展有以下特点,认为是不错的攻击目标

  1. 使用量大
  2. 功能和权限非常丰富
  3. 开发者鱼龙混杂
  4. 业界关注度不高

本文尝试从整体组件架构和历史漏洞出发,总结攻击链路,尝试挖掘漏洞并进行攻击利用

原文写于2023.5内部分享,现简单编辑后拆分为3篇发出

Chrome扩展攻击指南(一):基础知识

介绍Chrome扩展的各种组件功能和通信机制,和一些参考资料

Chrome扩展攻击指南(二):漏洞分析

结合漏洞案例,分析各组件的攻击面,最终绘制完整的攻击链路图

Chrome扩展攻击指南(三):全局视角

对商店的全量扩展进行扫描分析,统计风险和漏洞情况

组件介绍

首先大概了解一下Chrome扩展中的几个关键组件

在阅读时可以同步打开一个本地扩展认识一下

macOS默认在 ~/Library/Application Support/Google/Chrome/Default/Extensions
Windows默认在 %localappdata%\Google\Chrome\User Data\Default\Extensions

manifest.json

扩展程序的配置清单,在扩展程序代码的根目录

  1. 名称,描述,版本等
  2. API权限定义,如读写书签/历史/Cookie等Chrome API
  3. 网站权限定义,允许无视同源策略访问哪些网站
  4. 定义Content scripts是哪些js,在哪里何时运行等
  5. 定义Background scripts是哪些js
  6. CSP策略…

Content scripts

manifest.json中的content_scripts定义

在每个标签页中运行,每个扩展一个隔离环境,有独立的JavaScript变量,CSP策略等,同时拥有一部分Chrome API功能,只与网页中的JS使用同一个DOM

一般用来处理与网页DOM相关的功能,或与Background scripts通信交互完成相关功能

同源策略与所在的标签页相同

Inject scripts

由于Content scripts与网页隔离,有些功能又需要访问网页空间中的数据

扩展程序往往会在Content scripts中通过DOM注入script标签执行一些代码,这个脚本被我称之为Inject scripts

1
2
3
let script = document.createElement('script')
script.src = balabala
document.head.appendChild(script)

Inject scripts是一个非常特别的存在,与网页中的其他JS同等地位,也混淆了扩展程序代码和网页代码,也引入了一些攻击面,这部分再漏洞篇细讲

Background scripts

manifest.json中的background定义

可以理解为扩展程序的后台服务,拥有完整的Chrome API功能,但不能直接访问DOM

一般用于持续运行的功能,或依赖相关Chrome API的功能

在一定的权限设定下,无同源策略限制

在Manifest V2中是一个HTML,叫background.html,如果是JS的话会自动生成一个HTML

在Manifest V3中是一个JS,叫Service Worker

还有一些页面与Background地位相同,但位置不同,而且只在打开相关页面的时候才会运行,不会一直运行

manifest.jsonbrowser_action中定义

是点击扩展图标后弹出的页面,权限与Background组件相同

Options

manifest.jsonoptions_page定义

为扩展的选项页,权限与Background组件相同

通信架构

Webpage是指网页Javascript的空间,与Content共享DOM,其中window比较特殊,虽然是共用一个window,但有变量隔离,具体细节后面在讲

由于共用windowWebpageContent可以使用window.postMessage进行通信

为了简化架构图,Background包含了background.htmlService WorkerPopupOptions等组件,因为他们的权限和地位都相同

ContentBackgroud之间则使用Chrome API用于传递数据

不过需要注意的是,当Content调用chrome.runtime.sendMessage时其实在向所有Background页面中广播

同理,Background页面之间使用chrome.runtime.sendMessage发送消息时也相当于在广播

另外Chrome API中有提供了获取相关Background页面window的函数,获取window之后就可以使用window.postMessage进行通信

参考

LoRexxar入门系列

从 0 开始入门 Chrome Ext 安全(一) – 了解一个 Chrome Ext

从 0 开始入门 Chrome Ext 安全(二) – 安全的 Chrome Ext

从 0 开始入门 Chrome Ext 安全(三) – 你所未知的角落 - Chrome Ext 安全

Wladimir Palant入门系列

Anatomy of a basic extension

Impact of extension privileges)

Attack surface of extension pages)

When extension pages are web-accessible

文档

Extensions - Chrome Developers

Paper

DEF CON 29 - Barak Sternberg - Extension Land: Exploits and Rootkits in Your Browser Extensions


文章来源: https://blog.xlab.app/p/4db211d1/
如有侵权请联系:admin#unsafe.sh