首页
社区
课程
招聘
[原创] 小K学病毒分析之【Cerber Ransomware】
2018-4-8 03:13 7207

[原创] 小K学病毒分析之【Cerber Ransomware】

2018-4-8 03:13
7207

目录


1. 样本信息

文件名称:C:\Users\Administrator\Desktop\b.exe
文件大小:262913 字节
修改时间:2017年2月22日 14:40:01
MD5 :0C1BC5B8A8DFE0424030D419AB5C2F8A
SHA1 :1BDF29827DADA442357C482A9E086DC3AE166728
CRC32 :F3CDDB62

 

PEiD识别不出编译语言和编译器版本,应该是经过加壳的文件。

2. 病毒流程


主要线程:
1.关闭某些进程,如sqlserver.exe,这样才能加密并删除数据库文件。
2.创建N个线程,扫描磁盘文件,获取可加密文件列表。
3.创建N个线程,用于加密文件,具体线程数根据本机的配置。
4.创建一个隐藏窗口,用于通知加密完毕。
5.修改主机桌面背景,打开提示文件并显示。
6.主线程等待执行完上述操作后,等待窗口结束。

3. 流程分析

3.1 自解压和IAT重建

病毒使用了加壳技术对自身进行了加密,同时还进行了混淆,增加了静态分析的难度,这里我跳过了壳的分析,手动脱壳到病毒的OEP。

 

这时候把程序dump下来会发现系统的API都看不到,因为程序并没有直接调用API,而已通过一个全局函数数组,通过上图函数加载函数地址并写入的全局函数数组中。程序其他地方直接调用全局函数数组中的函数。
这里dump有两个选择,一个是直接dump,不过因为混淆,增加静态分析的难度,另外一个做法就是执行完混淆还原部分,然后把混淆的函数调用给nop掉,接着dump下来,然后通过工具修复了IAT表,这样方便我后续使用IDA进行静态分析(本文采用了第二种)。
补充注意一点,由于病毒代码分布在各个区段中,所以要给每个区段执行权限,这里我dump下来之后使用工具给每一个区段读写执行权限了。

3.2 解密配置信息

接着程序运行起来了,程序获取自己的模块句柄和文件路径后,接着使用RC4算法解密获取配置信息,这部分同一放在一个函数中(另命名为f_DecryptConfigInfo)执行,该部分配置信息控制病毒后续行为和操作。

 

解密后的控制信息是一个json格式的文本,包含以下部分:

3.2.1 黑名单

包含感染文件类型黑名单、某些特定文件和特定目录以及部分使用地区。

3.2.2 关闭进程

可以看出主要是某些大众应用和数据库服务进程,关闭这些进程的目的是为了避免文件被占用导致加密操作失败。

3.2.3 加密设置

包含加密文件后缀,文件大小,是否启动多线程,核心线程数等等,不过部分参数会根据感染主机的情况进行适度调整。

3.2.4 RSA公钥


内容是经过了Base64加密后的内容,结果也验证猜想正确。下面是解密后的内容:

3.2.5 用户提示

这里有及部分组成,分别是语音提醒,壁纸更换提醒以及用户引导操作帮助文件,这里看出作者实在实在是用心良苦啊。

帮助文件也是使用了Base64进行了加密,解密后内容是HTML文件,具体样式如下:

3.2.6 服务器

服务器这块有两部分,一部分是接收感染主机的信息和通知。另外一部分是给用户用于交付勒索款的。

3.2.7 白名单

特别关照的目录。

3.3 读取机器信息

3.3.1 读取机器的GUID

病毒从注册表的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography中读取值名称为MachineGuid的值,本测试机器的GUID值为:
98abd045-77bf-4e0f-b5d2-3c805156c566
这里的以‘-’为分隔符,前4个字符串都有特定的用途:

  1. 病毒创建临时目录%temp%\98abd045
  2. 在前面的临时目录中创建两个文件,分别是77bf和4e0f,这两个都是后面加密算法用到的key。
  3. b5d2作为加密文件的后缀名

3.3.2 读取电脑名

读取电脑名,然后和字符串CERBER_CORE_PROTECTION_MUTEX通过计算生成类似下面格式的互斥对象名:

shell.{3817596D-ADF3-6E49-63ED-931789067A56}

3.4 网络信息发送

在进行加密前,会发送感染主机的信息,信息的格式见配置文件的data_start,同样使用了Base64进行加密,解密后内容如下:
{MD5_KEY}{PARTNER_ID}{OS}{IS_X64}{IS_ADMIN}{COUNT_FILES}{STOP_REASON}{STATUS}
测试环境win7 32位系统生成的内容如下:
"e80ab90e699a 00064 7 0 1 0 0 0"

格式标识 含义 长度(单位:字节)
{MD5_KEY} 77bf.tmp文件内容的MD5值的前面一部分 12
{PARTNER_ID} 不明(内容固定) 5
{OS} 操作系统版本 1
{IS_X64} 是否64位系统 1
{IS_ADMIN} 是否Administrator用户 1
{COUNT_FILES} 可感染文件总数 1
{STOP_REASON} 不明(内容固定) 1
{STATUS} 有枚举主机用户信息,具体代表啥没细看 1
 

然后会对上面的字符串进行MD5加密,得到的MD5串为:
808A4018E134F0629A88F82940969DF9
然后取前2字节'80',作为校验码,服务器使用它来验证收到上面部分的正确性,合成字符串'e80ab90e699a0006470100080'发送为服务器。

