# 浏览器扩展分析决策树与证据分级 ## 场景决策树(入口 → 分支) ### 1. 包格式判定(第一级) ``` 扩展文件 ├─ "Cr24" 头 → CRX(Chromium 系) │ ├─ 版本号 2 → crx2(旧;Chrome 78 起不再支持安装,分析照常解包) │ └─ 版本号 3 → crx3(当前标准,带 protobuf 头 + proof 签名) ├─ 纯 zip 无 Cr24 → 可能是 xpi(Firefox)或未打包目录压缩包 │ └─ 解包后看 manifest.json 是否存在 └─ 既非 Cr24 也非 zip → 不是标准扩展包,回 [[re-triage]] 重新识别 ``` - 扩展目录(未打包)也可直接分析:manifest.json + 脚本文件与打包后内容一致 - crx2/crx3 头都只是前缀,zip 数据从尾部偏移开始——`unzip` 报 `extra bytes` 警告即正常解包信号 ### 2. manifest 版本分支(第二级) ``` manifest_version ├─ 3(MV3) │ ├─ 后台: background.service_worker(Chrome);Firefox 用 background.scripts │ ├─ 远程代码: 禁止——出现远程拉取 = 审查绕过信号 │ ├─ 站点权限: host_permissions 独立字段 │ └─ 流量修改: declarativeNetRequest(webRequest 阻断仅企业策略例外) ├─ 2(MV2) │ ├─ 后台: background.page 常驻页面 │ ├─ 远程代码: 允许(eval/动态加载)——远程拉取是常见投毒手法 │ ├─ 站点权限: 混在 permissions 里(URL 匹配模式) │ └─ 流量修改: webRequest blocking └─ 缺失/非法 → manifest 损坏或伪造,标注异常 ``` ### 3. 行为定位分支(第三级) ``` 静态读完 manifest + 脚本后 ├─ 有网络外传代码(fetch/XHR/sendBeacon/Image.src) │ └─ 目标地址静态可判定 → [[re-ioc]] 指标提取 │ └─ 目标地址动态生成/远程拉取 → 网络侧抓取([[re-netcap]])→ 沙箱动态 ├─ 有注入能力(content_scripts/scripting.executeScript/动态脚本标签) │ ├─ 注入代码内嵌 → 静态还原([[re-script-deob]]) │ └─ 注入代码远程 → 动态加载抓包还原 ├─ 有敏感数据收集(tabs/storage/cookies/keydown 监听/clipboard) │ ├─ 收集量小且本地上送 → 重点标记外传目标 │ └─ 收集 + 批量上传 → 高可疑 ├─ 有 update_url 自托管更新 → 拉历史版本 diff([[re-variant]])定位投毒点 ├─ 有 nativeMessaging → 查宿主清单文件(manifest 外)与宿主程序 └─ 静态全干净 → 沙箱动态加载,观察网络/存储/权限调用 ``` ### 4. 动态阶段分支 ``` 沙箱加载扩展 ├─ 网络有异常外传 → 抓包 → 还原数据格式 → 指标提取 ├─ 无外传但 storage 有写入 → 查看存储内容,找外传触发条件(交互/定时/特定站点) ├─ 只在特定站点触发 → 用目标站点模拟访问,观察 content script 行为 └─ 全程无行为 → 检查触发条件:用户交互、权限授予弹窗、未匹配 host 权限 ``` ## 证据分级表 | 级别 | 证据形态 | 示例 | 用途 | |---|---|---|---| | A 强 | 动态行为 + 网络侧闭合 | 沙箱内观察到数据外传,抓包与静态代码目标一致 | 可下"恶意"结论 | | B 中 | 静态代码链闭合 | 代码明文收集并上传、manifest 越权声明成立 | 可下"高可疑" | | C 弱 | 静态特征 | 只有高危权限声明、混淆程度高 | 只支持"需深入",不下结论 | | 反证 | 良性解释 | 权限用途与功能相符、无外传代码 | 记录并存档 | - 恶意扩展常"首版干净、更新投毒":单版本结论需标注版本范围(哪个版本起恶意),版本链对比是必要环节 - 结论同时标注浏览器族(Chromium/Firefox)——同一扩展两平台行为可不同(Firefox 无 service_worker、AMO 渠道更新) ## 实现教训(内化) - 先定 MV 版本再定分析框架:MV2/MV3 的权限语义、远程代码合法性、流量修改 API 完全不同,交叉套用必然误判 - 静态定位要区分"数据流向":收集(读 API)→ 汇聚(storage)→ 外传(网络)三段,各段都要有落点 - 远程代码是 MV3 里最强的恶意信号,但 MV2 里是合法能力——同一特征在不同 MV 版本下证据强度不同 - 更新投毒检测靠版本 diff,不是靠单版本分析:保留文件清单/哈希基线,新版本逐文件对比 - 动态验证前先静态读完 manifest 权限——决定沙箱里哪些 API 调用会被权限弹窗拦下,避免误判"无行为" - 证据链记录:文件 sha256、manifest 原文、外传目标、触发条件(哪个上下文/哪个事件) ## 使用注意 - 动态加载与触发在沙箱内进行([[re-sandbox]],[[re-analyze/platform-tips]] 最高原则);扩展与浏览器同权限运行,隔离不当等于执行恶意代码 - 分析结论按本表分级标注;权限审计结论(越权/过度授权)与恶意结论分开陈述