黑客组织攻击政治机构,其植入程序进化地更加隐秘
2022-3-26 11:50:0 Author: www.4hou.com(查看原文) 阅读量:19 收藏

photodune-2835222-computer-mouse-m-900x506.jpg

KONNI是一种远程访问木马,至少在8年前就被发现了。使用这款恶意软件的朝鲜威胁者已经在金苏基的保护伞下被确认。这个组织一直试图发起攻击,主要目标是俄罗斯和韩国的政治机构。

近日,研究人员发现朝鲜APT组织Konni的攻击活动,该组织向俄罗斯大使馆外交官发送以新年问候为主题的电子邮件,以进行情报收集活动。在本次攻击活动中,最终的植入程序被称为Konni  RAT,其代码和行为与其以前的版本相似。攻击中所使用的攻击链与该组织的TTP重叠,包括使用 CAB 文件作为感染阶段以及使用 bat 文件自动安装 Konni  RAT 并设为服务。

攻击链

攻击通常开始于恶意Office文档地利用,当这个文档被受害者打开时,一个多阶段攻击就开始了,涉及多个步骤。但这些步骤只是攻击者设法完成提升权限、逃避检测和部署所需文件任务的方式。正如我们在之前的一篇文章中所描述的,攻击链可以用下图来概括:

1.png

简化后的攻击链

可以看到攻击是从利用恶意Office文档开始的。当这个文档被受害者打开时,一个多阶段攻击就开始了,包括各个步骤。但这些步骤只是攻击者设法完成提升权限、逃避检测和部署所需文件任务的方式。

攻击的最终目标是安装所谓的“KONNI  Rat”,这是一个由 .ini 文件支持的 .dll 文件。简而言之,.dll 文件包含  RAT 的功能,.ini 文件包含第一个 C&C 服务器的地址。 KONNI  Rat 的一般行为与以前的版本几乎相同,但我们将在下面介绍一些变化。

不再支持Rundll

在之前的KONNI Rat示例中,有两个途径。一个处理恶意软件是否通过Windows服务启动,另一个通过rundll处理执行。下图显示了这两个过去的途径,svchost.exe和rundll32.exe字符串可见:

2.png

显示 svchost.exe 和 rundll32.exe 字符串的老式主函数

但是,新示例不会显示这些字符串。实际上,rundll 不再是执行示例的有效方式。相反,当使用 rundll 发生执行尝试时,会在早期阶段引发异常。

3.png

rundll 执行产生的异常

在我们分析的早期阶段,我们认为他们正在使用经典的进程名称检查或任何其他常用技术。现实要简单得多。实际的导出只是实现了 SvcMain 原型,因此程序在访问其中一个参数时会在某个时候中断。

在上图中,我们看到了出现此异常时设备的状态。此时的 RDI 应包含指向一个服务名称的指针。发生异常是因为 Service Main 函数满足一个原型,而 rundll32 将期望另一个不同的原型:

VOID WINAPI SvcMain( DWORD dwArgc, LPTSTR *lpszArgv )
VOID WINAPI runnableExport(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow)

基本上,在执行过程中,hinst 将被视为 lspzArgv,从而导致异常。但为什么攻击者要删除该功能呢?有多种好处。

首先,我们还没有看到任何最近使用rundll的攻击。事实上,在最近的攻击活动中,攻击者发起KONNI Rat的唯一方式就是注册一个Windows服务。因此,在真实世界的攻击中并没有使用rundll32分支。

但沙盒无法收集示例的真实行为还有另一个重要原因,因为它无法以这种方式执行。

字符串现在使用AES保护

多个恶意软件家族保护他们的字符串,目的就是为了防止字符串分析。KONNI也不例外,他也使用了这种技术。老式示例使用base64进行模糊处理处理。而且,他们使用的是自定义字母表。为了使解码任务更加困难,这个习惯字母表不时地发生变化:

4.png

旧的 Konni 示例包括他们自定义的 base64 字母,后面跟着模糊处理的字符串

现在,攻击者在这方面做了一个重大的改变,使用AES加密来保护字符串。新的 Konni RAT 示例所遵循的算法可以表示如下:

5.png

新的 KONNI 示例现在使用 AES 加密来保护字符串

