标题 | 简介 | 类型 | 公开时间 | ||||||||||
|
|||||||||||||
|
|||||||||||||
详情 | |||||||||||||
[SAFE-ID: JIWO-2024-2227] 作者: 如一 发表于: [2018-12-18]
本文共 [648] 位读者顶过
0x00 前 言
[出自:jiwo.org] 近日,互联网上爆发了一种名为 lucky 的勒索病毒,该病毒会将指定文件加密并修改后缀名为.lucky。
知道创宇404实验室的炼妖壶蜜罐系统最早于2018年11月10日就捕捉到该勒索病毒的相关流量,截止到2018年12月4日,该病毒的 CNC 服务器依然存活。
根据分析的结果可以得知 lucky 勒索病毒几乎就是 Satan 勒索病毒,整体结构并没有太大改变,包括 CNC 服务器也没有更改。Satan 病毒一度变迁:最开始的勒索获利的方式变为挖矿获利的方式,而新版本的 lucky 勒索病毒结合了勒索和挖矿。
知道创宇404实验室在了解该勒索病毒的相关细节后,迅速跟进并分析了该勒索病毒;着重分析了该病毒的加密模块,并意外发现可以利用伪随机数的特性,还原加密密钥,并成功解密了文件,Python 的解密脚本链接: https://github.com/knownsec/Decrypt-ransomware。
本文对 lucky 勒索病毒进行了概要分析,并着重分析了加密流程以及还原密钥的过程。
0x01 lucky 病毒简介
lucky 勒索病毒可在 Windows 和 Linux 平台上传播执行,主要功能分为「文件加密」、「传播感染」与「挖矿」。
「文件加密」
lucky 勒索病毒遍历文件夹,对如下后缀名的文件进行加密,并修改后缀名为 .lucky: bak,sql,mdf,ldf,myd,myi,dmp,xls,xlsx,docx,pptx,eps,txt,ppt,csv,rtf,pdf,db,vdi,vmdk,vmx,pem,pfx,cer,psd
为了保证系统能够正常的运行,该病毒加密时会略过了系统关键目录,如: Windows: windows, microsoft games, 360rec, windows mail 等等Linux: /bin/, /boot/, /lib/, /usr/bin/ 等等
「传播感染」
lucky 勒索病毒的传播模块并没有做出新的特色,仍使用了以下的漏洞进行传播:
「挖矿」
该勒索病毒采用自建矿池地址:194.88.105.5:443,想继续通过挖矿获得额外的收益。同时,该矿池地址也是 Satan 勒索病毒变种使用的矿池地址。
运行截图:
0x02 病毒流程图
lucky 勒索病毒的整体结构依然延续 Satan 勒索病毒的结构,包括以下组件: 预装载器:fast.exe/ft32,文件短小精悍,用于加载加密模块和传播模块加密模块:cpt.exe/cry32,加密模块,对文件进行加密 传播模块:conn.exe/conn32,传播模块,利用多个应用程序漏洞进行传播感染 挖矿模块:mn32.exe/mn32,挖矿模块,连接自建矿池地址 服务模块:srv.exe,在 windows 下创建服务,稳定执行
流程图大致如下:
lucky 勒索病毒的每个模块都使用了常见的壳进行加壳保护,比如 UPX,MPRESS,使用常见的脱壳软件进行自动脱壳即可。
0x03 加密流程
对于一个勒索病毒来说,最重要的就是其加密模块。在 lucky 勒索病毒中,加密模块是一个单独的可执行文件,下面对加密模块进行详细的分析。(以 Windows 下的 cpt.exe 作为分析样例)
1. 脱去upx
cpt.exe 使用 upx 进行加壳,使用常见的脱壳工具即可完成脱壳。
2. 加密主函数
使用 IDA 加载脱壳后的 cpt.exe.unp,在主函数中有大量初始化的操作,忽略这些操作,跟入函数可以找到加密逻辑的主函数,下面对这些函数进行标注:
generate_key: 生成 60 位随机字符串,用于后续加密文件。 wait_sleep: 等待一段时间。 generate_session: 生成 16 位随机字符串,作为用户的标志(session)。 lucky_crypto_entry: 具体加密文件的函数。 send_info_to_server: 向服务器报告加密完成。
大致的加密流程就是函数标注的如此,最后写入一个文件 c:\\_How_To_Decrypt_My_File_.Dic,通知用户遭到了勒索软件加密,并留下了比特币地址。
3. generate_key()
该函数是加密密钥生成函数,利用随机数从预设的字符串序列中随机选出字符,组成一个长度为 60 字节的密钥。
byte_56F840 为预设的字符串序列,其值为: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
4. generate_session()
加密模块中使用该函数为每个用户生成一个标识,用于区分用户;其仍然使用随机数从预设的字符串序列中随机选出字符,最后组成一个长度为 16 字节的 session,并存入到C:\\Windows\\Temp\\Ssession 文件下。
其中 byte_56F800 字符串为: ABCDEFGHIJPQRSTUVWdefghijklmnopqrstuvwx3456789
5. lucky_crypto_entry()
文件名格式 |