带混淆的勒索病毒

本文为看雪论坛优秀文章

看雪论坛作者ID:比海更深.



这是之前的勒索病毒样本,一直没有好好分析,在找工作期间决定好好分析,也当是复习,这是我第一次发帖,如有不足,请各位指出。



一、样本信息



文件名称:1.exe


编译时间: 2017年4月13日, 15:30:22


编译平台:Microsoft Visual C++ 6.0


是否有壳:


MD5::DBD5BEDE15DE51F6E5718B2CA470FC3F


SHA1::863F5956863D793298D92610377B705F85FA42B5


CRC32::1386DD7A


病毒行为:

1. 拷贝自身到系统目录
2. 添加服务自启动 
3. 自删除 
4. 建立指定套接字连接...



二、行为分析



样本无壳,但含附加数据:




用火绒剑分析病毒行为,可以猜测病毒 1.exe 先自我复制,重命名为 dlojuo,随后删除自身,修改注册表,并添加启动项。


这是病毒常见的傀儡进程操作,后面的是一些网络行为和加密目标文件,这里就不截图了。




OD加载样本,程序在执行完 004118D6 直接跑飞到 774D64F4,进入函数4118B4查看情况:




4118B4 里面全部都是密密麻麻的 JE 跳转,这里就得改变一下思路。火绒剑分析病毒会创建进程,直接下 CreateProcessW/A 断点,然后F9跑起来。



 

程序断下来了,可以看出,子程序以挂起方式创建,栈回溯发现地址太小,猜测是 VirtualAlloc申请出来的空间,一般申请空间后会使用 WriteProcessMemory 往空间写入,接着 VirtualAlloc 、WriteProcessMemory 下断点。




程序断了下来,申请的空间很小,写入内容为乱码,不是我们要找的内存,程序接着断在 Virtualloc:





申请的空间很大,写入的是PE文件,这块内存才是真正的病毒程序  dlojuo ,选中这块内存右键直接 dump:






将dump后的程序拖进 IDA、OD 详细分析

病毒会自我复制,在CopyFileW下断点,被复制的程序会在 C:\Users\用户名\Documents\下创建子程序,文件名为6位数随机字母,栈回溯去到4074CE




往上翻看后发现有拼接字符串的操作,重新运行程序发现这里拼接的是病毒程序路径,之后打开C:\Users\15pb-win7\Documents\1_dump.exe的程序,如果没有,则返回错误码0x2h,这里jnz跳转条件不成立,为了方便后续分析,这里更改为无条件跳转。






接着往下单步可以发现这里调用GetFunctionAddr获取API CreateMutexW创建互斥体,然后在下面call eax处调用,防止病毒程序多开,之后获取系统版本信息:




打开IDA 静态接着分析,接下来,一些不重要的函数就直接跳过不分析了:




发现 PowerRaising_4108F0 函数进行提权操作:




线程回调函数 sub_406EB0函数枚举当前运行的进程,查找是否有进程名为taskmg、regedi、procex、msconfi、cmd的进程在运行,若在运行,
则结束该进程。




线程回调函数 4072A0通过 ShellExecuteExW 执行程序:




动态调试后猜测是要删除程序,看不懂:




线程回调函数413180主要作用是连接网络,将数据发送被作者,下面是病毒用到的URL:






接着来到重点线程回调函数401710,往下分析来到 401920 ,该函数是整个程序的重点:




401920 函数获取驱动器信息,并调用 EnumDriveDir遍历磁盘:




进入EnumDriveDir函数,里面递归遍历磁盘文件:




EncodeFile_401CD0 函数是加密函数,可以判断上面的表达式是筛选符合后缀的文件,对其进行加密操作:




我之前通过IDA流程图找到关键函数sub_402170, 该函数作用是在内存中解密字符串,动态跟踪函数:




函数内先后解密出了大量字符串,动态跟踪时注意堆栈中出现的字符串:




观察调用call的返回信息可以发现有非常多的字符串 ,下面就不一一截图了,只截一些关键的字符串。




 被加密文件的命名:




生成勒索文本的字符串:




上面的那个判断就是根据这些后缀名进行筛选:






绕远了,下面接着分析 加密函数401CD0,进入查看:




这里需要配合OD动态调试:




设置文件属性,随后将文件读取到内存中,读取128个字节:




判断文件开头128位是否为空,为空则跳转调用RtlAllocateHeap申请堆空间,这个判断是 被加密文件的特征:




之后设置文件指针到文件头部,写入加密后的文本,写入成功程序继续运行,写入失败则释放堆空间,并关闭句柄:






成功后跳转401f01,第二次申请堆空间:




往下跑第二个函数就是勒索病毒所使用的加密算法:




IDA中显示:




算法片段:







三、解决方案



无解,病毒所使用的加密算法为RSA4096,经网上查询为不可逆,有能力的朋友可以自己研究研究。





四、防护建议



开启防火墙,及时给杀软和操作系统打补丁,别点来历不明的文件。




- End -






看雪ID:比海更深.

https://bbs.pediy.com/user-847202.htm 

*本文由看雪论坛  比海更深.  原创,转载请注明来自看雪社区



推荐文章++++

CVE-2017-11882理论以及实战样本分析

恶意代码分析之 RC4 算法学习

CVE-2017-0101-Win32k提权分析笔记

ROPEmporium全解

实战栈溢出漏洞


好书推荐





公众号ID:ikanxue
官方微博:看雪安全
商务合作:wsc@kanxue.com



“阅读原文”一起来充电吧!