上一篇文章我们描述了一种不寻常的攻击方式,就是有攻击者会伪装成更新过期安全证书,来传播恶意软件。研究出来后,我们对所获得的样本进行了详细的分析,并得出了一些有趣的发现。就是我们检查出的所有恶意软件都是由同一个封装器封装的,我们将其命名为Trojan-Dropper.NSIS.Loncom。该恶意软件使用合法的NSIS软件封装和加载Shellcode,并使用Microsoft Crypto API解密最终的有效载荷。就像以前的发现一样,这一次也发现了很多惊喜,因为其中一个封装的样本包含了APT小组使用的软件。
初步分析
Loncom利用NSIS运行包含在文件中的Shellcode,奇热该文件的名称由数字组成。在我们的示例中,文件名为485101134:
NSIS档案内容概述
一旦将Shellcode解压缩到硬盘并加载到内存中,NSIS脚本将计算起始位置并继续下一阶段。
Shellcode的作用
在继续解密有效载荷之前,shellcode开始使用以下算法对自身进行解密:
1. 查找下一个0xDEADBEEF dword的位置;
2. 读取dword:要解密的数据大小;
3. 读取dword:秘钥的第一部分;
4. 读取dword:秘钥的第二部分;
5. 找到合适的秘钥:从0开始检查数字,而 xor(i, second part of key) != first part of key。这部分是需要用来延缓执行和防止杀毒软件检测的。简化后,key = i = xor(first part, second part)。
6. 解密Shellcode(xor)的下一部分,然后继续。
解密Shellcode的下一部分
下面是执行上述算法的代码:
经过多次这样的块解密迭代之后,shellcode切换到活动步骤,在APIHashing技术的帮助下加载库并获取所需函数的地址。这有助于避免直接声明请求的函数名,而是提供它们的哈希。当通过哈希搜索函数时,将为库导出表中的每个元素计算哈希,直到它与目标匹配为止。
然后,Loncom对与Shellcode相同的文件中包含的有效载荷进行解密,并继续运行它。有效载荷是用AES-256块密码加密的。解密密钥在代码中声明,有效载荷偏移量和大小通过NSIS脚本传递。
Shellcode的主要部分:解密有效载荷
解封过程
对于自动的Loncom解压缩,我们需要找出数据是如何存储在封装的NSIS安装程序中的,从NSIS脚本中获取有效载荷偏移量和大小,并从shellcode中获取密钥。
解封NSIS
经过简要分析,我们设法发现NSIS安装程序具有以下结构:
1. 一个MZPE NSIS解释器,在它的覆盖层中包含要处理的数据:标记、签名、解封标头的大小和数据的总大小,然后是容器,即压缩数据本身。
2. 以下格式的容器:dword(数据大小):zlib_deflate(数据)。第0个容器有标头,第一个容器包含shellcode和有效载荷的文件,第二个容器具有带有NSIS插件的DLL。
3. 标头包含用于NSIS解释程序的操作代码表、一个字符串表和一个语言表。
由于我们已经获得了加密的文件,现在我们所需要的只是找到有效载荷偏移量和大小,然后继续解密有效载荷和Shellcode。
NSIS数据结构
由于使用插件时NSIS操作代码中的所有参数都是作为字符串传递的,所以我们需要从标头字符串表中检索逻辑限制内看起来像数字的所有字符串:从0到shellcode大小。
NSIS解压代码:
为了简化确定有效载荷的偏移量和大小,我们可以使用shellcode调用文件的结构:加密的块从最小的地址解密到最大的,从上到下,并且有效载荷位于shellcode之上。因此,我们可以确定0xDEADBEEF字节的位置,并将其视为加密数据的结束,具体的要根据需要进行调整,因为AES是块密码。
解密shellcode
要解密有效载荷,我们需要:
1. 解密Shellcode块;
2. 确定AES密钥的位置;
3. 检索密钥;
4. 尝试解密有效载荷以获取从NSIS接收到的偏移量;
5. 获取前两个字节= ' MZ '后停止。
可以通过略微修改执行IDA Pro中解密算法的代码来执行第一步。可以通过一个简单的正则表达式来确定密钥:‘\xC7\x45.(….)\xC7\x45.(….)\xC7\x45.(….)\xC7\x45.(….)\xE8’ — “mov dword ptr” 4 times,,然后“调用”shellcode主体部分中的伪代码。
其他步骤不需要详细说明,现在,我们将描述Loncom附带的实际恶意软件。
总结
除了在上一篇文章中提到的Mokes和Buerak之外,我们还注意到Backdoor.Win32.DarkVNC和Trojan-Ransom.Win32.Sodin家族的封装样本,也称为REvil和Sodinokibi。第一种是后门,用于通过VNC协议控制受感染设备。第二种是勒索软件,它可以加密受害者的信息并威胁要发布该信息。
但是,最令人兴奋的发现是合法的测试人员和各种APT组织都使用了Cobalt Strike实用程序。以前曾看到包含Cobalt Strike的示例的命令中心传播过CactusTorch(一个用于运行Cobalt Strike模块中存在的shellcode的实用程序),以及同一Cobalt Strike封装有不同的封装器。
我们将继续监视Trojan-Dropper.NSIS.Loncom,并希望尽快分享新发现。
IOC
BB00BA9726F922E07CF243D3CCFC2B6E (Backdoor.Win32.DarkVNC)
EBE191BF77044961684DF51B88CA8D05 (Backdoor.Win32.DarkVNC)
4B4C98AC8F04680F7C529956CFE8519B (Trojan-Ransom.Win32.Sodin)
AEF8FBB5C64734093E78EB13E6FA7849 (Cobalt Strike)