Sodinokibi勒索软件:详细研究

最近在新闻中谈到了Sodinokibi勒索软件,但很少有人深入研究此恶意软件的细节。 今天,我们将尝试更深入地了解Sodinokibi,考虑勒索软件的原理,以识别优先级向量,以保护信息系统免受新的威胁。



文字作者:Ravikant Tiwari和Alexander Koshelev

我们对Sodinokibi有什么了解?


Sodinokibi很可能是由以GandCrab家族勒索软件攻击而闻名的同一攻击者传播的,根据地下论坛的报告判断,该勒索软件将不再发展。

Sodinokibi使用Oracle WebLogic漏洞(CVE-2019-2725)来访问受害者的计算机。 一旦进入系统,恶意软件便会尝试以扩展权限运行自己,以便不受限制地访问PC的所有文件和资源...
Sodinokibi尝试不感染伊朗,俄罗斯和前苏联其他国家的计算机。

勒索软件程序使用AES和Salsa20算法来加密用户文件。 AES用于加密会话密钥以及发送到管理服务器的数据。

用户文件使用Salsa20加密。

为了生成和分发密钥,Sodinokibi在椭圆曲线上使用Diffie-Hellman算法。

进入计算机后,该病毒会立即从备份文件夹中删除所有文件。

目前,勒索软件要求0.32806964 BTC(≈2,500美元)来恢复对加密文件的访问。 此外,如果勒索赎金的人在4天内未支付,勒索者承诺将赎金提高一倍...

Sodinokibi如何运作?


我们在实验室研究了一个Sodinokibi实例。 勒索软件由一个定制的打包程序打包。 同时,即使在成功解压缩之后,代码中也没有可读行。 此外,该软件不会导入任何系统库或API。 因此,使用基于可读字符串和导入的API表的签名的静态防病毒软件将很难检测到它。

在使用RC4算法运行软件时,对API名称和其他参数进行了解密。 为了使检测更加困难的防病毒软件,该勒索软件使用DJB哈希而不是字符串本身对字符串执行操作...

初始化


Sodinokibi首先创建动态导入表。 首先,通过检查互斥锁的方法,该程序确信它是系统中的唯一副本。 检查后,它将使用存储在程序文件中的RC4解密JSON配置,并检查“ exp”键的布尔值。 如果其值为“ true”,则Sodinokibi会尝试启动漏洞利用程序。 在我们的样本中是如此,因此它发挥了利用漏洞的功能




解密的JSON配置

运行漏洞利用程序的代码将检查计算机上是否安装了2018年9月11日更新(KB4457138)。 此修补程序解决了以下许多漏洞。 如果不在计算机上,则Ransomware会根据执行恶意软件的平台来启动32位或64位Shellcode。 我们相信勒索软件正在尝试使用CVE-2018-8440向管理员提升特权。


片段1

修补程序KB4457138修复的漏洞列表:

补丁KB4457138修复了以下漏洞:

  • CVE-2018-8457,CVE-2018-8335,CVE-2018-8424,CVE-2018-8455,CVE-2018-8468,CVE-2018-8447,CVE-2018-8475,CVE-2018-8271,CVE- 2018-8440,CVE-2018-8464,CVE-2018-8469,CVE-2018-8421,CVE-2018-8442,CVE-2018-8367,CVE-2018-8443,CVE-2018-8465,CVE-2018- 8419,CVE-2018-8466,CVE-2018-8410,CVE-2018-8467,CVE-2018-8462,CVE-2018-8452,CVE-2018-8446,CVE-2018-8449,CVE-2018-8420, CVE-2018-8433,CVE-2018-8438,CVE-2018-8435,CVE-2018-8456,CVE-2018-8354,CVE-2018-8434,CVE-2018-8470,CVE-2018-8332,CVE- 2018-0965,CVE-2018-8315,CVE-2018-8439,CVE-2018-8392,CVE-2018-8425,CVE-2018-8393。


如果未在系统中检测到漏洞,并且该过程以常规用户身份继续运行,则将使用RUNAS命令来启动另一个具有管理权限的实例,但当前的实例将具有有限的特权。 完整的伪代码显示在下面的屏幕快照中。



在管理员模式下成功启动Sodinokibi之后,该软件将执行附加的初步检查,并弄清JSON配置中“ bro”键的值,并找出位置的国家/地区。 如果在计算机设置中设置了此类位置参数,它将不会尝试感染以下国家/地区的计算机。


提炼语言ID

例外国家列表

  • 罗马尼亚,俄罗斯,乌克兰,白俄罗斯,爱沙尼亚,拉脱维亚,立陶宛,塔吉克斯坦,伊朗,亚美尼亚,阿塞拜疆,格鲁吉亚,哈萨克斯坦,吉尔吉斯斯坦,土库曼斯坦,乌兹别克斯坦,Ta斯坦

*编者注:由于未知的原因,作者特别强调了俄罗斯的塔塔尔族地区

通过测试后,恶意软件会终止mysql.exe进程(如果已启动),以便获得对MySQL文件的访问权并对其进行加密。 之后,勒索软件使用vssadmin删除Windows的卷影副本,并使用bcdedit禁用Windows Recovery系统:

vssadmin.exe Delete Shadows /All /Quiet & bcedit /set {default}
recoveryenabled No & bcedit /set {default} bootstatuspolice ignorealfailures


在加密用户文件之前,Sodinokibi会搜索所有文件系统(包括网络文件夹)以查找名称为“ backup”的目录并将其永久删除。 有趣的是,在删除目录本身之前,恶意软件首先用随机字节集替换所有此类文件夹中的内容,以使原则上无法恢复。 幸运的是,Acronis Backup文件无法如此轻松地删除,因为它们在内核级别受到了保护,特别是为了防止勒索软件采取此类措施。

密钥生成


Sodinokibi使用Diffie – Hellman椭圆曲线生成和交换协议(ECDH)。 生成的会话密钥用于对称加密算法,并且使用不同的方法(AES和Salsa20)对不同类型的数据进行加密。

AES用于从用户计算机本地生成的一对私钥和公钥中加密私钥。 它还在通过网络传输期间加密数据。 Salsa20用于加密用户文件。

Sodinokibi包含两个不同的公钥,其中一个是JSON配置的一部分,第二个嵌入在二进制文件中。 这些公用密钥将用于加密在计算机上创建的专用密钥。 密钥生成和加密的具体步骤如下:

步骤1.从本地计算机上的私钥(秘密,随机数)和公钥生成会话对。


本地私钥和公钥生成

使用JSON配置中的公钥对步骤1中的私钥进行加密

步骤2.生成另一对私钥和公钥。

步骤3.使用步骤2中的私钥和公钥(pk密钥值),从JSON生成公钥,并对其进行哈希处理后,获得对称密钥。


使用共享密钥生成对称密钥

步骤4.生成16位IV(初始化向量)。

步骤5。使用在步骤3和步骤4中获得的密钥和IV,使用AES加密在步骤1中生成的私钥。

步骤6.计算加密的私钥的CRC32,在步骤5中进行了计算。

步骤7.将IV和CRC32添加到包含来自步骤5的加密私钥的缓冲区的末尾。

步骤8.将缓冲区保存到具有偏移量(标记为“ sk_key”)的关联文件中。


使用攻击者的公钥加密第1步中的私钥

使用二进制文件中包含的公钥对步骤1中的私钥进行加密。

步骤9.使用步骤3中嵌入在二进制文件中的另一个公共密钥重复步骤2至7。

步骤10.将缓冲区保存到内存中有偏移量的映射文件(标记“ 0_key”)
sk_key,0_key和pk_key相应地写入注册表,具体取决于程序接收的访问权限...

HKLM \ SOFTWARE \ RECFG \ sk_key或HKCU \ SOFTWARE \ RECFG \ sk_key
HKLM \ SOFTWARE \ RECFG \ 0_KEY或HKCU \ SOFTWARE \ RECFG \ 0_KEY
HKLM \软件\记录\ pk_key或HKCU \软件\记录\ pk_key

注册表中的加密密钥
Salsa20为单个文件生成密钥

步骤11 ,根据公钥和私钥生成一个新的对。

步骤12.使用在步骤2中创建的会话公共密钥生成一个共享密钥,并进行哈希处理以获取在Salsa20中生成密钥所需的下一个对称密钥。

步骤13.在Salsa20中安装一个256位密钥(32个字节)

步骤14.为Salsa20密钥生成一个8位IV

步骤15. Salsa20密钥生成

步骤16.使用Salsa20 key_state使用Salsa20加密用户文件。


每个文件的Salsa20密钥生成
对每个加密文件重复步骤11到16。

加密和解密插图


为了更好地理解密钥是如何在攻击者的计算机和受害者的计算机之间生成和传输的,您需要弄清楚Diffie Hellman算法是如何工作的-通过说明很容易做到。

加密过程



Diffie-Hellman椭圆曲线密钥交换(ECDH)


Sodinokibi中加密过程的详细说明

为了解密数据,将需要攻击者的私钥。 但是它们不会在任何地方发布,因此无法还原文件。

图片
解密过程(攻击者的秘密是他的私钥)

图片
解密用户文件的简化过程如下所示。

本地硬盘驱动器和网络文件夹上的文件加密


为了加密用户文件,Sodinokibi使用I / O完成端口并启动多个加密流,但不会超过计算机上处​​理器内核数量的两倍,并将这些流与专门创建的I / O端口相关联。 这些线程使用GetQueuedCompletionStatus Win API函数在开始文件加密之前等待数据包到达I / O端口。

一旦创建了流并等待I / O数据包到达,Sodinokibi就开始对所有本地驱动器和所有网络文件夹(不包括CDROM和RAMDISK)中的用户文件进行排序,并将它们分配给相应的I / O完成端口。 对于不在文件夹,文件和扩展名中的例外列表之外的所有文件,将调用AddFileToIoCompletionPort函数,然后调用PostQueuedCompletionStatus,此操作将执行传递给加密流,该流将等待I / O完成端口上的信息以开始文件加密。

AddFileToIoCompletionPort函数还会为每个要加密的文件生成一个唯一的Salsa20密钥,并将Salsa20密钥以及必须在加密后使用PostQueuedCompletionStatus Win API函数的lpOverlapped参数记录的其他元数据传递到加密流。

在处理了每个目录中的文件(例外除外)之后,将创建一个索要赎金的文件。 当要加密的文件用完时,线程进入循环并等待,直到加密和重命名的文件总数达到传输到I / O完成端口的文件总数为止。

最后,系统设置一个标志,该标志反映没有更多的文件要加密,并发送几个I / O数据包以指示过程已完成。 因此,可以停止正在等待数据的其他加密流。

图片

例外文件夹列表

  • “ $ windows。〜bt”
  • “英特尔”
  • “程序文件(x86)”
  • “程序文件”
  • “ Msocache”
  • “ $ recycle.bin”
  • “ $ windows。〜ws”
  • “ Tor浏览器”
  • “启动”
  • “系统卷信息”
  • “ Perflogs”
  • 谷歌
  • “申请数据”
  • “ Windows”
  • “程序数据”
  • “ Windows.old”
  • “ Appdata”
  • “ Mozilla”
  • 文件异常
  • “ Bootfont.bin”
  • “ Boot.ini”
  • “ Ntuser.dat”
  • “ Desktop.ini”
  • “ Iconcache.db”
  • 恩特尔
  • “ Ntuser.dat.log”
  • “ Thumbs.db”
  • “ Bootsect.bak”
  • “ Ntuser.ini”
  • “ Autorun.inf”
  • 扩展例外
  • “主题包”
  • 低密度脂蛋白
  • cr
  • 集成电路
  • “ 386”
  • “ Cmd”
  • “阿妮”
  • “高级”
  • “主题”
  • “微星”
  • “ RTP”
  • “ Diagcfg”
  • “女士”
  • “宾”
  • Hlp
  • 驾驶
  • “ Wpx”
  • “桌面主题包”
  • 蝙蝠
  • “ Rom”
  • “ Msc”
  • “ Lnk”
  • 驾驶室
  • “ Spl”
  • “ PS1”
  • “ Msu”
  • 集成电路
  • “钥匙”
  • “ MSP”
  • “ Com”
  • 系统
  • “ Diagpkg”
  • “ Nls”
  • “地穴”
  • 伊科
  • “锁定”
  • “ Ocx”
  • “ MPA”
  • “ Cur”
  • Cpl
  • “ Mod”
  • ta
  • “ Exe”
  • “集成电路”
  • “ Prf”
  • “ Dll”
  • “ Nomedia”
  • Idx

加密流假定读取文件的内容,进行加密,写回同一文件,添加元数据(包括加密的会话私钥),每个文件的ECDH公用部分以及用于加密文件的Salsa20初始化向量。

之后,流将重命名文件,并在名称中添加一个随机生成的名称。 使用EncryptAndWrite函数使用Salsa20算法对文件进行加密。

以下是调用EncryptingThreadRoutine函数的示例。

图片
加密后的文件结构

图片
加密文件结构

网络活动


加密过程完成后,勒索软件准备将数据发送到管理服务器。 数据包括JSON配置,系统信息和加密密钥中的各个字段。 预先准备好的数据也将通过“ [HKLM | HKCU] \ SOFTWARE \ recfg \ stat”键写入注册表,然后再由AES加密并发送到攻击者的服务器...

图片

网络数据



域名包括:sochi-okna23 [。] Ru +地址1的一部分

  • “ Wp内容”
  • “静态”
  • “内容”
  • “包含”
  • “上传”
  • “新闻”
  • “数据”
  • “管理员”

和地址2的一部分

  • “图片”
  • “图片”
  • “图片”
  • “临时”
  • “ Tmp”
  • “图形”
  • “资产”
  • 图片
  • “游戏”

图片
URL生成

赎金需求


Sodinokibi具有用于创建回购请求的模板,从而为用户数据留出了空间。 它们自动替换名称,用户ID(uid-上面的描述)和密钥。 赎金请求放置在每个目录中,不计例外。

图片

解密


图片

没有免费的方法可以为该勒索软件解密数据,而恢复数据的唯一方法是使用攻击者提供的解密服务。 按照赎金要求中的说明进行操作...

图片

结论


我们建议您使用高级防勒索软件保护,并保持防病毒系统为最新。 所有Acronis产品都具有增强的勒索软件保护,可以保护您免受此类攻击,从而最大程度地减少数据丢失的风险。

网络保护包含在Acronis True Image 2019个人解决方案以及Acronis Backup业务系统中,这些系统还附带了一个基于人工智能的反恶意软件模块,称为Acronis Active Protection。 因此,两个系统都可以保护用户免受Sodinokibi的侵害。

Source: https://habr.com/ru/post/zh-CN462567/


All Articles