【翻译】威胁狩猎: Notepad++ 插件mimeTools.dll恶意修改版分析
朝闻道 发表于 湖北 二进制安全 849浏览 · 2024-04-19 07:16

翻译:https://asec.ahnlab.com/en/64106/

AhnLab安全情报中心(ASEC)最近确认Notepad++的基本插件“mimeTools.dll”已被修改和分发。恶意 mimeTools.dll 文件包含在某些版本的 Notepad++ 软件包安装程序中,并伪装成合法的软件包文件。 mimeTools是一个执行Base64等编码功能的模块,如下图所示,基本上已经包含在内,无需用户单独添加。

mimeTools.dll 是 Notepad++ 的基本插件,因此当您运行 Notepad++ 时会自动加载它。经证实,攻击者利用了这一点,使用了一种DLL劫持方法。换句话说,即使用户只运行notepad++.exe ,mimeTools.dll 也会自动加载并运行恶意软件。

[图1] MIME Tools,Notepad++的插件
攻击者在mimeTools.dll中添加了恶意加密的ShellCode以及解密执行的代码。下图比较了正常 Notepad++ 包和恶意包中包含的文件。接下来,我们将确认 certificate.pem 文件包含。

[图2] 官方包和恶意软件包内文件对比

另外,mimeTools.dll 提供的功能(导出)按原样实现,仅 DllEntryPoint 的代码有所不同。换句话说,恶意的 mimeTools.dll在加载 DLL 的那一刻就开始恶意行为,即使用户没有执行任何特定功能。

【图3】正常的mimeTools.dll和不正确的mimeTools.dll的EntryPoint对比

该恶意软件的执行流程如下图所示。

  1. 当用户运行 Notepad++ 的同时加载 mimeTools.dll 时,就会出现错误行为。
  2. 使用 ShellCode 使用 mimeTools.dll 解密certificate.pem 文件并执行它。
  3. 然后,它使用无效的 ShellCode 覆盖BingMaps.dll->GetBingMapsFactory()函数的内部代码。
  4. 被覆盖的ShellCode再次对explorer.exe执行线程注入。
  5. 最后,从 C2 服务器下载并运行额外的 ShellCode。

[图4]恶意软件流程图

0. 间接系统调用

该恶意软件在执行过程中使用了许多间接系统调用技术。这是一种逃避防病毒产品的方法。

[图5]间接系统调用

如上图所示,jmp语句用于分支到syscall,但是jmp语句准确地指示了syscall部分,并直接设置了调用此syscall所需的因子值。使用此方法挂钩 ntdll 并逃避监视 Native API 的防病毒产品。

1.ShellCode解密&执行

解密后的ShellCode是在第一个执行的Notepad++进程的区域中生成的。这方面存在一些10分钟的延时逻辑,但本文不予讨论,因为可以通过修改RCX值轻松避免。

【图6】Certificate.pem文件解密流程

【图7】解密后的ShellCode

使用两个模块 Crypt32.dll 和 BCrypt.dll将certificate.pem 文件中的二进制文件转换为 ShellCode 。

  1. Base64解码

  2. AES解密(密钥:wqviIfew62w0zgP97yw9G2nqlHFKkggQ)

【图8】用ShellCode切换执行流程

之后对生成ShellCode的区域授予执行权限,通过jmp语句切换执行流程。

2.BingMaps.dll篡改

修改BingMaps.dll的EntryPoint,并用ShellCode覆盖Export函数GetBingMapsFactory()的内部代码。

【图9】BingMaps.dll->EntryPoint篡改

【图10】BingMaps.dll->GetBingMapsFactory()篡改

之后,执行流程通过以下步骤切换到 BingMaps.dll->GetBingMapsFactory()。

1. NtCreateThreadEx()
2. NtGetContextThread()
3. NtSetContextThread() :设置 RIP
4. ResumeThread()

创建Thread后,使用NtGetContextThread()获取该Thread的寄存器值,并使用GetBingMapsFactory(被ShellCode覆盖的区域)设置RIP寄存器。

【图11】使用RIP设置被篡改的GetBingMapsFactory()

3. 被篡改的GetBingMapsFactory()

BingMaps.dll 中的 GetBingMaps Factory() 函数在之前的过程中被 ShellCode 覆盖。在这个以新线程启动的函数中,有一个进程识别VM等分析环境,终止该进程,并执行将线程插入explorer.exe的作用。

[图12]根据进程名进行哈希匹配

此代码通过对运行时运行的所有进程名称逐个字符执行SHIFT 和 XOR 操作来生成简单的哈希值。生成的Hash值用于检查特定进程是否存在,如果Hash匹配,则该进程退出,而不会执行任何额外的非法行为。确认终止的进程名称列表如下:

VGAuthService.exe
vmtoolsd.exe
ProcessHacker.exe
x64dbg.exe
PE-bear.exe
CFF Explorer.exe
Autoruns.exe
procexp.exe
procexp64.exe
Procmon.exe
Procmon64.exe
tcpview.exe
Dbgview.exe
portmon.exe

对于“explorer.exe”进程,会收集并存储恶意行为所需的附加信息(PID)。然后使用保存的explorer PID为explorer.exe生成进一步的ShellCode ,步骤如下:

  1. NtAllocateVirtualMemory():在 explorer.exe 内分配空间
  2. NtWriteVirtualMemory():将 ShellCode 插入该空间
  3. NtCreateThreadEx():在线程上执行插入的 ShellCode。

从此时起,恶意软件就在explorer.exe的内存区域中执行。

【图13】explorer.exe区域插入ShellCode

4.Explorer.exe(注入)

这就是恶意行为真正开始的地方。连接到 C2 以下载并执行额外的 ShellCode。

[图14]重建前的C2字符串

与C2通信过程中使用的字符串会通过特定的函数转换为URL。 C2 URL 字符串可以通过仅将奇数字符串在一起的非常简单的过程来获得。收集到的C2可以在本文底部的IoC选项卡中找到。

[图15]在请求头中添加系统信息

在向 C2 发送 Get 请求之前将内容添加到 Header 中,将从用户 PC 收集的信息进行 Base64 编码并传输给攻击者。此时收集到的信息如下。

计算机名称
用户名
当前用户是否是管理员组的成员
语言
系统时间

[图16]响应中的ShellCode提取

C2 通信后,观察到一个额外的过程,该过程搜索响应中特定字符串(“on>使用此偏移量解密其他 ShellCode 并跳转到此 ShellCode。目前,我可以连接到 C2 URL,但此 Offset 的附加 ShellCode 为空。

【图17】C2外形及内部代码

在分析时被访问的C2被设计成看起来像WordPress登录页面。当这种恶意软件首次被分发时,C2的外观是一个维基网站,并被称为“WikiLoader”

这次我们分析的是Notepad++中被插入恶意软件的案例,Notepad++由于支持多种语言以及强大的插件功能而受到很多用户的喜爱。因此,从官方发行网站下载软件的习惯非常重要,在使用破解版或其他来历不明的软件时应特别小心。

ioc

c4ac3b4ce7aa4ca1234d2d3787323de2:包文件(npp.8.6.3.portable.x64.zip)
6136ce65b22f59b9f8e564863820720b:mimeTools.dll
fe4237ab7847f3c235406b9ac9 0 ca845:certificate.pem
d29f25c4b162f6a19d4c6b96a540648c:包文件(npp.8.6.4.portable.x64。 zip )
8b7a358005eff6c44d66e44f5b266d33 : mimeTools.dll
d5ea5ad8678f362bac86875cad47ba21 : 证书.pem
0 条评论
某人
表情
可输入 255