趋势科技研究人员发现了一种新型恶意软件,将其命名为 "OpcJacker"(取其opc配置设计“opc”和加密货币劫持“hijack”能力英文前后缀opc-jack而成),该恶意软件自2022年下半年以来一直传播。OpcJacker是一个有趣的恶意软件,因为它的配置文件使用一个自定义的文件格式来定义窃取者的行为。具体来说,该文件格式类似于自定义的虚拟机代码,配置文件中存在的十六进制数字标识符使得窃密器可运行所需的功能。使用这种设计的目的可能是为了使研究人员更难理解和分析恶意软件的代码流。


恶意软件OpcJacker的主要功能包括键盘记录、屏幕截图、从浏览器中窃取敏感数据、加载附加模块,以及替换剪贴板中的加密货币地址以达到劫持目的。

图1. OpcJacker的感染链


研究人员观察到OpcJacker通过不同的活动进行传播,包括伪装成加密货币相关的应用和其他合法软件,然后攻击者通过虚假网站进行传播。在最近一次(2023年2月)涉及OpcJacker的活动中,感染链始于恶意广告,恶意广告对伊朗用户进行地理定位。这些恶意广告被伪装成合法的VPN服务,欺骗受害者下载一个包含OpcJacker的文档。


该恶意软件是通过在已安装得应用更新一个合法的DLL库时加载的,该应用也会加载另一个恶意DLL库。然后,恶意DLL库汇编并运行shellcode,shellcode是另一个恶意可执行文件的loader和runner,可执行文件是文件数据块里存储OpcJacker的各种格式的数据文件,如WAV和CHM。该loader自命名为”Babadeda” crypter以来,已经使用了一年多。这些活动背后的攻击者对加密器本身进行了一些改变,然后增加了一个全新的payload(一个窃密器/剪切器/记键器)。


OpcJacker通常是释放(或下载)和运行额外的模块,这些模块是远程访问工具,不是NetSupport RAT就是一个隐藏虚拟网络计算(hVNC)的变体。我们还发现一份报告分享了一个名为 "Phobos Crypter"(实际上与OpcJacker是同一个恶意软件)的loader被用来加载Phobos勒索软件的信息。



传播

正如介绍中提到的,OpcJacker是通过不同的活动传播的,包括以虚假网站宣传看似合法的软件和加密货币相关的应用,但实际都是托管恶意软件。由于这些活动除了OpcJacker之外,还会传播一些其他不同的恶意软件,因此它们很可能是OpcJacker的控制者所使用的不同类型的按次安装服务。


在最近一次(2023年2月)涉及OpcJacker的活动中,研究人员注意到OpcJacker是通过针对伊朗恶意广告的地理定位传播的。这些恶意广告链接到一个恶意网站,这个恶意网站伪装成合法VPN软件的网站。网站的内容是从一个合法的商业VPN服务的网站上复制的,然而链接被修改为指向到一个内嵌恶意内容被黑网站。


恶意网站检查客户的IP地址以确定受害者是否使用VPN服务。如果IP地址没有使用VPN服务,它就将受害者重定向到第二个被黑网站,诱使他们下载一个包含OpcJacker的文档。如果受害者正在使用VPN服务,就不会发生上述攻击行为。


图2. 一个用于提供OpcJacker的恶意广告的例子


此外,研究人员还发现了一些ISO镜像和RAR/ZIP档案,其中包含各种软件被修改过的安装程序,其导致OpcJacker加载。这些安装程序以前被其他活动使用过,被托管在各种被黑的WordPress框架的网站或软件开发平台,如GitHub。攻击者喜欢使用ISO文件的一个可能的原因是为了绕过IE浏览器的 Mark-of-the-Web 警告。


以下是我们发现的一些文件名例子:


  • CLF_security.iso
  • Cloudflare_security_setup.iso
  • GoldenDict-1.5.0-RC2-372-gc3ff15f-Install.zip
  • MSI_Afterburner.iso
  • tigervnc64-winvnc-1.12.0.rar
  • TradingViewDesktop.zip
  • XDag.x64.rar



Babadeda 加密器


在安装程序释放所有必要的文件后,它就会加载主可执行文件(RawDigger.exe),这是一个干净的合法文件。


图3. 安装程序释放的文件列表;虽然大多数是安全文件,但有些是补丁或恶意文件


可执行文件加载了一个DLL库,其中包括打了补丁的导入(librawf.dll)


图4. 导入的DLL库列表;高亮显示的库为修补后可加载另外恶意DLL的库


修补后的DLL(librawf.dll,与合法应用RawDigger(一个原始镜像分析器)相关)的导入地址表被进一步修补,修补包括了两个额外的DLL库。在下图中,请注意FirstThunk地址(新添加的库)是如何以001Dxxxx开始的,而不是原始库的FirstThunk地址中使用的0012xxxx。


图5. 一个经过修补的导入地址表


图5中高亮显示的库(libpushpp.dll)随后被加载和执行。它的主要任务是打开其中一个数据文件(hm)并加载存储在其中的第一阶段的shellcode。


