7月13日,360安全卫士检测到一起网站广告位挂马事件,大量网络广告出现集体挂马,广告内容以同城交友等诱惑信息为主,预警为“擒狼”木马攻击。我们通过对整个挂马攻击的分析溯源发现,这个木马主要功能是锁定浏览器的主页并带有远程控制后门,作者通过木马谋取暴利,是一起典型的黑产行为。
该木马通过漏洞执行,安装服务和驱动,通过驱动锁定浏览器主页,服务实现自启动并将自身注入系统进程.连接C&C下载配置和插件,其中一个插件劫持淘宝客的推广ID来实现流量变现,不排除还有其他插件实现静默安装等更多的黑产行为.
在分析过程中我们发现,利用漏洞传播仅仅是该木马的其中一种推广方式,但仅仅是这一种推广方式,在7月13日一天内,360安全卫士就拦截了3万多次攻击.因此,我们有理由相信此木马应该有一个庞大的安装基数和日活量,才能使木马作者维持稳定的盈利,支持其继续开发.
第二章 运行效果
木马执行后,全程静默安装,没有任何提示,重启计算机后,服务和驱动被加载,主页被锁定.
图1
第三章 漏洞利用
此次挂马攻击主要是使用的Kaixin exploit kit(挂马攻击包),是近年来比较活跃的挂马组合攻击包,也是目前已公开发现的国内唯一一个专门提供挂马攻击的服务,该挂马攻击包会混合使用多个Java、Flash和IE漏洞进行挂马,此次攻击使用的较新的漏洞主要是针对Edge 浏览器的CVE-2016-7200/ CVE-2016-7201漏洞,针对Flash的CVE-2016-4117漏洞,针对IE浏览器的CVE-2016-0189漏洞。
黑客通过一些网站的广告位嵌入含漏洞的网页,诱导用户点击.
图2
如果不慎点击这些广告位就可能触发带漏洞攻击的页面,如CVE-2016-0189[1]漏洞:
图3
图4
如果此时受害者是一台没有打补丁的机器,就会触发相应漏洞,开始下载木马并执行:
图5
第四章 技术细节
Dropper
流程图
图6
Dropper程序运行后,在内存中解密恶意代码,动态获得系统API,最后流程转移到注入代码流程。
注入程序在首次启动时将rsrd节中加密的数据解密并存储到注册表中,随后尝试注入svchost程序,释放白名单文件Acset.dat,将acset.dat设置为重启后重命名为sens.dll,替换掉系统的System Event Notification Service服务,将自身写入sens.lang文件,随后联网发送统计信息.
在系统重启后,系统System Event Notification Service服务模块指向白名单插件sens.dll,白名单插件加载被释放的sens.lang启动注入程序,注入程序注入svchost并且hook ZwOpenFile,hook写入的代码中包含有创建线程,当svchost打开文件时候利用创建线程函数启动注入的代码。
此时被注入的svchost释放并安装驱动文件,驱动加载后删除驱动文件,随后将驱动模块指向微软官方的mlang.dll。
最后svchost将workdll注入services同时hook ZwMapViewOfSection,当services调用ZwMapViewOfSection函数时通过CreateThread函数使workdll开始工作。
细节:
首先提升权限,将当前进程权限提升为SeDebugPrivilege,随后作者为了避免程序被分析进行调试器检测。
图7
检测windbg和ollydbg以及pchunter。
图8
检查是否处于调试状态。
图9
判断参数是否正确,从文件rsrd节解密数据,用Zlib库解压数据后获得以下文件。
创建注册表4d36e965-e325-11ce-bfc1-08002be10318目录,添加InstallName、LastDeleteData、LocalizedInfo、LowerLogoData项。
其中LastDeleteData包含锁主页驱动, workdll, 配置文件等.
为了保证开机自启动,通过延时删除替换系统dll,设置dll开机启动,尝试注入svchost程序。
首先遍历进程找到要注入的系统进程,申请空间注入代码。
图10
因为通过远程线程调用启动注入代码容易引起杀毒软件监控,所以恶意程序hook 了ZwOpenfile函数,当svchost打开文件时创建线程启动注入的程序。
图11
注册延时替换文件,将sens.dll文件在系统重启的时候替换为Acset.dat文件,设置注册表 "HKEY_LOCAL_MACHINESystemCurrentControlSetservicesSENSStart" 使sens.dll开机启动。
图12
图13
设置开机启动系统System Event Notification Service服务
图14
为了保证程序成功运行,如果系统进程无法注入,则程序自己创建dllhost进程注入。
图15
随后通过HTTP向http://tj.xinyu88.com/tongji.php?userid=CCC555&mac=${MAC}&osver=${OSVER}&a=${INSSTATE}发送统计信息。
图16
图17
在重启系统之后,sens.dll被替换为Acset.dat文件,典型的运行白名单加载恶意程序方式,Acset调用LoadLibrary加载sens.lang文件,即CCC555.exe本身,随后启动注入程序注入svchost并且hook ZwOpenFile来启动注入代码。
图18
被注入的svchost释放驱动文件,文件名称为dump_{随机服务}.sys,为了躲避查杀,dump_后面的部分使用系统现有服务名,利用msbpdrv_tsp~.inf文件安装驱动。
图19
作者为了避免sys文件被直接发现引起怀疑,加载驱动后将驱动文件替换为微软官方mlang.dll。
图20
Workdll被注入services同时hook ZwMapViewOfSection,当services调用ZwMapViewOfSection函数则通过CreateThread函数使workdll开始工作。
图21
驱动模块
驱动文件带有已经被吊销的数字签名,
图22
获取配置文件,读取注册表指定位置“HKEY_CLASSES_ROOTCLSID{4d36e965-e325-11ce-bfc1-08002be10318}”中的LastDeleteData项获取配置信息
图23
图24
解密得到配置文件
锁主页配置:
图25
后门配置
图26
通过”InstallName”项,获取当前安装的服务和驱动文件的文件名
图27
图28
收集主机中的收藏夹
遍历收藏夹和”Desktop”上的“.lnk .url” 文件, 并提取 链接地址
图29
初始化配置信息
图30
图31
判断延时删除项,检测服务启动项的状态,对服务进行守护
图32
图33
图34
注册文件监听过滤器
图35
图36
文件增删改查时,都会记录到日志上
监控进程创建事件
系统所有的进程创建,均会通知驱动,驱动会根据PID 维护一个进程列表
图37
创建进程事件的回调
判断指定的进程,符合条件则注入DLL
图38
申请内存,注入”WorkDll”, 后续工作交由Ring3完成
图39
Workdll
Dropper启动后从注册表读取保存的workdll文件,把workdll注入到系统进程,workdll加载后将尝试从本地加载缓存的配置文件.没有则从C&C下载新的配置
图40
配置缓存路径为c:windowstemp,文件名为~G{计算机名CRC32取反}.tmp,内容经过加密分段存放.
图41
其中GlobalConfig配置内容为:
图42
加载完配置后进入加载插件流程
图43
和配置一样插件也有本地缓存,文件名为~TP112FA.tmp,内容为zlib压缩的dll文件
插件的Flag对应表:
从表中可以看出该模块具有后门的基本功能,包括删除文件,下载dll和exe,加载到进程等.
对于当前插件Flag为0x91,即 类型为DLL,加载到浏览器,数据为zlib压缩
图44
加载插件模块
图45
然后进入命令循环,每隔60秒连接服务器
图46
连接C&C为 pzds1.thebestsites.in
图47
图48
淘宝客劫持插件
通过workdll下载的插件CED566ED.rar是一个淘宝客PID劫持插件,功能为检测到淘宝购物链接时,向浏览器注入JS脚本,把原来的淘宝客PID替换成配置文件中的PID.来达到盈利的目的.
读取配置中的pid列表
图49
setJsForTaobao函数,设置js中的参数
图50
Js脚本,来自从服务器下载的配置
图51
针对淘宝设置js脚本
图52
针对京东设置js脚本
图53
从代码中可以看到插件还有替换HTML的功能,但是由于配置文件设置的是测试字符串,这项功能并没有触发.
图54
html-replacing配置
图55
第五章 对抗
在样本分析过程中遇到了大部分木马常见的对抗手段,包括反调试、反虚拟机、白利用,驱动隐藏、注册表存储文件等,可见作者在免杀上面花费了不少时间和精力.
l 拼接API函数名称并动态加载
图56
l 通过检测鼠标位置来对抗虚拟机行为分析
图57
l 白利用
利用合法带有数字签名的DLL文件加载木马DLL
图58
l 延时替换文件
利用MoveFileEx函数的MOVEFILE_DELAY_UNTIL_REBOOT模式实现系统重启时替换文件
图59
l 驱动文件隐藏
驱动加载成功后,删除驱动文件,修改注册表,使指向的驱动文件为操作系统的白文件,这样在用户层就找不到加载的驱动文件.
图60
l 常见调试工具进程检测
图61
l 驱动模块中检测是否被调试
图62
l 驱动中检测安全类和其他锁主页的模块
图63
只有未检测到安全类和其他锁主页的模块时,才会触发锁主页和淘宝客劫持的行为.
第六章 溯源
和 “一生锁页”的关系
在分析过程中,我们发现样本和 “一生锁页”相似度极高,经详细对比,确认CCC555.exe就是“一生锁页”的免杀版.
图64
“一生锁页”官方网站普通版说明:
图65
可以看到,普通版也有自动更新和后台管理功能.
免杀版说明:
在官网注册推广账号后,可以看到还有免杀版.
图66
“一生锁页”的官网上作者提到是软件免费,并留有捐赠通道,给人的感觉是单纯凭兴趣开发.
图67
但是当注册账号,登录管理平台后的页面里又说有其他方式盈利,显然前后矛盾.
根据前面的分析,我们推测其所说的其他方式应该是淘宝客劫持.
图68
而来自网友的反馈,确实有人在不知情的情况下中过此木马.
图69
多个线索都证明”一生锁页”带有后门.具有静默安装和电商推广、淘宝PID劫持等行为.
利益链
结合多个数据,我们整理出一个“一生锁页”的利益链:
图70
1.作者制作锁主页普通版木马通过官方主页推广,用户和推广者并不知道有后门,表面上通过锁主页的提成盈利,其实更大部分来自于后门插件的淘宝客窃取.
2.作者制作锁主页免杀版木马,针对有固定用户量的推广者,推广者可能使用下载站捆绑或网站挂马等方式实现推广,这些推广者应该知道软件带有后门,锁主页和后门插件窃取淘宝客的收益由推广者和作者共同分成.
普通版和免杀版对比
Workdll导出函数
图71
Workdll字符串对比
图72
Workdll解密函数
图73
Workdll写注册表函数
图74
驱动文件版本号比较:
图75
驱动字符串比较
图76
普通版和免杀版主要区别
在分析普通版样本过程中,我们发现C&C域名可以直接访问,可以直接看到淘宝客劫持的收益
图77
经过查看js脚本中的连接,直接访问配置,返回下面的数据[hxn1]
图78
其中 邮箱字段就是 一生锁页官网上的QQ邮箱
图79
尝试使用其中的密码登录免杀版的C&C服务器的VNC成功,
获取SVN的账号和密码,下载了2个库
图80
在网站源码中,找到Mysql密码,得到免杀版的账号,日活等信息
php代码中有证据表明有淘宝PID劫持和推广链接ID劫持,免杀等行为.
图81
网站源码中还有制造静默安装包的模块,这个功能是在http://120.24.47.99/服务器完成的
图8 2 图 83
在这个服务器中就有渠道号CCC555的安装程序, 其中包含“后门”字样
图84
配置文件:
图85
和分析的样本中的相同
服务器数据统计
普通版淘宝客盈利统计 newbe.in
图86
数据从2016年5月8日开始
可以看到两个明显的峰值,分别是2016年11月11和2016年12月12,和电商的销售旺季重合.这两天提成分别是88594和101675.
截止到2017年7月26日, 448天内累计点击量1173万,成交量42万,提成 219万元.
免杀版用户数统计
我们对免杀版所有用户数量进行了统计,结果如下:
图87
其中我们分析的样本CCC555.exe,即userid为16的用户数据刚好从7月13日暴增,和我们检测到的数据刚好吻合.
图88
第七章 自检
用户可以通过手动检测查看是否中招:
注册表:
HKEY_CLASSES_ROOT CLSID{4d36e965-e325-11ce-bfc1-08002be10318}
其中 InstallName不固定
图89
HKEY_LOCAL_MACHINESoftwareMicrosoftCOM3下新增了COMVersion项
图90
COMVersion的值为机器ID和时间戳
temp目录:
c:windowstemp目录中:
图91
网络:
每隔1分钟向 120.25.239.40或52.78.96.21的11900端口发送数据包
第八章 总结
经过前面的分析,我们可以看出作者在这个项目上投入了大量的时间和精力,独立实现了应用层、驱动以及管理平台,代码量比较大,应该是全职开发.并且有自己的推广渠道,是一起打着免费锁主页的旗号通过后门来变现的黑产行为.
作者以为没有弹窗,不会影响终端用户的体验就不会被发现,就可以和推广者”达到彼此共赢”,闷声发大财了.天网恢恢疏而不漏,只要有恶意行为,总有被发现的一天.