捆绑了多个最新Office漏洞利用的虚拟币钱包木马分析
时间:2018-06-15
背景
近日,360威胁情报中心捕获了一批功能强大的远控木马,其不仅能盗取用户的邮箱、即时通讯软件、浏览器等等的相关隐私信息,更重要的是木马还会主动盗取用户的虚拟货币钱包文件,以窃取用户的数字货币资产。
并且该木马样本同时利用了多个Office最新的漏洞进行捆绑投递(CVE-2017-8570、CVE-2017-11882、CVE-2018-0802),以提升漏洞利用成功的几率,并通过极具诱惑性的文档进行伪装,主要是数字货币相关的介绍文档。很显然,这批远控木马正是为了用户的比特币钱包而来。
360威胁情报中心通过溯源关联分析,发现这批样本都是使用一款较新的,名为ThreadKit的文件漏洞利用工具包所生成,具有较强的针对性。
样本分析
被捕获的用于盗取虚拟货币的样本执行流程如下:

恶意文档分析
360威胁情报中心详细分析整个恶意代码执行过程,分析过程如下:
被捕获的样本都以极具诱惑性的RTF文档进行伪装,主要是介绍数字货币相关的咨询信息,比如预测虚拟货币未来的走势:

比如区块链的相关技术介绍:

探针
该RTF样本中通过INCLUDEPICTURE的方式插入了一张远程图片,当样本打开后,Word会请求读取互联网上的这张图片,通过这种方式,黑客可以统计哪些来源的IP打开过该诱饵文档,不过分析的样本使用的是一个不存在的网络地址:

捆绑了多个最新的Office漏洞利用
首先,样本通过插入Package的方式分别插入了以下文件,这些文件在文档打开后会自动释放到%temp%目录:
文件名 | 描述 |
---|---|
iNteldriVerupd1.sCt | 用于执行TasK.BaT |
TasK.BaT | 用于执行2nd.bat |
2nd.bat | 加载执行dll.dll |
dll.dll | Payload |
decoy.doc | 释放的正常文档 |
分析发现,样本中插入了公式编辑器漏洞和CVE-2017-8570这两种最新的漏洞利用代码来执行最终的恶意代码:
l 使用公式编辑器漏洞(CVE-2017-11882and CVE2018-0802)

l 使用CVE-2017-8570

漏洞利用成功都会去执行释放的%temp%\task.bat,task.bat的批处理内容如下:

Loader
task.bat随即会执行2nd.bat批处理文件,2nd.bat批处理文件内容如下:

2nd.bat执行后会首先判断C:\Windows\SysWOW64\odbcconf.exe文件是否存在,如果存在则执行C:\Windows\SysWOW64\odbcconf.exe/S /A {REGSVR "%TMp%\DlL.DlL"} 实现加载执行释放的%temp%\dll.dll。
如果不存在该文件就直接执行odbcconf.exe/S /A {REGSVR "%TMp%\DlL.DlL"}。上述判断的意义在于确保运行32位的odbcconf.exe程序加载DIL.DIL。
接着打开%tmp%\decoy.doc,这是一个正常的Word文档,最后利用bitsadmin下载http://94.250.248.105/task.bat到%userprofile%\appdata\local\temp\task.scr并执行。
Payload(包含盗取数字货币钱包功能)
dll.dll
被2nd.bat加载执行的dll.dll为主功能木马,其不仅能盗取用户的邮箱、即时通讯软件、浏览器等等的相关隐私信息,更重要的是木马还会主动盗取用户比特币钱包,以窃取用户的数字货币资产。详细分析如下:
该dll被加载后,首先解密自身代码, 然后复制一份自己的内存镜像,然后跳转到新的内存镜像里继续执行:

接着会解密内置的一个dll文件,然后内存加载该dll文件,并调用该dll文件的入口函数:

进入该内置DLL的入口函数后,首先动态获取自身所要使用的API函数地址:

接着创建一个互斥体,防止重复启动:

然后通过注册表获取自身设备的GUID,接着获取用户、计算机名后分别算出一个HASH值,再把算出来的3个HASH值拼接起来,接着把拼接起来的值URL编码并加密,然后把加密后的数据向C&C地址lorentok.beget.tech/index.php发送POST请求:

接着判断返回的数据的大小是否大于0x2710个字节,如果不是则结束运行:

代码中还会比较返回数据值是否为“exit”字符串,如果是,也结束运行,如果不是,则解析返回回来的数据,并释放数据中包含的运行库文件到%TEMP%\1Mo\目录,如果在该目录释放失败,则尝试释放到%appdata%\1Mo\目录,接着设置当前的运行目录为%TEMP%\1Mo\,然后加载释放的库文件初始化要使用的API:

释放的库文件:

接着根据返回的配置信息选择性的偷取以下信息:
1、 Outlook保存的邮箱账号密码和邮件服务器地址、FileZila保存的帐号密码、WinSCP 2保存的账号密码、PSI+、purple。
2、 浏览器里保存的cookie和浏览器里保存的账号密码
3、 盗取门罗币和比特币钱包
4、 Skype、Telegram、Steam等聊天工具信息
5、 屏幕截图
6、 获取指定规则的文件内容
7、 获取当前ip地址和区域信息
8、 下载指定文件执行
相关木马功能代码结构:

盗取数字货币钱包(比特币and门罗币)
木马中的一个最重要的功能便是偷取数字货币钱包的钱包文件,主要盗取比特币钱包和门罗币钱包,相关分析如下:
首先遍历%appdata%目录里的所有文件,查找wallet.dat、.wallet、electrum.dat文件,如果查找到这些文件则把该文件拷贝到%temp%/tempbuffer.dat,然后读取tempbuffer.dat文件的内容,读取完成后,删除tempbuffer.dat文件:


接着查找%appdata%/MultiBitHD/下的钱包文件,如果存在,也同样把这些钱包文件拷贝到%temp%/tempbuffer.dat,接着读取tempbuffer.dat文件内容,然后删除该文件:

接着继续偷取门罗币钱包文件,首先查找注册表Software\monero-project\monero-core的wallet_path项的值,得到钱包路径,然后同样去查找钱包文件是否存在,如果存在也复制到%temp%/tempbuffer.dat,然后读取内容,最后删除%temp%/tempbuffer.dat文件:

还会查找注册表Software\Bitcoin\Bitcoin-Qt的strDataDir项的值,得到钱包文件的路径,然后查找该路径下的钱包文件,也同样的复制到到%temp%/tempbuffer.dat,然后读取内容,最后删除%temp%/tempbuffer.dat文件:

最后查找%appdata%\Electrum\wallets\下的所有文件,如果存在则读取全部读取:

当获取完所有的信息后,继续获取当前运行进程名,系统里所有运行的进程列表等系统信息,并把上述获取的信息加密编码后上传到C&C地址,接着删除自己是否的运行库文件,然后根据配置选择是否自删除:

清理自身释放的运行库文件:

持久性
task.scr
task.scr主要实现木马的持久性以及加载修改后的gdi32.dll(执行远程插件),该文件通过http://94.250.248.105/task.bat下载回来,样本运行首先通过HASH值来动态获取自身所使用的API,这些API都是较底层的API函数:

接着读取系统目录下的gdi32.dll到内存,并在内存里修改该DLL的入口函数,改为自身的一段ShellCode,接着把修改后的DLL写入到%appdata%\Microsoft\Graphics\gdi32.dll:

接着加密自身另一段ShellCode,加密的密钥为注册表保存的当前这个设备的GUID的HASH值,然后把加密后的数据写入到%appdata%\Microsoft\Installer{设备GUID的值}\AppCache\container.dat:

接着利用regsvr32.exe加载修改后的gdi32.dll:

向注册表SOFTWARE\Microsoft\Windows\CurrentVersion\Run写入项为HD Graphics Driver,值为"C:\WINDOWS\system32\regsvr32.exe" /s "C:\Documentsand Settings\Administrator\Application Data\Microsoft\Graphics\gdi32.dll" 来实现开机自启动,实现木马的持久化:

最后向%temp%目录写入一个批处理文件,然后利用ShellExecute API运行该BAT实现自删除:

