特种木马防御与检测技术研究
上QQ阅读APP看书,第一时间看更新

2.1 U盘摆渡木马特征分析

随着我军及重点涉密部门信息化的发展,越来越多的资料从以前的书面文字变为电子档案存放在计算机中。在提高办公效率的同时,也给不法分子窃取机密资料带来了新的便利。黑客攻击、泄密事件层出不穷。针对这种情况,虽然目前我军及其他涉密计算机网络和民用计算机网络采用的是相同的技术,但是为保障军网及涉密网的安全,防止互联网上各种攻击造成的危害,一般采用物理隔离的措施,即计算机信息系统不直接或间接地与国际互联网或者其他公共信息网络相连接。实施物理隔离可以最大限度地阻止来自境内外互联网黑客的攻击。但物理隔离并不能彻底解决军网络和涉密网络的安全问题[51~53]

物理隔离的网络面临的威胁主要有内部攻击、“摆渡”攻击、非法外联和非法接入等。其中以“摆渡”攻击最为严重,且难以防范。这种方式甚至可以间接入侵既未接入互联网、也未接入涉密网的保存涉密资料较多的独立的计算机系统。

摆渡攻击的工具是摆渡木马,它是一种特殊的木马。其感染机制与U盘病毒的传播机制类似。只是感染目标计算机后,它会尽量隐蔽自己的踪迹;不会出现普通U盘病毒感染后的症状,如更改盘符图标、破坏系统数据和在弹出菜单中添加选项等。它唯一的动作就是扫描系统中的文件数据,利用关键字匹配等手段将敏感文件悄悄写回U盘中;一旦这个U盘再插入到连接互联网的计算机上,就会将这些敏感文件自动发送到互联网上指定的计算机中[54]。摆渡木马是一种间谍人员定制的木马,隐蔽性、针对性很强,一般只感染特定的计算机,普通杀毒软件和木马查杀工具难以及时发现,对国家重要部门和涉密单位的信息安全威胁巨大。

2.1.1 摆渡执行过程

随着计算机网络的高速发展、Windows平台的友好界面促进网络的日益普及以及网络应用多样化,木马植入出现了多种方法,传统的木马植入方式主要有以下几种。

利用E-mail。控制端将木马程序以附件的形式夹在电子邮件中发送出去,收信人只要打开附件,系统就会感染木马。

软件下载。一般的木马执行文件非常小,大到几KB到几十KB。如果把木马捆绑到其他正常文件上,是很难被发现的。一些非正规的网站以提供软件下载为名义,将木马捆绑在软件安装程序上;下载后,只要运行这些程序,木马就会自动安装。

通过script、ActiVex及Asp、cgi交互脚本的方法植入。由于微软的浏览器在执行script脚本上存在一些漏洞,攻击者可以利用这些漏洞传播病毒和木马,甚至直接对浏览者主机进行文件操作等控制。

利用系统的一些漏洞进行植入。如微软著名的IIS服务器溢出漏洞,通过一个IISHACK攻击程序即把IIS服务器崩溃,并且同时在受控服务器执行远程木马程序。

利用上述方法投放的木马程序最终都是以独立的进程运行于目标主机中,这些木马进程利用进程查看工具很容易被识别。这些方法有的将木马程序注册为一个系统服务进程,这样也只能避免在任务列表中出现。而且这些方式都是传统的基于互联网的木马,对于与互联网隔离的局域网则没有任何办法。有以下两种比较有效的针对局域网注入木马的方法。

(1)使用远程线程来注入DLL

