Zeppelin:攻击欧美科技和医疗公司的俄罗斯勒索软件
2019-12-25 12:28:56 Author: www.4hou.com(查看原文) 阅读量:756 收藏

导语:Zeppelin是一款基于Delphi的“恶意软件即服务”(RaaS),其前身为勒索软件Vega(VegaLocker),两者在代码和功能上多有重合,但Zeppelin所涉及的攻击场景则与Vega明显不同。

介绍

Zeppelin是一款基于Delphi的“恶意软件即服务”(RaaS),其前身为勒索软件Vega(VegaLocker),两者在代码和功能上多有重合,但Zeppelin所涉及的攻击场景则与Vega明显不同。

Vega样本于2019年初首次发现,曾在俄罗斯在线广告网站Yandex.Direct上与其他金融恶意软件捆绑分发,主要针对俄语用户,目标广泛没有强针对性。在这一年中,Vega也出现了几个新变种,每个版本都有不同的名称(Jamper,Storm,Buran等),其中一些有在地下论坛上出售。

Zeppelin是Vega的最新变种,首批观测到的Zeppelin样本编译时间戳在2019年11月6日之后,其目标是欧洲和美国的少数科技及医疗公司。所有Zeppelin样本在检测到机器为俄罗斯或其他前苏联国家/地区后都会退出运行。

Zeppelin具有高度适配性,可以部署为EXE、DLL,或封装在PowerShell加载程序中。样本托管在水坑攻击过的网站,PowerShell则托管在Pastebin上。有一些攻击是通过mssp(安全管理服务提供商)进行的,这与最近另一场Sodinokibi勒索软件的攻击事件具有很高的相似性。

攻击目标从俄语国家到西方国家的重大转变,以及受害者选择和恶意软件部署方法的差异,表明这种新的Vega勒索软件变种最终落到了不同黑客的手中,并被他们重新开发加以利用。

混淆

Zeppelin二进制文件中的所有敏感字符串都使用一个不同的伪随机32字节RC4密钥进行混淆,密钥在每个加密字符串之前:

图1:混淆后的字符串

字符串混淆是一种粗糙的多态性机制,因为每个生成样本都使用不同的RC4密钥。此举是帮助Zeppelin逃避检测并使分析复杂化。

尽管大多数样本都没有加壳,但研究人员也发现了具有额外多层混淆处理的Zeppelin可执行文件,混淆有三层:

使用一组随机API(通常与良性软件相关联)和卡住循环来改变代码大小,以欺骗启发式算法并超出沙箱范围。

第一阶段Shellcode,使用从硬编码DWORD值派生的静态1字节密钥进行简单的XOR编码。解码有效负载二进制文件和加载程序时,shellcode再使用1字节密钥进行XOR操作,但密钥在每一轮解密时都会发生变化。

第二阶段shellcode将有效负载二进制文件注入内存并执行:

图2:第一阶段混淆中的卡住循环示例

图3:解码有效负载

配置

勒索软件配置功能如下:

ID 名称 描述
1 (none) 作为DLL运行时:对所有驱动器和共享进行加密(与EXE相对); 与“Startup”选项不兼容。
2 IP Logger 使用IPLogger服务(iplogger [.] ru或iplogger [.] org)跟踪受害者的IP地址和国家/地区代码。
3 Startup 将自身复制到另一个位置,设置持久性,并使用“ -start”参数启动。
4 Delete backups 执行指定的命令; 用于停止某些服务,禁用恢复,删除备份和卷影副本等。
5 Task-killer 杀死指定的进程。
6 Auto-unlock busy files 尝试解锁在加密过程中似乎已锁定的文件。
7 Melt 退出之前,将自删除线程注入notepad.exe(删除可执行文件以及所有添加的注册表值)。使用0xDEADFACE代码退出。
8 UAC prompt 重新运行时,尝试提权(仅在设置为“Startup”时使用)。

上表这些功能选项,连同RSA公钥及其他可配置字符串,可在生成勒索软件二进制代码期间从Zeppelin builder的用户界面进行设置:

