0x00 前言
今天在例行审查本机流量的时候发现 Chromium 在启动的时候请求了一个奇怪的域名: www.useragentswitch.com
, 我的第一反应是可能拓展在检查更新或者进行用户量统计, 但仔细一想以前是没这种请求的, 就访问一下这个域名
结果发现这是个空页面, 于是又转到 Chrome 应用商店准备看看评论区怎么说
看到这个 404, 这事就麻烦了, 很可能是拓展包含恶意代码被移除了. 下面对拓展代码进行审查.
0x01 文件提取
对于一个被移除的拓展, 一般我们是不能用各种下载器下载到 crx 的. 不过我们可以简单的从本地数据目录里直接提取.
转到 %localappdata%\Chromium\User Data\Default\Extensions
中寻找我们要提取的拓展 ID clddifkhlkcojbojppdojfeeikdkgiae
, 再往下一级就是拓展的各种文件了
0x02 代码分析
拿到文件后先把各个 JS 丢去格式化一下, 然后逐个审查. 首先我去对比了一下 bootstrap.min.js
和 jquery.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 次, 没人会想被莫名其妙下发一堆恶意代码不是么.