Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

T1176 - 软件扩展

一句话通俗理解

浏览器扩展就像给人配了副“隐形眼镜“——戴上后看到的世界(网页内容、输入的密码、点击的链接)全都能被眼镜背后的人看到,而用户自己毫无察觉。

30秒速查卡

维度你需要知道的
这是什么?攻击者安装恶意浏览器扩展实现持久化和数据窃取
为什么危险?扩展能访问所有网页内容、拦截表单、注入代码,且权限一旦授予长期有效
谁需要关心?终端用户、企业 IT 管理员、浏览器安全团队
你的第一步防御禁用扩展商店外安装,定期审计已安装扩展列表
如果只做一件事启用浏览器扩展安装策略(Chrome Enterprise Policy)禁止未签名扩展

难度等级

⭐⭐ 中级:需要了解浏览器扩展机制和 manifest.json 结构,无需编程基础

前置知识检查

读这个文件前,你需要知道:

  • 浏览器扩展:浏览器的小程序,能修改网页内容、拦截请求、读取标签页
  • manifest.json:扩展的配置文件,声明权限和入口脚本
  • 扩展权限activeTabcookieswebRequest<all_urls> 等权限级别
  • 扩展商店:Chrome Web Store / Firefox Add-ons,扩展可从商店或外部安装

技术描述

场景引入

想象你每天戴着别人送的眼镜上班。这副眼镜特别清楚,你还挺喜欢。但你不知道的是——眼镜里藏了个微型摄像头,你看到的一切(屏幕上的报表、客户名单、登录密码)都被实时传给送礼的人。

这就是恶意浏览器扩展的运作方式。用户安装后,扩展就像“寄生“在浏览器里,每次打开网页它都能读到内容,每次输入密码它都能记录下来——而用户觉得浏览器一切正常。

通俗比喻

扩展能力比喻攻击者怎么用
<all_urls> 权限“能看所有网页”窃取所有网站的登录凭证
cookies 权限“能读饼干盒”偷取会话 cookie 绕过 MFA
webRequest 权限“能拦截快递”修改网页请求、注入恶意脚本
nativeMessaging 权限“能打电话给本机程序”调用本地恶意可执行文件
后台脚本“7×24 值班员”持续运行,即使用户不操作

进阶理解

浏览器扩展是基于 WebExtensions API 的标准化插件,运行在浏览器进程内。其核心配置文件 manifest.json 声明了扩展需要的权限和入口脚本。浏览器一旦加载扩展,就会按 manifest 的声明执行脚本——而扩展权限一旦用户确认授予,就会长期有效,这就是持久化的基础。

攻击者利用扩展持久化的关键手法:

  • 伪装合法扩展:命名“广告拦截““PDF转换“等,诱导用户安装
  • 商店上架恶意扩展:Chrome Web Store 审核不严时上架,获得大量用户
  • 侧载安装:通过恶意软件静默安装扩展到浏览器配置目录
  • 劫持合法扩展:收购已上架的流行扩展,通过更新植入恶意代码

扩展持久化的隐蔽性:

  • 扩展运行在浏览器进程内,不创建独立进程
  • 文件存储在浏览器 profile 目录,管理员很少审计
  • 权限授予后无需再次确认
  • 浏览器重启后扩展自动加载

子技术列表

T1176 有 2 个子技术:

子技术 ID名称简述
T1176.001Browser Extensions恶意浏览器扩展(Chrome/Firefox/Edge)
T1176.002Atlassian Cloud 程序针对 Atlassian 云产品的恶意插件

详写 T1176.001 Browser Extensions:

这是最主流的子技术。攻击者创建包含恶意 content_scriptsbackground.js 的扩展,通过商店上架或侧载安装。content_scripts 注入到用户访问的每个网页,可读取 DOM 内容(包括表单中的密码);background.js 持续运行,可发起网络请求外传数据。

典型恶意 manifest.json:

{
  "manifest_version": 3,
  "name": "Ad Blocker Pro",
  "permissions": ["<all_urls>", "cookies", "webRequest"],
  "background": { "service_worker": "bg.js" },
  "content_scripts": [{ "matches": ["<all_urls>"], "js": ["steal.js"] }]
}

攻击流程

flowchart TD
    A[初始访问/诱导安装] --> B{安装途径}
    B --> C[商店上架恶意扩展]
    B --> D[侧载安装到 profile]
    B --> E[劫持已安装扩展]
    C --> F[用户点击安装]
    D --> F
    E --> F
    F --> G[扩展加载执行]
    G --> H[content_scripts 注入网页]
    G --> I[background.js 持续运行]
    H --> J[窃取表单/凭证/cookie]
    I --> K[外传数据到C2]
    J --> K
    K --> L[浏览器重启后<br/>扩展自动加载]
    L --> M[持久化完成]

真实案例