在Windows环境下,一种更为隐蔽的木马投放方案是使用远程线程来注入DLL。这种技术是以DLL的形式实现木马功能,然后在目标主机中选择特定目标进程,由该目标进程将木马DLL加载运行。DLL文件的特点决定了这种实现形式的木马的可行性和隐蔽性[10]。首先,由于DLL文件映像可以被映射到调用进程的地址空间中,所以它能够共享宿主进程(调用DLL的进程)的资源,进而根据宿主进程在目标主机中的级别未经授权访问相应的系统资源。其次,因为DLL没有被分配独立的进程地址空间,也就是说DLL的运行并不需要创建单独的进程,所以从系统的进程列表里看不见DLL木马的运行踪迹,从而可以避免在目标主机中留下木马进程踪迹,因此满足了隐蔽性的要求。将木马程序以DLL的形式实现后,需要使用注射程序将该木马DLL注射入目标进程的地址空间,即利用该线程通过调用Load Library函数来加载木马DLL,从而实现木马植入[11]。由此可见,创建远程线程和注射程序是此种DLL木马注入技术的两个关键环节。

·创建远程线程

由于除了自己进程中的线程外,无法随意地控制其他进程中的线程,因此需要在目标进程中创建一个新线程。对于自己创建的线程,能够控制它执行什么代码,但在另一个进程中创建我们控制的远程线程,则需要调用CreateRemoteThread API(应用程序接口)函数:


    HANDLE CreageRemoteThread(
         HANDLE hProcesS.
         PSECURITY—ATTRIBUTES psa,
         DWORD dwStackSize.
         PTHREAD—START—ROUTINE
         pfnStartAddr,
         PVOID pvParam,
         DWORD fdwCreate.
         PDwORD pdwThreadId);

参数hProcess为指向拥有新创建线程的进程(即目标进程)的句柄。参数pfnStartAddr指明远程线程进入点函数的内存地址,由于是将该线程插入目标进程地址空间中,所以该地址应该是与目标进程地址空间相关的,而不能位于本地进程的地址空间。参数pvParam为传递远程线程进入点函数的调用参数。

在实际调用CreateRemoteThread时需要预先对远程线程进入点函数(这里指LoadLIbrary函数)地址和木马DLL路径名进行相应处理,之后,就可以正式调用CreateRemoteThread函数创建远程线程,从而加载木马DLL。

·注射木马DLL

现在考虑如何由远程线程调用LoadLibrary函数加载木马DLL。比较LoadLibrary函数与远程线程进入点函数的原型:


    HINSTANCE WINAPI LoadLibrary(LPCSTR pszLibFileName);
    DWORD WINAPI ThreadFunc(PVOID pvParam);

使用远程线程注入DLL提供了最高的灵活性。这种方法要求理解Windows的许多特性:进程、线程、线程同步、虚拟内存管理、DLL以及Unicode。但是此种方法有一个弱点,系统重启后,需要重新调用注射程序才能再次在目标进程中创建远程线程,进而远程线程调用LoadLibrary来载入想要的DLL木马[55]。如何自动运行注射程序(exe文件)是一个关键环节,注射程序不运行,DLL木马将没有任何意义。这是此种方法的软肋所在。

(2)用木马DLL替换系统进程的DLL

注入DLL的另一种方式是,把知道的进程会载入的一个DLL替换掉。举个例子,如果知道进程会载入abc.dll,则可以创建自己的木马DLL(trojan.dll)并给它改成同样的文件名。当然必须将原来的abc.dll改成别的名称,如_abc.dll。

这种方法要求自己写一个木马DLL与目标进程调用的DLL具有相同接口函数。在替换的过程中,由自己编写的木马功能函数替换原有函数,木马功能执行后再进行函数转发运行原DLL中的原有函数,而对其他不感兴趣的函数,则以函数转发的形式调用原有DLL中的函数。这里面有个前提,就是在编写DLL时必须知道原有DLL中的函数都有哪些,以免导致其他进程调用DLL时找不到相应的API函数,特别是在替换系统DLL文件时更要小心。