这一变化背后的原因是显而易见的。由于用于解密的密钥是服务名,不同服务名运行的示例将无法正常工作。此外,在不知道服务名称的情况下仅拥有示例变得毫无用处,因为这些字符串包含有关示例行为的核心信息。

文件也使用AES进行保护

KONNI Rat 在执行时会使用各种支持文件,其中一个文件是 .ini 文件,其中包含主要的 C&C 服务器,但还有其他文件,例如应该最终删除的 .dat 文件,以及用于发送有关计算机的一些基本信息的临时文件。

调查显示,所有这些文件都使用AES进行了删除和保护。巧妙的地方在于,他们重用了用于字符串保护的算法,使文件布局与受保护的字符串布局相同,因为它们出现在原始内存中:

6.png

新的KONNI示例现在也使用AES加密来保护文件

从图中可以看出,文件本身包含了IV和加密的数据。使用的密钥是从其原始文件名中提取的。在某些情况下,名称与服务名称匹配,因此 .ini 和 .dat 文件中使用的密钥也是对服务名称应用 SHA256 的结果。

此外,发送到 C&C 服务器的文件使用 AES 进行保护。 IV 是使用 QueryPerformanceCounter API CALL 生成的。文件名由表示数据的2个字母和当前时间戳连接而成,后面跟着扩展名。此外,他们将使用这个新生成的名称作为AES密钥,因此他们通过请求将这个名称发送到C&C服务器。

7.png

即将发送到服务器的请求片段

由于文件名是使用时间戳自动生成的,因此相同的文件将产生不同的请求内容,因为它们是使用该文件名加密的。因此,网络签名也可能无法检测到此恶意活动。

其他模糊处理技术

除了发现一些仅通过我们之前描述的方式受到保护的示例,我们还发现了其他使用身份不明的封装程序的示例。我们想分享一些关于该封装程序的注释,因为其他人可能会发现它在识别和归因任务中很有用。

指令连续模糊处理

模糊处理程序的流程将使用一系列推送调用指令对,其中推送的值将指示程序将采取的行动。下图可以更好地解释其过程:

8.png

推送调用指令对

特别值得注意的是,攻击者在这些对之间放置了随机字节。这个愚蠢的技巧会导致反编译程序错误的代码解释,这些反编译程序会假定 push 指令之后的字节是下一条指令的一部分。下图显示了 IDA 无法分析代码的原因:

9.png

与前面的代码相同,显示了IDA为何不能表示真正的代码

模糊处理程序流程

使用的封装程序会模糊处理原始程序流程。这是通过不同的步骤中完成的。第一个需要的步骤是找到 Image Base 值,放置在一个固定位置和 RIP(指令指针)值。

10.png

EBX 将保存 RIP 值

一旦封装程序知道这两个值,它就会开始从一个地方跳到另一个地方,使分析变得更加困难。为此,它将存储在下一个地址的某个寄存器值中以跳转到寄存器中。这些寄存器的值是在 jmp 指令之后立即计算的,使用像POP [reg] - jmp [reg]或ADD [reg1, reg2] - jmp [reg1]这样的结构。请注意,反编译程序将无法显示实际流程,因为跳转地址是由一个未定义的寄存器确定的。

11.png

显示最终 jmp 变为 RBX 的模糊处理代码

这些简单技术的组合使封装程序现在处于流的控制中,但静态反编译程序无法表示代码将遵循的路径。最后,封装程序会执行大量的垃圾指令,并最终执行真正有趣的代码。例如,在 IAT 构建任务中,原始代码在 GetProcAddress 调用之间将使用不超过 20 条指令。但封装后的代码可执行超过 30000 条指令。

但根据最近的追踪分析,最近的攻击不再使用该封装程序。

总结

如上所述,KONNI Rat 每隔一段时间就会更新迭代一次。开发者会不断改进代码。在我们看来,他们的努力旨在打破沙盒规则,使检测更加困难,特别是通过常规签名,因为可执行文件的关键部分现在已加密。

本文翻译自:https://blog.malwarebytes.com/threat-intelligence/2022/01/konni-evolves-into-stealthier-rat/如若转载,请注明原文地址


文章来源: https://www.4hou.com/posts/3VqA
如有侵权请联系:admin#unsafe.sh