TDSS

* TDSS. Rootkit 技术
          o 一切的开始: TDL-1
          o TDL-2: 这场 游戏还在继续
          o TDL-3: 故事是否终结?
    * TDSS 在线
          o The “Partnerka”
          o AffId
          o 链接
          o C&C
          o 任意 SQL 注入
          o 从内核到 用户
    * TDSS: 工具丰富
          o 金钱
          o 有效荷载
          o C&C 命令
          o 网页欺骗病毒
          o 黑帽 SEO
          o 遥控器
    * TDSS的传播

    * 故事还将继续



TDSS: Rootkit技术
一切的开始: TDL-1


TDSS的第一个版本被卡巴斯基实验室检测到是在2008年5月6日,并被命名为Rootkit.Win32.Clbd.a。这个名称是来源于该恶意软件的驱动文件名:clbdriver.sys与DLL文件名:clbdll.dll,该DLL实施了主要的恶意荷载。

大橡树也是由小橡子长大的,这句谚语非常的适合TDSS案例,回溯到2008年,在TDSS的第一个版本运用这种rootkit技术还是相对简单的。

有趣的是,自第一个版本以来,某些部分的rootkit代码依旧被保留了下来,并没有发生改变:


  • TDL 标识符;
  • 驱动感染工具;
  • 使用配置文件;
  • 与 С&C 面板协同工作。


早期的TDSS版本,Rootkit.Win32.Clbd.o,截图为被感染的beep.sys驱动文件代码片段



该rootkit最重要的函数功能:


  • 通过隐藏方式来保护关键的注册表键值;
  • 通过隐藏方式来保护关键的磁盘上的文件;
  • 从内核态驱动注入恶意代码到系统进程中;
  • 隐藏TCP网络端口;
  • 执行某些功能(结束进程、结束线程、隐匿注入DLL模块等)。


通过向系统驱动堆栈添加一个恶意的过滤器来隐藏文件。该方法在每个卷中都在循环执行着。这个方法一箭双雕:一方面,该rootkit隐藏磁盘上的以“tdl”开头的文件,并且在尝试打开 \Device\HarddiskVolumeX卷时返回错误消息。这会导致各种反rootkit工具在需要打开卷进行文件系统结构的底层分析是发生错误。

虚假错误是由恶意软件通过返回错误消息“STATUS_TOO_MANY_SECRETS”实现;返回虚假错误系统消息的这种方法正好突出体现出了当前网络犯罪的一种冷幽默调侃。

另一反面,网络端口同样也通过在 \Device\Tcp驱动堆栈添加恶意过滤器来隐藏。

与恶意服务注册表项目与配置参数建立注册表关联的注册表项目都通过挂钩系统函数NtEnumerateKey被隐藏。这是通过嫁接替换功能函数开始部分的一定数量的字节来重定向到恶意驱动上来实现的。


截图为一已受感染系统:NtEnumerateKey 与 NtFlushInstructionCache功能函数被嫁接的实例



挂钩系统函数NtFlushInstructionCache是此恶意软件比较有趣的特性。通过调用这个函数,恶意驱动文件可以执行如下附加命令:


  • 结束一个线程;
  • 阻止线程执行;
  • 结束一个当前进程;
  • 获取当前进程名;
  • 隐藏一个注入的DLL模块;
  • 卸载一个驱动文件;
  • 获取正在运行的进程列表。



函数执行附加的rootkit命令



该rootkit利用PsLoadedModuleList列表,以相对简单的方式来筛选排除系统所要加载的模块,PsLoadedModuleList是一个系统已加载的驱动文件列表。

TDL-1有趣的特性就是如上所说的几个方面,今天反恶意软件技术可以轻松的检测与处理这种rootkit,TDL-2的表现的就是一个涉及到这个方面的很好的证据。




TDL-2: 这场游戏还在继续

反rootkit技术正在不断发生变革,rootkit技术同时也在适应新的变革。TDL-2(TDSS),一种恶意程序的变种在2009年早期随之出现。

值得注意的是TDL-2有着若干个变种,每个变种都被修改过程序功能。基于这个原因,从不同来源的描述可能在被提供有关信息时有所不同。

为了防止恶意驱动被分析,犯罪分子即采用入口点模糊处理与代码高强度加密等技术手段加密rootkit主体代码。他们从“哈姆雷特(Hamlet)”中添加随机词语到恶意文件中企图迷惑恶意软件分析师。


恶意程序包含随机词语的截图片段



虽然rootkit的功能相对前一个版本没有改变,但是反分析的技术有了大幅度的提高并且企图隐匿rootkit变化。恶意驱动嫁接挂钩如下所示大量的系统内核函数:


  • IofCallDriver
  • IofCompleteRequest
  • NtFlushInstructionCache
  • NtEnumerateKey
  • NtSaveKey (某些版本中挂钩)
  • NtSaveKeyEx (某些版本中挂钩)
  • NtQueryValueKey (某些版本中挂钩)
  • NtSaveKey (某些版本中挂钩)
  • NtSaveKeyEx (某些版本中挂钩)
  • NtQueryValueKey (某些版本中挂钩)



已被挂钩操作系统函数截图片段



一个企图尝试恢复以上提到的被挂钩内核函数的都是可行的。但是该rootkit使用若干个系统线程来检查挂钩的状态,如果发现挂钩当前被恢复,那么将会重新挂钩。与此同时,该rootkit也会检查系统注册表中关于恶意服务注册表项目是否被删除,如果被删除也会重新注册。

