Berd's Playground (Deprecated)

Won't receive any further updates.

10/27
18:10
技术

Chrome 恶意拓展 User-Agent Switcher 分析笔记

0x00 前言

今天在例行审查本机流量的时候发现 Chromium 在启动的时候请求了一个奇怪的域名: www.useragentswitch.com, 我的第一反应是可能拓展在检查更新或者进行用户量统计, 但仔细一想以前是没这种请求的, 就访问一下这个域名

结果发现这是个空页面, 于是又转到 Chrome 应用商店准备看看评论区怎么说

看到这个 404, 这事就麻烦了, 很可能是拓展包含恶意代码被移除了. 下面对拓展代码进行审查.

0x01 文件提取

对于一个被移除的拓展, 一般我们是不能用各种下载器下载到 crx 的. 不过我们可以简单的从本地数据目录里直接提取.

转到 %localappdata%\Chromium\User Data\Default\Extensions 中寻找我们要提取的拓展 ID clddifkhlkcojbojppdojfeeikdkgiae, 再往下一级就是拓展的各种文件了

0x02 代码分析

拿到文件后先把各个 JS 丢去格式化一下, 然后逐个审查. 首先我去对比了一下 bootstrap.min.jsjquery.min.js, 看起来里面是没有藏恶意代码的. 接下来就看看 Background Script 在干什么吧.

我知道因为代码不多, 把所有文件分析一遍也是不难的, 但顺着 Manifest 往下找应该是最简便的方法, 拿这个点抬杠大可不必.

从 Manifest 里可以看到 Background 注册了一个页面 background.html

这个 HTML 非常简单, 只加载了两个 JS 文件, 看起来一切正常.

然而, 当我打开 JsonValue.min.js 这个看起来应该是存数据的文件时, 在底部发现了很大一堆明显不应该出现的代码:

一开始我还以为这就是恶意代码, 不过仔细一看这应该是 Socket.IO 的客户端. 好好的一个 UA 切换拓展用 WebSocket 干什么¿

因为代码量挺多, 暂时把这个文件放一放, 让我们转到 background.min.js 研究一下

这个文件前几段看起来挺正常的, 直接搜索之前发现的奇怪域名转到末尾, 发现插件会尝试连接这个域名上的 WebSocket, 并在首次收到数据的时候更新一个全局对象 handlerData

再往下看, 可以看到在原来插件的正常逻辑 handler 后加了一段恶意代码 handler2, 其作用是根据服务器下发的规则对数据进行匹配, 如果匹配成功就向服务器上传 整个 Event 对象

这个 Event 对象里有什么呢? 从 拓展文档 里不难看出, 除了请求 Method 和 URL 以外还有 所有请求头.

阅读这篇文章的各位应该都了解所有请求头传过去是什么概念吧 不管是 HTTP Only Cookies 还是走请求头发的各种 Token, 全部可以被攻击者窃取.

0x03 碎碎念

我也不知道这个拓展偷了我几天数据了, 想想还是非常让人头大的. 人已经出事了, 谢谢大家.jpg

Google 的 Chrome Web AppStore 安全审查是真的离谱. 我自认为平时自己的设备安全做的已经很好了, 结果没想到会死在一个 Chrome 拓展上.

这些拓展全部是自动更新的, 而且不会提示用户. 之前因为我信任 Google 的安全审查也没太在意, 但事实证明, 非常离谱.

可能后面我得把所有拓展都提取出来, 全部审计一遍然后卸掉只用开发版本吧. 这种事情能有第一次就能有后面 N 次, 没人会想被莫名其妙下发一堆恶意代码不是么.

Chrome 恶意拓展 User-Agent Switcher 分析笔记