3.5 加密模块

3.5.1 加密文件名

文件文件名是由一个函数统一生成的,和原始文件并没有任何规律可言,后缀是3.3.1中所说的GUID的第4部分,本测试机为b5d2.

3.5.2 加密文件内容

从配置信息加载扫描配置,然后对每个磁盘创建一个扫描线程,获取符合加密条件的文件列表。

 

接着准备加密了,在加密之前会针对机器情况调整加密线程数,同时关闭部分进程,保证加密的运行。

 

接下来就是文件加密,加密过程有点蛋疼。

 

为了减少码字,我画了一张渣渣图,思路大致是清楚的。

4. 总结

算是补充完整了,本来应该是上个星期发的,不过生病状态不太好,所以晚了点。
有些细节没有深入,有兴趣的朋友可以自行研究。
嗯,这种加密的病毒感觉真蛋疼。
本人技术有限,如果分析有问题,请直接问指出来,谢谢 ^_^。

5. 附件

附件是病毒样本和分析文件,请小心。


[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

最后于 2018-4-22 22:22 被myangel编辑 ,原因:
上传的附件:
收藏
点赞0
打赏
分享
最新回复 (17)
雪    币: 1795
活跃值: (63)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
myangel 2018-4-22 13:35
2
0
第二个搞定,第三个走起。。
最后于 2018-4-22 13:35 被myangel编辑 ,原因:
雪    币: 14
活跃值: (263)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ZwTrojan 2018-4-22 20:28
3
0
楼主能说说脱壳时的入口点和导入表的起始位置和大小吗
雪    币: 1795
活跃值: (63)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
myangel 2018-4-22 21:12
4
0
ZwTrojan 楼主能说说脱壳时的入口点和导入表的起始位置和大小吗
你看看3.1部分说明,截图就是OEP部分,手动脱的话通过堆栈平衡的方法就可以了。
至于导入表,只能看到壳部分的导入表,其他系统API被壳给hook掉了
雪    币: 14
活跃值: (263)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ZwTrojan 2018-4-22 21:24
5
0
myangel 你看看3.1部分说明,截图就是OEP部分,手动脱的话通过堆栈平衡的方法就可以了。 至于导入表,只能看到壳部分的导入表,其他系统API被壳给hook掉了
我脱的时候重建输入表,然后修复之后的文件还没到入口点就停止运行了,不知道为什么
雪    币: 1795
活跃值: (63)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
myangel 2018-4-22 22:20
6
0
ZwTrojan 我脱的时候重建输入表,然后修复之后的文件还没到入口点就停止运行了,不知道为什么
对了,注意要给每个段运行权限,不然一跑起来就停止
雪    币: 14
活跃值: (263)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ZwTrojan 2018-4-22 22:29
7
0
myangel 对了,注意要给每个段运行权限,不然一跑起来就停止
哦我刚刚发现入口点在数据段,但是每次运行都要手动改页保护属性不是很麻烦吗..
雪    币: 1795
活跃值: (63)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
myangel 2018-4-22 22:31
8
0
ZwTrojan 哦我刚刚发现入口点在数据段,但是每次运行都要手动改页保护属性不是很麻烦吗..
使用工具修改区段的权限,一次修改而已。。
雪    币: 14
活跃值: (263)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ZwTrojan 2018-4-22 22:50
9
0
myangel 使用工具修改区段的权限,一次修改而已。。
感谢大佬指点
雪    币: 1795
活跃值: (63)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
myangel 2018-4-22 23:01
10
0
ZwTrojan 感谢大佬指点
共同探讨,共同学习
雪    币: 14
活跃值: (263)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ZwTrojan 2018-4-22 23:12
11
0
myangel 共同探讨,共同学习[em_12]
又出问题了,脱壳后在0x00403909处的CALL  004098CB,004098CB开始往下全是0,但是没脱壳之前是有内容的,难道是Dump的时候没有完全Dump出来吗?
雪    币: 1795
活跃值: (63)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
myangel 2018-4-25 19:09
12
0
ZwTrojan 又出问题了,脱壳后在0x00403909处的CALL 004098CB,004098CB开始往下全是0,但是没脱壳之前是有内容的,难道是Dump的时候没有完全Dump出来吗?
恩,你用什么工具dump的,有些dump插件可能会有dump不完整的情况
雪    币: 14
活跃值: (263)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ZwTrojan 2018-4-26 08:24
13
0
myangel 恩,你用什么工具dump的,有些dump插件可能会有dump不完整的情况
Od自带的Dump工具,之前不会出现这种问题
最后于 2018-4-26 08:28 被ZwTrojan编辑 ,原因:
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gxunda 2018-4-26 09:15
14
0
小白前来学习
雪    币: 1257
活跃值: (1424)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yllen 2018-4-26 18:44
15
0
Cerber  类多看看它们的UAC绕过姿势
雪    币: 1795
活跃值: (63)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
myangel 2018-4-26 20:42
16
0
yllen Cerber 类多看看它们的UAC绕过姿势
谢谢建议,会在这块留心的
雪    币: 220
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wx_Evil blacklist 2018-11-7 16:02
17
0
没看到有壳啊
雪    币: 220
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wx_Evil blacklist 2018-11-7 16:03
18
0
应该是不用微软的编译器,然后他是个loader装载了一个解密出来的PE
游客
登录 | 注册 方可回帖
返回