0x00 前言
达芬奇密码(. da_vinci_code)敲诈者是今年下半年刚出现的一款敲诈者木马,最早出现在国外的报道,并未影响国内用户。但自今年九月开始,360白名单分析组发现该木马在国内开始出现并逐步活跃,而且还出现了多个变种。由于此类敲诈者木马会将你所有的文档、文件和图片等个人生活与工作的重要数据通通加密保存,如果你不在48小时内通过暗网支付比特币赎金,你的重要数据将永久被加密保存,并且该变种频繁更新,一旦在国内爆发会带来巨大危害。
图1下半年截止到10月22号捕获的达芬奇密码敲诈者部分变种
感染达芬奇密码敲诈者后,电脑中文档,压缩包,图片等文件均遭到加密,并修改文件后缀为“da_vinci_code”,并在每个磁盘目录和桌面下生成10个README.txt。图2显示的是感染达芬奇密码敲诈者后的桌面截图。
图2达芬奇密码敲诈者感染后的桌面
README.txt主要内容如下:
图3达芬奇密码敲诈者提示用户信息
0x01 基本流程
达芬奇密码敲诈者的功能主要分为安装包解密,ShellCode执行,勒索者本体三部分。大致的过程如下图所示:
图4达芬奇密码敲诈者恶意代码流程
0x02 安装包解密
2.1 利用nsis脚本的IntOp和IntFmt函数拼接出System.dll::Call的调用参数,然后调用Call来执行。
图5 NSIS脚本内容
执行的主要函数如下:
kernel32::CreateFileW(t '', i 0x80000000, i 0x7, i 0, i 3, i 0x80, i 0) i .r7
kernel32::VirtualAlloc(i 0, i , i 0x3000, i 0x40) p .r8
kernel32::ReadFile(i r7, p r8, i , t.,)
kernel32::CloseHandle(i r7)::(t '')
2.2 Call执行功能
kernel32::CreateFileW打开"C:DOCUME~1ADMINI~1LOCALS~1Temp
Ggm0KQEbU4UcJiEbNYAXOTz.jsiDbvtAQ8jS"
图6创建ShellCode解码文件
kernel32::VirtualAlloc申请一段空间,大小为0xCC84D
图7申请固定大小空间
kernel32::ReadFile读取Ggm0KQEbU4UcJiEbNYAXOTz.jsiDbvtAQ8jS文件至新申请的空间
图8读ShellCode解码文件
kernel32::CloseHandle关闭句柄,然后跳转新申请的空间去执行ShellCode。
0x03 ShellCode执行
解出勒索者本体
3.1 双层异或算法解密出执行代码
图9 ShellCode解密部分
图10 ShellCode解密算法
3.2 动态获取API并利用INT 2E调用相关API
通过API名字的hash值获取函数地址:
图11获取函数地址
获取的具体函数如下:
图12获取函数列表
利用INT 2E调用相关API:
图13利用INT 2E调用相关API
3.3 解出勒索者本体
图14 Shellcode执行部分
图15 解密勒索本体过程
从Ggm0KQEbU4UcJiEbNYAXOTz.jsiDbvtAQ8jS的偏移0x35处读取0xC7360字节的数据进行AES256解密。
密钥是通过文件名(UNICODE)的MD5生成的,以下是它的生成过程:
图16 解密密钥生成
最后将解密之后的数据进行Zlib解压缩,得到勒索者本体:
图17 解密得到的PE数据
3.4 执行勒索者
创建傀儡进程执行勒索者,宿主是安装包进程:
图18 创建傀儡进程
0x04 勒索者本体
4.1 利用AES256解密出API名称,然后调用LoadLibrary和GetProcAddress动态获取API地址:
图19 解密API名称
4.2 获取当前计算机名+处理器核数+系统所在卷序列号+系统版本并计算其MD5作为计算机特征码,并保存在注册表的xi值中。
图20 计算机特征码生成算法
4.3 拷贝自身到C:Documents and SettingsAll UsersApplication DataWindowscsrss.exe位置,并添加注册表自启:
图21 拷贝自身
图22 添加启动项
4.4 通过Tor网络匿名与服务器进行通讯:
图23 与服务器通讯
4.5 生成的公钥及其相关的配置信息保存在注册表。
注册表的数值如下:
图24 注册表保存重要数据
4.6 加密以下后缀名的文件。
木马会对以下类型的文件进行加密:
图25加密的后缀名
不对系统关键文件加密,从而保证系统的正常启动:
图26忽略加密的文件
4.7 AES256加密密钥生成算法
初始化随机种子srand(_time64+当前线程ID+clock),随机生成两个256位的密钥,用于文件名和文件内容加密。
图27用于AES256加密的生成算法
4.8 文件名加密算法
对原始文件名(UNICODE)进行AES256加密再通过Base64加密,得到加密文件名第一部分:
Ciphertext_1=Base64(AES256_Encrypt(UNICODE (Original_FileName)))
再通过计算机特征码前0x14字节转换为UNICODE得到第二部分:
Ciphertext_2= UNICODE(ComputeCode(0x14) )
最后的加密文件名就是第一部分加上第二部分加上”.da_vinci_code”
Encrypt_ FileName= Ciphertext_1+ Ciphertext_2+”.da_vinci_code”
图28文件名加密生成算法
图29 加密前的文件名
图30 加密后的文件名
4.9 文件加密算法
程序将生成的两个密钥和其他关键数据以RSA加密的方式保存在加密文件的前0x180字节中。
加密文件内容的过程如下:
图31 文件数据加密算法
图32 文件数据加密过程图示
图33 密钥相关的数据块KeyData在内存中的布局
4.10 删除卷影
图34删除文件卷影
0x05 解密过程
当勒索者收到赎金后,会提供给受害者RSA的私钥,通过这个私钥可以解密文件前0x180字节数据块,分别拿到文件名的解密密钥和文件内容的解密密钥。
从而继续解密得到文件名和文件内容,再将文件尾部的0x180字节覆盖文件开头的解密块数据,这样就完成对一个文件的解密。
0x06 查杀情况以及如何防范
提醒广大网友:重要数据应定期备份,软件的漏洞补丁应及时安装,可以免疫绝大多数来自恶意网页或客户端的挂马攻击。此外,他人发来的可疑程序或脚本(如exe、scr、js等)不要双击运行,这样就能最大限度的避免中招。同时360白名单分析组会通过已有的样本收集系统,第一时间查杀该木马变种。当前360安全卫士可以全面拦截此类敲诈者病毒,最新版本11.0中的“反勒索服务”还能为受害用户提供一站式的代缴赎金及文件解密服务,全面保障用户财产和数据的安全。
图35 2016年11月14号达芬奇密码敲诈者的查杀情况

评论