这样有一个好处,一旦DLL木马替换了目标进程必然会载入的DLL,就会永久驻留在系统内,随着目标进程的启动而运行。选择目标进程的DLL很重要,要求选择不重要但一定会加载的,加载后被释放的DLL;因为有的DLL一直会被目标进程调用,是无法被替换的。所以这种方法需要丰富的经验,有一定的难度。另外这种方法不能自动适应版本变化。例如,如果替换掉的是一个系统DLL,而Microsoft后来又在该DLL种添加了新的函数,那么DLL中将不会有这些新函数的转发器。引用了这些新函数的应用程序将无法被载入和执行。

对于摆渡木马注入来说,当设备插入时,即判断设备的类型,若设备为USB可移动设备,随后获取设备的盘符、U盘的总容量、可用容量、已占用容量、U盘文件系统信息,并获取USB可移动设备的PID/VID,同时获取设备存储的文件信息。当产生向USB设备的复制动作时,将调用二次遍历函数,与初始插入设备时的文件信息进行比对,定位是否有不合法的文件复制进入USB设备,并定位新增文件路径,进行弹窗提示。USB设备摆渡防御流程如图2.1所示。

图2.1 U盘摆渡防御流程

2.1.2 文件搜索

摆渡木马窃取文件的首要环节,就是判断目标文件的存在目录,即通过全盘低效率搜索机制,逐步建立窃取文件索引列表。

文件搜索规则主要包括以下两种方式。

1)国家秘密文件搜索:根据国家保密有关法律法规要求,对于涉密电子文件均要求在文件首页标示密级,且文件保存及命名均需清晰标示,因此,这也为摆渡木马的文件窃取提供了搜索依据。

2)敏感文件搜索规则:对于非涉密的敏感数据,摆渡木马多采取基于关键字的搜索策略,如“内部资料”或科学研究等领域高频敏感词汇,如火箭、导弹、密码等都极易被列为关键词汇。

对于摆渡木马文件搜索的算法通常是采用一种低频的递归全盘搜索算法,通过文件名与关键词库的匹配来确定兴趣文件,并确定文件的存储位置。低频的目的主要是防止进程由于过多消耗内存或占用CPU而引起用户或者检测防护系统的警觉。

目前的U盘摆渡木马在搜索完毕后,一般不会拷贝或窃取文件,而仅仅是保留一个带有文件名称和位置信息的列表。一旦时机成熟,则直接从目标位置复制并打包发送被窃取文件。

2.1.3 写入U盘等移动介质

摆渡木马一旦完成文件搜索之后,就会启动探测功能,时刻关注外部移动存储介质的接入。当发现有存储介质接入被窃密电脑终端时,则直接通过文件索引列表,将文件逐个地植入移动介质内,并设定文件属性为不可见。

一般来说,U盘摆渡木马为了避免被检测,对于文件的移动操作都会伴随其他应用程序或用户的文件交互操作同步进行。

除此之外,写入U盘内的还包括摆渡木马程序的副本,这也是摆渡类木马攻击的特点之一,即能够随着U盘等移动介质的交叉使用,而不断扩散并感染所有接入介质的计算机,并造成数据的大范围泄密。

(1)探测有移动存储介质接入系统

对于外来存储介质的管理,系统采取了一套独立的管理策略。但是,对于设备的介入来说,摆渡木马只需监控注册表或者驱动调用程序接口即可,并在系统完成必要的驱动准备工作后,快速识别该介质,实现对于该介质的完全访问控制。

本书给出了一段检测介质接入的检测代码,可将其封装为一个独立进程同步运行,程序的测试用例可参照附录1。

(2)将文件拷贝至U盘

当系统内潜伏的摆渡木马探测到U盘接入时,将对U盘实施访问控制,系统函数CopyFile()将被窃取文件拷贝操作到U盘内,函数的数据结构定义如下:


BOOL      CopyFile{
    LPCTSTR   lpExistingFileName,       //文件指针
    LPCTSTR   lpNewFileName,            //U盘内文件复本指针
    BOOL      bFailIfExists             //重复标识
    };

(3)更改文件属性

