我最近有机会碰到了一个以前没见过的勒索软件的变体,它的名字是”NanoLocker”。这个勒索软件和赛门铁克以前发布的 分析文章 中阐述的勒索软件不同,它很不寻常。鉴于这一事实,我决定逆向几个样品,了解一下它是怎么工作的。
分析详情会在之后进行展示,但是在进行详细分析之前,我需要先建立一个解密工具来解密这个勒索软件的加密文件,这些加密文件都是在特定情况下进行工作的。我们需要的先决条件如下。
注意样本
我使用了两个不同版本的NanoLocker作为样本进行测试分析:
Version 1.27 – MD5 : c1cf7ce9cfa337b22ccc4061383a70f6
Version 1.29 – MD5 : fce023be1fb28b656e419c5c817deb73
概述
NanoLocker采取了和其他常见勒索软件类似方法。这个恶意软件利用Windows CryptAPI进行常规加密。密码设计一般都是可靠的文件使用生成的256位AES密钥进行加密,但是AES密码初始化使用默认(null) IV完成。使用后,这个AES密钥先进行弱混淆,然后使用一个RSA公钥对其进行加密,这个公钥是从base64字符串硬编码导入到binary中的。更新的加密密钥最后进行base64加密,显示给用户,这样可以在比特币交易时通过公共消息把它传给恶意软件作者。我们将把最后的这个base64加密密钥成为MK。
这款勒索软件主要的设计缺陷类似于早期的TeslaCrypt/AlphaCrypt-AES密钥被写在了磁盘的某个文件中,并且这个密钥直到加密完成一直保持不变。这样做的意义是,即使加密过程中存在中断(休眠、断电等),这种对称加密密钥已经被留在了磁盘上,它还是可以使用的。
我利用这种缺陷写了一个解密工具并提供给受害者一种解密方法,但是受害者需要捕捉到了NanoLocker加密时的密钥文件的副本或者在加密过程终端时从磁盘中获取了密钥文件。
执行细节
NanoLocker在磁盘中创建了一个文件用于追踪它的状态、密钥信息和文件目标列表。分析样本中的这个文件名为%LOCALAPPDATA%/lansrv.ini,并且这个文件被创建成隐藏属性。
该文件的第一个字节被用来保存一个整数-表示当前的执行状态。随着恶意软件各种功能的进展,状态追踪值增加。追踪字节有三种可能的状态:
· 初始化和枚举-对称密码已经被创建并以明文格式[44 bytes ]储存在起始偏移 0×02 的追踪文件中。所有本地映射的驱动被列举给了匹配目标和扩展的文件名,这些文件名都被写入了追踪文件。
· 加密-一旦到检测到状态成为应有状态,追踪文件中列出的文件就开始加密。
· 加密完成-所有的目标文件都已经被加密了。一旦到达了状态3,原始对称密钥都会被比特币付款地址和MK替换。此时,NanoLocker把初始屏幕显示给了用户。
在初始化过程中,生成AES密钥,密钥被写入文件切状态为状态1,如下面来自解包binary的伪代码所示:
一旦进入状态2,直到所有被发现的文件都被加密,跟踪文件(lansrv.ini)持有了导出的密钥数据,这些数据在上面的调用中被写入了WriteFile。此时捕获的追踪文件会揭示状态标志、密钥数据和目标文件的列表:
最后,一旦目标文件都已经被加密,追踪文件中的状态变为3.此时密钥数据会被跟着base64加密和被对称密钥加密的公钥(MK)的比特币交易地址替换:
通信
勒索软件威胁的一个共同之处就在于通过网络向控制命令服务器的攻击者传输密钥内容。NanoLocker也是如此,它需要一个简单的方法进行网络通信-它只向C2服务器外发出2个ICMP包。
一旦恶意软件在内存中解压,它就会开始一些初始化步骤(丢弃自身副本到磁盘,设置一个持久化机制等)。下一步是提交一个ping到控制服务器中。这些ping包可能在乍一看是典型的回送请求数据包,但是下面的代码显示,还发送了其他信息:
正如我们上面看到的,调用IcmpSendEcho使用勒索及带有回显请求的软件比特币地址作为数据进行提交。我们可以看出如果我们捕获正在从受感染的系统中发出的数据包的动作:
一旦加密过程完成,进入状态3,第二个ICMP包被NanoLocker发出。这个包和第一个相同,使用了ICMP消息的数据字节发送比特币地址,在状态2时增加文件总数。
解密工具
如上所述,如果追踪文件在状态1或者状态2被捕捉到(通过加密过程中断或其他方式),对称密钥可以被提取并应用于解密已经被加密的任何文件。
对于大多数独立的Windows系统,在状态1或状态2捕捉这个追踪文件操作基本不可行。这是一种简单的文件数相对较少且系统加密速度慢的方法。但是在大型分布式文件系统中,比如现代企业的网络环境,它可能在加密阶段(状态2前)能够检测到NanoLocker加密文件。这样的情况可能更常见,因为加密数十倍、数百倍甚至上千倍的文件需要更多的时间。为更大的加密系统加密数量如此多的文件需要花费几小时或者几天的功夫。
工具的使用方法如下:
NanoLocker_Decryptor.exe
这个解密工具会检查加密的源文件和提供的追踪文件来验证两个必要条件:
追踪文件在状态1或状态2; 加密的源文件是使用追踪文件中的密钥来加密的。
多亏了NanoLocker的创造者做出的另一个设计选择,我们才可以进行第二步。在每个加密文件中都有一个报头,它是原始文件的真实加密字节前缀。这个报头包含一个可以被用于验证我们尝试解密的密钥和用来加密的密钥相同的校验值。
源代码在 github上 。预编译的版本可以在 这里 找到。对于预编译版本,你需要32bit Visual C++ 2013,如果你没有你需要安装它 ,Microsoft版本 。
最终评论
我避免了描述拆包和反汇编这个勒索软件的细节。在后续文章中,我会详细说明拆包的方式。不过值得一提的是,使用Volatility能够从内容中非常容易的找到这种特殊恶意软件的解压备份。
首先使用pslist确定进程id:
然后使用fix-up option(-x)把进程dump给磁盘:
最后加载到你最喜欢的反汇编中:
*原文地址: malwareclipboard ,FB小编FireFrank编译,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)