洛奇是一个新ransomware(很可能是由Dridex gang发布的)).不足为奇的是,它准备充分,这意味着它背后的威胁行动者已经为它投资了足够的资源,包括它成熟的基础设施。让我们来看看。

分析样品

行为分析

Locky通常是通过MS Office文档(即DOC)或JavaScript的下载器发送的——在网络钓鱼活动中使用电子邮件附件。负载是一个32位Windows可执行文件,包含恶意核心包装在一个密码器/滴管(他们是各种各样的,有各种图标)。

locky_samples

部署完成后,它会消失并运行其删除的副本(重命名为svchost.exe)%临时%文件夹中。

加密过程

已加密的文件被完全重命名。名字的开头(前16个字符)是受害者的唯一ID。然后是文件的ID和扩展名.locky这是典型的勒索软件。

locky_renamed

加密内容的熵值很高,而且看不到任何模式。

下面:的原始字节的可视化square.bmp.左:未加密,右:加密。

enc_square1_bmpenc_060AADBAB9967724E8B8606C61B1DCCE

执行后,Locky以文本和位图形式显示赎金通知,并将后者设置为受影响用户的墙纸。

locky_wallpaper

文本本地化为系统中检测到的语言。翻译看起来足够专业(不是来自自动翻译),这可能表明威胁行动者的目标是多个国家-并准备了这个特殊的细节。参见示例翻译(波兰语,西班牙语)在这里

注册表键值

查看注册表,我们可以发现添加了一些元素。

输入autorun,在系统重启后自动启动恶意软件:

自动运行

受害人的具体数据-个人ID、RSA公钥和勒索信的文本将被显示:

locky_keys

存储在注册表中的公钥:

Locky_RSA1

受害者网站

每个洛奇受害者都有一个可以通过洋葱网络访问的网页。这些页面包含对受害者的进一步指示和对管理付款的支持。

locky_page

网络通信

Locky与CnC进行通信,但很难通过简单的嗅探工具进行分析,因为完整的通信是加密的:

enc_locky_cnc

关于协议的更多信息可以通过阅读代码来了解。

内部

每个洛奇的样品都装了一些地穴,所以一开始代码是不可读的。

locky_code然而,核心本身并没有那么模糊。在解包其防御的外层之后,我们可以看到有效的字符串和函数调用。他们对无法读取的网络捕获给出了一些解释。RSA密钥和勒索信是通过基于HTTP的协议从服务器获取的。当前示例提供了3个IP地址的列表。

hardcoded_ips

  • 31.41.47.37
  • 188.138.88.184
  • 85.25.138.187

此外,它利用了DGA -域生成算法(更多描述在这里).

通信协议

Locky的通信协议非常简单:它由一个POST请求和一个典型的参数组成键=值格式。然而,正如前面提到的,它们不是通过开放文本发送的,而是封装和加密的。首先,准备好请求并填充其参数。然后计算其MD5值。这两个元素被连接并加密在一起。

封装请求的示例(加密前):

packed_request

类似地,当响应到来时,首先对它进行解密,然后验证它的MD5——如果它通过了验证,然后解析它。

接收到的响应示例(加密):

response_encrypted_RSA

解密:

decrypting_RSA

解密的响应结果是一个RSA密钥提示它的哈希:

decrypted_RSA_and_hash

Locky使用3个命令(由密钥识别)行为):

  • getkey
  • gettext
  • 统计数据

我们在下面进一步详细解释了这些行动。

[getkey]初始注册和获取RSA密钥:

id = [16] act =getkey&affid = 1 lang = (2: lang)集团=服务公司(0 - 1)=(0 - 1)操作系统=[窗口名称]sp = (num) x64 = (0 - 1)

惟一的用户ID是16字节长的十六进制字符串,在本地创建(伪代码):

win_dir =GetWindowsDirectorymount_point_name =GetVolumeNameForVolumeMountPoint(win_dir) GUID = get_GUID(mount_point_name)id = md5sum.uppercase () .substr (0, 16)

后:

语言:通过函数获取:GetLocaleInfoGetUserDefaultUILanguage.系统信息获取GetVersionExGetSystemMetricsSM_SERVERR2),并翻译为内置列表。IsWow64Process用于识别系统是否为64位。

[gettext]获取赎金信息

id = [16] act =gettextlang =(2:朗)

[stats]发送加密文件统计信息:

id = [16] act =统计数据路径= [root_path]加密= (num)失败= (num)长度= (num)

攻击是什么?

Locky攻击3种类型的本地驱动器:固定,移动和ramdisks…

attacked_drives

以及网络资源。网络共享使用映射WNetAddConnection2

locky_net_resources

对于每一个驱动器,都会启动一个新的加密线程。

加密是如何工作的?

在勒索信中,攻击者声称Locky同时使用RSA和AES算法。看看代码,我们可以确认。密码学是使用Windows Crypto API实现的,并真正使用了上述算法。

首先,从服务器获取并导入RSA密钥(2048位):

importing_RSA_key

RSA密钥用于加密AES密钥,AES密钥是为每个文件随机生成的。

make_AES_key

下面—导入一个随机AES密钥(128位长):

AES_128

文件的处理首先是枚举它们并存储在一个列表中。然后按照这个列表进行加密。

encrypting_thread

每个线程收集关于加密文件的统计信息(即在特定路径中有多少文件被加密):

locky_stats

统计数据被加密并发送到C&C。

赎金注意

如前所述,赎金通知的语言检测语言GetUserDefaultUILanguage从服务器下载。

大多数勒索软件会以HTML格式发送勒索信息,然后在Web浏览器中打开它。Locky做了一些更有趣的事情:它渲染并设置位图作为壁纸。

locky_render_bitmap

位图呈现:

render_2壁纸设置由注册表键编辑:

wallpaper_settings

成功渲染并保存位图后,将其设置为墙纸使用SystemParamsInfo(action 0x14 = SPI_SETDESKWALLPAPER)

set_wallpaper

结论

《洛奇》在2月份推出,但现在已经很受欢迎了。由于它是一种广泛的攻击,由分发Dridex的相同实体进行,它很容易引起许多研究人员的兴趣。然而,如果仔细观察,我们可以说,它与普通勒索软件没有太大的不同。它看起来写得很扎实,准备得也很充分,但到目前为止,它并没有显示出太多的新意。

附录