为了进一步解决被窃取文件易被检测的问题,摆渡木马通常采取移入U盘后改变文件属性的方式。通过设置更改文件为系统文件或直接设置其为隐藏属性的方式,使复制到U盘的文件不易被用户和防护软件探测并发现。

更改文件属性的操作一般调用系统函数SetFileAttributes()来实现。


BOOL SetFileAttributes ( 
LPCTSTR lpFileName, 
DWORD dwFileAttributes);

通过该函数可以修改注册表regedit HKEY_LOCAL_MACHINE|Software|Microsoft|windows|CurrentVersion|explorer|Advanced|Folder|Hidden|SHOWALL,将该项对应的键值CheckedValue修改为0,这样文件就被隐藏,一般用户无法发现。

2.1.4 发送被窃取文件

涉密文件被通过U盘等移动存储介质带出涉密计算机网络后,需要将涉密文件发送至窃密人。通常的做法是通过SMTP邮件发送协议实现。

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上,整个过程只要几分钟。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。

SMTP要经过建立连接、传送邮件和释放连接3个阶段。具体操作细节如下。

·建立TCP连接;

·客户端向服务器发送HELLO命令以标识发件人自己的身份,然后客户端发送MAIL命令;

·服务器端以OK作为响应,表示准备接收;

·客户端发送RCPT命令;

·服务器端表示是否愿意为收件人接收邮件;

·协商结束,发送邮件,用DATA命令发送输入内容;

·结束此次发送,用QUIT命令退出。

SMTP服务器基于DNS中的邮件交换(MX)记录路由电子邮件。电子邮件系统发邮件时根据收信人的地址后缀来定位邮件服务器。SMTP通过用户代理程序(UA)完成邮件的编辑、收取和阅读等功能;通过邮件传输代理程序(MTA)将邮件传送到目的地[56]

2.1.5 启动方式的隐藏

众所周知,一个病毒木马进入计算机系统的首要任务是保护自己不被杀毒软件、防护系统或用户所发现,即使被发现了也要想办法使自己不被查杀掉,只有存活下来,才有机会实现窃取信息的任务。所以对木马的隐藏以及免杀的研究是非常重要的工作。

木马区别于远程控制程序的主要不同点就在于它的隐蔽性,木马的隐蔽性是木马能否长期存活的关键。木马的隐藏技术主要包括以下几个方面:本地文件隐藏、启动隐藏、进程隐藏、通信隐藏和内核模块隐藏和协同隐藏等[57~60]

(1)本地文件伪装

前些年比较常见的木马文件隐藏方式是将木马病毒伪装成本地文件。木马病毒将可执行文件伪装成图片或文本,在程序中把图标改成Windows的默认图片图标,再把文件名改为.JPG.EXE。由于Windows默认设置是不显示已知的文件后缀名,文件将会显示为.JPG,不注意的人一点击这个图标就在无意间启动了木马程序[61,62]

(2)通过修改系统配置来实现文件的伪装

利用配置文件的特殊作用,木马很容易就能在计算机中运行。如autoexec.bat和Config.sys。像DOS在启动会自动运行autoexec.bat文件,一般在里面装载必用的程序,如path(设置路径)、smartdrv(磁盘加速)、mouse(鼠标启动)、mscdex(光驱连接)、doskey(键盘管理)、set(设置环境变量)等,当然也可以添加自己的木马程序。特别是系统配置文件MSCONFIG.SYS中的系统启动项——system.ini、Windows.ini是众多木马的隐藏地。Windows安装目录下的system.in的[boot]字段中,正常情况下boot=“Explorer.exe”,如果后面有其他的程序,如这样的内容,boot=“Explorer.exe file.exe”,这里的file.exe可能就是木马程序。再有System.ini中的[drivers]、[drivers32]、[mci]这3个字段,是起到加载驱动程序的作用,因此也是增添木马程序的好场所。

(3)替换系统文件

