Darkhotel组织攻击套件Ramsay从隔离网中窃取信息
本帖最后由 Yennfer_ 于 2020-6-11 17:32 编辑# Ramsay
## 基本信息
| File Nmae | File Size | File Type | MD5 |
| ------------- | -------------- | --------- | -------------------------------- |
| Ramsa1Exe.exe | 1,849,905 Byte | Spy | 186b2e42de0d2e58d070313bd6730243 |
## 简介
样本通过感染内网中的exe程序,进而感染word文档,随着Word文档由U盘带入隔离网,感染隔离网的文件并在隔离网内持久化,搜集情报,打包成加密的rar文件,并将rar文档二次加密后附加在word文档尾部,再跟随word文档由U盘带出隔离网,病毒判断每一次Word文档附加的指令,执行不同的代码
## 动态行为
样本是一个7-Zip安装包,点击运行后释放多个文件并创建了大量进程,其中包含有正常安装7-Zip部分的进程
调用CMD查询计算机信息、网络、查询端口等
在多个目录下释放大量文件
## 分析
### 查壳
无壳,样本是一个NSIS打包成的7-Zip压缩包
### 读取自身
载入OD与IDA中,经过入口点初始化之后,样本会在执行正常安装程序之前先执行恶意代码
申请内存,将自身读取到申请的内存中
### 判断权限级别
通过获取SID结构,判断当前进程权限,执行不同的代码
### 释放并执行多个exe文件
获取%Temp%目录,再拼接出路径
判断%Temp%目录下是否已经存在要释放出的随机字符串.exe文件
拼接出特定字符串“pN64RaafaQfjWXjM3Ku3UkqP”,在最开始将自身读取到申请的内存空间中比较,
匹配上这一段字符串
匹配
在内存中比较到字符串,可以发现字符串后面跟着的就是一个PE文件
后面同样,拼接出另一个字符串,然后再内存中寻找匹配
申请内存,拷贝第一次匹配到的PE文件到申请的内存中
将拷贝的PE文件写入到前面拼接的%TEMP%下的随机字符串.exe中
修改释放出的exe文件的创建时间、修改时间、访问时间
用同样的方法,拼接出另两个字符串"4znZCTTa2J24E64GzUxaUnYg"和"2A2rRhArF6akS9PaRZBwdrbn",在内存中匹配然后将PE文件写到%TEMP%目录下另一个exe中
调用ShellExecuteExW执行刚才释放出的第二个PE文件
判断在C:\Windows\System32目录下是否存在msfte.dll,如果不存在且权限够高的话,则再次从生成随机字符串
利用和前面一样的方法,在内存中匹配字符串"2A2rRhArF6akS9PaRZBwdrbn"和"pN64RaafaQfjWXjM3Ku3UkqP"
得出PE文件
调用CreateProcess执行刚释放出的exe
到这里代码就执行完了,后面的是正常安装7-Zip的代码
## moprxlpbpm.exe
moprxlpbpm.exe是被母体释放出的第二个exe文件,在前面通过ShellExecuteExW执行
### 反调试
样本Winmain开头检测CommandLine,如果不是从母体调用而是双击运行会直接退出程序
用第一次释放的PE文件CopyFile覆盖病毒母体
覆盖之后
然后调用ShellExecuteExW运行病毒母体,实际上是第一次释放出的PE文件
这个是正常的7-z安装器
运行后删除第一次释放出的PE文件
## kfzagiqcbu.exe
kfzagiqcbu.exe是第三次释放出的PE文件,Dropper,负责释放其他文件
查壳后UPX的壳,脱掉后
### 释放文件执行
先检查路径C:\Users\sam\AppData\Roaming\Microsoft\UserSetting是否存在,不存在则创建
判断程序的CommandLine是否有字符串"gQ9VOe5m8zP6",执行不同的代码
判断C:\Windows\system32\msfte.dll是否存在,执行不同的代码
判断文件夹C:\Windows\System32\Identities是否存在,不存在就创建并设置属性为隐藏
并将自身拷贝到C:\Windows\System32\Identities\下并命名为wideshut.exe
写入另一个PE文件到C:\Windows\System32\Identities\Sharp.exe
拼接另一个路径并写入文件bindsvc.exe,再调用CreateProcessW执行
### 释放文件,驱动执行
执行bindsvc.exe后,利用函数iswow64process判断当前系统是32位或是64位,当系统为32位时,判断C:\Windows\System32\Drivers\hfile.sys是否存在,如果存在就把它移动到%temp%目录下随机字符串.dat
不论是否存在C:\Windows\System32\Drivers\hfile.sys,都会createfile,然后写入内容
当C:\Windows\System32\Drivers\hfile.sys已经存在且被移动到%temp%下之后,会用hfile.sys创建一个驱动并启动,设置为开机自动启动服务
已经运行的驱动
运行后,样本会尝试连接\\\.\\HideDriver并尝试使用DeviceIOControl传输buffer
### 释放msfte.Dll,劫持服务自启
判断C:\Windows\System32\msfte.dll是否存在,还是和前面一样,存在就移动到%TEMP%下随机名.dat,然后再新写入一个msfte.dll
劫持Windows的服务Windows Search,修改为开机自启,因为Wsearch服务开加载msfte.dll,所以样本也能跟随服务实现开机自启
查询C:\Windows\System32\oci.dll是否存在,存在就移动到%TEMP%下随机名.exe,再写入一个C:\Windows\System32\oci.dll
### 拷贝自身
判断C:\Windows\System32\wimsvc.exe是否存在,存在则复制到%TEMP%目录下的随机名.exe
然后将样本自身拷贝到C:\Windows\System32\wimsvc.exe
### 释放oci.Dll,劫持服务自启
利用同样的方法,修改服务“MSDTC”为自启动,使前面释放的oci.dll跟随服务自动
调用CMD,拼接参数,修改"MSDTC"的ObjectName="LocalSystem"
### 删除自身
在%temp%目录下创建一个.bat文件,多次拼接,删除样本自身和bat文件自身
kfzagiqcbu.exe的代码到这里结束
## bindsvc.exe
Bindsvc.exe是由Dropper执行的第一个文件
查壳
查询注册表HKEY_CURRENT_USER\Volatile Environment下APPDATA和LOCALAPPDATA环境变量的路径
查询C:\Users\sam\AppData\Roaming\Microsoft\UserSetting是否存在,不存在则创建,这个路径被隐藏了,估计是驱动隐藏的
读取文件C:\Windows\System32\Identities\wideshut.exe,同样这个路径已经被隐藏了,当这个文件不存在的时候有一串提示语“Ramsay is not exist. I will finish."
拼接出五串字符串,读取后通过几组字符串读取数据
读取自身到申请的一块空间中,然后通过前面拼接的第二组和第三组字符串读取数据,第一次读取病毒的StartKit
通过第一组和第二组读取TrnCleaner
判断文件C:\Users\sam\AppData\Roaming\Microsoft\UserSetting\trnmg.sdb是否存在,存在就删除,这个文件是病毒的日志,加密后存储,这个路径也被hfile.sys隐藏,设置有守护线程一直设置隐藏,卸载掉驱动再取消隐藏、系统属性就可以看见
获取系统所有盘符,排除A、B软盘,递归遍历除了系统盘之外的所有盘符
读取到EXE文件后,只感染文件小于256MB的文件,通过判断字符串
"9J7uQTqgTxhqHaGUue5caaEr3KU"和"9J7uQTqgTxhqHaGUue5caaEr"判断文件是否被感染
创建文件夹C:\Users\sam\AppData\Local\Temp\{e91461b4-a519-4110-9fae-d2895719dbb1},并设置为隐藏属性
在新建的文件夹下创建一个同名exe,将前面获取的StartKit写入,通过比较,只有文件尾部的零填充字节多少不同,其他部分一致
更新资源,修改代码,将exe感染成为与7z安装器相同的结构
完成后,将被感染的exe覆盖原来的exe文件,并删除新建的exe文件,将被感染文件的时间修改为前面获取到的正常exe的时间
感染exe后的日志解密后
获取计算机网卡信息并写入到日志中
创建新线程,感染网络中共享磁盘
bindsvc.exe的代码到这里结束
## Hfile.sys
Hfile.sys是Dropper释放出的驱动文件,载入IDA后会提示有PDB路径,路径为
C:\users\vmware\desktop\hidedriver\bin\Release\i386\HideDriver.pdb
这个文件是一个Rootkit,用来隐藏创建的各种文件和文件夹,不卸载掉Hfile.sys这驱动,在RING3下对文件夹去除隐藏操作无效的
## msfte.dll、oci.dll
msfte.dll、oci.dll两个文件基本一致,只有一个字节差别
msfte.dll是Dropper释放出劫持服务"Windows Search"的文件,跟随服务“Windows Search”的自启而被加载实现自启
无壳
创建文件夹C:\Users\sam\AppData\Roaming\Microsoft\UserSetting,获取系统硬件配置文件全局标识符GUID
查询当前加载该DLL的程序,并判断是SearchIndexer.exe、explorer.exe、msdtc.exe,执行不同代码
### 当进程为SearchIndexer.exe时
一个死循环新线程,创建一个和explorer.exe同样TOKEN的SearchProtocolHost.exe,然后程序结束
### 当进程为explorer.exe时
获取到路径"C:\Users\sam\AppData\Roaming\Microsoft\Office\Recent",然后进行死循环
从路径中拼出C:\Users\sam\AppData\Roaming\Microsoft\Office\Recent\*.doc.lnk,文件夹中保存着最近打开过的Word文档的.lnk快捷方式
从.lnk快捷方式得出指向的原文件
拼接出路径"C:\Users\sam\AppData\Roaming\Microsoft\UserSetting\MediaCache"后创建这个文件夹,然后将文件夹设置为隐藏
硬编码Doc文件的文件头标志,判断文档后缀为.doc还是.docx,读取文档,与硬编码的标志头比较前21字节,确认是否为文档
拼接出路径C:\Users\sam\AppData\Roaming\Microsoft\UserSetting\NetworkDiagnos,在这个文件夹下创建一个生成的随机字符串.dat文件
向其中写入将读取到的doc文件加密后的十六进制数据
将读取到的doc文件拷贝到%APPDATA%\Microsoft\Word\123.docx
创建文件夹%APPDATA%\Microsoft\Word,在文件夹内创建一个vbs文件,写入内容
调用Wscript.exe执行VBS,CommandLine:
C:\Windows\System32\wscript.exeC:\Users\sam\AppData\Roaming\Microsoft\Word\winword.vbsC:\Users\sam\AppData\Roaming\Microsoft\Word.
用于将doc文档转换为txt文本
然后删除vbs文件,并将C:\Users\sam\AppData\Roaming\Microsoft\Word下转换出的txt文件移动到隐藏文件夹C:\Users\sam\AppData\Roaming\Microsoft\UserSetting\MediaCache中
### 当进程为msdtc.exe时
msdtc.exe是服务MSDTC的程序,对应前面劫持MSDTC服务
Dll跟随服务开机自启,然后找到Dropper的备份C:\Windows\System32\wimsvc.exe执行,实现Dropper的开机自启
### 当进程为HTON.exe、BON.exe、Cover.exe时
创建文件夹C:\Users\sam\AppData\Roaming\Microsoft\UserSetting\BjDJTPvUnpqrxxKx9OXL
调用前面释放的Sharp.exe,Sharp.exe是WINRAR的程序,将Recent目录下的所有文件打包,密码PleaseTTakeOut6031416!!@@##
遍历"C:\Users\sam\AppData\Roaming\Microsoft\UserSetting"将前面得到的doc转txt文件复制到C:\Users\sam\AppData\Roaming\Microsoft\UserSetting\BjDJTPvUnpqrx0012CF68xKx9OXL下
将所有txt、刚才打包后的recent文件夹内内容和日志文件复制后打包到上级目录,密码为PleaseTakeOut6031416!!@@##,打包后调用CMD删除整个文件夹
将rar数据读取到内存,删除压缩包,然后对压缩包进行加密
加密前
加密后
HOOK函数WriteFile
正常的WriteFile
被HOOK后的WriteFile,jmp到了病毒代码
HOOK后的代码对Word文档写入隐藏数据
创建死循环线程,保持窃密和日志更新
导出表中有函数AccessDebugTracer和AccessRetailTracer
遍历进程目录查找到进程"explorer.exe",远线程注入将自身注入到"explorer.exe"中
窃密
调用CMD执行大量拼接出的数据,获取网络相关信息,将相关内容加密后写入文件夹Media下计算机名-时间.rtt文件中
窃取获取IE临时文件
通过判断doc文档被感染后的特有标志,执行不同的内容
如果没有特有的标记,则判断word的创建或访问时间在一个月内,对word文档进行感染,将前面打包得到的加密后的RAR的十六进制数据添加在word文档尾部
## 总结
样本通过感染内网中的exe程序,进而感染word文档,随着Word文档由U盘带入隔离网,感染隔离网的文件并在隔离网内持久化,搜集情报,打包成加密的rar文件,并将rar文档二次加密后附加在word文档尾部,再跟随word文档由U盘带出隔离网,病毒判断每一次Word文档附加的指令,执行不同的代码。并使用自定义的文件传输协议而不是传统的网络协议。
基于自定义的文件传输控制指令完整过程:
攻击者当前位置可能是位于目标内网,能控制一定数量的机器和共享目录上的文件。
步骤1. 感染正常的EXE文件,通过受害者携带进入隔离网络的机器中执行。
步骤2. 被攻陷的隔离网络机器中的窃密数据,被附加到正常Word文档的末尾;
1) 附加窃密数据的Word文档被受害者携带撤出隔离网络;
2) 攻击者找到这些Word 文档,读取附加的窃密数据;
步骤3. 攻击者感染新的Word文档,附加命令和执行对象。
1) Word文档被受害者携带进入隔离网络;
2) 附加的命令和执行对象在隔离网络中已被攻陷的机器中得到执行;
3) 执行结果的日志随着步骤2也被带出隔离网络。 最好可以添加一些代码和截图来配合说明,前段时间好像看到过哪家厂商发过这个样本的报告? 这次分析好专业的样子啊,假装学习中 大佬,有图吗? 很厉害的样子- -! Hmily 发表于 2020-6-10 18:07
最好可以添加一些代码和截图来配合说明,前段时间好像看到过哪家厂商发过这个样本的报告?
好像是安天 清早起床,谢谢分享,学习下思路 chmod755 发表于 2020-6-10 17:47
大佬,有图吗?
嗯?没有图吗 本帖最后由 Yennfer_ 于 2020-6-11 13:53 编辑
emmmmm,微博的图床好像不显示,我晚上再重新补图 不错哦,思路奇特{:1_893:}学习了