研究人员最近遇到了一个相当复杂的恶意软件框架,研究人员用它的一些组件的名字命名即NetDooka。该框架通过“按安装奖励”(pay-per-install,PPI )服务传播,包含多个部分,包括加载程序、释放程序、保护驱动程序和实现其自己的网络通信协议的全功能远程访问木马 (RAT)。在分析过程中,研究人员发现 NetDooka 正通过 PrivateLoader 恶意软件进行传播,该恶意软件一旦安装,就会启动整个感染链。
PrivateLoader 恶意软件是一个下载程序,负责将多个恶意软件下载并安装到受感染的系统中,作为 PPI 服务的一部分。由于 PPI 服务的工作方式,要安装的确切有效负载可能会因恶意软件版本而异。据报道,通过 PPI 服务传播的一些已知恶意软件系列包括 SmokeLoader、RedLine 和 Anubis。
本文重点介绍 NetDooka 框架的组件和感染链,从第一个有效负载的传播开始,它释放了一个加载程序,该加载程序创建一个新的虚拟桌面来执行一个反病毒软件卸载程序并通过模拟鼠标和指针位置与之交互,这是完成卸载过程和准备的必要步骤。执行其他组件的环境,直到传播受内核驱动程序保护的最终 RAT。
虽然研究人员描述了研究人员发现的所有不同功能,但 NetDooka 的功能仍可能因恶意软件版本而异,因为它仍处于开发阶段。
攻击概述
攻击的感染链
当用户无意中下载了PrivateLoader,通常是通过盗版软件下载,然后安装第一个 NetDooka 恶意软件,这是一个负责解密和执行加载程序组件的释放程序组件。
然后加载程序执行某些检查以确保它没有在虚拟环境中运行,之后它会从远程服务程序下载另一个恶意软件。它还可能安装内核驱动程序以供将来使用。
下载的恶意软件是加载程序执行的另一个释放程序组件。这个释放程序负责解密和执行最终的有效负载,这是一个功能齐全的 RAT,包含多种功能,例如启动远程 shell、抓取浏览程序数据、截屏和收集系统信息。它还可能启动已安装的内核驱动程序组件以保护释放的有效负载。
下载程序
NetDookaLoader流程图
在执行时,加载程序将对字符串进行去混淆处理,例如命令和控制 (C&C) 服务程序地址,并检查传递的命令行参数。恶意软件接受多个参数来指示应该采取什么行动。
命令行参数及其函数
NetDookaLoader 参数的检查
如果没有参数传递给加载程序,它会执行一个名为“DetectAV()”的函数,该函数会查询注册表以自动识别可用的反病毒产品,以便卸载它们。恶意软件通过使用 CreateDesktopA 创建一个新的虚拟桌面来实现这一点,该桌面用作启动正确二进制卸载程序的工作区。这是通过使用带有“create_no_window”标志的 CreateProcessA 以及通过模拟人工交互(例如控制鼠标来完成卸载过程)来实现的。每个反病毒卸载功能都有自己的基于卸载过程的删除技术。下图显示了 GData 反病毒删除的示例。
卸载反病毒程序
然后加载程序使用 bitsadmin.exe Windows 实用程序从其 C&C 服务程序下载释放程序组件并将其保存为“C:\Program Files\ReservHardwareUpdater\rsvr_updldr.exe”。
NetDookaLoader 通过 bitsadmin.exe 下载下一阶段的攻击
带有“嵌入式”参数的自我执行
“embedded”参数负责下载释放程序组件并将其保存为“%ProgramFiles%\ReservHardwareUpdater\reloadbitex.exe”。
加载程序组件使用“correct”参数再次自我执行。完成此操作后,它会执行下载的释放程序,通过修改主机文件并将其域重定向到“0.0.0.0”地址来阻止反病毒供应商域。最后,它使用以下命令自我删除:
阻止反病毒域
在恶意软件的某些变体中,加载程序会安装一个驱动程序,作为最终有效负载(RAT 组件)的内核模式保护。它通过注册为微型筛选器驱动程序并设置回调函数来保护恶意软件免受文件删除和进程终止来实现这一点。
驱动程序二进制文件在加载程序中采用 Base64 编码,解码后,其内容将写入“C:\Program Files\SolidTechnology\protdrv.sys”文件。尽管加载程序创建了一个服务来安装驱动程序,但它不会启动它。相反,驱动程序启动任务由下载程序组件执行。
驱动安装程序函数
释放程序分析
研究人员发现 NetDooka 攻击链中涉及两个不同的释放程序组件:一个是由 PrivateLoader 安装的,它会释放 NetDooka 加载程序,而另一个会释放最终的 RAT 有效负载。
释放程序组件是一个小型 .NET 二进制文件,负责解密和执行它嵌入的有效负载。恶意软件首先读取自己的文件内容并寻找一个特定的字节序列(在研究人员分析的样本中,这是“\x11\x42\x91\x50\x7F\xB4\x6C\xAA\x75\x5E\x8D”)获取它旁边的字节。
有效负载解密是通过在解密的有效负载中执行 XOR 运算来实现的,该运算使用单字节密钥并从每次解密循环迭代的最终值中减去索引值。通过创建特定大小的素数列表并遍历它来解决密钥。对于每次迭代,都会生成当前列表元素的 SHA-256 哈希,然后将哈希结果的第一个字节添加到单字节变量中,最终的和是 XOR 秘钥。
NetDookaDropper 使用的解密程序
解密后,有效负载内容将写入 %Temp% 目录中的文件,然后通过一个新进程执行。请注意,根据恶意软件版本的不同,位置和文件名可能会有所不同。
正在执行的解密有效负载
虽然恶意软件有多个版本,表现出一些不同的行为,例如被搜索的XOR密钥和字节序列,但对于研究人员发现的所有 NetDooka 版本,释放程序的目标仍然是相同的,即在其中执行嵌入的有效负载。为了自动提取释放的有效负载,研究人员开发了一个 Python 脚本,可以在此处下载。
正如加载程序分析部分所提到的,一些版本的释放程序组件负责启动驱动程序组件服务。需要注意的是,包含驱动程序启动步骤(在最终有效负载解密和执行之前执行)的释放程序版本是包含最终有效负载的版本。
启动驱动程序组件的释放程序
驱动程序分析
驱动程序组件充当 RAT 组件的内核级保护。它通过尝试阻止 RAT 组件的文件删除和进程终止来实现这一点。该驱动程序将自己注册为一个微型筛选器驱动程序,以拦截对文件系统的 I/O 请求并设置进程回调函数以保护 RAT 进程。
在分析过程中,研究人员注意到驱动程序基于 Microsoft 驱动程序示例实现中的进程保护实现以及名为“Prevent_File_Deletion”的开源项目中的文件删除保护。
驱动程序功能的一般视图
该驱动程序注册为一个微型筛选器驱动程序,并使用 FltRegisterFilter 和 FltStartFiltering 函数启动它。文件系统是用于访问文件的 I/O 操作的典型目标。文件系统筛选器是一种机制,驱动程序可以使用它来拦截发往文件系统的调用。文件系统微筛选器是为替代 Windows 遗留文件系统筛选器机制而创建的模型,它具有易于编写的优点,这使得它成为开发文件系统筛选驱动程序的首选方法。
当一个微型筛选器驱动注册时,它可以设置回调函数在I/O请求之前(PreOperation)和之后(PostOperation)执行。为了保护文件删除,恶意软件在筛选器注册过程中注册了一个PreOperation回调函数来拦截特定类型的文件系统的I/O请求。在这种情况下,恶意软件会拦截文件删除操作。
一旦请求了文件删除操作,就会调用回调函数,驱动程序会检查目标文件的名称是否为“ougdwieue.exe”(最终RAT负载的名称)。如果是,它会改变请求的权限,以防止目标文件被删除。
检查 RAT文件名并拒绝访问
进程保护是通过 PsSetCreateProcessNotifyRoutine 函数设置进程通知回调程序来实现的,每次创建新进程时都会调用该函数。执行回调时,恶意软件会在进程命令行中查找字符串“ougdwieue.exe”,以确定该进程是否为预期目标。
正在检查的进程命令行
驱动程序还通过 ObRegisterCallback 设置另一个回调程序,以检查正在执行的涉及进程句柄创建或复制的进程操作。
在创建进程时,有了这两个回调,驱动程序可以检查正在创建的进程实际上是RAT进程,以及正在执行的操作是创建进程句柄还是复制进程句柄。如果是这样,驱动程序改变访问权限,以避免应用程序试图获取目标进程的句柄并终止它。
进程创建回调程序
对被修改的进程句柄的访问
RAT分析
最后一个有效负载是RAT,它接受来自远程服务器的命令来执行各种操作,例如执行shell命令、执行分布式拒绝服务(DDoS)攻击、下载和执行文件、记录受感染设备上的击键,以及执行远程桌面操作。下图显示了它的功能列表。
NetDookaRAT 函数
在执行时,恶意软件使用各种系统检查来检测和避免分析环境。
环境规避
该恶意软件会创建一个名为“3f0d73e2-4b8e-4539-90fd-812330bb39c8”的互斥锁来标记其在系统上的存在。如果它在系统中找到相同的互斥锁,它就会退出。
在 C&C 通信之前,NetDooka 会生成一个 16 字节的随机会话,并将其存储在名为“config.cfg”的文件中。
初始化和配置 C&C 服务器
会话ID生成器
然后它初始化其网络通信组件并联系其 C&C 服务程序以注册受害者并检索命令。
C&C 通信
NetDookaRAT 使用自定义协议与 C&C 服务程序进行通信,其格式如下图所示。
C&C 通信中使用的数据包结构
每个响应分为标头和数据流。标头流包含要发送的数据的请求类型、大小和选项,而数据流包含特定函数的返回值。下表显示了类型值及其对应函数的列表。
类型值及其对应的功能
下图中的代码片段演示了恶意软件如何构造和发送上图中所示的请求。
为请求创建数据包
然后,恶意软件开始侦听传入的 TCP 连接以接收命令。然后,它解析接收到的命令以在受感染的计算机程序上执行它们。下图显示了恶意软件支持的命令,而另一个图中的代码片段演示了恶意软件如何执行这些命令。
RAT命令和功能
RAT 命令的代码片段
总结
PPI 恶意软件服务允许恶意软件开发者轻松部署其有效负载。恶意驱动程序的使用为攻击者创造了一个巨大的攻击面,同时也允许他们利用诸如保护进程和文件、绕过反病毒程序以及对系统隐藏恶意软件或其网络通信等方法。此外,通过正确安装 RAT 有效负载,攻击者可以执行诸如从受感染系统中窃取一些关键信息,获得对系统的远程控制访问以及创建僵尸网络。最后,NetDooka 也可以充当其他恶意软件的入口点。
本文翻译自:https://www.trendmicro.com/en_us/research/22/e/netdooka-framework-distributed-via-privateloader-ppi.html如若转载,请注明原文地址