木马病毒就利用系统中那些不会危害到系统正常运行而又经常会被调用的程序文件,像输入法指示程序INTERNAT.EXE。让动态链接库可以像程序一样运行RUNDLL32.EXE等。木马程序会替换掉原来的系统文件,并把原来的系统文件名改成只有自己知道的一个偏僻文件名。只要系统调用那个被替换的程序,木马就能继续驻留内存。木马作为原来的程序被系统启动时,会获得一个由系统传递来的运行参数,木马程序就把这个参数传递给被改名的程序执行[63]

(4)进程隐藏

进程隐藏有两种情况,一种隐藏是木马程序的进程仍然存在,只是不在进程列表中,采用APIHOOK技术拦截有关系统函数的调用实现运行时的隐藏,替换系统服务等方法导致无法发现木马的运行痕迹。另一种方法是木马不以一个进程或者服务的方式工作。将木马核心代码以线程或DLL的方式插入到远程进程中,由于远程进程是合法的用户程序,用户又很难发现被插入的线程或DLL,从而达到木马隐藏的目的。在Windows系统中常见的真隐藏方式有:注册表DLL插入、特洛伊DLL、动态嵌入技术、远程线程插入和调试程序插入等[64]

(5)内核模块隐藏

有些木马在运行时能够删除自身启动运行存在的痕迹,当检测到操作系统重新启动再重新在系统中设置需要启动自身的参数,这类木马存在的问题:当系统失效时(如断电、死机时)无法再次恢复运行。内核模块隐藏,使木马程序依附到操作系统部件上,或成为操作系统的一部分。通常做法是用木马DLL替换系统DLL,DLL中的函数实现木马功能,并转发到原系统DLL中调用相关的函数。

(6)原始分发隐藏

软件开发商可以在软件的原始分发中植入木马,其主要思想如下。

·修改编译器的源代码A,植入木马,包括针对特定程序的木马(如login程序)和针对编译器的木马。经修改后的编译器源码称为B。

·用干净的编译器C对D进行编译得到被感染的编译器D。

·删除B,保留D和A,将D和A同时发布。以后,无论用户怎样修改login源程序,使用D编译后的目标login程序都包含木马。而更严重的是用户无法查出原因,因为被修改的编泽器源码B已被删除,发布的是A,用户无法从源程序A中看出破绽,即使用户使用D对A重新进行编译,也无法清除隐藏在编译器二进制中的木马。相对其他隐藏手段,原始分发的隐藏手段更加隐蔽[18]

(7)通信隐藏

主要包括通信内容、流量、信道和端口的隐藏。木马常用的通信隐藏方法是对传输内容加密,隐藏通信内容。采用网络隐蔽通道技术隐藏通信信道。在TCP/IP协议中,有许多信息冗余可用于建立网络隐蔽通道。木马可以利用这些网络隐蔽通道突破网络安全机制,比较常见的有:ICMP畸形报文传递、HTTP隧道技术、自定义TCP/UDP报文等。采用网络隐蔽通道技术,如果选用一般安全策略都允许的端口通信,如80端口,则可轻易穿透防火墙和避过入侵检测系统等安全机制的检测,从而具有很强的隐蔽性。通信流量的隐藏,当存在其他通信流量时,木马程序也启动通信。当不存在任何其他通信流量时,木马程序处于监听状态,等待其他进程通信。有些木马为了能更好地实现隐藏,达到长期潜伏的目的,通常融合多种隐藏技术,如采用多线程方式,线程间相互实时保护,一旦一方被删除,另一方可以通过备份恢复并远程启动。或通过一个木马程序(称为“主木马”),在局域网内部繁殖生产“子木马”,统一协调完成工作。各子木马根据主木马分派的任务,各自负责一独立任务。达到相互之间的保护,同时可以分散传输数据量,达到目的地址接受数据,增大追查源地址的难度。而且主木马和子木马寄生于不同主机,并且相互联系,增强了木马的抗查杀能力[65]