Jaff勒索软件最初于2017年春季出现,但它在很大程度上被忽视了,因为当时WannaCry是全球新闻机构的头条。从那时起,Jaff勒索软件潜伏在黑暗中,感染全世界的机器。在FortiGuard Labs这篇分析文章中,我们将研究该恶意软件使用的一些常见技术,以及作为勒索软件它是如何感染的。
一、入口点
与许多勒索软件一样,Jaff勒索软件通常作为pdf附件发送。打开附件后,它会显示一行文档以及一条弹出消息,询问是否要打开嵌入式文件(参见图1)。
图1
如果选择打开文件,有趣的事情就开始了。之后,它会启动一个嵌入式文档,其中包含有关如何从文档中移除宏保护的说明(参见图2)。文档顶部的黄色条带包含“启用内容”按钮,可以执行文档中的任何宏。 当然,我们都知道这个文档包含宏。
图2
二、无处不在的宏
实际上,这个文档包含许多宏(参见图3),其中只有一个下载了Jaff二进制文件。 以下是此变体中的宏列表:
· autoopen()
· Document_Open()
· setAsMainTarget()
· Challenge(sender As String, e As Integer)
· Subfunc(MethodParam2() As Byte, MethodParam As String)
· Lipochanko(a, b)
· Synomati(Comps)
· Vgux(strComputer As Integer)
· enumMembers(objDomain)
· Assimptota4(FullPath As String, NumHoja As Integer)
· Assimptota6(FullPath As String, NumHoja As Integer)
· WidthA(Dbbb As String, bbbJ As String, Optional system_ofADown_Sexote As String)
· Function system_ofADown_ProjectSpeed()
· privateProbe()
· SaveDataCSVToolStripMenuItem_Click(e As Integer)
· RepackOK(sheetToMove As String, sheetAnchor As String, Assimptota6OrAfter As String)
· CheckRectsAd()
图3
privateProbe宏包含下载Jaff二进制文件的代码(参见图4)。
图4
我们可以做一个简单的替换来手动生成下载链接。
从编码链接中,我们可以将字母“RRDD”替换为“om”,并从每次出现的单词“Nbiyure3”中拆分链接(参见图5)。
图5
三、解密、重定向及垃圾代码
下载二进制文件后,Jaff勒索软件开始解密部分恶意软件代码。它使用简单的代码重定向例程作为反分析技巧,延长分析实际恶意代码所需的时间。在代码执行之间,它使用了与恶意软件执行无关的垃圾代码。
图6显示了以随机方式执行的不同代码块。来自这组代码的每次传递都会解密DWORD值,然后继续,直到它解密其余的恶意软件。它还显示了解密例程的编号执行方向。
图6
一旦我们删除了垃圾代码和不相关的块,我们就可以看到只有三个块用于实际的解密。图7显示了同一组块,突出显示了用于解密例程的实际相关代码。事实证明,实际的解密程序只是一个简单的XOR。
图7
四、解析API
解密恶意软件代码后,恶意软件使用的大多数API名称仍然是隐藏的。
隐藏API名称是恶意软件的一种功能,旨在将其隐藏在防病毒扫描程序中。它有助于规避基于恶意软件使用的已知API的组合进行检测。隐藏API有不同的方法,一些恶意软件使用加密,一些使用散列。Jaff使用后者。下面是解析API所需的步骤。
最初,它通过解析PEB(进程环境块)结构来查找“kernel32.dll”字符串。它计算在PEB中找到的每个模块名称的哈希值,并将其与“kernel32.dll”的哈希值进行比较。匹配后,它会抓取kernel32.dll的位置,并以类似的方式开始解析其余所需的API。
五、进程挖空
在解析了所有需要的API之后,Jaff执行了进程挖空。 这是一种恶意功能,它不是删除另一个可执行文件并执行它,而是用新的可执行代码覆盖内存中的部分原始代码。
为了让Jaff进行挖空处理,它使用UnmapViewOfFile API清除当前进程的内存块。 然后,它使用VirtualAlloc API重新分配相同的内存块,并通过调用VirtualProtect API将其保护更改为PAGE_EXECUTE_READWRITE。 一系列REPE MOVSB指令用于将恶意代码的内容复制到新分配的内存块。
六、加壳
正如我们目前所见; 解密,代码重定向,API解析和进程挖空只是旨在隐藏实际恶意二进制文件的加壳代码的一部分。执行完所有这些代码后,恶意软件现在已准备好显示其真实性质。
有趣的是,使用加壳技术可以基本上只需升级壳代码,而无需升级恶意可执行文件。通过这种方式,可以快速部署新版本的恶意软件,避免之前使用的检测参数。
现在让我们看一下嵌入式可执行代码的不同部分和功能所在的位置。
七、资源部分
恶意软件的资源部分包含密钥块。它还包含加密的扩展名列表,下载URL链接和勒索信息(参见图8)。
图8
八、密钥块
密钥块是在其中一个资源中找到的260字节密钥。它用于解密该部分内不同资源的内容。
图9显示了获取资源的代码的快照,包含密钥块的资源和260字节密钥。
图9
九、扩展名
其中一个资源包含解密的扩展名列表。 图10显示了恶意软件将尝试搜索和加密的文件的的扩展名列表(加/解密形式)(另请参见图11)。
图10
图11
十、勒索票据
Jaff的赎金票据以三种不同的格式存储; html,text和图像(bmp)。 text和html版本位于资源部分,bmp版本也使用相同的文本生成。 图12显示了加密和解密形式的赎金票据的html版本,以及其在资源部分的位置。
图12
为以图片形式生成赎金票据,Jaff使用以下API组合。
· CreateStreamOnHGlobal
· CreateDCW(DISPLAY)
· GetDeviceCaps
· SetRect
· CreateSolidBrush
· FillRect
· OleDraw
图13
图13显示了图片形式的赎金票据样本。解密ID是动态生成的并添加到图像中。在Jaff勒索软件的这个特定变体中,此图片被设置为感染后的桌面壁纸。
十一、文件加密
在所有复杂的代码包装和初始化之后,加密文件的主要恶意载荷是最简单的例程。
为了加密文件,Jaff搜索给定目录中的文件,然后检查列表中是否找到了文件的扩展名(参见图11)。 接下来,它使用.jaff扩展名重命名该文件并将其打开以进行加密。然后,它调用CryptEncrypt API来加密文件(参见图14)。
在对所有可能的文件进行加密后,恶意软件会在给定目录中释放赎金票据的ReadMe.bmp,ReadMe.html和ReadMe.txt版本。
图14
十二、最后
影响勒索软件普及的因素之一是它何时被释放。 Jaff几乎与WannaCry同时被释放,从而在瞬间杀死了它的明星梦想。 或许,它选择在那一刻故意释放,就是为了增加其感染的隐身性。
无论哪种方式,我们都应该始终为任何恶意软件或勒索软件做好准备,同时保持我们的防御定期更新。
Sha256: 387812ee2820cbf49812b1b229b7d8721ee37296f7b6018332a56e30a99e1092
检测: W32/Jaff.ED11!tr.ransom
本文翻译自:https://www.fortinet.com/blog/threat-research/looking-into-jaff-ransomware.html
翻译作者:TRex 原文地址:http://www.4hou.com/typ/16089.html