初探Rootkit-记一次对Festi Rootkit的静态分析
person 发表于 广东 历史精选 2387浏览 · 2024-06-17 10:41

前言:Rootkit简介


Rootkit是一种计算机软件的集合,通常是恶意软件,用于访问计算机内原本不允许访问的区域(未经root权限的区域)。Rootkit旨在帮助恶意攻击者控制计算机或应用程序,一经激活就会在计算机中留下后门漏洞以及其它恶意软件。Rootkit有很强的隐蔽性,有些Rootkit可以在操作系统启动前之前运行,因此Rootkit通常很难被检测出来,它还可能会破坏旨在找到它的程序。

根据Rootkit感染机器的位置和深度大致可以分为以下几类:

  • 用户模式Rootkit--在应用层允许的Rootkit,可以修改应用程序和API行为,相对内核Rootkit更容易被检测出来。
  • 内核模式Rootkit--运行在内核层中,可以控制所有系统进程,除了难以被检测外,内核模式Rootkit还会影响目标系统的稳定性(蓝屏)。
  • 固件Rootkit--这些Rootkit可以访问运行设备(路由器、网卡、硬盘或系统BIOS)的软件,它可以在关闭计算机时隐藏在固件中,重新启动计算机时又重新安装;很难被清除。
  • Bootkit--Rootkit的"大哥",通过感染目标系统的主引导记录(MBR)来控制目标系统,Bootkit允许恶意程序在目标操作系统加载之前执行。
  • 虚拟Rootkit--虚拟Rootkit利用硬件虚拟化功能来控制计算机。这是通过绕过内核并在虚拟机中允许目标操作系统来实现的。它几乎不可能被检测和清除,因为它的运行级别高于操作系统,且可以拦截目标操作系统发出的所有硬件调用。

注入

与其他计算机病毒如蠕虫不同,Rootkit需要帮助过才能感染计算机。情况之一就是Rootkit和软件包捆绑一同安装到了你的计算机上;还有一种则是混合威胁,Rootkit和Dropper、loader俩个组件共同构成一个混合威胁。

  • Dropper(投放者)--Dropper是一种特殊的感染类型,它携带有效负载到目标计算机内部将其植入到系统上。Dropper能够隐藏自身和负载(对其进行压缩、加密和混淆)以避免被杀软检测。
  • Loader(下载者)--Loader和Dropper有所不同,它自身不携带有效负载,而是从远程服务器下载。通常Loader是一段恶意代码,Dropper先开始执行,将Loader植入系统,Loader再将Rootkit安装到目标系统上。

样本 Festi

Festi Rootkit是早期很流行的一种涉及垃圾邮箱和分布式拒绝服务(DDoS)的僵尸网络。它针对于Windows X86平台,具体介绍不多讲;Festi可以通过Dropper植入系统,学习一下Dropper的过程以及对样本做一点简单的分析。

Dropper

start分析

整个Dropper的逻辑很清晰,从dword_404000中提取数据进行数据处理和子函数调用,之后将其保存在sys中,如下图Drop2:

sub_40151B如下:

sub_401635如下:

使用CreateServiceA创建了一个指定的内核模式服务,使用StartServiceA启动该服务,这里就将Rootkit植入到系统之中了。
最后的Drop3:

Drop3是很典型的恶意软件的自删除机制,确保恶意程序在执行后删除自身以降低被检测到的概率。

生成的.bat文件大概如下:

:try
del "C:\Windows\system32\drivers\serial<random_number>.sys"
if exist "C:\Windows\system32\drivers\serial<random_number>.sys" goto try
del "C:\Users\Username\AppData\Local\Temp\<random>.bat"

sys驱动程序分析


初次接触,先对Festi的C&C通信和反虚拟机和反调试技术进行一点分析,其它下次继续。

Festi僵尸网络拥有强大的垃圾邮件发送和DDoS功能,它的内核驱动程序有俩个主要职责:从命令和控制(C&C)服务器请求配置信息,以及以插件的形式下载和执行恶意模块。

C&C通信的配置信息

为了使Festi能够与C&C服务器通信,Festi提供了三种预定义的配置信息:C&C服务器的域名、用于加密bot(僵尸主机)和C&C之间传输的数据的密钥,以及bot版本信息。
这些配置信息被硬编码到了驱动程序的二进制文件中。

该二进制文件中的一个节表.cdata,其中存储的就是配置数据以及用于执行恶意活动的字符串。
Festi样本使用一个DWORD字节的密钥对数据进行异或运算(在驱动程序初始化时解密),f_decode_cdata_section函数如下:

写一个IDApython脚本,key是0x9D802CB0,对.cdata进行异或可以得到:

整理一下:

Anti-Virtual技术&Anti-debug技术

Festi拥有检测它是否存在VMware虚拟机中运行的技术,以避免沙箱和自动恶意软件分析环境。如f_anti_vm_check函数:

这里检查ebx寄存器,如果代码在虚拟机环境中执行,它将会包含VMX值。

这里检测是Virtual PC环境,通过异常处理和vpcext指令,因为'vpcext'指令特定于Virtual PC环境,如果该指令执行成功且没有触发异常,则表明存在VPC管理程序。

Festi还会检查系统上是否存在网络流量监控软件,它会寻找内核模式驱动程序npf.sys(网络包过滤器),该驱动属于Windows包捕获库(WinPcap),WireShark等网络监控软件经常使用该驱动来访问数据链路网络层。

我在上面的样本中没有找到这个Anti-Virtual技术,于是找了下别的样本,具体内容如下:

Festi会通过检查从操作系统内核映像导出的KdDebuggerenabled变量来检测系统中是否存在内核调试器:

后记

初探Rootkit,仅仅只是分析了解了一下rootkit的机制,Festi僵尸网络强大的一点应该是其以插件形式下载和执行的恶意模块,关于Festi的插件管理和分发以及Rootkit的隐藏操作下一次再详细分析......

参考:
Rootkit
神秘 Avatar rootkit 带有 API、SDK 和 Yahoo Groups,用于 C&C 通信
Avatar Rootkit:Dropper 分析
RETURN OF THE FESTI ROOTKIT
King of Spam:Festi Botnet Analysis
《Rootkit和Bootkit 现代恶意软件逆向分析和下一代威胁》
附件来源于随书文件,可上github自行下载。

0 条评论
某人
表情
可输入 255