案例1:DataSpii 恶意 Chrome 扩展大规模数据泄露

  • 时间:2019 年 6-7 月
  • 目标:全球 Chrome 用户(通过 71 个恶意扩展影响数百万人)
  • 攻击组织:DataSpii 运营团伙(数据经纪犯罪)
  • 手法:上架名为 “Hover Zoom”“SpeakIt!” 等看似实用的扩展,获取 <all_urls> 权限后,将用户访问的所有网页 URL 和内容外传到攻击者服务器。部分扩展先以正常功能运营数月积累用户,再通过更新植入恶意代码。泄露数据包含企业内部链接、个人信息
  • 数据来源:KrebsOnSecurity 调查报告 + Cisco Talos 分析(一手厂商报告)

案例2:GalComm 恶意扩展集群

  • 时间:2020 年 5 月
  • 目标:Chrome Web Store 用户
  • 攻击组织:GalComm 扩展运营团伙(疑似印度背景)
  • 手法:在 Chrome Web Store 上架 111 个恶意扩展,伪装成“翻译工具““截图工具“等。累计下载量超 60 万次。扩展窃取浏览器 cookie、凭证,并利用 nativeMessaging 权限调用本地恶意可执行文件,实现浏览器-系统双重持久化
  • 数据来源:Awake Security 报告(一手厂商报告)

案例3:Mimus 恶意扩展劫持 Edge 浏览器

  • 时间:2022-2023 年
  • 目标:中国企业用户(通过钓鱼邮件投放)
  • 攻击组织:Kimsuky(朝鲜背景APT,疑似基于代码中的韩语痕迹及奇安信溯源分析)
  • 手法:通过钓鱼邮件诱导用户安装“Office 文档预览“扩展,扩展获取 cookieswebRequest 权限后,劫持用户登录的企业邮箱和 OA 系统会话。利用 Edge 的 ExtensionInstallForcelist 策略实现企业级强制安装持久化
  • 数据来源:奇安信威胁情报中心报告(一手厂商报告)

红队视角

可持续利用性分析

维度评估说明
隐蔽性扩展运行在浏览器内,无独立进程,管理员难审计
持久性浏览器重启自动加载,用户很少检查扩展列表
可移植性极高Chrome/Firefox/Edge 全平台支持
检测难度manifest.json 可审计,但商店扩展更新难监控

红队可复制性

# Chrome 扩展目录(Windows)
%LOCALAPPDATA%\Google\Chrome\User Data\Default\Extensions\
# macOS
~/Library/Application Support/Google/Chrome/Default/Extensions/

# 侧载安装扩展(需开发者模式)
# 1. 创建扩展目录,放入 manifest.json + 脚本
# 2. chrome://extensions 加载已解压的扩展

# 企业策略强制安装(需管理员权限)
# Windows 注册表
reg add "HKLM\SOFTWARE\Policies\Google\Chrome\ExtensionInstallForcelist" /v 1 /t REG_SZ /d "扩展ID;https://更新URL" /f

蓝队视角

用人话说检测

扩展检测的核心是审计“装了哪些扩展“和“扩展有哪些权限“。正常用户装的扩展屈指可数,且权限可预测——任何新增扩展或权限异常的扩展都值得怀疑。重点关注 <all_urls>cookiesnativeMessaging 这三个高危权限。

Sigma 规则

title: 检测浏览器扩展强制安装策略变更
id: 5c8e3f7a-2b6d-4e9a-8f3c-5d7b4c2a1e8f
status: stable
description: 监控 Chrome/Edge ExtensionInstallForcelist 策略的注册表修改
logsource:
    product: windows
    category: registry_event
detection:
    selection_key:
        TargetObject|contains:
            - 'Policies\Google\Chrome\ExtensionInstallForcelist'
            - 'Policies\Microsoft\Edge\ExtensionInstallForcelist'
    condition: selection_key
falsepositives:
    - 企业 IT 部署合法扩展
level: high

命令行检测

# Chrome 扩展列表(Windows)
Get-ChildItem "$env:LOCALAPPDATA\Google\Chrome\User Data\Default\Extensions" -Directory

# 读取每个扩展的 manifest.json
Get-ChildItem "$env:LOCALAPPDATA\Google\Chrome\User Data\Default\Extensions\*\*\manifest.json" | ForEach-Object { Get-Content $_.FullName | ConvertFrom-Json | Select-Object name, version, permissions }

# 检查企业强制安装策略
reg query "HKLM\SOFTWARE\Policies\Google\Chrome\ExtensionInstallForcelist"

# Firefox 扩展
Get-ChildItem "$env:APPDATA\Mozilla\Firefox\Profiles\*\extensions" -Filter *.xpi

# macOS Chrome 扩展
ls ~/Library/Application\ Support/Google/Chrome/Default/Extensions/

关键审计点

审计项关注点
扩展数量用户机器扩展数异常增多
高危权限<all_urls>cookiesnativeMessagingwebRequest
非商店来源开发者模式加载的未签名扩展
更新行为扩展更新后权限突然增加
网络外连扩展后台脚本连接非 Google CDN 的域名

