DMA Locker是今年早些时候出现的一款勒索软件。目前为止该勒索软件的影响范围比较小,但我们还是想提醒您,它仍然存在。
d35344b1f48764ba083e51438121e6a9 —波兰语版本 2 ( 2016.1 ) <- 主要分析这个样本
4190df2af81ece296c465e245fc0caea —英文版本2(2016.1)
6fbd3cdcafd6695c384a1119873786aa —波兰语版本1(2016.12)
// 特别感谢这些恶意软件的收集者: @PhysicalDrive0 , @JAMESWT_MHT 和 @siri_urz 。
当勒索软件运行时,软件移至 C:/ProgramData ( 或者 C:/Documents and Settings/All Users/Dokumenty/) ,重命名为 fakturax.exe ,随后释放另一个修改后的备份: ntserver.exe 。而 faktura.exe 在执行完后即被删除了。不同版本的勒索软件可能会在该目录下释放不同的文件。
这种勒索软件通常会弹出一个红色的窗口。目前为止,有两种语言版本,波兰语和英语。下面显示的英文版本:
早期的版本的 GUI 稍微有些不同(同样有波兰语和英文版本)。
其他勒索软件的解密过程是分离的,与之相反的是 DMA locker 的解密过程是内建的。从该软件 GUI 的提示框中可以看到。如果用户在文本框中键入密钥( 32 个字符串长度)然后点击按钮,程序就会切换到解密模式(使用提供的密钥):
这个程序不是很稳定,在解密的时候容易崩溃掉。在一些旧的版本中有时在加密过程中就会崩溃掉—但是在显示发生了什么事的任何信息之前,这可能会使受害者非常混乱。更麻烦的是没有改变文件的扩展名。所以目前可见的征兆就是受害人不能打开他们的一些文件。
新版本还增加了自动执行的 key 。其中一个部署程序的拷贝,另一个显示 txt 格式的勒索金额(通过记事本)。然而,这个备份( DMA Locke 41:55:16:13:51:76:67:99ntserver.exe )经常不能释放成功,仅仅释放记事本。
目前已经被 Malwarebytes Anti-Malware 检测出来了 Ransom.DMALocker :
根据勒索软件的提示,作者声称数据是被 AES 和 RSA 加密的。现在看看这个文件。首先可以看到加密的内容总是重复的图案,加密效果相当低级。
左边—原始的 BMP 图片。右边—被 DMA 加密的 BMP
现在比较更多的文件,看看被 DMA 加密之后是怎么变化的。
Example 1 – HTML files:
比较原始文件:
比较加密后的文件:
Example 2 – PNG files:
比较原始文件:
比较加密后的文件:
可以看到,原始文件的头部是一样的,加密文件头部也是一样的。似乎加密的是一些数据块,可能是 8 或者 16 个字节一次加密。从 PNG 文件可以看出,从 0×10 处开始加密的数据就不同了,然而在 0×10,0×11 。。。处都是 0 。
这个勒索软件目前来看是分布式的,并且不具备反分析的能力。所有用到的字符串和 API 函数均是普通文本。实际上,该恶意软件甚至“帮助”了分析人士,通过其提供的一系列调试的字符串(原文 + 译文):
<span style="font-size: 10.5pt;">[+] Plik jest aktualnie zaszyfrowany, pomijanie.. //The file is already encrypted, skipping..</span><span style="font-size: 10.5pt;"></span>
<span style="font-size: 10.5pt;">[*] Rozmiar pliku = %I64d bajtow.. //File size = %I64d bytes.. </span><span style="font-size: 10.5pt;"></span>
<span style="font-size: 10.5pt;">[+] Rozpoczeto szyfrowanie pliku: %s //Started encrypting the file: %s </span><span style="font-size: 10.5pt;"></span>
<span style="font-size: 10.5pt;">[+] Zakonczono szyfrowanie pliku: %s //Finished encrypting the file: %s</span><span style="font-size: 10.5pt;"></span>
<span style="font-size: 10.5pt;">[+] Rozpoczeto zapisywanie z pamieci do pliku: %s //Started dumping from memory to a file: %s</span><span style="font-size: 10.5pt;"></span>
<span style="font-size: 10.5pt;">[+] Zakonczono zapisywanie z pamieci do pliku: %s //Finished dumping from memory to a file: %s</span><span style="font-size: 10.5pt;"></span>
<span style="font-size: 10.5pt;">[*] Plik jest aktualnie odszyfrowany, pomijanie.. //The file is already decrypted, skipping..</span><span style="font-size: 10.5pt;"></span>
<span style="font-size: 10.5pt;">[+] Rozpoczeto deszyfrowanie pliku: %s //Started decrypting file: %s</span><span style="font-size: 10.5pt;"></span>
<span style="font-size: 10.5pt;">[+] Zakonczono deszyfrowanie pliku: %s //Finished decrypting file: %s</span><span style="font-size: 10.5pt;"></span>
<span style="font-size: 10.5pt;">Alokacja, error: %d //Allocation error: %d</span><span style="font-size: 10.5pt;"></span>
<span style="font-size: 10.5pt;">DMA Locker</span><span style="font-size: 10.5pt;"></span>
<span style="font-size: 10.5pt;">Otwieranie pliku: %d //Opening file: %d</span>
感谢这些日志,找到了代码比较重要的一部分。
程序一执行起来,一个新的线程部署开来—作用是检查下列进程:
rstrui.exe
ShadowExplorer.exe
sesvc.exe
cbengine.exe
如果其中一个被检测到,那么恶意软件就会终止它。在部署了这个线程的日志之后。(波兰语):
“阻塞系统恢复进程”
这个恶意软件包括两个黑名单而不是一系列的攻击扩展名,一个是目录:
另一个是文件的扩展名:
在他们包括的黑名单子串的文件直接被跳过。
恶意软件枚举所有的文件—浏览系统盘,在网络畅通情况下—尝试加密每个文件(除了黑名单)
一个简单的标志判断恶意软件是加密模式还是解密模式:
加密(解密也是)在一个新的线程中部署。
加密密钥
加密的密钥 32 位长。在最新的版本中,恶意软件的 key 是在原始文档的最后硬编码的,然后读取。然而,过程复杂。
在执行的过程中,两个原始文件的备份被释放: fakturax.exe 和 ntserver.exe ,但是只有 fakturax.exe 才包含 Key, 在 ntserver.exe 中被清楚了。在读取完这个 key 之后, fakturax.exe 被删除了,而且这个 Key 也随之丢失。这是为何呢,通过原始文件的副本(如果我们知道感染源那这个就不是问题,例如,恶意文件通过 e-mail 获得),我们可以很简单的恢复这个 key ,。
测试这些版本的恶意软件(上述提及的版本 2 ,例如, 4190df2af81ece296c465e245fc0caea ),这个就足以从原始文件的末端找到 key 。(警告:这不是本样品的原始密钥。这是仅仅是演示它是如何工作的以及在哪里能够找到真正的 Key 。试图恢复文件之前,请确保您所做的备份,以防万一,如果在其他一些版本的算法是不同的)
将其键入文本框:
为了能够找到所有的文件。
加密算法
作者声称他使用的是 AES 和 RSA 算法。在代码里这些看起来是怎样的呢?
文件被一块一块的加密,一个单元是 16 个字节( 4 dwords )。 K ey 是 32 位长,在加密之前已经做了预处理。这两个元素—预处理的 key 和输入文件的数据块—都是被拷贝进一个缓冲区中,这个缓冲区作为加密的中间过程。
下面是一个样本文件: square.png 被加密函数加密。使用的 Key : ” 11111 …” 。(拷贝的文件的数据块在图片当中被选中了)
加密之后(输出标记为灰色):
输出之后又被拷贝进原始缓冲区中,包括整个文件。每个加密的文件都有前缀“ ABCXYZ11 ”,一个有趣的值,这个被勒索软件用来确认加密文件(这个在新版本中有介绍)。下面我们可以看到 dump 至磁盘上的样本文件:
16 个字节长度的数据块文件被 AES 的 ECB 模式加密。
首先,并不是所有的恶意软件作者说的都是实话。这里的 Key 文件既不是 RSA 加密也不是随机生成的,而是保存在原始文件中。
第二,立刻删除恶意软件也不是最好的解决方法,有时候我们需要其恢复数据。
如果你遭遇到勒索软件,在做任何事之前记得要尽量收集其信息。万一你找不回数据,最好的办法是将其放到一些有名的门户或者专业论坛上去让人分析。我们正在收集各种威胁的样本,尝试去解决这些问题。
*原文地址: blog.malwarebytes ,东二门陈冠希/编译,部分内容有修改,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)