图6. 恶意库打开一个数据文件


第一阶段shellcode的偏移量和大小被硬编码到DLL库中。


图7. 恶意库从偏移量0x37D50复制第一阶段的shellcode;shellcode的大小为0x75A字节


在较新版本的Babadeda加密器中,另一个DLL库(mdb.dll,来自虚假VPN的安装程序)被加载到内存中,然后第一阶段shellcode覆盖写入到一个硬编码随机选择的内存块。请注意,这种变化只是一个小细节,对第一阶段shellcode的整体功能没有影响。


图8. 内存加载合法库(mdb.dll),然后第一阶段shellcode(0x7B5字节)被复制到库的内存空间中


在第一阶段shellcode的末尾有一个配置表,包含了加密块的偏移量和它们各自的大小。然后,第一阶段shellcode解密并整合所有的块,形成第二阶段的shellcode(一个加载器)和主要的恶意软件(OpcJacker能加载其他恶意模块)。


图9. 第一阶段shellcode的配置表


配置表以至少八个相同的字符开始(图9中红色的 "*",但在其他样本中可能使用不同的字符),然后是数据文件的总长度(绿色字体;hm的长度=0x1775e0=1537504字节),加密密钥(黄色字体;0x18),shellcode第二阶段块数(棕色字体;0x07),最后,由主恶意软件的块数(白色字体;0x08)。0x07(红线框)和0x08(蓝线框)的列表相当于每个块的15个地址和大小。


在数据文件(hm)的开头,我们可以看到(WAV)文件头,因为它试图模仿WAVE文件格式。请注意,数据文件可以是不同的文件格式,CHM格式能被模仿篡改。


图10. 以WAV头开始的数据文件



主要的窃密器组件(OpcJacker)


主要的恶意软件组件(OpcJacker)是一个有趣的窃密器,首先解密并加载其配置文件。配置文件的格式类似于用自定义机器语言编写的字节码,其中每条指令都被解析,获得单独的操作码,然后执行具体的处理程序。


在分析自定义字节码时,我们注意到以下模式:


ASCII字符串被编码为01 xx xx xx <string bytes>;其中xx xx xx xx是字符串的长度。


图11. 配置文件内编码的ASCII字符串


同样地,宽的字符串从第02字节开始,而二进制数组从第03字节开始。


图12. 配置文件内编码的UNICODE字符串


图13. 配置文件内的编码二进制阵列


配置文件的格式是一个指令序列,其中指令以三个4字节的小端(DWORD)数字开始。第一个数字是虚拟程序计数器,第二个可能是父指令的虚拟程序计数器,而第三个是处理程序ID(将在虚拟机中执行的代码),后面是数据字节或附加处理程序ID。


基于这些观察,研究人员写了一个指令解析器,从中得到了以下输出。尽管对虚拟机内部实现的观察和理解是不完整的,但解析器让研究人员很好地理解了配置文件中定义的行为是什么。


解密和解码后的配置文件从某些系统变量的初始化开始,其中 "test "和 "rik "很可能是活动ID。由SHA256 c5b499e886d8e86d0d85d0f73bc760516e7476442d3def2feeade417926f04a5释放的配置文件包含不同的关键词 "test "和 "ilk "作为活动ID。同时,2023年2月的最新活动所释放的配置文件(SHA256 565EA7469F9769DD05C925A3F3EF9A2F9756FF1F35FD154107786BFC63703B52)包含关键词 "test_installs "和 "yorik"。


图14. 初始化命令


然后初始化剪贴板替换功能(剪切)。


图15. 剪贴板替换器(clipper)的初始化


然后,变量 "exe "被初始化为可执行文件字节(见4d 5a 90 = MZ标记)。这个可执行文件是一个远程访问工具。


图16. 嵌入式模块(PE EXE格式)


恶意软件通过注册表运行和任务调度器方法设置了持久性。请注意用于保存当前进程文件名的$itself_exe变量。


图17. 设置持久性的方法


然后,该恶意软件启动剪切功能,即监控剪报板上的加密货币地址,并将其替换为由攻击者自己的加密货币地址。


图18. 剪切器功能


最后,virtual_launch_exe函数运行先前嵌入的可执行文件,这些文件是RAT,要么是NetSupport RAT、NetSupport RAT下载器,要么是hVNC。


图19. 运行嵌入式可执行文件的功能



自定义虚拟机中的处理程序ID


从前面几张截图中的第三列(或解码后的 "命令 "变量)可以看出,虚拟机实现了许多内部处理程序。其中大部分都与各种数据操作有关。我们在表1中列出了几个值得注意的处理程序,它们具有特定的高级功能。偷窃器实现的功能包括:剪贴(剪贴板内容替换)、键盘记录、文件执行和列出、杀死进程、窃取Chrome证书、检测空闲和检测虚拟机。然而,在我们的测试场景中,我们观察到窃密器大多只是设置持久性和提供额外的模块(远程访问工具)。


Handler ID