打开网易新闻 查看更多图片

近期,火绒安全实验室在日常威胁巡视中发现一 GitHub 仓库发布的项目存在病毒风险行为,火绒安全工程师第一时间提取样本进行分析。分析中发现样本会通过多种手段对抗杀软,并最终释放 Remcos 商业远控木马控制受害者机器,且病毒作者仍在积极开发当中。目前,火绒安全产品可对上述病毒进行拦截查杀,请广大用户及时更新病毒库以提高防御能力。

打开网易新闻 查看更多图片

火绒 6.0 查杀图

观察到的病毒样本来源于一个名为 "CodeBlock" 的 GitHub 仓库发布的项目,没有任何有关的项目描述,但已有不少受害者中招。调查分析过程中发现该程序利用多层文件进行跳转,利用层层解密进行免杀,除此之外还利用包括 “天堂之门” 在内的多种手段对抗分析。通过最终释放远控木马,攻击者能够执行各种远程操作,从而使用户机器沦为”肉鸡” 。

打开网易新闻 查看更多图片

样本来源仓库

样本执行流程图如下所示:

打开网易新闻 查看更多图片

执行流程图

在此,火绒工程师提醒大家对来历不明的文件应保持警惕,同时安装可靠的安全软件保护设备免受恶意软件和病毒的侵害。目前,火绒 6.0 已上线公测,针对用户的真实应用环境,升级反病毒引擎等核心技术,推出9大硬核功能,可有效解决无文件攻击、系统进程保护、流氓软件等诸多安全问题,为“杀、防、管、控”增强壁垒。欢迎大家前往火绒官方网站下载体验。

一、样本分析第一阶段分析:

(由于病毒作者的积极开发,样本分析以附录中的 HASH 为准)

从恶意仓库中下载的 "CodeBlock-wallet_v1.3.1.zip" 压缩包内容如下,运行 "CodeBlock-wallet_v1.3.1.exe" 后其只加载 CodeBlock-wallet_v1.3.1-0.bin 和 CodeBlock-wallet_v1.3.1-1.bin 两个文件:

打开网易新闻 查看更多图片

解压文件

"CodeBlock-wallet_v1.3.1.exe" 由 Embarcardero Delphi 编译,是 Inno Setup 的引导程序,其会加载同目录下的 CodeBlock-wallet_v1.3.1-0.bin 进行第二阶段 Payload 文件的释放:

打开网易新闻 查看更多图片

文件信息

打开网易新闻 查看更多图片

Inno Setup 标志

CodeBlock-wallet_v1.3.1-1.bin 是 Payload 的源文件,样本分段读取并解密 CodeBlock-wallet_v1.3.1-1.bin 的内容后,在 C:\Users\Administrator\AppData\Roaming 目录下先以xxxx.tmp 的形式释放,再重命名为 bigmouth.ai、nighttime.xlsx、relay.dll、UIxMarketPlugin.dll、UniversalInstaller.exe,随后执行 UniversalInstaller.exe 开启下一阶段流程:

打开网易新闻 查看更多图片

文件重命名

打开网易新闻 查看更多图片

解密文件展示

第二阶段分析:

在前面释放的文件中 UIxMarketPlugin.dll 并没有被加载执行,UniversalInstaller.exe 直接通过 LoadLibraryW 加载同目录下 relay.dll ,调用其 DllMain 函数执行后续主要操作:

打开网易新闻 查看更多图片

加载relay.dll

部分解密逻辑梳理:

relay.dll 的 DllMain 函数会加载同目录下的 nighttime.xlsx 文件并进行解密,先是定位到固定的 D6C0 位置处,获取文件数据区的正向偏移后开始解密 D6C0 处的内容,解密方式是从第 4 位偏移开始,以 DWORD 为单位向前递加,具体细节如下所示:

打开网易新闻 查看更多图片

解密逻辑

打开网易新闻 查看更多图片

解密前后对比

解密后的内容中,前面是需要调用的字符串,relay.dll 会分别定位解密数据前面的 3 个字符串 LoadLibraryA、VirtualProtect、dbghelp.dll,获取其函数地址并进行调用,然后加载 dbghelp.dll 进内存空间准备执行后续注入操作:

打开网易新闻 查看更多图片

定位字符串并调用

解密后的字节码有很多都是用于标记位置的“偏移值”,在加载 dbghelp.dll 后,会先获取用于定位注入 dbghelp.dll 位置的偏移写入解密代码,再根据“划分数据段的”的偏移限制注入大小,以此“分段”执行——即执行代码位于 dbghelp.dll 中,但相关数据依旧存在于解密空间中:

打开网易新闻 查看更多图片

解密内容展示

打开网易新闻 查看更多图片

定位注入逻辑

打开网易新闻 查看更多图片

注入代码展示

打开网易新闻 查看更多图片

解密关系图

dbghelp.dll 注入代码分析:

Dump 出解密代码进行分析,其先动态获取所需函数,执行相关初始化操作:

打开网易新闻 查看更多图片

动态获取函数

随后读取同目录下 bigmouth.ai 文件进行第一次解密,第一次解密后 0x8、0xC、0x10 偏移处的值是后续调用 RtlDecompressBuffer 函数解压缩的参数:

打开网易新闻 查看更多图片

一层解密代码

打开网易新闻 查看更多图片

一层解密

解压缩后得到真实的数据和代码,包含前面的数据区和后面的代码区:

打开网易新闻 查看更多图片

二层解压缩

同样的读取解密代码前面的字符串数据继续执行下 一步注入,这里定位解密代码入口点并替换到加载的 pla.dll 的入口点处:

打开网易新闻 查看更多图片

定位入口点

替换后入口点代码如图所示:

打开网易新闻 查看更多图片

注入入口点

pla.dll 注入代码分析:

pla.dll 中注入的解密代码会读取前面数据区中的 ruzNode_test 字符串用于在 C:\Users\Administrator\AppData\Roaming 目录下创建备份文件夹,然后调用 CopyFileW 函数将原先释放的 bigmouth.ai、nighttime.xlsx、relay.dll、UIxMarketPlugin.dll、UniversalInstaller.exe 复制过来作为备份:

打开网易新闻 查看更多图片

复制文件

打开网易新闻 查看更多图片

备份文件目录

随后创建以 C:\Users\Administrator\AppData\Roaming\ruzNode_test 目录下的 UniversalInstaller.exe 为主体的执行进程替换 C:\Users\Administrator\AppData\Roaming 目录下的 UniversalInstaller.exe 以执行后续操作:

打开网易新闻 查看更多图片

替换 UniversalInstaller.exe

新启动的 C:\Users\Administrator\AppData\Roaming\ruzNode_test\UniversalInstaller.exe 会重复上述解密流程,随后继续以类似的逻辑将分段代码注入到 shdocvw.dll 中(这里不再细究),并在该区段内调用 CreateProcessW 函数创建 "C:\Windows\SysWOW64\cmd.exe" 进程用于注入第三阶段 shellcode:

打开网易新闻 查看更多图片

创建cmd进程

打开网易新闻 查看更多图片

当前进程关系

天堂之门利用:

在创建 cmd 进程后,为了隐藏 API 的调用痕迹,并干扰安全研究人员分析,还特别调用了天堂之门来 “遮掩” 其内存注入的操作:

打开网易新闻 查看更多图片

天堂之门

dump 出的 shellcode 如下,其中传参用的 rcx、rdx、r8、r9 分别由不同的 [rbp-xxh] 来赋予:

打开网易新闻 查看更多图片

64位指令解密

通过天堂之门调用 Ntdll!NtCreateThreadEx、Ntdll!NtWriteVirtualMemory 等 API,将下一阶段 shellcode 以远程线程注入到 "C:\Windows\SysWOW64\cmd.exe" 中——先是将完整的 pla.dll 写入 cmd 的内存空间中,随后再将解密的代码注入到 pla.dll 的 .text 段入口点,最后调用 Ntdll!NtResumeThread 恢复线程:

打开网易新闻 查看更多图片

调用 Ntdll!NtWriteVirtualMemory 展示

打开网易新闻 查看更多图片

被注入的入口点

其中,与 "C:\Windows\SysWOW64\cmd.exe" 的通信是通过管道进行的,最后会通过管道向 "C:\Windows\SysWOW64\cmd.exe" 写入"\r\n" 使其执行注入的 shellcode:

打开网易新闻 查看更多图片

管道通信

第三阶段分析:

第二阶段的代码在成功注入 "C:\Windows\SysWOW64\cmd.exe" 后会在 "C:\Users\Administrator\AppData\Local\Temp" 目录下释放加密的字节码文件,被注入的 "C:\Windows\SysWOW64\cmd.exe" 在执行过程中会读取该文件的内容并进行解密:

打开网易新闻 查看更多图片

读取加密文件

打开网易新闻 查看更多图片

加密内容展示

在解密完成后,还会释放 svcultra_test 到开机启动项目录中,指向 "C:\Users\Administrator\AppData\Roaming\ruzNode_test\UniversalInstaller.exe" 执行持久化操作:

打开网易新闻 查看更多图片

查看文件属性

打开网易新闻 查看更多图片

创建链接文件

接着调用 Ntdll!NtCreateFile 在同样是 "C:\Users\Administrator\AppData\Local\Temp" 的目录下创建相应文件准备写入解密内容:

打开网易新闻 查看更多图片

创建解密文件

写入文件调用的函数 NtWriteFile 依旧是通过天堂之门进行调用的:

打开网易新闻 查看更多图片

天堂之门

64 位指令如下,由于混淆的原因,调用参数所对应的 [rbp-xxh] 的位置稍微有点偏移:

打开网易新闻 查看更多图片

64位指令解密

除了 rcx、rdx、r8、r9 外的参数是通过 rdi 和参数数量结合的偏移 [rdi+rax*8-8] 来定位的,如下图所示,写入的解密代码为一个 exe 文件,用于执行后续注入:

打开网易新闻 查看更多图片

调用 Ntwrite 函数

打开网易新闻 查看更多图片

解密文件内容

最后创建 "C:\Windows\SysWOW64\explorer.exe" 进程,以同样的方式将解密的 EXE 文件以远程线程的方式注入进去:

打开网易新闻 查看更多图片

创建 explorer 进程

打开网易新闻 查看更多图片

当前进程关系

后门分析:

用于注入 "C:\Windows\SysWOW64\explorer.exe" 进程的 EXE 实际上是一个 Remcos 远控后门,属于 4.9.3 的专业版:

打开网易新闻 查看更多图片

Remcos 标识符

Remcos 是一个成熟的远控后门,目前已更新到 4.9.4,是一个商业化的木马,与 cobalt strike 相似,能完全控制受害者机器:

打开网易新闻 查看更多图片

官网页面

打开网易新闻 查看更多图片

官网宣传图

获取到的外联 IP 地址如下:195.54.170.36:22077

打开网易新闻 查看更多图片

外联IP获取

二、附录

C&C:

HASH:

打开网易新闻 查看更多图片