Xshell后门逆向分析 发表于 2017-09-22 | 分类于 逆向工程 | 暂无评论 # 1. 前言 2017年8月7日,Xshell官方发布[公告][1]称其软件中存在后门。 ![image.png-69.1kB][2] 后门存在于`nssock2.dll`中,初步分析之后发现其中包含加密的shellcode、花指令、线程注入等,满满的都是CTF套路,总体流程如下 ![image.png-20.8kB][3] [1]: https://www.netsarang.com/news/security_exploit_in_july_18_2017_build.html [2]: http://static.zybuluo.com/birdg0/v8mpqewopb9mkaisyh4b8dgh/image.png [3]: http://static.zybuluo.com/birdg0/q1qr599jvhujho10ues3oszf/image.png [4]: http://static.zybuluo.com/birdg0/5gxyech73qb54qejoy31gydx/image.png [5]: http://static.zybuluo.com/birdg0/9nic8bdyetnf9wgdhac8e1ui/image.png [6]: http://static.zybuluo.com/birdg0/7rct49tfmjvy9u9h6b4my1d9/image.png [7]: http://static.zybuluo.com/birdg0/ib3167gjqw1rrg8fxfonmybs/image.png [8]: http://static.zybuluo.com/birdg0/b2b8yjpmx3tipfr4vy47atay/image.png [9]: http://static.zybuluo.com/birdg0/9kpx9pg28z4x3t70q56x5s7f/image.png [10]: http://static.zybuluo.com/birdg0/c0gf1lv4lhsgibdgjo858mk7/image.png [11]: http://static.zybuluo.com/birdg0/of912efv7xq4a5ezldlgvnja/image.png [12]: https://cdn.securelist.com/files/2017/08/ShadowPad_technical_description_PDF.pdf [13]: http://static.zybuluo.com/birdg0/ksosm4zqfe6oudxoagm11uiq/image.png [14]: http://static.zybuluo.com/birdg0/57tg0hyvfgn5j0yb10spz0wy/image.png [15]: http://static.zybuluo.com/birdg0/1vjvgkr5vywdq4a4raa7jm9t/12.png [16]: http://static.zybuluo.com/birdg0/n37lzdzio6bldk8eijjxpzo9/13.png [17]: http://static.zybuluo.com/birdg0/s4gcl9ermbq09qst6pnr1lua/14.png [18]: http://static.zybuluo.com/birdg0/3j1ualmzvsekuviocigb97dm/image.png [19]: http://static.zybuluo.com/birdg0/qxocjgb7n8dbkosqou7zbzwb/16.png [20]: http://static.zybuluo.com/birdg0/dvadgnw29eq48x386tnk5l03/17.png [21]: http://static.zybuluo.com/birdg0/dna6ludzl2mczuygvtxwkbni/image.png [22]: http://static.zybuluo.com/birdg0/nx6adqo7q3u4v6vza1dpdp92/image.png [23]: http://static.zybuluo.com/birdg0/zcku02szm43oliiia9e6m3hz/image.png [24]: http://static.zybuluo.com/birdg0/3cq8xg4lz1c6400grtzui9v8/21.png [25]: https://www.netsarang.com/news/security_exploit_in_july_18_2017_build.html [26]: https://cdn.securelist.com/files/2017/08/ShadowPad_technical_description_PDF.pdf # 2. 过程分析 ## 2.1 第一层 通过BinDiff跟最新版的`nssock2.dll`比较可以很容易的发现一个解密shellcode的函数 ![image.png-15.3kB][4] 去掉花指令分析,进入到shellcode后主要功能是先查询`HKCU\SOFTWARE\%d`或`HKLM\SOFTWARE\%d`下的`Data`值是否存在,`%d`是把硬盘的序列号异或`0xD592FC92` ![image.png-32.1kB][5] 如果`Data`值存在就用其中的key解密第二层的shellcode并执行,反之就会发送DNS请求获取配置信息存储到`Data`键再解密第二层的shellcode并执行 ![image.png-32.1kB][6] 获取配置信息时首先通过根据当前年月的DGA(域名生成算法)生成一个域名,其算法如下 ![image.png-13kB][7] 然后会根据GUID、主机名和用户名等信息生成一个前缀进行加密与之前生成的域名拼接后发送DNS请求并获取配置信息 ![image.png-53.7kB][8] 加密主要分两步,第一步如下 ![image.png-32.4kB][9] 第二步如下 ![image.png-7.8kB][10] DNS服务器为`8.8.8.8`、`8.8.4.4`、`4.2.2.1`、`4.2.2.2`和当前主机的DNS服务器,接收到key后解密第二层shellcode的代码如下 ![image.png-16.5kB][11] 这里非常有意思,算法跟从dll进入第一层shellcode时的解密算法一致,想到CTF的套路尝试设为相同的key,key1为`0xC9BED351`,key2为`0xA85DA1C9`,然后就成功解密出了第二层shellcode。 ## 2.2 第二层 根据卡巴斯基的[报告][12],第二层shellcode为`Root`插件,入口函数很像`DllMain` ![image.png-16.8kB][13] 主要功能是先设置异常处理函数,并会把异常记录到`%ALLUSERSPROFILE%\error.log`,然后初始化函数指针表(会在其他插件中被调用),并加载5个插件 ![image.png-33.6kB][14] 动态调试步入`load_plugin`函数就能把5个插件的shellcode dump出来,加载完5个插件后会调用ID为`103`的插件(Install)的第二个函数 ![12.png-737.2kB][15] ## 2.3 插件 ### 2.3.1 Install插件(103) 主要功能是先修改当前进程权限,再调用ID为`102`的插件(Config)的第二个函数 ![13.png-1079.4kB][16] 另外还会用`winlogon.exe`进程的权限创建`svchost.exe`进程进行线程注入,调试线程注入的shellcode可以先在`VirtualAllocEx`后下断获取到相应进程中的虚拟地址,然后在`ResumeThread`时下断,中断后附加相应进程并在之前获取的虚拟地址处下断,执行`ResumeThread`后会在之前的虚拟地址处中断,之后就可以继续调试了,初步分析注入的shellcode就是`Root`插件 ![14.png-1397.8kB][17] 根据磁盘序列号创建互斥体`Global\%16-48 random latin characters%` ![image.png-29kB][18] ### 2.3.2 Plugins插件(101) 主要功能是监听根据磁盘序列号生成的注册表项`HKLM`或`HKCU\SOFTWARE\Microsoft\%5-12 random characters%` ![16.png-693.3kB][19] 监听到有值改变后会解密并校验是否是合法的插件并加载和初始化 ![17.png-721.8kB][20] ### 2.3.3 Config插件(102) 此插件主要是跟配置信息的读写相关,其路径根据磁盘序列号生成,本机是`C:\ProgramData\MQGOMQQ\TOYMWGMQ\UMGSAIE\DIWEYK`,在每次初始化插件时都会被重写 ![image.png-51.4kB][21] 默认的`C&C`地址是`dns://www.notped.com` ### 2.3.4 Online插件(104) 此插件主要是跟`C&C`服务器通信并把命令分发到相应的插件执行,首先根据协议类型选择发送请求的插件 ![image.png-44.2kB][22] 如果是`URL`就会向根据年月的DGA生成的域名发送`HTTP`请求来得到真正的`C&C`服务器地址 ![image.png-20.5kB][23] 另外此插件也会收集更详细的主机信息,依次调用`GetSystemTime`、`gethostbyname`、`GlobalMemroryStatusEx`、`GetNativeSystemInfo`、`GetDiskFreeSpaceExA`、`EnumDisplaySettingsW`、`GetSystemDefaultLCID`、`QueryPerformanceFrequency`、`QueryPerformanceCounter`、`GetCurrentProcessId`、`RtlGetVersion`、`GetSystemMetrics`、`GetNetworkParams`和`GetAccountSid` ### 2.3.5 DNS插件(203) 此插件主要是用于基于DNS协议的`C&C`通信 ![21.png-1795.9kB][24] # 3. 总结 此后门用了多种手段来增加分析难度,是一个基于插件的完善的攻击平台,请尽快升级到最新版本。 # 4. 附录 ## 4.1 shellcode字符串解密脚本 ``` from idaapi import * from ctypes import * addr = 0x274DFC8 seed = c_uint(Byte(addr) | (Byte(addr + 1) << 8)) result = [None] * 4096 for 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. 参考 1. [https://www.netsarang.com/news/security_exploit_in_july_18_2017_build.html][25] 2. [https://cdn.securelist.com/files/2017/08/ShadowPad_technical_description_PDF.pdf][26]