勒索病毒弹窗(一款有着俄罗斯血统的勒索软件)


勒索病毒弹窗(一款有着俄罗斯血统的勒索软件)(1)

Zeppeli,一款采用Delphi编写的新生代勒索软件,被其开发者作为“勒索软件即服务”(Ransomware-as-a-Service,RaaS)在暗网出售。

鉴于代码和功能上的重合,Zeppeli一开始也被称为“Vega”(或“VegaLocker”),但Cylance威胁研究小组却在近日发文称,Zeppeli有很大可能并非出自Vega的开发者之手。

首个Vega样本于今年年初被发现,它在当时与一些金融恶意软件捆绑在一起,主要通过俄罗斯在线广告网站Yandex.Direct传播,而攻击目标则主要是俄语用户,且属于“广撒网”式攻击。

准确来说,Zeppeli的确是Vega的后续变种之一,但与之相关的活动却极具针对性(主要是一些欧洲及美洲的科技公司和医疗保健公司),且一旦检测到受感染计算机属于俄罗斯或其他前苏联国家/地区的用户,则会立即退出运行。

从主要攻击俄语用户到排除俄语用户,几乎已经说明Zeppeli和Vega的开发者并非同一伙人,而是这种勒索软件的源代码已经落入了其他黑客的手里。

Zeppeli样本分析

混淆

Zeppelin二进制文件中的所有敏感字符串都使用了一个伪随机32字节RC4密钥进行混淆,而密钥就位于每个加密字符串之前。

勒索病毒弹窗(一款有着俄罗斯血统的勒索软件)(2)

图1.经混淆处理的字符串

此外,有一些Zeppelin可执行文件还经过了多层混淆处理:

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

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

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

勒索病毒弹窗(一款有着俄罗斯血统的勒索软件)(3)

图2.停滞循环示例

勒索病毒弹窗(一款有着俄罗斯血统的勒索软件)(4)

图3.有效载荷解码shellcode

配置

Zeppelin的配置如下:

勒索病毒弹窗(一款有着俄罗斯血统的勒索软件)(5)

需要说明的是,上图中的这些选项以及RSA公钥和其他可配置字符串,可在生成二进制文件期间从Zeppelin构建器的用户界面进行设置:

勒索病毒弹窗(一款有着俄罗斯血统的勒索软件)(6)

图4.配置示例

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

  • 硬编码的公钥
  • GUID(不同的样本会有所不同)
  • IPLogger登记URL地址
  • 排除的文件夹列表
  • 排除的文件列表
  • 排除的扩展名列表
  • 要杀死的进程列表
  • 要运行的命令列表
  • 自述文件名
  • 自述文件内容

执行

Zeppelin二进制文件可以使用以下参数执行:

勒索病毒弹窗(一款有着俄罗斯血统的勒索软件)(7)

安装

初始执行时(不带参数),Zeppelin将检查计算机国家/地区代码,以确保其不会在以下国家的计算机上运行:

  • 俄罗斯联邦
  • 乌克兰
  • 白俄罗斯
  • 哈萨克斯坦

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

勒索病毒弹窗(一款有着俄罗斯血统的勒索软件)(8)

图5.检查受害者所在的国家

网络通讯

与Vega一样,Zeppelin允许攻击者通过IPLogger Web服务跟踪受害者的IP地址和位置。如果设置了相关选项,它将尝试将GET请求发送到使用IPLogger URL Shortener服务生成的硬编码URL来进行登记。

勒索病毒弹窗(一款有着俄罗斯血统的勒索软件)(9)

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

为了防止受害者重复登记,“HKCU\Software\Zeppelin”下编写有一个“Knock”值,Zeppelin可以通过检查该值来判断在后续运行中是否需要与该URL联系。

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

密钥生成

与Vega的另一个变种Buran相比,Zeppelin的加密算法并没有实质性的改变。它采用对称文件加密和随机生成每个文件密钥(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>

勒索病毒弹窗(一款有着俄罗斯血统的勒索软件)(10)

图7.加密密钥示例:攻击者的公钥(蓝色)、为受害者生成的公钥(绿色)和私钥(红色),以及它们的加密版本

首先,Zeppelin会使用攻击者的2048位RSA公钥(硬编码在二进制文件的.itext部分中)加密私钥。然后,使用随机生成的32字节RC4密钥进一步混淆受害者的RSA加密私钥及其对应的公钥,并将其保存到“HKCU\Software\Zeppelin\Keys”下的注册表中。

勒索病毒弹窗(一款有着俄罗斯血统的勒索软件)(11)

图8.加密受害者私钥

最后,使用受害者的RSA公钥模数的前11个字节创建唯一的受害者ID,并将第三个和第七个字符替换为破折号“-”。

文件加密

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密钥进一步对其进行混淆:

勒索病毒弹窗(一款有着俄罗斯血统的勒索软件)(12)

图9. 加密AES密钥

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

勒索病毒弹窗(一款有着俄罗斯血统的勒索软件)(13)

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

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

勒索病毒弹窗(一款有着俄罗斯血统的勒索软件)(14)

勒索病毒弹窗(一款有着俄罗斯血统的勒索软件)(15)

图11.经加密的文件

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

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

10.继续加密下一个文件

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

结论

勒索软件曾一度淡出我们的视线,但事实证明网络黑客并没有放弃它们,相反是在努力创新。

从“广撒网”式攻击到针对科技公司和医疗保健公司的高针对性攻击,Zeppelin背后的操控者用他们的行动告诉我们,勒索软件攻击的趋势正在从个人转向企业。

此外,勒索软件攻击的演变也在再次提醒我们,网络防御绝不容松懈,而网络安全培训则需要长期持续进行。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页