Quantcast
Channel: CodeSection,代码区,网络安全 - CodeSec
Viewing all articles
Browse latest Browse all 12749

【木马分析】Chrome插件:User–Agent Switcher恶意代码分析报告

0
0
【木马分析】Chrome插件:User–Agent Switcher恶意代码分析报告

2017-09-20 19:52:51

阅读:1533次
点赞(0)
收藏
来源: 安全客





【木马分析】Chrome插件:User–Agent Switcher恶意代码分析报告

作者:360CERT





【木马分析】Chrome插件:User–Agent Switcher恶意代码分析报告

作者:c1tas@360CERT


0x00 背景介绍

2017年9月9日,在v2ex论坛有用户表示Chrome中名为User-Agent Switcher的扩展可能存在未授权侵犯用户隐私的恶意行为。因为用户量大,此事引起了广泛关注,360CERT在第一时间对插件进行了分析,并发布了预警https://cert.360.cn/warning/detail?id=866e27f5a3dd221b506a9bb99e817889


0x01 行为概述

360CERT经过跟踪分析,确认该插件将恶意代码隐写在正常图片中绕过Google Chrome市场的安全检查,并在没有征得用户同意的情况下,主动记录并上传用户的网页浏览地址并通过广告推广获利。


0x02 攻击面影响

影响面

经过360CERT研判后确认,漏洞风险等级高,影响范围广。

影响版本

Version 1.8.26

DNS请求态势

uaswitcher.org


【木马分析】Chrome插件:User–Agent Switcher恶意代码分析报告

通过查看两个User-Agent Switcher的接受数据域名(uaswitcher.org)一个月内的记录,在2017年8月22日高点日活请求达到5万左右,在9月9日事件披露后至今依旧有4万左右的日活请求。

the-extension.com & api.data-monitor.info


【木马分析】Chrome插件:User–Agent Switcher恶意代码分析报告

通过查看两个User-Agent Switcher的payload推送域名和广告推广域名(the-extension.com;api.data-monitor.info)的记录,从2017年8约22日前访问曲线才开始上升,其中对payload推送的域名访问高点大概达到日活1.3万左右,对广告推广获取的域名访问高点大概达到日活1.1万左右,并于9月19日访问曲线开始下降。

