Xshell高级后门完整分析报告(ZT)
1. 前言
近日,Xshell官方发布公告称其软件中存在后门。我们的实习生同学对该后门进行了详细的分析,确认这是一个具备恶意代码下载执行和数据回传等能力的高级木马。

后门代码存在于nssock2.dll中,采用了多层加密shellcode、花指令、线程注入等各种方式逃避杀软查杀和对抗人工分析。总体流程如下

2. 详细过程分析
2.1 第一层功能分析
通过BinDiff跟最新版的nssock2.dll比较可以很容易的发现一个解密shellcode的函数

去掉花指令分析,进入到shellcode后主要功能是先查询HKCU\SOFTWARE\%d或HKLM\SOFTWARE\%d下的Data值是否存在,%d是把硬盘的序列号异或0xD592FC92

如果Data值存在就用其中的key解密第二层的shellcode并执行,反之就会发送DNS请求获取配置信息存储到Data键再解密第二层的shellcode并执行

获取配置信息时首先通过根据当前年月的DGA(域名生成算法)生成一个域名,其算法如下

然后会根据GUID、主机名和用户名等信息生成一个前缀进行加密与之前生成的域名拼接后发送DNS请求并获取配置信息

加密主要分两步,第一步如下

第二步如下

DNS服务器为8.8.8.8、8.8.4.4、4.2.2.1、4.2.2.2和当前主机的DNS服务器,接收到key后解密第二层shellcode的代码如下

这里非常有意思,算法跟从dll进入第一层shellcode时的解密算法一致,想到CTF的套路尝试设为相同的key,key1为0xC9BED351,key2为0xA85DA1C9,然后就成功解密出了第二层shellcode。
2.2 第二层功能分析
根据卡巴斯基的报告,第二层shellcode为Root插件,入口函数很像DllMain

主要功能是先设置异常处理函数,并会把异常记录到%ALLUSERSPROFILE%\error.log,然后初始化函数指针表(会在其他插件中被调用),并加载5个插件

动态调试步入load_plugin函数就能把5个插件的shellcode dump出来,加载完5个插件后会调用ID为103的插件(Install)的第二个函数

2.3 插件功能分析
2.3.1 Install插件(103)
主要功能是先修改当前进程权限,再调用ID为102的插件(Config)的第二个函数

另外还会用winlogon.exe进程的权限创建svchost.exe进程进行线程注入,调试线程注入的shellcode可以先在VirtualAllocEx后下断获取到相应进程中的虚拟地址,然后在ResumeThread时下断,中断后附加相应进程并在之前获取的虚拟地址处下断,执行ResumeThread后会在之前的虚拟地址处中断,之后就可以继续调试了,初步分析注入的shellcode就是Root插件

根据磁盘序列号创建互斥体:Global\% 16-48 random latin characters%

2.3.2 Plugins插件(101)
主要功能是监听根据磁盘序列号生成的注册表项HKLM或HKCU\SOFTWARE\Microsoft\%5-12 random characters%

监听到有值改变后会解密并校验是否是合法的插件并加载和初始化

2.3.3 Config插件(102)
此插件主要是跟配置信息的读写相关,其路径根据磁盘序列号生成,本机是C:\ProgramData\MQGOMQQ\TOYMWGMQ\UMGSAIE\DIWEYK,在每次初始化插件时都会被重写

默认的C&C地址是dns://www.notped.com
2.3.4 Online插件(104)
此插件主要是跟C&C服务器通信并把命令分发到相应的插件执行,首先根据协议类型选择发送请求的插件

如果是URL就会向根据年月的DGA生成的域名发送HTTP请求来得到真正的C&C服务器地址

另外此插件也会收集更详细的主机信息,依次调用GetSystemTime、gethostbyname、GlobalMemroryStatusEx、GetNativeSystemInfo、GetDiskFreeSpaceExA、EnumDisplaySettingsW、GetSystemDefaultLCID、QueryPerformanceFrequency、QueryPerformanceCounter、GetCurrentProcessId、RtlGetVersion、GetSystemMetrics、GetNetworkParams和GetAccountSid
2.3.5 DNS插件(203)
此插件主要是用于基于DNS协议的C&C通信