图4:配置示例

所有可配置的数据都存储在Zeppelin二进制文件的.itext节中,包括:

· 硬编码的公钥(模数和指数分开)

· GUID(每个样本有所不同)

· IPLogger签入的URL地址

· 排除的文件夹列表

· 排除文件列表

· 排除的扩展名列表

· 杀死进程列表

· 要运行的命令列表

· 自述文件名

· 自述文件内容

执行

勒索软件二进制文件可以使用以下参数执行:

参数 描述
<path to an existing file> 加密一个文件
<path to an existing directory> 加密指定目录中的文件
-start 跳过安装并执行恶意代码的第二阶段(即文件加密)
-agent <int> 作为代理运行; 在HKCU / Software / Zeppelin / Paths密钥下的值中指定的路径中加密文件,其中<int>是值的名称(连续数字以0开头)
(no parameters) 默认加密例程

安装

初始执行时(不带参数),恶意软件将检查机器国家/地区代码,以确保其不在以下国家运行:

· 俄罗斯联邦

· 乌克兰

· 白俄罗斯

· 哈萨克斯坦

根据构建过程中设置的选项,它将检查机器的默认语言和默认的国家调用代码,或者使用在线服务获取受害者的外部IP地址:

图5:检查受害者的国家

恶意软件在%TEMP%目录中创建一个空文件,扩展名为“ .zeppelin”,其名称为恶意软件路径的CRC32哈希。

如果设置了“Startup”选项,恶意软件将使用从活动进程列表中随机选择的名称将自身复制到%APPDATA%\Roaming\Microsoft\Windows目录中(忽略使用“install”或“setup”命令行参数)。

然后,使用随机生成的32字节RC4密钥对选定的名称进行加密,并对其进行base64编码(连同前缀密钥),将其保存到HKCU\Software\Zeppelin下的注册表值“ Process”。

通过注册表中的HKCU\Software\Microsoft\Windows\CurrentVersion\Run项设置持久性后,勒索软件将使用“ -start”参数从新路径重新执行自身。如果设置了“ UAC prompt”选项,它将尝试提权运行。

如果设置了“Melt”选项,则将自删除线程注入到新生成的notepad.exe进程中,并且该恶意软件将以代码0xDEADFACE退出。否则,它将仅以代码0退出。

网络通讯

像其前身一样,Zeppelin允许攻击者通过IPLogger Web服务跟踪受害者的IP地址和位置。如果设置了相关选项,则它将尝试将GET请求发送到硬编码URL(由IPLogger URL Shortener服务生成)进行签入。User-Agent字段id设置为“ZEPPELIN”,而referrer字段包含唯一受害者id,是在密钥生成阶段创建的:

图6:带有自定义标头的GET请求

为了防止受害者多次签入,HKCU\Software\Zeppelin下编写了一个“Knock”值0x29A(666),恶意软件通过检查该值是否存在来判断是否需要联系URL。

攻击者可以使用IPLogger Web服务查看受害者列表,并使用URL短链接将用户重定向到其他恶意内容。

密钥生成

与先前版本的Buran相比,加密算法没有实质性改变。它采用了对称文件加密和随机生成每个文件密钥的标准组合(CBC模式下为AES-256),以及用于保护会话密钥的非对称加密(使用自定义RSA实现,可能是内部开发的)。

首先,恶意软件将为受害者生成一对512位RSA密钥,并将它们以以下格式保存到内存中:

<N>{privatekey_modulus_hexstr}</N><D>{privatekey_exponent_hexstr}</D>
<N>{publickey_modulus_hexstr}</N><E>{publickey_exponent_hexstr}</E>

图7:加密密钥示例:攻击者的公共密钥(蓝色),生成的受害者的公共密钥(绿色)和私钥(红色),其加密版本和base64编码版本(黄色)

密码对中的私钥将使用攻击者的2048位RSA公钥进行加密,RSA硬编码在二进制文件的.itext部分中。然后使用随机生成的32字节RC4密钥(使用base64编码,连同前置的RC4密钥)进一步混淆受害人的RSA加密私钥及其对应的公共密钥,并将其保存到HKCU \ Software \ Zeppelin \ Keys下的注册表中。分别作为“Public Key”和“Encrypted Private Key”:

图8:受害者的私钥加密

然后使用受害者的RSA公钥模数的前11个字节创建唯一的受害者ID,并将第三个和第七个字符替换为破折号“-”。上面显示的密钥的示例ID为389-04C-3D7。

文件加密

Zeppelin将枚举所有驱动器和网络共享上的文件,以建立目录列表。根据二进制类型,它将使用WNetEnumResource API(如果以EXE形式运行)或以下命令(如果以DLL形式运行):

chcp 1250 && net view

对于排除文件/扩展名列表不匹配的每个文件,恶意软件将执行以下操作:

1. 将原始文件属性和访问时间保存到内存,并设置FILE_ATTRIBUTE_ARCHIVE

2. 在纯文本文件前添加“ 666”字符串

3. 生成随机的32字节AES对称密钥和16字节的初始化矢量(IV)

4. 在CBC模式下使用AES-256加密文件(仅前0x10000字节,其余文件内容保持未加密状态)

5. 使用受害者的公共RSA密钥对AES密钥进行加密,然后使用随机生成的32字节RC4密钥进一步对其进行混淆:

图9:AES密钥加密

6. 在加密文件前加上硬编码标记字符串,以及8字节长度的加密数据和8字节长度的原始数据(包括先前添加的3字节“ 666”字符串):

图10:加密的文件头;标记字符串(绿色)和文件大小(红色),后跟加密内容

7. 在加密文件内容之后附加以下信息:

长度 描述
4 下一个字段的长度
0x28 (40) 32字节RC4密钥,后跟8个加密的零字节
4 下一个字段的长度
0xBB (187) RC4混淆,RSA加密的AES密钥
4 下一个字段的长度
0x4F4 (1268) 受害者的私钥与攻击者的公钥不对称加密
4 要加密的数据的大小
8 原始文件大小
4 所有附加数据的大小

图11:加密的文件页脚

8. 重命名文件,附加受害者的唯一ID作为扩展名

9. 将文件属性和访问时间设置回原来的值

10. 继续下一个文件

如果Zeppelin作为可执行文件运行,则勒索软件首先将对当前逻辑驱动器上的文件进行加密,并使用“ -agent”参数生成许多后续进程。这些进程负责加密其他驱动器和网络共享上的文件。所有加密路径都存储在HKCU \ Software \ Zeppelin \ Paths注册表项下。

有趣的是,某些样本将仅加密前0x1000字节(4KB),而不是0x10000(65KB),这可能是个意外错误,或者是攻击者故意为之,加快加密过程的同时使大多数文件无法使用。

加密所有文件后,Zeppelin将植入赎金通知文件并将其显示在记事本中。文件名和内容可由攻击者配置。研究人员发现了几种不同的版本,从简短的通用消息到量身定制的都有。所有消息均指示受害者通过提供的电子邮件地址与攻击者联系。攻击者使用了几个与勒索软件有关联的安全电子邮件提供商,例如firemail [.] cc,Protonmail和Tutanota。此外,也有赎金票据提供了与.onion域相关联的电子邮件地址,该电子邮件地址只能通过Tor进行访问。

结论

勒索软件曾经一度衰落,但由于威胁行为者的创新努力,现在又重新崛起。Zeppelin背后的行动者通过对IT和医疗部门的目标进行高调打击,也在说明当前勒索软件的流行趋势是从个人转向组织。此外。勒索软件攻击的不断发生也在提醒我们,有效的网络安全解决方案应该是主动的、预测的、自适应的和半自治的。

本文翻译自:https://threatvector.cylance.com/en_us/home/zeppelin-russian-ransomware-targets-high-profile-users-in-the-us-and-europe.html​如若转载,请注明原文地址: https://www.4hou.com/web/22218.html


文章来源: https://www.4hou.com/web/22218.html
如有侵权请联系:admin#unsafe.sh