1. 背景
新年伊始,勒索病毒再度在国内传播肆虐,腾讯反病毒实验室近期接到多起客户遭受勒索软件攻击的反馈,通过跟进分析发现黑客使用的勒索病毒全部为GlobeImposter家族的勒索病毒,黑客在突破企业防护边界后释放并运行勒索病毒,最终导致系统破坏,影响正常工作秩序。
经腾讯反病毒实验室分析,此次GlobeImposter勒索家族攻击事件显现出下列特点:
1. GlobeImposter勒索家族习惯以垃圾邮件方式和扫描渗透的方式进行传播,此次勒索病毒的攻击过程极可能为Windows远程桌面服务密码被暴力破解后植入勒索病毒。
2. 从勒索病毒样本层面看,此次的GlobeImposter勒索软件在代码上进行了一些改变。如以往该家族样本在加密之前会结束诸如”sql”,“outlook”,“excel”、”word”等进程,而此次的勒索病毒则没有这些对进程的检测的代码。
3. 该次的勒索病毒使用了RSA+AES加密方式,其中AES密钥的生成方式并不是通过传统的随机函数等生成,而是通过CoCreateGuid函数生成全局唯一标识符,并将该标识符做为AES加密算法的secret key。
在网上公开的针对此家族勒索病毒的分析报告中,对文档加密部分的勒索原理都语焉不详,公开的报告中对文档加密算法等细节总是也是一笔代过。鉴于此,本篇将对该样本的勒索原理进行阐述,重点将从技术角度对文档的加密过程进行分析。
2. 技术分析
2.1 勒索病毒整体加密过程
勒索病毒使用了RSA+AES加密方式,加密过程中涉及两对RSA密钥(分别为黑客公私钥和用户公私钥,分别用hacker_rsa_xxx和user_rsa_xxx表示这两对密钥)和一对AES密钥。黑客RSA密钥用于加密用户RSA密钥,用户RSA密钥用于加密AES密钥,AES密钥用于加密文件内容。
具体的加密过程为:勒索病毒首先解码出一个内置的RSA公钥(hacker_rsa_pub),同时对每个受害用户,使用RSA生成公私钥(user_rsa_pub和user_rsa_pri),其中生成的密钥信息使用内置的RSA公钥(hacker_rsa_Public)进行加密后,做为用户ID。在遍历系统文件,对符合加密要求的文件进行加密。对每个文件,通过CoCreateGuid生成一个唯一标识符,并由该唯一标识符最终生成AES密钥(记为file_aes_key),对文件进行加密。在加密文件的过程中,该唯一标识符会通过RSA公钥 (user_rsa_pub) 加密后保存到文件中。
黑客在收到赎金、用户ID和文件后,通过自己的私钥(hacker_rsa_pri)解密用户ID,可以得到user_rsa_pri,使用user_rsa_pri解密文件,就可以得到文件的file_aes_key,进而可以通过AES算法解密出原始文件。
下面对样本中使用的一些技术手段进行分析。
2.2 加密字符解密算法
软件中的字符及内置的公钥等信息都以加密的方式保存,加密使用的为AES算法,函数00409392为解密算法函数,函数包含5个参数,每个参数的含义如下:
参数1:返回值,解密后的内容
参数2:返回值,解密后的内容的长度
参数3:解密key
参数4:解密key的长度
参数5:文件句柄,如果文件句柄不为空,就将解密后的内容写入到该文件句柄对应的文件中
对aes_crypt函数,使用mbedtls_aes_crypt_ecb进行AES解密操作。
通过IDA的上下文交叉引用,看到共有七处调用了MyAESDecode函数进行解密内容,这七处调用功能解释如下:
2.3 解码排除文件夹与排除后缀名
恶意样本在勒索过程中对包含某些特殊字符的文件夹进行绕过,这些特殊的字符解码算法如下:
1. 使用“CC 0B E4 F0 69 F6 AE 6F FF CC BF D9 2C E7 36 EE 21 79 2B 85 83 39 D6 32 F5 77 26 8C 2C DD 38 4A”作为AES key,利用2.2中的解密算法,解密00401158处硬编码的0x210大小的数据内容,解密后的内容为硬编码的RSA公钥(hacker_rsa_pub)。
2. 对上面解密出来的RSA公钥(hacker_rsa_pub)计算SHA256,计算sha256的代码片段如下:
3. 使用sha256的值做为AES key,再次利用2.2中的解密算法,解密出字符串列表。
解密出的字符串列表:
2.4 用户ID的生成
勒索病毒运行后,会在用户机器上生成名为”60091F9FF415A9DD5FDFF0D880249E69F883A75D0242CE20D6E6A90CC5AEAFDE”的文件,此文件名为内置的公钥的SHA256哈希值。该文件中保存了用户ID信息。
用户ID的生成算法为:勒索病毒首先通过RSA-1024生成用户公私钥(user_rsa_pub和user_rsa_pri),将生成的密钥中的rsa.P与rsa.Q拼接上“.TRUE.HOWBACKFILE”等内容后,使用内置的公钥(hacker_rsa_pub)加密,结果作为用户ID,同时,生成的公钥(user_rsa_pub)会做为后面遍历文件系统时的加密key使用。可见,该用户ID也经过了RSA公钥(hacker_rsa_pub)的加密,在没有私钥(hacker_rsa_pri)的情况下,很难还原出RSA-1024的密钥内容。
2.5 文件加密过程
通过GetLogicalDrives得到盘符信息,对每个盘符开启一个线程进行加密,每个线程函数的参数包含三部分内容:当前盘符路径,加密key(user_rsa_pub),用户ID。
判断文件路径是不是属于排除路径:
函数sub_4094D9会实现对文件的加密,对文件的加密使用的是AES加密算法。下面将详细介绍该函数的过程
AES加密的KEY通过CoCreateGuid生成,CoCreateGuid函数功能为生成全局唯一标识符,勒索病毒使用该全局唯一标识符做为secret_key, secret_key用来生成AES的加密key.。
AES加密时的IV参数由当前文件的大小和文件路径共同生成。IV参数将MD(filesize|| filename )后取前16位。
将IV和secret key使用MBEDTLS_MD_SHA256计算8192次HASH,并将HASH结果做为AES加密的KEY
随后,使用内置的RSA公钥将guid进行加密,并将加密过的guid及用户ID写入到当前文件中。
最后,使用AES算法将文件内容加密。
AES加密算法过程如下:
2.6 自启动
勒索病毒通过在RunOnce注册表下新建名为BrowserUpdateCheck的键值,达到开机自启动的目的。部分代码如下
2.7 自删除
通过调用CMD /c del来实现自删除,部分代码如下
2.8 删除远程桌面连接信息及事件日志
解密bat文件后释放到临时目录下,并加载运行
解密出来的bat文件内容如下
@echo off vssadmin.exe Delete Shadows /All /Quiet reg delete "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default" /va /f reg delete "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers" /f reg add "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers" cd %userprofile%\documents\ attrib Default.rdp -s -h del Default.rdp for /F "tokens=*" %1 in ('wevtutil.exe el') DO wevtutil.exe cl "%1" |
Bat会删除远程桌面连接信息文件default.rdp,并通过wevtutil.exe cl命令删除日志信息
3. 总结
从上面的技术分析可以看出,对文件的加密使用的是AES加密,每个文件对应一个AES密钥,AES密钥由CoCreateGuid函数生成,该密钥经过用户公钥(user_rsa_pub)加密后保存在加密后的文件中。黑客使用CoCreateGuid函数生成key,一方面是考虑CoCreateGuid函数生成内容的唯一性与随机性,生成的全局唯一标识符做为key使用不易被猜解;另一方面可能是出于对反勒索安全软件的对抗。
最后,腾讯反病毒实验室提醒用户提高安全意识,不要随意打开来源不明的文件,或随意点击可疑的链接,对重要的数据文件定期进行非本地备份。对于可疑文件,可以使用电脑管家进行扫描,或者将文件上传哈勃分析系统(https://habo.qq.com/)查看文件是否存在风险。
针对企业用户,尽量关闭不必要的文件共享权限以及445,135,139,3389等不必要的端口。针对文中提到的勒索攻击事件,可以使用御界防APT邮件网关(https://s.tencent.com/product/yjwg/index.html)和御界高级威胁检测系统(https://s.tencent.com/product/gjwxjc/index.html)两个安全产品进行有效的检测与防护。