MountLocker

MountLocker 样本分析

样本信息

样本来源:MALWAREbazaar

相关报告:VirusTotal扫描报告

样本md5:3808F21E56DEDE99BC914D90AEABE47A

样本sha256:4A5AC3C6F8383CC33C795804BA5F7F5553C029BBB4A6D28F1E4D8FB5107902C1

行为结果

运行样本后,样本首先将对硬盘内的文件进行遍历,对部分文件进行加密,并以ReadManual.***后缀结尾、创建日志文件和恢复说明html

MountLocker.exe.log日志文件(精简了DEFAULT LOCK部分)如下:

RecoveryManual.html恢复说明文件内容如下:

静态分析

参数获取

样本的第一个函数就是处理命令参数的函数,进来后可以看到一连串的参数匹配:

创建日志文件

参数获取完成后,进入下一个函数内,该函数首先判断用户权限,然后获取样本路径,直接在该路径后添加.log创建日志文件:

写入系统信息

读取console参数,决定是否终端显示日志,然后向日志文件写入当前版本及系统信息:

初始化

LockerInit()将初始化恶意程序,提升权限、生成密钥

然后生成RecoveryManual.html

终止服务

如果未输入network且未输入nokill参数,则杀死指定服务

服务列表为:包含字符串SQLdatabasemsexchange的服务

终止进程

使用ZwQuerySystemInformation获取当前进程列表。

然后进行列表比对,杀死指定进程

进程列表如下:

"msftesql.exe"、"sqlagent.exe"、"sqlbrowser.exe"、"sqlwriter.exe"、"oracle.exe"、"ocssd.exe"、"dbsnmp.exe"、"synctime.exe"、"agntsvc.exe"、"isqlplussvc.exe"、"xfssvccon.exe"、"sqlservr.exe"、"mydesktopservice.exe"、"ocautoupds.exe"、"encsvc.exe"、"firefoxconfig.exe"、"tbirdconfig.exe"、"mydesktopqos.exe"、"ocomm.exe"、"mysqld.exe"、"mysqld-nt.exe"、"mysqld-opt.exe"、"dbeng50.exe"、"sqbcoreservice.exe"、"excel.exe"、"infopath.exe"、"msaccess.exe"、"mspub.exe"、"onenote.exe"、"outlook.exe"、"powerpnt.exe"、"sqlservr.exe"、"thebat.exe"、"steam.exe"、"thebat64.exe"、"thunderbird.exe"、"visio.exe"、"winword.exe"、"wordpad.exe"、"QBW32.exe"、"QBW64.exe"、"ipython.exe"、"wpython.exe"、"python.exe"、"dumpcap.exe"、"procmon.exe"、"procmon64.exe"、"procexp.exe"、"procexp64.exe"

加密文件

根据/NOLOCK参数,选择加密函数,默认是执行第一条:

进入加密功能函数,首先是做驱动器判断:

加密文件列表获取

扫描文件列表时,将进行文件夹名称和文件名判断,如果文件夹中未包含RecoveryManual.html则创建:

ResultCheckDir文件夹检查,如果满足以下要求,则跳过该文件夹(保留基础服务):

查看off_14000A100内容得出black_list文件列表如下:

":\\Windows\\",":\\System Volume Information\\",":\\$RECYCLE.BIN\\",":\\SYSTEM.SAV",":\\WINNT",":\\$WINDOWS.~BT\\",":\\Windows.old\\",":\\PerfLog\\",":\\Boot",":\\ProgramData\\Microsoft\\",":\\ProgramData\\Packages\\","$\\Windows\\","$\\System Volume Information\\","$\\$RECYCLE.BIN\\","$\\SYSTEM.SAV","$\\WINNT","$\\$WINDOWS.~BT\\","$\\Windows.old\\","$\\PerfLog\\","$\\Boot","$\\ProgramData\\Microsoft\\","$\\ProgramData\\Packages\\","\\WindowsApps\\","\\Microsoft\\Windows\\","\\Local\\Packages\\","\\Windows Defender","\\microsoft shared\\","\\Google\\Chrome\\","\\Mozilla Firefox\\","\\Mozilla\\Firefox\\","\\Internet Explorer\\","\\MicrosoftEdge\\","\\Tor Browser\\","\\AppData\\Local\\Temp\\"

数据文件夹"Program Files""Program Files (x86)""ProgramData""SQL"

ResultCheckFile文件名检查如下,如果文件小于最小,大于最大,或者是指定后缀名则跳过该文件:

后缀名检查如下:

查看数组可知suffix_list如下:

"exe","dll","sys","msi","mui","inf","cat","bat","cmd","ps1","vbs","ttf","fon","lnk"

然后扫描文件,以FindFirstFileWFindNextFileW来查找文件, 循环调用以确保所有文件夹都被扫描到:

文件加密流程

采用多线程启动加密主函数:

再多线程对目标进行加密:

将加密文件重命名成固定格式:

加密好密钥,然后将内容写入到文件中:

接着重新读取文件并加密:

蠕虫攻击

如果/NETWORK参数不为空,则启动蠕虫攻击:

蠕虫函数运行前会创建线程,等待事件:

然后会在域内寻找LDAP服务器:

当检查存在主机时,添加事件到线程中去:

事件将链接目标主机,然后进行蠕虫行为:

首先会复制自身到C:\\ProgramData目录下:

根据NetworkFlag的不同,选择不同的方式:

第一种方式是CreateServiceW

第二种方式是WMI(由于技术实力不达标,未看明白函数主体,但从上下文结构和错误提示信息得出方式):

自我删除

在蠕虫攻击结束后,退出前的最后一个函数是自我删除函数:

创建一个bat文件,取消文件系统、只读、隐藏属性,安静模式强制删除文件

attrib -s -r -h %1
:l
del /F /Q %1
if exist %1 goto l
del %0

在最后将利用CreateProcessW删除自身