网络层检测

  • 监控浏览器扩展的后台脚本发起的外连请求
  • 关注非主流域名的 POST 请求(数据外传特征)

避坑指南

说明正确做法
只查商店扩展侧载安装的扩展不在商店列表扫描浏览器 profile 目录的 Extensions 文件夹
忽略扩展更新攻击者通过更新植入恶意代码监控扩展版本变更和权限变化
忽略 nativeMessaging此权限可调用本地可执行文件重点审计 nativeMessaging 权限的扩展
只看 ChromeEdge/Firefox 同样可被利用覆盖所有主流浏览器
忘记企业策略ExtensionInstallForcelist 可强制安装审计注册表策略项

检测建议

主机层

  • 扩展目录扫描:定期枚举浏览器 Extensions 目录
  • manifest.json 审计:解析每个扩展的权限声明
  • 注册表策略监控:监控 ExtensionInstallForcelist 变更
  • EDR:监控浏览器进程的异常子进程创建(nativeMessaging 调用)

应用层

  • 浏览器扩展策略:Chrome Enterprise Policy 强制白名单
  • 扩展商店审计:定期导出企业用户已安装扩展清单

网络层

  • 监控浏览器扩展发起的异常外连
  • 关注 C2 通信的 POST 请求模式

缓解措施

措施实施方式效果
扩展白名单策略Chrome Enterprise Policy ExtensionInstallAllowlist仅允许批准的扩展
禁用开发者模式组策略 DeveloperToolsAvailability=2阻止侧载安装
权限最小化扩展商店审核限制 <all_urls> 滥用降低扩展权限
扩展定期审计每月导出扩展清单对比基线发现异常新增
禁用 nativeMessaging组策略 NativeMessagingUserLevelHosts=false阻止扩展调用本地程序
浏览器隔离用浏览器隔离技术(如 Chrome Browser Cloud Management)扩展无法接触真实系统

动手实验

实验1:观察扩展权限和加载行为

# 1. 打开 Chrome,访问 chrome://extensions
# 2. 开启开发者模式
# 3. 创建测试扩展目录 C:\temp\test_ext

# 4. 创建 manifest.json
cat > C:\temp\test_ext\manifest.json << 'EOF'
{
  "manifest_version": 3,
  "name": "Test Persist",
  "version": "1.0",
  "permissions": ["activeTab"],
  "content_scripts": [{ "matches": ["<all_urls>"], "js": ["content.js"] }]
}
EOF

# 5. 创建 content.js
cat > C:\temp\test_ext\content.js << 'EOF'
console.log("扩展已加载,当前页面:" + window.location.href);
EOF

# 6. 在 chrome://extensions 点击"加载已解压的扩展程序"
# 7. 访问任意网页,按 F12 查看 Console

# 8. 清理:在 chrome://extensions 移除扩展,删除 C:\temp\test_ext

预期输出:每个网页的 Console 输出“扩展已加载,当前页面:…“,证明 content_script 注入成功。

实验2:审计已安装扩展权限

# 导出所有 Chrome 扩展及权限
$extPath = "$env:LOCALAPPDATA\Google\Chrome\User Data\Default\Extensions"
Get-ChildItem $extPath -Directory | ForEach-Object {
    $manifest = Get-ChildItem "$($_.FullName)\*\manifest.json" -ErrorAction SilentlyContinue | Select-Object -First 1
    if ($manifest) {
        $json = Get-Content $manifest.FullName | ConvertFrom-Json
        [PSCustomObject]@{
            Name = $json.name
            Version = $json.version
            Permissions = ($json.permissions -join ", ")
            HostPermissions = ($json.host_permissions -join ", ")
        }
    }
} | Format-Table -AutoSize

预期输出:列出所有已安装扩展的名称、版本、权限,便于发现高危权限扩展。

专用工具

工具用途特点
chrome://extensions浏览器内置查看和管理扩展
ExtAnalysis扩展安全分析解析 manifest、检测恶意行为
CRX InspectorCRX 包分析逆向商店扩展
Chrome Extension Source Viewer商店扩展源码查看在线分析商店扩展代码

术语解释

术语通俗解释
浏览器扩展浏览器的小程序,能修改网页和浏览器行为
manifest.json扩展的配置文件,声明权限和入口脚本
content_scripts注入到网页中执行的脚本
background.js扩展的后台持续运行脚本
<all_urls> 权限可访问所有网页内容的高危权限
nativeMessaging扩展与本地程序通信的能力
侧载安装不通过商店直接安装扩展

参考资料

深入了解

动手试试

真实攻击

  • 🎯 KrebsOnSecurity DataSpii 报告 —— 71 个恶意扩展大规模泄露
  • 🎯 Awake Security GalComm 报告 —— 111 个恶意扩展集群
  • 🎯 奇安信 Mimus 报告 —— Edge 扩展企业强制安装

版本历史

版本日期变更
v3.12026-07-10重写为持久化战术正确内容,修复跨战术污染
v3.02026-06-15初版 v3.0 风格