前言
Roger是近期较为活跃的一款勒索病毒,隶属于Phobos家族。Phobos家族通常通过RDP暴力破解+人工投放的方式进行攻击。
攻击者成功入侵后,通常会关闭系统的安全软件防护功能,运行勒索病毒,加密后会修改文件后缀为[原文件名]+id[随机字符串]+[邮箱地址].ROGER,目前该勒索无法解密。
行为概述
勒索病毒运行后,创建互斥体,接着遍历数据库,邮件,办公软件等相关进程,并中止查询到的进程,解除文件占用,以保证加密文件成功。
之后运行加密模块。与此同时,内存解密出勒索信息、需要加密文件后缀名、以及被加密文件随机后缀等。之后遍历系统文件目录,加密相关文件,最后弹出勒索信息。
值得关注的是,该勒索病毒在运行过程中会进行自复制,并在注册表添加自启动项,如果没有清除干净系统中残留的病毒体,重启后很可能会遭遇二次加密。
样本分析
开始正式将分析之前,要说明以下,由于样本来源的特殊性,这里并没有将样本的hash信息公布。
反调试保护
首先是有一层upx的外壳,用upx提供的脱壳工具来搞定。
接下来的分析让我差点蒙了,感觉这就是一个正常的图形化程序代码,如果不是我提前知道这是个勒索软件,估计就被骗过去了吧。
不得不说,Roger新变种勒索在反调试上是做的真好,第一层通过upx加壳保护,第二层通过正常图形化代码伪装,但最终还是被API断点拦下。
紧接着获取VirtualAlloc的地址,用于分配新的内存来存储内部数据。
分配0x33000大小的内存,用于之后的解码操作,并执行相应的代码,这部分二进制代码,可以作为脱壳后的特征码,用于判断是否是roger勒索。
紧接着对该内存区域进行内存拷贝,拷贝的数据来源于内部数据解码之后的结果。
针对0x1900000下内存写入断点,发现了第二次对该数据写入的地方。
有意思的是,系统API通过这样的组合来调用,并且jmp eax被所有API调用,所以在jmp eax下断点,会看到所有的API调用。
通过EnumSystemGeoID的系统API触发了CreateProcessW,当返回到用户层时,发现已经进入了分配的内存区域。
进程注入
通过SetThreadContext来设置线程的EIP,此时EIP被设置为0x40A9D0。
在这里明显发现了进程代码注入的API组合,一般是以下这种组合情况。
1.使用CreateProcessW创建挂起进程。
2.GetThreadContext获取线程上下文信息。
3.SetTreadContext设置线程的EIP信息。
4.ResumeThread恢复线程执行代码。
通过对roger进程的查看发现,确实满足这样的一组API组合,并且进程也是挂起的状态。
子进程附加
通过附加的方式,附加创建的子进程roger,并跳转到0x40A9D0设置断点信息。
在进行其他操作之前,首先获取了几组系统环境变量值。
调试发现通过拼接的方式来获取并打开互斥量,如果没有就创建新的互斥量。
涉及的服务和进程
加密的文件类型几乎是全文件加密,由于特别多这里只列举了部分。
涉及的部分服务信息,多数为数据库相关服务,包括firebird、sql、mssql以及sqlserver等数据库服务。
涉及关闭的进程信息,如下图所示,主要包含数据库进程,以mysql、postgres和sqlserver等数据库进程。
设置开机启动
将roger勒索病毒在拷贝到多个位置,并设置对应的开机启动项。
首先是注册表的自启动,自启动的目录为SOFTWARE\Microsoft\Windows\CurrentVersion\Run。
其中又包含了HKEY_LOCAL_MACHINE和HKEY_CURRENT_USER,这里可以借助Autoruns来帮助完成查找。
接着是通过Start up目录实现开机文件自启动。
这里可以借助everything来帮助寻找roger文件。
Roger子进程通过进程内存替换完成了以下这些功能,包含目标进程和服务名以及实现多种方式的开机启动,最后删除掉系统的shadow,防止数据恢复。
这些功能也可以通过行为检测工具也能发现roger的相关行为,详细如下图所示。、
进程卡死
在刚开始调试的时候并不知道子进程roger会利用双管道实现对cmd进程数据的读写,发现创建cmd子进程后老容易卡死,并且是创建的双管道,可能是利用的管道对cmd进程进行数据发送的。
勒索提示生成部分
除此之外还没有看到最重要的文件加密部分,为此还得继续努力,终于通过调试发现了有趣的东西,首先发现的是加密后缀的生成。
紧接着看到了勒索提示文件名的生成,感觉应该稳了,继续慢慢调试。
最后是info.hta用于显示勒索信息。
遗憾的部分
最后的结果是悲伤的,虽然发现了roger启动了超级多的线程去执行最后的加密过程,但是由于某些未知的原因导致调试器卡死。
断点信息全部没了,没了,没了。
当时的内心是卧槽的,整个调试过程可能花了大概30分钟,突然以下就没了,而且还没有之前的调试信息。最后只能留下了一张生成勒索文件的截图。
啊,西湖的水,我的泪。
印象中调试最后部分,出现最多的就是CreateThread,并且其中有个线程用于完成生成勒索文件的部分。
其他关于加密部分,由于调试的耗时性,并没有再一次进行二次调试,也算是留下了一个小小的遗憾吧。
安全解决方案
1、由于Phobos家族会利用RDP(远程桌面协议),建议关闭3389等远RDP相关端口,如果确实有工作业务需要,建议进行白名单配置,只允许白名单内的IP连接登陆。
2、尽量关闭不必要的文件共享,或使用强密码对文件共享加密保护。
3、定期更换帐户密码,采用高强度的密码,避免使用弱口令密码,同时避免使用统一的密码。
4、对重要文件和数据进行定期异地备份。