注:该数据来自于:360网络安全研究院(http://netlab.360.com/)

修复版本

暂无


0x03 详情

技术细节

首先安装了该插件后,linux会在该目录下得到相应的crx文件解包出来的插件配置以及相关功能js文件目录

/home/r7/.config/google-chrome/Default/Extensions/ffhkkpnppgnfaobgihpdblnhmmbodake
【木马分析】Chrome插件:User–Agent Switcher恶意代码分析报告

该目录的结构如下

1.8.26_0 ├──css │├──bootstrap.min.css │├──options.css │└──popup.css ├──img │├──active.png │├──glyphicons-halflings.png │├──glyphicons-halflings-white.png │├──icon128.png │├──icon16.png │├──icon19.png │├──icon38.png │└──icon48.png ├──js │├──analytics.js │├──background.js │├──bootstrap.min.js │├──content.js │├──jquery.min.js │├──JsonValues.js │├──options.js │└──popup.js ├──manifest.json ├──_metadata │├──computed_hashes.json │└──verified_contents.json ├──options.html ├──popup.html └──promo.jpg 4directories,25files

根据chrome插件编写原则manifest.json这个文件为核心配置文件

canvas图片js代码隐藏

那么现在直接从background.js看起 在background.js的70行处有一行经过js压缩的代码,进行beautify后

可以比较清楚的看到执行了这个promo函数,这里大部分代码的功能都是对promo.jpg这个图片文件的读取处理

0x01


【木马分析】Chrome插件:User–Agent Switcher恶意代码分析报告

先看到e.Vh


【木马分析】Chrome插件:User–Agent Switcher恶意代码分析报告

其中第一部分还原出的值为


【木马分析】Chrome插件:User–Agent Switcher恶意代码分析报告

满足条件的地方是在181787这个值的地方181787//4=45446正好满足还原出的list长度 而值的内容都小于10,所以这就是为什么要放在A分量上,A分量的值255是完全不透明,而这部分值附加在245上.所以对图片的观感完全无影响

第二部分还原出的值为


【木马分析】Chrome插件:User–Agent Switcher恶意代码分析报告

这一部分就稍微复杂一点


【木马分析】Chrome插件:User–Agent Switcher恶意代码分析报告
inVhfor,y:3 inVhfor,y:6 inVhfor,y:9 inVhfor,y:12 inVhfor,y:15 inVhfor,y:18 inVhfor,y:5 inVhfor,y:8 inVhfor,y:11 inVhfor,y:14 inVhfor,y:17 inVhfor,y:4 inVhfor,y:7 inVhfor,y:10 inVhfor,y:13 inVhfor,y:16

可以看到y从0开始.当大于16的时候进行一次处理,而y有恒定的变化顺序3,6,9,12,15,18,5,8,11,14,17,4,7,10,13,16

而触发处理的是在>=16这一条件下,构成(6,5,5)这样一个循环


【木马分析】Chrome插件:User–Agent Switcher恶意代码分析报告

再结合w的变换,只需要再安排好一个合适的数列,就能把大数拆分成(6,5,5)这样一组一组的由0-9组成的数

这就是为什么能以小于10的值将期望的值隐藏在A分量里


【木马分析】Chrome插件:User–Agent Switcher恶意代码分析报告

这就达到了将js代码隐藏于图片的效果,并且对图片本身几乎无任何显示效果以及大小上的影响

而根据js中,document.dafaultView["Function"](n)()这个方式,可以直接执行n中的js代码,所以直接尝试增加document.write(n) 直接输出n的内容至页面
【木马分析】Chrome插件:User–Agent Switcher恶意代码分析报告

【木马分析】Chrome插件:User–Agent Switcher恶意代码分析报告

可以看到这确实是一段js代码

隐藏JS代码执行

可以看到,原本的代码是执行i()函数,而i()函数的内容是setTimeout这一定时执行函数,为了测试 直接提取出其中的执行函数进行执行

这些代码的功能按流程来说如下

1.首先e({'act': func1('0x2d')});进行一个时间戳校验,满足一定时间后,从https://the-extension.com上下载js的payload

2.调用chrome.storage.local.set方法将这段js代码保存至本地缓存

Log/home/r7/.config/google-chrome/Default/LocalExtensionSettings/ffhkkpnppgnfaobgihpdblnhmmbodake/000003.log

这一文件中

3.再通过r()[func1('0x1')](a);调用r()函数后再调用a()函数,执行了第二部保存下来的恶意js代码,进行的用户信息上传

0x01

首先是第一个技术,代码里的英文字符串90%都转换成了16进制的表示形式

例如

var_0x2126=['\x63\x6f\x64\x65','\x76\x65\x72\x73\x69\x6f\x6e','\x65\x72\x72\x6f\x72','\x64\x6f\x77\x6e\x6c\x6f\x61\x64','\x69\x6e\x76\x61\x6c\x69\x64\x4d\x6f\x6e\x65\x74\x69\x7a\x61\x74\x69\x6f\x6e\x43\x6f\x64\x65','\x54\x6a\x50\x7a\x6c\x38\x63\x61\x49\x34\x31','\x4b\x49\x31\x30\x77\x54\x77\x77\x76\x46\x37','\x46\x75\x6e\x63\x74\x69\x6f\x6e','\x72\x75\x6e','\x69\x64\x6c\x65','\x70\x79\x57\x35\x46\x31\x55\x34\x33\x56\x49','\x69\x6e\x69\x74','\x68\x74\x74\x70\x73\x3a\x2f\x2f\x74\x68\x65\x2d\x65\x78\x74\x65\x6e\x73\x69\x6f\x6e\x2e\x63\x6f\x6d','\x6c\x6f\x63\x61\x6c','\x73\x74\x6f\x72\x61\x67\x65','\x65\x76\x61\x6c','\x74\x68\x65\x6e','\x67\x65\x74','\x67\x65\x74\x54\x69\x6d\x65','\x73\x65\x74\x55\x54\x43\x48\x6f\x75\x72\x73','\x75\x72\x6c','\x6f\x72\x69\x67\x69\x6e','\x73\x65\x74','\x47\x45\x54','\x6c\x6f\x61\x64\x69\x6e\x67','\x73\x74\x61\x74\x75\x73','\x72\x65\x6d\x6f\x76\x65\x4c\x69\x73\x74\x65\x6e\x65\x72','\x6f\x6e\x55\x70\x64\x61\x74\x65\x64','\x74\x61\x62\x73','\x63\x61\x6c\x6c\x65\x65','\x61\x64\x64\x4c\x69\x73\x74\x65\x6e\x65\x72','\x6f\x6e\x4d\x65\x73\x73\x61\x67\x65','\x72\x75\x6e\x74\x69\x6d\x65','\x65\x78\x65\x63\x75\x74\x65\x53\x63\x72\x69\x70\x74','\x72\x65\x70\x6c\x61\x63\x65','\x64\x61\x74\x61','\x74\x65\x73\x74','\x69\x6e\x63\x6c\x75\x64\x65\x73','\x68\x74\x74\x70\x3a\x2f\x2f','\x6c\x65\x6e\x67\x74\x68','\x55\x72\x6c\x20\x65\x72\x72\x6f\x72','\x71\x75\x65\x72\x79','\x66\x69\x6c\x74\x65\x72','\x61\x63\x74\x69\x76\x65','\x66\x6c\x6f\x6f\x72','\x72\x61\x6e\x64\x6f\x6d','\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74','\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65','\x70\x61\x72\x73\x65']; 这是一个列表,里面存了很多字符串,因为js有个特性,在形如chrome.storage.local这种调用的时候 完全可以使用chrome["storage"]["local"]这种方式

然后这个列表的顺序其实不准确,还存在一个复原列表的操作


【木马分析】Chrome插件:User–Agent Switcher恶意代码分析报告

【木马分析】Chrome插件:User–Agent Switcher恶意代码分析报告

这个才是复原后的顺序

0x02

针对上面的列表取值,特地用了一个函数


【木马分析】Chrome插件:User–Agent Switcher恶意代码分析报告

该函数作用就是把传入的16进制值转换为10进制,再在这个列表里作index,返回对应字符串


【木马分析】Chrome插件:User–Agent Switcher恶意代码分析报告

可以看到大量采用这种形式的调用

0x03

可以看出代码中拥有大量的Promise对象

并且通过使用大量的箭头函数,是代码可读性并不如顺序执行那种思维出来的那么简单


【木马分析】Chrome插件:User–Agent Switcher恶意代码分析报告

下载恶意payload


【木马分析】Chrome插件:User–Agent Switcher恶意代码分析报告

https://the-extension.com/?hash=jwtmv6kavksy5cazdf4leg66r 为payload地址


【木马分析】Chrome插件:User–Agent Switcher恶意代码分析报告

第二部分恶意代码

用户信息上传

很容易读到


【木马分析】Chrome插件:User–Agent Switcher恶意代码分析报告

这个地方post了数据并且是往https://uaswitcher.org/logic/page/data这个链接

这里可以看到,调用到.request方法的地方


【木马分析】Chrome插件:User–Agent Switcher恶意代码分析报告

【木马分析】Chrome插件:User–Agent Switcher恶意代码分析报告

然后调用了fetchOverlayPattern

可以看到其中的内容就是要传输出去的用户信息


【木马分析】Chrome插件:User–Agent Switcher恶意代码分析报告

广告推广部分

代码部分


【木马分析】Chrome插件:User–Agent Switcher恶意代码分析报告
【木马分析】Chrome插件:User–Agent Switcher恶意代码分析报告

这部分比较简单,就不过多赘述

获取到的推广跳转链接


【木马分析】Chrome插件:User–Agent Switcher恶意代码分析报告

经过多次跳转后的页面


【木马分析】Chrome插件:User–Agent Switcher恶意代码分析报告

补充说明

RGBA

红绿蓝透明 R - 红色 (0-255) G - 绿色 (0-255) B - 蓝色 (0-255) A - alpha 通道 (0-255; 0 是透明的,255 是完全可见的)0

总结

该插件通过隐藏在图片中的恶意js代码向控制者服务器请求新的恶意payload,恶意payload可以在用户不知情被控制者随时修改更新

建议用户尽快卸载该插件,或使用其他插件代替


0x04 利用验证


【木马分析】Chrome插件:User–Agent Switcher恶意代码分析报告

可以看到当前的页面数据已经被获取了


0x05 修复建议

建议用户尽快卸载该插件,或使用其他插件代替


0x06 时间线

2017-09-09 事件披露

2017-09-10 360CERT发布预警通告

2017-09-20 360CERT完成全部细节分析


0x07 参考文档

Promise MDN web docs

https://developer.mozilla.org/zh-CN/docs/Web/javascript/Reference/Global_Objects/Promise

Arrow functions MDN web docs

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/Arrow_functions

Pixel manipulation with canvas MDN web docs

https://developer.mozilla.org/zh-CN/docs/Web/API/Canvas_API/Tutorial/Pixel_manipulation_with_canvas

js中||的作用

https://www.zhihu.com/question/23720136?nr=1

不能说的秘密——前端也能玩的图片隐写术 | AlloyTeam

http://www.alloyteam.com/2016/03/image-steganography/



【木马分析】Chrome插件:User–Agent Switcher恶意代码分析报告
【木马分析】Chrome插件:User–Agent Switcher恶意代码分析报告
本文由 安全客 原创发布,如需转载请注明来源及本文地址。
本文地址:http://bobao.360.cn/learning/detail/4456.html

Viewing all articles
Browse latest Browse all 12749