前言
黑莓的安全研究部门最近发现了一种新型勒索软件,攻击了欧洲一家教育机构。与迄今为止发现的大多数勒索软件不同的是,这种新的勒索软件模块被编译成一种Java图像文件格式(JIMAGE)。JIMAGE是一种存储自定义的JRE映像的文件格式,它的设计是为了在运行时被Java虚拟机(JVM)使用。
Tycoon是针对Windows和Linux的多平台Java勒索软件,至少从2019年12月开始就在野外被观察到。它以木马Java运行时环境(JRE)的形式部署,并利用晦涩的Java图像格式在安全环境中运行。
人们观察到Tycoon背后的攻击者利用高度定向的传递机制渗透到教育和软件行业的中小型公司和机构,在那里他们会对文件服务器加密并索要赎金。然而,由于公共RSA私钥的重用,在早期的变体中可以恢复数据而不需要支付。
发现过程
BlackBerry研究与情报小组与毕马威(KPMG)的UK Cyber Response Services合作,最近发现了一种用Java编写的新勒索软件。该勒索软件被部署在针对一个组织的有针对性的攻击中,该组织的系统管理员的域控制器和文件服务器受到攻击后,被锁定在他们的系统之外。在对受感染的系统进行取证调查之后,很明显,最初的入侵是通过面向互联网的RDP跳线服务器发生的。
下图说明了攻击者如何设法获得初始访问权并开始感染整个场所的系统:
面向互联网的RDP服务器的事件后分析无法执行,因为它已被还原。但是,研究人员对受害设备的分析表明,攻击者使用的某些技术是异常且值得注意的:
1. 为了在受害者的设备上实现持久性,攻击者使用了一种称为 “图像文件执行选项”(IFEO) 注入的技术。 IFEO设置存储在Windows注册表中。这些设置使开发人员可以选择在目标应用程序执行期间通过调试应用程序的附件来调试软件。
2. 然后,在操作系统的Microsoft Windows屏幕键盘(OSK)功能旁边执行后门操作:
攻击者使用ProcessHacker实用程序禁用了组织的反恶意软件解决方案,并更改了Active Directory服务器的密码。这使受害者无法访问其系统。
大多数攻击者文件都带有时间戳,包括Java库和执行脚本,并且文件日期时间戳为2020年4月11日15:16:22:
最后,攻击者执行了Java勒索软件模块,对所有文件服务器进行了加密,包括连接到网络的备份系统。
攻击过程
Tycoon勒索软件以ZIP存档的形式出现,其中包含Trojanized Java Runtime Environment(JRE)构建。该恶意软件被编译为Java映像文件(JIMAGE),位于构建目录中的lib/modules。
JIMAGE是一种特殊的文件格式,用于存储自定义JRE映像,该映像设计用于Java虚拟机(JVM)在运行时使用。它包含支持特定JRE构建的所有Java模块的资源和类文件。该格式最初是在Java版本9中引入的,并且记录很少。与流行的Java存档格式(JAR)不同,JIMAGE主要位于JDK内部,很少被开发人员使用:
OpenJDK9 jimage实用程序可以提取和反编译Java图像文件:
提取后,勒索软件映像包含与一个名为“tycoon”的项目相关的三个模块:
ZIP存档的内容(左)和反编译的Java模块JIMAGE的结构(右)
勒索软件是通过执行shell脚本触发的,该脚本使用java -m命令运行恶意Java模块的Main函数。
恶意的JRE构建包含此脚本的Windows和Linux版本,这表明也针对Linux服务器发起过攻击:
用于执行勒索软件的Shell脚本和Java“发布”文件
配置
恶意软件配置存储在项目的BuildConfig文件中,并包含以下信息:
1. 攻击者的电子邮件地址;
2. RSA公钥;
3. 赎金说明的内容;
4. 排除列表;
5. 要执行的Shell命令列表
示例配置值
BuildConfig文件的一部分
攻击行为
在执行时,恶意软件将运行一组在BuildConfig文件中指定的shell命令:
将使用系统UUID值的SHA256哈希值中的前四个字节为每个受害者生成一个install_id值,为了获取UUID,恶意软件执行以下wmic命令:
加密路径列表可以作为参数传递,或者,该恶意软件将生成系统中所有根路径的列表,这将为路径列表中的每个项目创建一个单独的加密线程。
加密过程完成后,恶意软件将通过覆盖每个加密路径中的已删除文件来确保文件不可恢复。它使用嵌入式Windows实用程序cipher.exe来完成此任务:
安全删除原始文件
文件加密
这些文件使用AES-256算法在Galois/Counter (GCM)模式中进行加密,并使用16字节长的GCM身份验证标记,以确保数据完整性。使用java.security.SecureRandom函数为每个加密块生成一个12字节长的初始化向量(IV)。加密块的大小在BuildConfig中指定,并设置为10 MB,而模式设置则指定要在其中处理文件块的模式。通过跳过较大文件的部分,攻击者加快了加密过程,同时破坏文件,使其无法使用。
对于每个加密路径,使用java.security.Secure.Random函数生成AES-256密钥数组。每个路径的最大密钥数是在BuildConfig中设置的,并且在样本之间可能有所不同。每个文件(或文件块,如果文件大于块大小)则使用不同的AES密钥加密,然后使用攻击者的RSA-1024公钥加密,然后保存在块元数据块中:
AES密钥生成
添加到每个加密块的元数据包含以下内容:
1. BuildConfig中指定的标头值
2. 块索引(8个字节);
3. 块大小(8个字节);
4. 每块生成的AES IV(12字节);
5. AES GCM标签(16字节);
6. RSA加密的AES密钥方案(128字节),包含:
6.1 受害者ID(4个字节)
6.2 AES密钥(32字节)
6.3 受害人ID和AES密钥的SHA512哈希(64字节)
带有突出显示的元数据的加密文件
由于使用非对称RSA算法对安全生成的AES密钥进行加密,因此文件解密需要获得攻击者的私有RSA密钥。尽管从理论上讲可以分解1024位RSA密钥,但尚未实现,并且需要非凡的计算能力。
但是,在 BleepingComputer 论坛上寻求帮助的一名受害者发布了一个RSA私有密钥,该密钥大概来自于从攻击者那里购买的受害者。事实证明,此密钥可以成功解密受最早版本的Tycoon勒索软件影响的某些文件,该软件向加密文件中添加了.redrum扩展名:
解密的AES密钥元数据:install_id(红色),AES密钥(绿色),sha512哈希(蓝色)
使用解密的AES密钥恢复.redrum文件
不幸的是,它不适用于最新的“happyny3.1”版本,该版本在加密文件中添加了.grinch和.thanos扩展名。
总结
恶意软件编写者一直在寻找新的秘密运行方式,它们正逐渐摆脱传统的混淆技术,转向不常见的编程语言和晦涩的数据格式。研究人员已经看到以Java和Go这样的语言编写的勒索软件有了大幅度的增长。这是研究人员遇到的第一个示例,该示例专门滥用Java JIMAGE格式来创建自定义的恶意JRE构建。
Tycoon已经在野外生存了至少六个月,但受害人数似乎有限。这表明该恶意软件可能具有很高的针对性。
部分电子邮件地址的重叠,以及赎金书的文本和加密文件的命名约定,表明Tycoon和Dharma/CrySIS勒索软件之间存在某种关联。
如果你的文件未损坏,且文件已使用强大的密码算法进行了修改和加密。则此修改是可逆的。解密文件的唯一方法是购买解密软件和私钥。使用第三方软件还原文件的任何尝试都会对你的文件造成致命影响。
注意!你只有24小时的时间通过电子邮件给研究人员写信,否则你的所有文件都将丢失。
IOC