MountLocker
MountLocker 样本分析
样本信息
样本来源:MALWAREbazaar
相关报告:VirusTotal扫描报告
样本md5:3808F21E56DEDE99BC914D90AEABE47A
样本sha256:4A5AC3C6F8383CC33C795804BA5F7F5553C029BBB4A6D28F1E4D8FB5107902C1
行为结果
运行样本后,样本首先将对硬盘内的文件进行遍历,对部分文件进行加密,并以ReadManual.***
后缀结尾、创建日志文件和恢复说明html
。
MountLocker.exe.log
日志文件(精简了DEFAULT LOCK部分)如下:
RecoveryManual.html
恢复说明文件内容如下:
静态分析
参数获取
样本的第一个函数就是处理命令参数的函数,进来后可以看到一连串的参数匹配:
创建日志文件
参数获取完成后,进入下一个函数内,该函数首先判断用户权限,然后获取样本路径,直接在该路径后添加.log
创建日志文件:
写入系统信息
读取console
参数,决定是否终端显示日志,然后向日志文件写入当前版本及系统信息:
初始化
LockerInit()
将初始化恶意程序,提升权限、生成密钥
然后生成RecoveryManual.html
:
终止服务
如果未输入network
且未输入nokill
参数,则杀死指定服务
服务列表为:包含字符串SQL
、database
、msexchange
的服务
终止进程
使用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"
然后扫描文件,以FindFirstFileW
和FindNextFileW
来查找文件, 循环调用以确保所有文件夹都被扫描到:
文件加密流程
采用多线程启动加密主函数:
再多线程对目标进行加密:
将加密文件重命名成固定格式:
加密好密钥,然后将内容写入到文件中:
接着重新读取文件并加密:
蠕虫攻击
如果/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
删除自身