就如同该rootkit的第一个版本一样,TDL-2通过挂钩NtEnumerateKey函数来隐藏rootkit的配置数据与它的关键注册表键值。

两个新的系统内核函数进入了我们的视野:NtSaveKey 与 NtSaveKeyEx,通过挂钩这两个系统内核函数能够防止一些反rootkit工具通过检测系统注册表中的异常情况来主动发现活跃在系统中的恶意软件。

挂钩NtFlushInstructionCache系统内核函数是为了确保恶意程序组件能够与系统内核进行通信。

该恶意软件通过挂钩系统内核函数 IofCallDriver 与 IofCompleteRequest 以便于让恶意驱动可以过滤系统的 IRP 数据包。这将帮助该恶意软件隐藏rootkit文件并且限制访问它们。在Windows系统下,I/O系统是统一接口的基础与操作系统的核心。I/O管理器链接应用程序与各种设备的各种系统组件。大多数I/O请求构建特殊的IRP数据包表格(输入/输出请求数据包)。因此,通过挂钩以上提到的函数后将会允许一个进程过滤大量的IRP数据包,例如打开文件操作。拦截 IofCallDrive 函数能够筛选出将要被系统处理的数据包,挂钩 IofCompleteRequest 函数就能够取消掉一个正常的IRP操作,例如一个文件的打开操作。

挂钩 IofCallDriver 函数已实现目的是一个非传统的方式,应该说是一种技术创新。该项挂钩监视着执行堆栈,如果它发现一个不在该rootkit内置白名单的驱动在堆栈并且尝试读取某个文件时,该rootkit会返回一个欺骗的“读取成功”状态给不在白名单中的驱动。事实上,这个驱动并没有真正读取文件成功。

当系统函数 IofCompleteRequest 被挂钩时,该rootkit会返回虚假的错误消息“STATUS_SECRET_TOO_LONG”并且拦截操作。

该rootkit同时也通过使用系统注册表键值 ServiceGroupOrder 耍花招。该注册表键值负责处理驱动加载的权限。当rootkit发现一个驱动被给予最高权限,例如某驱动被授予 “System reserved”权限时,对这项服务的登记记录将会被修改以便于该服务启动的更晚,这是另一种抵抗反rootkit技术的方式。

该恶意功能目前仍旧足够复杂,能够抵抗大多数反病毒产品并且仍然有效( http://www.anti-malware-test.com/?q=node/180),因为,它能够帮助rootkit持续在被感染的系统中无法检测到。然而,位于该恶意软件身后的犯罪分子不愿满足于他们的成就。他们的孜孜追求促成了TDL-3于2009年秋的出现。该rootkit是迄今为止最复杂,最强大,最有意思的rootkit。





TDL-3:故事是否终结?

这个恶意程序的最新版采用了最先进的病毒编写技术。除了继续研究开发rootkit,作者也在持续改进恶意程序的自我保护能力,bug修复与发展有效载荷、迅速响应反病毒软件公司开发的新的检测技术。

为了确保rootkit在操作系统内站稳脚,犯罪分子使用一种流行的感染方式:感染系统文件。这个方法的目的在于感染微型端口/端口的磁盘驱动程序。通过感染该系统文件能够在操作系统启动后几乎立即载入该rootkit。

该rootkit最近的变种会随机选择一个系统某个重要的驱动进行感染。不过,我门先开始研究该rootkit早期的版本是如何感染atapi.sys驱动文件的。为了防止被反rootkit工具检测到,该rootkit会首先检测这个文件的大小,然后进行感染,感染后的文件与原文件大小不发生变化。

恶意感染代码会替换被感染的文件的资源字段中的一些字节,这些字节包含引导该rootkit主体部分的引导代码,并且修改驱动文件的入口点指向该rootkit主体部分引导代码。


atapi.sys驱动文件在被感染前的入口点信息




atapi.sys驱动文件在被感染后的入口点信息



受感染的驱动在被加载时会优先加载存放位于磁盘最后扇区内的rootkti主体部分到内存中执行,并且将控制权交给它。


位于磁盘上的rootkit主体部分,该主体部分被命名为“TDL3”



然而,就以上这些并不是该rootkit所要做的全部内容。TDL-3使用自身的加密文件系统来加密自身的配置数据与用户态DLL模块。所以,TDL-3不需要FAT或者NTFS文件系统的支持就能够操作数据。


位于磁盘最后扇区位置上的rootkit配置数据解密后的实例



计算机世界中的任何一个rootkit的最主要的目的都是阻止或者隐藏关键的恶意数据。为了实现这点,TDL-3伪装成一个为系统设备提供服务的对象。


磁盘设备堆栈



该驱动的所有函数功能都是为了做一件事情:恶意的挂钩大量的系统内核函数,以下是恶意驱动的挂钩函数代码:



上图所示的方法表示rootkit会过滤掉企图访问存放该rootkit重要数据的磁盘扇区。如果有企图读取该受感染的驱动(在这个案例是atapi.sys)的话,rootkit会返回一个干净的驱动文件所包含的内容(也就是说访问这个驱动文件时,对于访问者来说能够获得一个被感染前的驱动文件),这是为了能够完全的不被发现而做的设计。

TDS-3是一个非常复杂的恶意软件。设计这个恶意软件的作者非常关注反病毒软件公司的举动并且迅速更新此rootkit的更新。截止到目前为止,该rootkit的当前版本已经变种了3273次。我们预计该rootkit的功能将在不久的将来被改进,以更好地对付反rootkit技术。




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值