LIVE勒索病毒家族最早被曝光是在23年12月份,360的论坛发布了该家族的被加密样本,其加密特征为文件名后直接添加LIVE后缀,这时候还是该家族勒索病毒的1.0版本
65aK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1j5Y4y4Q4x3X3f1K6y4U0m8Q4x3X3g2U0L8W2)9J5c8Y4c8Z5M7X3g2S2k6q4)9J5k6o6p5$3x3e0p5I4x3K6M7J5i4K6u0V1x3g2)9J5k6o6q4Q4x3X3g2Z5N6r3#2D9

561K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0M7q4)9J5k6i4N6W2K9i4S2A6L8W2)9J5k6i4q4I4i4K6u0W2j5$3!0E0i4K6u0r3M7#2)9J5c8W2S2h3x3s2R3I4x3q4W2h3i4K6u0V1g2%4u0K6x3g2A6u0y4Y4c8z5d9r3A6x3b7b7`.`.

随后的24年1月份,奇安信的威胁情报中心揭秘了该团队利用国内某防泄密软件的漏洞进行渗透并且投放勒索病毒的案例,这时候的LIVE家族已经进化到了2.0版本,因为此时的加密特征为把原文件名修改为一串数字,再添加LIVE后缀

再在今年的2月8日,火绒安全也发布了一篇该家族利用某某通电子文档安全管理系统的文件上传漏洞进行入侵并且投放LIVE2.0勒索病毒的案例,并且附上了解密的demo代码。

而我们团队在去年接触到LIVE家族至今,总共捕获到了该家族的三个版本加密器,根据其加密后文件特征我们命令为1.0、1.5、2.0版本,由于其加密器三个版本本身都存在一些bug,导致其家族自己提供的解密器也无法坐到全部完整的恢复文件,因此我们也根据其加密流程和bug特征,自己制作了能完整恢复的解密补丁工具,在接下来对LIVE家族的分析文章中也都会一一发布。
通过对该LIVE勒索病毒家族的详细分析,无论是其入侵行为还是加密工具的溯源,我们可以清晰地认识到,这是一支新兴的勒索团队。尽管他们拥有国内的攻防经验,但在勒索领域尚显稚嫩。与我们过去所了解的成熟勒索病毒组织相比,他们展现出了不同的攻击模式:
LIVE勒索病毒组织的出现预示着国内网络安全面临新的挑战,标志着国内勒索病毒攻击的进化进入了2.0时代。与以往主要依赖弱口令爆破和1day漏洞入侵的1.0版本相比,这一新时代的攻击采用了更为复杂的技术手段,如高级持续性威胁(APT)攻击、社会工程学以及零日漏洞利用,展现了更精细化的目标选择和攻击策略,专门针对高价值企业和组织。
本篇文章深入分析了LIVE1.0勒索病毒,我们将继续发布关于LIVE1.5和LIVE2.0勒索病毒的深度分析,并分享相应的解密工具。我们的团队专注于应急响应与勒索病毒研究。如果您或您的客户不幸成为勒索病毒的攻击目标,请随时与我们联系并提交受影响的勒索病毒样本,让我们携手合作,共同维护网络安全防线。
近期收到大量客户反馈遭到LIVE勒索病毒攻击,该病毒于2023年12月左右开始传播,并且存在多个版本。该中招客户为某医疗单位,团队工程师通过远程连接进行分析后提取到了勒索病毒的源头。
以下为模拟客户系统的部分内网环境遭受该LIVE家族攻击的部分环境:
发现服务器上的文件在2024/2/27 15:06被加密,排查该时段有哪些新增文件。

最终发现在该时段新建了名为systime.exe的文件。

排查相关日志,存在大量smb爆破行为并最终在2024/2/27 15:03:54成功爆破。


并在2024/2/27 15:04:05 登录远程桌面。

