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设置断点信息。在进行其他操作之前,首先获取了几组系统环境变量值。调试发现通过拼接的方式来获取并打开互斥量,如果没有就创建新的互斥量。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课