今天我们发现Locky勒索软件家族使用一种新的工具来躲避检测,并且可能已经感染了很多节点。
自从我们通过AutoFocus智能威胁分析服务发现42个Locky勒索软件存在一定的变化,结合全局数据发现勒索软件家族已经被新型的工具进一步加密了。攻击者不断地寻找新的技术绕过安全机制,根据AutoFocus的数据源和威胁情报,这种技术已经被广泛应用了。
在我们的分析中,多个恶意软件样本比较特殊的采用类似混淆API调用的,来源于嵌入的术语词典中,以解决系统的功能同时隐藏自己的真实功能以躲避静态分析工具。
传入API函数奇怪的变量名称
通过关键字来处理API的调用,因此这样可以降低恶意软件的检测率。这也是比较有趣的地方,然而这只是一系列干扰研究员中的第一步。
当我们查看这些新的样本时,这些加载库的导入表很明显都是不同的,并且在执行过程中根本都没有被使用。这些可以阻止任何通过导入表哈希值进行的有意义的检测。此外,这些可执行文件的版本信息表明,每个样本的信息都是多样性的,但是这些很明显的模式可以用于以后的鉴别。
LegalCopyright Copyright /xa9 2017 InternalName Phoneticist FileVersion 218, 158, 104, 112 CompanyName Cyber Power Systems Inc. ProductName Nesting Punk ProductVersion 221, 202, 46, 180 FileDescription Skittles LegalCopyright Copyright /xa9 2015 InternalName Grated FileVersion 82, 233, 256, 103 CompanyName SafeNet Inc. ProductName Geomagnetic Espadrilles ProductVersion 176, 194, 91, 229 FileDescription Connectivity
在每个恶意软件的样本中我们发现都嵌入了不同的字符串,一些使用了一些未使用。
(用词列表)
仔细分析之后发现,作者使用大量的术语产生一些混淆的无意义的指令来试图让分析工作变得更加困难。下面图片中红色标注的地方是样本开始真正解压并通过PEB结构来定位Kernel32.dll基址。
(PEB开始处)
每次运行时,将一个Dword数据和0x958B9963进行异或之后判断是否为要找的Kernel32.dll。
(上图找到目标DLL之后保存至寄存器中)
现在有了Kernel32.dll的基址了,然后开始枚举函数,在执行过程中,不断的改变栈中的变量,来更深层次的达到误导的效果。
(函数迭代)
(找到目标)
一旦在kernel32.dll中找到VirtualAlloc函数,就开始在栈中安置一些变量来进一步达到隐藏和混淆的效果。在下图中,一旦栈布置好后,直接JMP至VirtualAlloc函数处,产生一个返回地址,这个地址最终存放解密数据。
(跳转至VirtualAlloc分配解密后数据的内存)
(解密数据值分配的空间)
一旦这个过程结束,恶意软件开始执行新解密的数据,并且还会通过迭代继续混淆自身。
(运行时自修正代码)
还是回到刚开始的一些不规则的传入API函数的参数,这个第一线索开始改变。在这个阶段,你可以按照自修改直到下一个横线处。
(代码继续跳转至新的偏移地址,修改随后的指令)
(JMP后的JMP,有一个隐藏很深的指令)
这个最终会导致调用LoadLibraryA伪造的名字从而不会被映射,而这样的话最终会调用错误从而返回NULL,效果就是服务没有响应但是达到混淆的地步。
(更多的误导)
一旦这些完成,开始分配其他的内存单元,然后开始拷贝并解密真正的恶意软件,和上面的过程相似。
(最后解压的Payload)
当我们提取这个Payload时,可以证实这个就是真正的Locky并且可以被检测到。
Palo Alto已经证实了这种应用在Locky中的技术,但是我们同样在TeslaCrypt 和 Andromeda 恶意软件中检测到,时间追溯到2016.3.14。需要重点提及的是这种技术可以被动态分析检测出来,这种和WildFire的静态分析结合的技术可以保护Palo Alto网络用户免于威胁。
*参考来源: paloaltonetworks ,FB小编老王隔壁的白帽子翻译,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)