执行远程插件
gdi32.dll
task.scr负责将修改后的gdi32.dll执行起来,而gdi32.dll最终的目的是等待执行攻击者下发的远控插件。
该文件被加载执行后会解密自身的一段ShellCode,然后执行该ShellCode:

执行该ShellCode,首先会传参数为0,用于初始化该ShellCode里面要使用的API,接着传入0x3e8参数,开始执行具体的功能:

当进入0x3e8分支后,该ShellCode会尝试把自身注入当前计算机上的所有进程:

当尝试打开进程成功时,会把自身注入到打开的进程去,然后HOOK注入进程的ZwClose函数,从而实现通过ZwClose来调用自身注入的ShellCode:

注入自身到进程



HookZwclose
当ZwClose被调用时,进入HOOK的代码部分,进行调用自身ShellCode的入口部分,也是和gdi32.dll的调用入口一样,只是传的参数不一样,第一次也是传入参数0,初始化ShellCode的一些API等信息,接着传入参数1,进入1的分支,实现对应功能:

进入参数1的分支后,该分支尝试读取%appdata%\Microsoft\Installer{设备的GUID}\AppCache\container.dat文件,如果该文件不存在,则结束线程运行,如果存在则读取该文件内容,解密执行:

container.dat的ShellCode入口有4个分支,调用时,也是先调用初始化的分支,然后再进入实际的分支:

最终,该ShellCode的作用便是向https://python-distr.com/modules/ 发送请求,等待下载该链接的文件加密存储到本地,然后加载到内存执行,以实现执行攻击者下发的远程插件:

下载文件
加密写入到本地

映射到内存执行
循环请求下载,直到加载到本地并成功执行,才退出线程:

生成器(ThreadKit)
360威胁情报中心通过分析大量该类样本后发现,其前期投递的带有漏洞的Word文档等样本,都有一定的规律性,比如有打开文档时,会有一个探针链接,用于统计有多少个电脑中招:

在漏洞利用的时候,都会有几个名字的的文件来调用(TasK.BaT,2nd.bat),且内容都大致一致:

都会使用一个空的block.txt来检测是否二次运行,同样的相似的sct文件用来启动task.bat:

相似的方法来启动伪装文档:

最终我们发现,这批针对性的样本和一个名为ThreadKit的文件漏洞工具包生成的样本基本一致,因此可以推断这些样本都是使用ThreadKit工具包来批量生成的。
ThreadKit是一个相对较新且流行的文件漏洞利用工具包,从2017年6月起,很多攻击者利用该工具包做针对性的攻击。该工具包也让技术水平不高的攻击者轻松的使用最新的Office漏洞来实施攻击,极大的降低了攻击门槛。
结论
近年来,数字货币的疯狂上涨吸引了越来越多人的目光,正在催生越来越多的网络犯罪,可以说全球黑客都在瞄准虚拟货币,而相关的热点信息(比如区块链技术)则正好被黑客用来作为诱饵吸引受害者上钩。而越来越多的傻瓜式漏洞利用生成工具也极大的降低了攻击者技术门槛。
360威胁情报中心提醒各单位/企业用户,谨慎打开来源不明的文档,并尽快修复及升级微软Office软件,也可以安装360安全卫士/天擎等防病毒软件工具以尽可能降低风险。
IOC
URL |
---|
python-distr.com |
http://lorentok.beget.tech/index.php |
http://maksssnd.beget.tech/index.php |
http://keyar12f.beget.tech/updateazor.php |
http://expdoczh.beget.tech/panel/gate.php |
MD5 |
54b6f058a85fdb6bc7827e96cf73a59b |
9df5ec509ffd296d7e447eaa5287cc33 |
a82d46ab49f58c9b12c9f02cf2b22f26 |
655f743484692071a6a63f1993176f9c |
5eeb307ac56e202466abd4af7831145a |
0b3243bc565778218ab272ccd78bad37 |
4447c534b4b30cfe2d591e398b80eee5 |
参考
https://ti.360.net/blog/articles/analysis-of-cve-2017-8570/