木马隐藏技术的研究与分析
2010-08-06高悦翔
刘 澜, 高悦翔
(① 四川师范大学 计算机科学学院,四川 成都 610068;② 四川大学 计算机学院,四川 成都 610065)
0 引言
随着互联网络的快速发展,网络安全问题日益突出。计算机病毒、特洛伊木马以及网络蠕虫等恶意程序对网络安全构成了巨大的威胁。其中特洛伊木马的破坏最大,它能在高隐蔽性的状态下窃取网民的隐私信息。
通常被感染木马的计算机用户并不知道自己的计算机已被感染。这是由于木马程序具有很高的隐蔽性,它能在看似无任何异常的情况下,秘密操控远程主机,进行破坏活动。本文主要针对木马的隐藏技术展开研究,揭示了木马各种隐藏技术的实现原理和技术手段。
1 程序隐蔽
木马程序隐藏通常指利用各种手段伪装木马程序,让一般用户无法从表面上直接识别出木马程序。要达到这一目的可以通过程序捆绑的方式实现。
程序捆绑方式是将多个exe程序链接在一起组合成一个exe文件,当运行该exe文件时,多个程序同时运行。程序捆绑有多种方式,如将多个exe文件以资源形式组合到一个exe文件中或者利用专用的安装打包工具将多个exe文件进行组合,这也是许多程序捆绑流氓软件的做法。
因此,木马程序可以利用程序捆绑的方式,将自己和正常的exe文件进行捆绑。当双击运行捆绑后的程序时,正常的exe文件运行了,而木马程序也在后台悄悄地运行。
程序隐藏只能达到从表面上无法识别木马程序的目的,但是可以通过任务管理器中发现木马程序的踪迹,这就需要木马程序实现进程隐藏。
2 进程隐蔽
隐藏木马程序的进程显示能防止用户通过任务管理器查看到木马程序的进程,从而提高木马程序的隐蔽性。目前,隐藏木马进程主要有如下两种方式:
2.1 API拦截
API拦截技术属于进程伪隐藏方式。它通过利用Hook技术监控并截获系统中某些程序对进程显示的 API函数调用,然后修改函数返回的进程信息,将自己从结果中删除,导致任务管理器等工具无法显示该木马进程。具体实现过程是,木马程序建立一个后台的系统钩子(Hook),拦截PSAPI的 EnumProcessModules 等相关函数的调用,当检测到结果为该木马程序的进程ID(PID)的时候直接跳过,这样进程信息中就不会包含该木马程序的进程,从而达到了隐藏木马进程的目的。
2.2 远程线程注入
远程线程注入属于进程真隐藏方式。它主要是利用CreateRemoteThread函数在某一个目标进程中创建远程线程,共享目标进程的地址空间,并获得目标进程的相关权限,从而修改目标进程内部数据和启动 DLL木马。通过这种方式启动的 DLL木马占用的是目标进程的地址空间,而且自身是作为目标进程的一个线程,所以它不会出现在进程列表中。DLL木马的实现过程是:
① 通过OpenProcess函数打开目标进程;
② 计算DLL路径名需要的地址空间并且根据计算结果调用 VirtualAllocEx函数在目标进程中申请一块大小合适的内存空间;
③ 调用WriteProcessMemory函数将DLL的路径名写入申请到的内存空间中;
④ 利用函数GetProcAddress计算LoadLibraryW的入口地址,并将 LoadLibraryW 的入口地址作为远程线程的入口地址;
⑤ 通过函数 CreateRemoteThread在目标进程中创建远程线程。
通过以上步骤就可以实现远程线程注入启动 DLL木马,达到隐藏木马进程的目的。而且,远程线程注入方式与其他进程隐藏技术相比,具有更强的隐蔽性和反查杀能力,增加了木马的生存能力。
3 通信隐藏
进程隐藏可以进一步加强其隐蔽性。但是仍然可以从通信连接的状况中发现木马程序的踪迹。因此,很有必要实现木马程序的通信隐藏。本文给出了以下两种通信隐藏技术的实现思想。
3.1 端口复用技术
木马服务器端程序在运行时会主动打开某一端口和客户端程序进行连接,从而降低了木马程序的隐蔽性。木马端口复用技术能避免这种缺点,它让木马服务端程序共享其他网络程序已打开的端口和客户端进行连接,从而防止重新开启端口降低隐蔽性。
该技术的关键之处在于,木马程序应增设一个数据包转交判断模块,该模块控制主机对数据报的转交选择。当主机收到目的端口与木马所复用的端口一致的数据包时,调用数据包转交判断模块进行判断,若为木马程序的数据包,将其转发给木马程序,否则,将其转交给开启该端口的网络程序,如图1所示,图1中模块S=数据包转交判断模块。
图1 端口复用的数据包转交过程
利用端口复用技术可以增强木马的通信隐藏,但是对于某些设置得过严的防火墙和入侵检测系统,这种技术也会失去作用。因此,除了通信端口的隐藏之外,还应该考虑数据包传输协议的隐藏。本文通过分析相关网络协议,编写出了一款利用ICMP协议缺陷传输数据的木马程序,这里给出该技术的关键实现思想。
3.2 利用ICMP和HTTP协议
通常网络防火墙和入侵检测系统等安全设备只检查ICMP报文的首部,对数据部分不做处理。因此,可以将木马程序的通信数据隐藏在ICMP报文格式的选项数据字段进行传送,如把服务端程序向客户端程序传输的数据伪装成回显请求报文,而把客户端程序向服务端程序传输的数据伪装成回显应答报文[1]。这样,就可以通过 PINGPINGRESPONSE的方式在木马服务端程序和客户端程序之间建立起一个高效的秘密会话信道。利用ICMP协议传输数据还有一个很大的优点,即ICMP属于IP层协议,它在传输数据时并不使用任何端口,从而具有更好的隐蔽性。
利用HTTP协议进行木马程序之间的数据传输同样具有很高的隐蔽性。攻击者可以将木马客户端程序使用的端口绑定到HTTP服务的端口(80)上。那么,当木马服务端程序向客户端程序建立连接时,目的端口就变成了 80端口,从而将该连接伪装成HTTP服务连接以逃过防火墙的检查。
实验测试表明,利用ICMP协议缺陷传输数据的木马程序能够很好地逃避网络防火墙和入侵检测系统的检查,实现和控制端之间的通信。但是,采用该技术的木马程序传输数据的效率和稳定性还有待提高。
以上分析的各种木马隐藏技术都只是建立在木马程序实现自身隐藏的基础上。然而,目前网络安全状况表明,随着反木马技术的不断提高,木马程序仅靠自身或者某单一技术已无法实现高隐蔽性。因此,实现木马的协同隐藏技术就显得尤为重要。
4 协同隐藏
木马协同隐藏思想通常是综合利用各种木马隐藏技术,通过木马子程序或者木马程序之间相互协作,实现更高的隐蔽性。木马协同隐藏技术摆脱了传统隐藏技术仅靠单一木马、单一技术的方式,它能够从宏观整体出发,设计更加强大的木马协作隐藏模型。
Harold Thimbleby等人[2]提出了木马程序的模型框架;张新宇等人[3]对木马协同隐藏思想进行了形式化描述,并通过验证知,当系统引入主木马和各个子木马时,协同隐藏模型可以使系统发生变化,显现出不一致的特点,因此证明了引入相关多个子木马程序协助主木马程序实现协同隐藏的可行性;梅登华等人[4]将Multi-Agent技术与木马技术结合,提出了基于Multi-Agent的木马技术;康治平等人[5]在木马协同隐藏模型的基础上提出了基于多线程和多对多的结构。
本文根据Harold Thimbleby等人对木马协同隐藏的形式化描述,提出了一种基于动态星型结构的木马协同隐藏模型。该结构主要思想如下,在某个区域内各个木马之间选取某一木马为主木马,并将该主木马作为代理,各个子木马通过它和控制端完成通信。主木马负责协调并控制子木马实现协同隐藏,同时各个子木马需实现相关隐藏功能,共同构建协同隐藏模型。为了保持该模型结构以及实现动态变化的特点,主木马角色应在一段时间后由不同的子木马随机担任,如图2。
图2 星型结构隐藏模型
例如在局域网中构建该模型的实现过程是:将木马程序植入局域网内某一主机,并且使该木马程序担任主木马角色,利用系统漏洞向网内其他主机传播木马程序,然后自动构建动态星型结构木马模型。为了使该模型能成功实现,还必须完成如下功能:
① 主木马应构建一个状态信息表,记录区域内各子木马状态信息;
② 主木马协调各子木马的隐藏功能,实时检测子木马状态,一旦发现某一子木马消失,应立即通过系统漏洞重新注入木马程序[4];
③ 子木马通过主木马和控制端通信,如果发生中断,如主木马主机关机或者主木马程序被清除等,各子木马应重新选取出主木马,新选取的主木马替换原来主木马角色,重新构建状态信息表;
④ 木马程序启动时,应主动向网内报告登记,如果该木马发现自己是网内第一个启动的木马程序,其应担任主木马角色;
⑤ 主木马程序应设置一个计数器,记录其控制的子木马数量,防止由于子木马数量过多,通信量过大,影响系统性能。
为了进一步提高木马协同隐藏的能力,还可以将其他隐藏技术融合到该隐藏模型中,如各木马之间利用ICMP协议通信,实现端口复用技术等。
木马程序采用动态星型结构通信比采用普通方式通信具有更高的隐蔽性和生存周期。分析如下:
① 由于采用代理方式通信及动态变换主木马角色,使得通信源地址实时变化,增加了追查控制端IP地址的难度;
② 主木马实时检测子木马状态,并传播木马程序,只要该模型结构中存在一个木马,就能够构建出完整的协同隐藏模型,从而增加了木马程序的生存时间;
③ 模型结构中的木马程序融合了各种隐藏技术实现协同隐藏,增强了整体隐藏能力;
④ 具有较高的程序扩展性,可以通过主木马实时更新各子木马功能模块;
⑤ 主木马之间可以继续构建该动态星型结构隐藏模型,实现多级化木马隐藏模型。
该模型加强了木马协同隐藏的能力,增加了木马程序的生存时间,但也产生了一些相关问题,如增加了木马通信结构的复杂度,降低了通信过程的稳定性,增加了网内控制信息,易造成网络阻塞、瘫痪等。总之,木马隐藏技术正朝着复合、协同的方向发展,各种问题也会随着技术的进步逐步得以解决。
5 结语
木马隐藏技术研究是木马程序研究的热点问题之一。本文针对木马隐藏技术进行了较全面的分析,给出了木马程序隐藏、进程隐藏、通信隐藏以及协同隐藏等技术原理。通过从单一木马程序隐藏技术到多木马程序隐藏技术的研究,展现了木马程序隐藏的关键性思路转变。通过对木马隐藏技术的分析研究, 可以加深对木马隐藏技术的认识, 提高木马攻击的防范意识,从而进一步把握木马隐藏技术的发展方向,以至于开发出更多针对木马隐藏技术的反木马工具。
[1] 张仁斌,李钢,侯整风.计算机病毒与反病毒技术[M].北京:清华大学出版社,2006:300-316.
[2] Thimbleby H, Anderson S, Cairns P.A Framework for Modelling Trojans and Computer Virus Infection[J].The Computer Journal,1998,41(07):444-458.
[3] 张新宇,卿斯汉,马恒太,等.特洛伊木马隐藏技术研究[J].北京:通信学报,2004,25(07):153-159.
[4] 梅登华,林耀通.基于 Multi-Agent的木马模型设计[J].北京:电子技术应用,2008,34(05):138-140.
[5] 康治平,向宏.特洛伊木马隐藏技术研究及实践[J].北京:计算机工程与应用,2006,42(09):103-105.