第一次分析勒索病毒

0x01 前言

​ 接到客户通知,有个PC中了勒索病毒,领导让尽量分析一下给客户个回复,着急的我赶紧翻书翻教程,一顿qwer,最终还是没能将文件恢复,但是分析过程中又学习了一些知识,借此分享。

先附下加密后的截图

中病毒后

0x02 样本信息

  • 程序名: 7407.tmp.exe

  • 样本大小:445952

  • MD5:b65014814bbbd09367df4a86c0d4204d

  • 加壳混淆:UPX 0.89 - 3.x

  • 在线检测

    在线AV检测

  • 分析工具:OD、X32dbg、IDA、火绒剑、微步在线

0x03 监控运行分析程序行为

  1. 自身复制

自身创建

  1. 修改注册表

修改注册表

  1. 监控单个文件的操作流程

一个文件的流程

  1. netstat监控无网络行为
  2. import导入函数中无加密函数,怀疑没有使用公用的加密算法进行加密

0x04 脱壳后OD分析-进入误区

  1. 由于是UPX加壳,直接用脱壳工具就掉了
  2. GetTempFileNameA获取tmp目录

GetTempFileNameA

  1. getTempFile

getFileTempName

  1. 打印机的相关操作(不知道有什么用,反正是进入误区了)

设置默认打印机名称

到此,程序运行退出,文件也没加密,这就肯定有反调试了,但是OD有插件啊,怀疑程序对INT 3断点有反调检测,直接把所有断线都取消了重新设置一下:进入call后,在第二行下断点

INT3检测

此时发现程序还是会自动退出,同时文件也开始被加密了,查看进程列表和火绒剑,发现又多了一个7407.tmp.exe进程,调用位置也和调试的病毒程序一样。于是重新在 CreateProcessW下断点,刚开始病毒程序有其他反调检测,程序发现被调试时会重新起一个进程,后来通过火绒剑发现无调试时也有创建进程操作;

接着尝试在 WriteMemory下断点,这下找到了真实的病毒执行体

WriteProcess写进程

  1. dump真实病毒程序 PE头文件,找到OEP

真实病毒OEP

下一步在主程序使用ResumeThread恢复新进程前,使用X32DBG附加新进程;可以在ResumeThread处下断点,再附加新进程。

0x05 X32dbg分析-真实病毒文件

  1. 删除卷影副本

执行命令

  1. 在 WriteFile、CreateFileW、ReadFile、DeleteFileW、GetWindowsDirectoryA处下断点,运行程序,断下来后,回溯进入程序领空

    此时找到sub_402880为病毒进程加密一个的整个操作

勒索病毒主要CALL

  1. 往下翻,找到主要的加密(计算)依据 (key) sub_4034C0

加密依据key

  1. 找到加密CALL,这里确定是加密CALL的原因是,执行这个CALL后,发现之前读取到文件内容的Buffer区域中,被写入了新的数据,且该数据和文件被加密后的16进制内容相同。

a. 读取到的文件内容

读取文件的数据

b. 执行了sub_403960后数据变化

加密后c. WinHex查看加密后文件

tass_liehuHEX查看

  1. 根据sub_403960执行前压栈信息,发现有一个重要的计算依据,可以叫做加密key,由 第三步sub_4034C0得到

参数

  1. 尝试分析加密参数生成、文件内容加密的计算方法 – 没成功,有些复杂

a. key 值计算CALL内部

key值计算

对比IDA Pro

IDA-key计算call

b. 加密CALL内部

加密CALL内部

对比IDA Pro

加密文件内容

到此,发现key值也有一个动态的计算依据,这个需要重新回溯,而且计算过程比较麻烦,所以结束了。

0x06 总结

  1. 写注册表操作

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\7407.tmp.exe

  2. 自身复制

    C:\Windows\System32\7407.tmp.exe
    C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\7407.tmp.exe
    C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\7407.tmp.exe

  3. 病毒不会蠕虫传播、无明显的网络行为

  4. 没有加密操作,只是自定义了一些函数,对文件内容读取、运算,写入新文件,删除源文件

  5. 目前测试火绒杀毒不能识别病毒文件

分析到这,通知用户在中毒机器上 杀掉所有 7407.tmp.exe进程,删除对应注册表、自身复制的文件,使用磁盘恢复工具尝试一下能不能恢复文件。

0x07 分析过程中的一些小知识点

  1. 调试时发现反调插件已经有了,还是一调试就退出,先尝试把异常忽略关闭,看看是否可行;同时考虑程序检测导入函数是否被下断点(原因是OD在设置CC断点时,会将对应位置的机器码修改为 CC01,反调试程序会检测这个位置),这时可以尝试在CALL内第二行设置断点
  2. 对于自身启动新进程,通过内存将真实文件内容写入的方式,可以通过火绒剑一步一步监控,再找对应的API函数,下断点调试
  3. OD中找到一个函数,想要在IDA中找到对应位置,因为IDA有伪代码,一般情况,直接跳转地址,发现找不到,此时,使用 函数地址 - OD中基址 + IDA基址 ,再使用G跳转,也可以找到特征字符,在IDA中使用 alt + b搜索位置