3. 总结
此后门用了多种手段来增加分析难度,是一个基于插件的完善的攻击平台,请尽快升级到最新版本。以上分析如有谬误之处,欢迎斧正。
4. 附录
4.1 shellcode字符串解密脚本
from idaapi import *from ctypes import *addr = 0x274DFC8seed = c_uint(Byte(addr) | (Byte(addr + 1) << 8))result = [None] * 4096for i in range(4090):result[i] = chr((seed.value & 0xff) ^ Byte(addr + 2 + i))seed = c_uint(c_uint(c_uint(0x41120000 * seed.value).value - c_uint(0x434CBEEE * (seed.value >> 16)).value).value - 0x2F878E0F)end = result.index('\x00')print ''.join(result[:end])
4.2 IOC相关域名
| 域名 | 日期 |
|---|---|
| ribotqtonut.com | 2017年7月 |
| nylalobghyhirgh.com | 2017年8月 |
| jkvmdmjyfcvkf.com | 2017年9月 |
| bafyvoruzgjitwr.com | 2017年10月 |
| xmponmzmxkxkh.com | 2017年11月 |
| notped.com | 默认C&C域名 |
5. 参考
- https://www.netsarang.com/news/security_exploit_in_july_18_2017_build.html
- https://cdn.securelist.com/files/2017/08/ShadowPad_technical_description_PDF.pdf
Xshell高级后门完整分析报告(ZT)的更多相关文章
- Xshell高级后门完整分析报告
Xshell高级后门完整分析报告 from:https://security.tencent.com/index.php/blog/msg/120 1. 前言 近日,Xshell官方发布公告称其软件中 ...
- chrome调试工具高级不完整使用指南(优化篇)
上一篇文章我们说了chrome调试工具的一些比较基础功能的用法,接下来我们要在这一篇文章中说一说,其他一些chrome调试工具的使用方法 2.1.5 Network模块 在netWork模块中,大致上 ...
- 《2018年云上挖矿态势分析报告》发布,非Web类应用安全风险需重点关注
近日,阿里云安全团队发布了<2018年云上挖矿分析报告>.该报告以阿里云2018年的攻防数据为基础,对恶意挖矿态势进行了分析,并为个人和企业提出了合理的安全防护建议. 报告指出,尽管加密货 ...
- 《奥威Power-BI智能分析报告制作方法 》精彩回顾
上次课我们简单介绍了奥威Power-BI的智能分析报告,并展示了报告与图表相结合的应用场景.图文分析报表的意义不只在于美观,更重要的是固定框架下的灵活性和追根究底的动态分析,有着很强的实用性.上节课 ...
- 12月07日《奥威Power-BI智能分析报告制作方法 》腾讯课堂开课啦
前几天跟我一个做报表的哥们聊天,听着他一茬一茬地诉苦:“每天做报表做到想吐,老板看报表时还是不给一个好脸色.”我也只能搬出那一套“过程大于结果”的内心疗程赠与他,没想到他反而怒了:“做 ...
- M1事后分析报告(Postmortem Report)
M1事后分析报告(Postmortem Report) 设想和目标 1. 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们项目组所开发的软件为一个基于Andro ...
- chrome调试工具高级不完整使用指南(基础篇)
一.前言 本文记录的是作者在工作上面对chrome的一些使用和情况的分析分享,内容仅代表个人的观点.转发请注明出处(http://www.cnblogs.com/st-leslie/),谢谢合作 二. ...
- chrome调试工具高级不完整使用指南(实战一)
三.chrome调试工具实战 3.1 获取界面对应的HTML和修改样式 我们以博客园为例子来分析. 通过上面的操作就可以定位到对应的HTML代码 左侧菜单显示的就是当前指定元素层叠样式的一个情况 上面 ...
- chrome调试工具高级不完整使用指南(实战二)
3.3 给页面添加测试脚本 在现实的工作中,我们往往会遇到一些问题在线上就会触发然后本地就触发不了的问题.或者是,要给某个元素写一个测试脚本.这个时候如果是浏览器有提供一个添加脚本的功能的话,那么我们 ...
随机推荐
- jQuery—$让渡
方法1:(取别名) 方法2:(指定作用域) 场景用例: 解决方案:方法1(取别名) 解决方案:方法2(指定作用域)
- Silly Java-Final 关键字
Final 关键字 adj. 最终的:最后的:决定性的:不可改变的 1.修饰变量 final variable 意味 [最后的变量,不可改变的变量即常量] Java中该关键字即代表常量 修饰基本类型的 ...
- Gym - 100548H The Problem to Make You Happy 2014-2015 ACM-ICPC, Asia Xian Regional Contest (BFS+博弈)
题意:Bob和Alice在一张有向无环图上移动,给定二者的起点,Bob先手.Bob的失败条件是不能移动或者与Alice相遇.两个人都采取最优策略,求Bob是否会赢 分析:银牌题.先确定所有的失败状态, ...
- iOS 性能监测
给些链接: http://mp.weixin.qq.com/s?__biz=MzAwNDY1ODY2OQ%3D%3D&idx=1&mid=207890859&scene=23& ...
- php 输出 sql语句
第一种方法 $data = M('news')->field("title,date_format(postdate,'%Y-%m-%d') as postdate,content&q ...
- Python学习笔记之Python的多重继承和MixIn
多重继承 继承是面向对象编程的一个重要的方式,因为通过继承,子类就可以扩展父类的功能. 回忆一下Animal类层次的设计,假设我们要实现以下4种动物: Dog - 狗狗: Bat - 蝙蝠: Parr ...
- 如何用纯 CSS 创作一个单元素抛盒子的 loader
效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/qKwXbx 可交互视频 ...
- java语言基本环境搭建
从放假开始,就开始路陆陆续续了解关于java语言的学习.首先从语言编辑环境就和以前学习的c语言会有些不同,对java语言的学习也有了很大很多新的认识. 首先从官网上下载jdk,按照娄老师给我们的操作提 ...
- 关于JavaScript对象中的一切(一) -- 对象属性
先上一张我制作的脑图.
- Mac Book Air 上用 Vmware Fusion 8 pro 安装 CentOS7
一. 准备工作: 1. 安装Vmware Fusion (略) 2. 下载CentOS-7-x86_64-Minimal http://isoredirect.centos.org/centos/7/ ...