实际情况攻击者是使用IP-Guard漏洞进行入侵,上述环境为模拟横向攻击的溯源。
LIVE勒索病毒利用IP-Guard漏洞进行攻击的相关文章:c31K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0M7q4)9J5k6i4N6W2K9i4S2A6L8W2)9J5k6i4q4I4i4K6u0W2j5$3!0E0i4K6u0r3M7#2)9J5c8W2S2h3x3s2R3I4x3q4W2h3i4K6u0V1g2%4u0K6x3g2A6u0y4Y4c8z5d9r3A6x3b7b7`.`.

勒索壁纸

密钥


加密文件名特征:文件名+.LIVE
加密文件目录样式:
勒索信+加密文件

解密后:

初步来看加密器并未使用保护措施,并且也没有移除符号表,入口点为main。


从Main函数中可知主要逻辑在progarm_main中。

首先程序会获取运行中的命令行,并且根据其参数内容进行其他功能的使用。

具体实现在函数program_print_help函数中有所说明,比如:指定加密的目录、删除系统还原点、停止服务等,使用方法是--参数 true/false
。

Progarm_main函数逻辑分析,最开始仅仅只检测cmd命令行的第一个参数是否为--self,如果需要将第二个参数即程序本身路径作为cmdline的第一个参数,以防止后续读取自身文件时,使用第一个参数不是文件本身路径而是--self参数,导致后续读取密钥与程序配置内容失败。

接下来进行读取系统时间,以用作后续的日期判断,来对程序状态进行设置。

再往下是初始化,初始化主要分为两部分:密钥初始化和程序初始化。这里就再次说一下文件的结构组成:


密钥初始化核心为两部分,一个是从程序文件本身读取KEY,另一个是从将硬编码的IV赋值。
读取KEY:

赋值IV:

整体的密钥初始化就结束了。
其功能是读取勒索信前面的那部分程序配置信息,并且将其转换为key:value的形式,以便于后续功能的使用。
读取配置项:

转化为key:value形式:

文件内配置信息:

progarm_main函数的余下分析,接下来是一个死循环,主要针对于文件本身的第一个参数以后的其他参数进行遍历,并且判断其功能是否开启等操作,具体功能介绍可见program_print_help函数。

参数遍历完毕后,继续针对时间的比较,从文件配置信息中可以得到一个最大与最小的日期信息,是个Unix的时间戳,转换后可以得到具体时间,作用是来判断软件是否在2023-01-01 08:00:00 ~ 2024-02-15 08:00:00 之间,不在的话就不能够运行。

逻辑实现:

从配置文件中读取勒索信的文件名称,并且从文件名中以‘_’字符进行分割包含的ID,给到progarms_id变量以便后续的使用,最后获取更换壁纸功能的状态,如果是true就会进入到progarm_ChangeWallpaper函数进行勒索壁纸的更换。
配置中的变量内容:
代码实现:

和初始化一样,先移动FILE指针到程序文件中的勒索壁纸开头,然后读入到临时变量中。

获取程序文件的目录,进行勒索壁纸的保存。

最后写入一个更换壁纸的Powershell脚本wallpaper.ps1,并且使用system函数执行,完成更换壁纸的操作。

更换壁纸powershell脚本wallpaper.ps1内容:
勒索壁纸:

获取勒索信的内容,其逻辑跟初始化和获取壁纸图片方法一样,将勒索信内容赋值到info_context变量中,以便后续的使用。

对IncludeExtensions配置项的状态进行获取,来判断是否启动包含扩展的功能,这里软件中默认是False,所以他将获取NoneSet的配置项内容,即不加密的文件后缀。

IncludeExtensions配置项的状态也决定程序使用那个加密函数,这里加密函数有两个:一个是___lambda4__program_encrypt;另外一个是___lambda5__program_encrypt,这里的使用___lambda5__program_encrypt加密函数。

