1. 引言:为什么 Chrome 扩展是攻击者的"黄金入口"
简述扩展在浏览器中的特殊地位:高权限、跨站访问、常驻后台、用户信任度高。点明本文以攻防双视角展开,先讲攻击面,再讲防御与检测。
2. 背景知识:Chrome 扩展的运行机制
2.1 扩展的组成结构
manifest.json、background service worker、content script、popup、options 页面、web_accessible_resources 各自职责。
2.2 权限模型与隔离边界
host_permissions、permissions、optional_permissions、activeTab 的差异;扩展页面与网页之间的隔离世界(isolated world)与主世界(main world)。
2.3 Manifest V2 与 V3 的安全差异
远程代码限制、declarativeNetRequest 替代 blocking webRequest、service worker 生命周期带来的新问题。
3. 攻击面全景图
用一张 Mermaid 图或表格梳理:权限滥用、内容脚本注入、消息通信劫持、存储与配置篡改、更新与分发链路、第三方依赖。
4. 攻防实录一:过度权限与权限提升
4.1 攻击手法
<all_urls> 滥用、宽泛 host 匹配、optional_permissions 诱导授权、通过 activeTab 绕过静态审查。
4.2 真实场景复现思路
描述一个"看似只读网页、实则读取全部标签页 Cookie 与表单"的示例,给出 manifest 片段(HTML 代码块)。
4.3 防御要点
最小权限原则、权限使用审计清单、上线前权限 diff 检查。
5. 攻防实录二:内容脚本与 DOM 注入
5.1 攻击手法
content script 直接拼接 innerHTML 导致 XSS、向主世界注入脚本、postMessage 未校验 origin、web_accessible_resources 暴露内部页面。
5.2 复现与验证
给出存在风险的代码片段与修复后的对比代码(HTML 代码块,注意转义)。
5.3 防御要点
使用 textContent、Trusted Types、严格校验 message 的 origin 与 source、限制 web_accessible_resources 的 matches。
6. 攻防实录三:消息通信与跨上下文信任
6.1 攻击手法
onMessage 未校验 sender、外部网页通过 externally_connectable 调用扩展接口、消息通道被中间页面劫持。
6.2 防御要点
校验 sender.id 与 sender.origin、白名单 externally_connectable、消息协议版本化与参数校验。
7. 攻防实录四:存储、配置与凭据泄露
7.1 攻击手法
chrome.storage 明文保存 token、同步存储跨设备扩散、日志与错误上报泄露敏感信息。
7.2 防御要点
敏感数据加密存储、避免 sync 存储凭据、日志脱敏、限制错误上报字段。
8. 攻防实录五:更新链路与供应链投毒
8.1 攻击手法
开发者账号被盗后推送恶意更新、第三方 SDK 与构建依赖被污染、远程配置下发恶意脚本(V3 下的变种手法)。
8.2 防御要点
账号开启 2FA、发布流程双人复核、依赖锁定与 SBOM、构建产物可复现、灰度发布与回滚机制。
9. 攻防实录六:企业环境下的扩展治理
强制安装策略、扩展白名单、版本钉住、权限变更告警、终端侧扩展清单采集与比对。
10. 检测与响应:如何发现被投毒的扩展
静态特征(manifest 权限突变、可疑域名)、动态行为(异常网络请求、注入脚本)、日志关联分析与应急下架流程。
11. 开发者安全自查清单
- 权限是否最小化,是否存在可替代的 activeTab 方案
- 所有 DOM 写入是否避免 innerHTML 拼接
- 消息通信是否校验 sender 与参数
- 敏感数据是否加密且不进入 sync 存储
- 依赖与构建链路是否锁定并可追溯
- 发布账号是否开启 2FA 与双人复核
12. 总结
归纳攻防核心结论:扩展安全的关键在于权限收敛、上下文信任边界和供应链治理三条主线,并给出后续深入方向。