2018年9月27日,GandCrab勒索软件称发布了V5版本。本文对GandCrab V5版本进行分析。
GandCrab V5版本使用了许多机制来感染系统。下图是GandCrab的行为概览。
GandCrab有许多的entry vectors:
与其他勒索软件一样,GandCrab的目标是加密受感染系统上的所有文件,等用户支付赎金后再将这些文件解锁。开发者要求受害者以加密货币的形式支付赎金,因为加密货币难以追踪而且可以快速变现。
恶意软件一般都是打包的,研究人员看到过含有DLL的.exe格式的变种。GandCrab也是一种有效的勒索软件即服务,其运营者可以选择需要的版本。
V5.0版本一共发布过两个版本。
第一个版本由于编译时的重大错误,主要运行在win7及之后的平台上。V5.0利用两个漏洞来进行权限提升。首先检查操作系统的版本和进程的TokenIntegrityLevel类,如果SID Subauthority是SECURITY_MANDATORY_LOW_RID (0x1000),并且通过mutex值检查,就尝试执行漏洞利用。
第二个版本是黑客SandboxEscaper今年8月在Twitter和GitHub上发布的漏洞利用:
该漏洞利用尝试使用Windows操作系统处理高级本地过程调用(advanced local procedure call)不当时任务系统(Task System)的漏洞。GandCrab作者称没有CVE的漏洞利用,但实际上有CVE-2018-8440。该漏洞利用影响win7到win10的服务器。更多参见对CVE-2018-8440的分析。
在V5.0的第一个发布版本中,恶意软件作者用正常的函数调用来写利用代码。因此编译时,二进制文件的IAT充满了调用所需的DLL。而DLL并不存在于Windows Vista和XP系统中,因此恶意软件不能运行在win7以前的系统中,编译时就会出错。
xpsprint.dll不能运行在Windows XP和Vista中
使用直接调用的漏洞利用
该版本在加密了用户的文件后会发布一个HTML文件,但该文件没有加密用户文件所需的信息,所以该文件是有缺陷的。
第二个发布的版本使用动态调用,并混淆了漏洞利用中的字符串,如下图所示。
使用动态调用和混淆字符串的漏洞利用
第二个漏洞利用涵盖了CVE-2018-8120
,可以在win7、Windows server 2008 R2和Windows server 2008上进行权限提升。因为system
进程token
的对象有错误,改变了恶意软件中的token
,最终导致恶意软件以system
权限运行了。
执行CVE-2018-8120漏洞利用
恶意软件会检查操作系统的版本和用户的类型,以确定在应用漏洞利用前是否可以获取进程的token提权信息。在一些案例中,是不能成功感染的。比如,在Windows XP系统中,v5的第二个发布版本可以允许,但是不能加密文件。
研究人员和Lemmou发现了Version 5.0.2中的问题,对注册表做一些修改就可以使恶意软件正常运行,但白帽怎么可以帮黑客修复恶意软件呢。但第二个版本使用的扩展是随机的5个字母,而不是之前版本中看到的.CRAB
或.KRAB
扩展。恶意软件会将该信息以二进制数据的形式保存在ext_data\data
中的一个新注册表中,值为ext.
。
保存随机扩展名的新注册表记录
恶意软件会在HKEY_LOCAL_MACHINE的根key下创建新的记录。如果用户没有管理权限,就不能成功创建,然后将会将该记录放在HKEY_CURRENT_USER的根key中。文件加密后,一些样本中的该记录会被删除。
该版本修复了恶意软件中的一些内部bug,其他没有明显修改。
该本比将随机扩展名的长度从5个字符修改为10个,并修复了一些内部bug。文件不能加密漏洞仍未修复。
本节是对最新版本的GandCrab(10月4日的V5.0.2)恶意软件进行分析。从V5版本开始,恶意软件开始使用两个漏洞利用进行权限提升。
第一个漏洞利用对函数IsWoW64Process
进行动态调用来检测操作系统运行的32位还是64位。
对含有混淆字符串的IsWoW64Process的动态调用
根据结果,恶意软件有两个嵌入的DLL,用XOR 0x18
进行简单加密操作。
解密DLL来加载漏洞利用并修复header
恶意软件作者用fuzzing技巧来绕过检测:DLL的前2个字节是垃圾信息,在之后的版本中修复了。
解密和加载漏洞利用后,DLL会在系统中创建一个mutex
和一些管道来与主恶意软件进行通信。恶意软件会创建一个DLL之后读取的管道,并准备一些字符串作为DLL的mutex
字符串。
为DLL准备字符串
DLL的这些字符串有dummy string
(虚拟字符串)。
创建新的mutex并重启进程
恶意软件开始时会检查该mutex
。函数返回的1
或0
却决于是否可以打开mutex
。然后检查结果,如果mutex
可以打开,恶意软件就不会检查版本并不会用这两个漏洞利用来进行提权。
打开新mutex来检查是否有必要运行漏洞利用
GandCrab V4.x版本之后,恶意软件会在之后检查版本。如果是Vista或之后版本,会尝试获取TokenIntegrityLevel
类并重启二进制文件来提权,并以runas
应用调用ShellExecuteExW
。如果系统是Windows XP,代码就会继续正常流。
并不会为主恶意软件创建mutex
,mutex
是为利用漏洞加载的DLL创建的。为了更好地理解,看一下下面的IDA片段:
解释mutex检查和漏洞利用
本版本还修改了桌面墙纸,是在运行时创建的,并用加密文件的扩展填充。勒索信文本或HTML的名为<extension_in_uppercase>_DECRYPT. <txt|html>
和机器用户名。
运行时创建新墙纸
检查用户名,如果用户是SYSTEM
,恶意软件就在墙纸上显示USER
。
检查墙纸的用户名
在文件夹 %TEMP%
中创建名为pidor.bmp
的墙纸:
在temp文件夹创建墙纸
这是墙纸名所用的字符串,检查用户名和格式的字符串:
墙纸名和特殊字符串
最后,对所有用户设置墙纸:
修改墙纸
恶意软件会检查系统语言,解密字符串,并根据系统语言写出对应的勒索信。
独立研究员Twitter用户Valthek创建了一些非常有效的免疫工具,可以预防GandCrab 4.x 到5.0.2不被加密。
免疫工具:https://29wspy.ru/reversing.html
对Version 4.x版本,删除影子卷是不可避免的,但至少文件本身是安全的。
对Version 5.x版本,加密文件是可以避免的,但创建和修改墙纸无法避免。恶意软件不能创建随机扩展来加密文件,但是这些随机字符串已经准备好的。如果墙纸在%TEMP%
文件夹中,运行免疫工具可以移除墙纸。
免疫工具有不同的版本,有的有驻留机制,有的没有驻留机制。有驻留机制的工具在每次运行时,会特殊的文件夹中创建一个随机的文件名并将特殊的随机记录写入注册表中。这样,机器就可以保护免费恶意软件的威胁。