程序为了保证写入勒索信和对文件进行加密顺利,将利用system函数来执行cmd命令对系统进行恢复选项的禁用并且对操作系统的引导状态策略设置为忽略所有故障。

之后就是对程序指定的服务和进程的停止操作。
进程

服务

在对指定的服务和进程进行关闭后,将开始最为关键的对文件操作的流程了。
首先是写入勒索信

因为DropNoteInSpecificDirectories配置项开启的缘故,所以勒索信会在DirectoriesToDropNoteIn配置项内容下的两个目录中写入名为NoteFilename配置项内容的勒索信文件。
DropNoteInSpecificDirectories内容为:
NoteFilename内容为:
勒索信写入完毕后,开始对磁盘文件的遍历与加密。
首先程序作者考虑到了文件数量庞大,需要采用多线程的方式来进行加密比较有效率,甚至于在加密算法上也做了处理。
先是获取处理器数量,开启线程池,创建多线程对象,并且对其错误进行处理,其中启动函数为___lambda6__gfunc函数。

这里判断如果没有错误发生的情况,会再次获取IncludeDirectories配置项内容,再次确认是否包含指定目录功能是否开启。

这里程序因为并未开启该功能,所以直接跳到对所有磁盘遍历操作。
首先是对A-Z字符做了拷贝,以供后续作为磁盘的盘符。

接着对其进行遍历路径的拼接,然后是不断的迭代,类似树的DFS,具体由progarm_Iterate函数实现。
其参数有五个,分别为:(文件路径,配置信息,勒索信内容,勒索信长度,多线程对象)
首先该函数会打开文件路径下的目录,并且获得该目录下的所有文件的同时进行路径拼接,之后对其路径所指文件或目录进行判断是文件还是目录。
打开目录:

获取该目录下的文件并做判断:

如果是普通文件的话,先对其中的隐藏文件进行判断,然后根据EncryptHiddenFiles配置项来决定是否加密隐藏文件,EncryptHiddenFiles内容为true,所以对隐藏文件也进行加密。
这里考虑到存在NAS的缘故,所有判断了‘.‘开头的文件。

当满足了上述条件后,将最后做一次文件过滤,判断其加密文件后缀是否在Noset配置项内容中,所有过程过程由program_Filter函数实现。
其参数有七个,分别为(文件名称,IncludeFiles配置项内容,FileSet配置项内容,FileSet配置项内容长度,IncludeExtension配置项内容,IncludeExtension配置项内容长度)
首先是获取文件的后缀,并且转换为小写。

之后是判断该文件后缀是否在Noset配置项内容中,Noset配置项内容:['exe', 'dll', 'ink', 'ini', 'lnk', 'ico', 'sys', 'desktop', 'mui', 'live'],若是不在则通过,若是在则不通过。

最后会多加一个判断,判断其文件是否是勒索信文件。
接着progarms_Iterate函数的内容进行分析。
在完成了文件过滤后,如果该文件符合上述所有条件,那么就需要将其丢入到线程池中,进行最后的加密了,然后还会将勒索信文件可写标志设置成true。

勒索信标志设置:

若该文件不是普通文件,而是目录,则会进入到判断路径是否是一个目录。

若该文件路径是一个目录则进行过滤,看看是否在DirectorySet配置项内容中的目录。
DirectorySet配置项内容:['C:\Program Files', 'C:\Program Files (x86)', 'C:\ProgramData', 'C:\Windows', 'C:\msys64', 'C:\Users\All Users']。
如果不在的话,就继续向下遍历,如果在,则停止遍历。

最后将判断勒索信可写标识是否为true,若可以写将判断该目录下是否已存在勒索信文件,若不存在则写入。


所有的文件遍历过程就全部分析完毕,接下来将最后分析加密流程。
因为之前提到过线程池的创建,所采用的执行函数是___lambda6__gfunc函数。
该函数的主要作用是对文件进行加密和重命名。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2024-6-6 16:28
被solar解密编辑
,原因: