APP下载

特洛伊木马隐蔽性研究

2007-11-19

智能计算机与应用 2007年5期
关键词:隐蔽性端口木马

盂 蕾

摘要:从木马原理出发。分析了几种木马隐藏方法。并对各自优缺点做了简要评论。

关键词:木马隐蔽性端口反弹溢出植入

中图分类号:TP309.5

文献标识码:A文章编号:1002-2422(2007)05-0004-02

特洛伊木马(英文叫“Trojanhorse”,以下简称木马),是一种基于远程控制的黑客工具,基本过程是控制端向服务端发送命令,然后服务端运行这些命令,因而具有非授权性和隐蔽性的特点。非授权性是指一旦控制端与服务器端连接后,控制端将享有服务端的大部分操作权限,如修改、添加、删除文件,修改注册表,控制鼠标和键盘等,而这些权力并不是服务端赋予的,是通过木马程序窃取的。隐蔽性是指木马的设计者为了防止木马被发现,会采用多种手段来隐藏木马,这样服务端即使发现感染了木马,由于不能确定木马的具体位置,因此没有办法删掉。本文重点研究了木马的隐蔽性。

1基本的隐藏方式

1.1端口隐藏

木马能够实现远程控制,需要服务端执行客户端命令。这些都是通过端口进行的,可以说端口是木马的生命之源,没有端口木马是无法和外界进行通讯的,更无法进行远程控制了。通过察看端口的方法(比如NETSTAT。一些端口扫描软件),可以发现端口的打开情况,进而发现木马。采用“寄生”和“潜伏”的方法可以解决这个问题。

(1)寄生是找一个已经打开的端口,寄生其上,平时只是监听,遇到特殊的指令就可以激活木马。由于木马是寄生在已有的系统服务上的,因此在扫描或查看系统端口的时候是没有任何异常的,如冰河、SUBSEVEN等。这一点和反弹式木马有很大的相似之处。

(2)潜伏是指使用TCP/IP协议族中的ICMP协议而非TCP/UDP来进行通讯,从而瞒过Netstat和端口扫描软件。ICMP是IP协议的附属协议。它是由内核或进程直接处理而不需要通过端口。最常见的ICMP协议就是Ping,它利用了ICMP的回显请求和回显应答报文。一般的ICMP木马会监听ICMP报文,当出现特殊的报文时(比如特殊大小的包、特殊的报文结构等)会打开TCP端口等待控制端的连接。这种木马在没有激活时是不可见的,一旦连接上了控制端就和普通木马一样,本地可以看到状态为Established的链接(如果端口的最大连接数设为1,在远程使用Connect方法进行端口扫描还是没有办法发现的)。一个真正意义上的ICMP木马会严格地使用ICMP协议来进行数据和控制命令的传递(数据放在ICMP的报文中),在整个过程中是不可见的。

这两种方法都是被动式的,通过察看进程,或者察看注册表RUN下面运行的程序,即可发现。因为在系统中增加了木马文件,所以一般杀毒软件也可以发现。

1.2进程隐藏

在win9x时代,注册为系统进程就可以从任务栏中消失,就实现了隐藏。可是在Window2000流行的今天,在Administrator下面(Ctrl+Ah+Del)可以看到所有正在运行的进程,从而发现木马的进程,也就意味着可以删除它。

进程隐藏是指把木马写入驱动和内核的级别,通过拦截系统调用的服务,用替代系统功能(改写驱动程序或动态链接库)或者说是嵌入式的方法,来达到隐蔽的目的,从而逃过系统对木马的监测。例如:如果系统运行windows.exe,同时运行了木马和windows.exe,而木马嵌入在win-dows.exe中,能看到,但没法删除,因为windows.exe是系统进程,不允许删除。这样就相当于隐藏了木马进程。相关的软件如ROOTKIT。

虽然所有的操作都在DLL中完成会更加隐蔽,但是这大大增加了程序编写的难度。这样的木马大多数只是使用DLL进行监听,一旦发现控制端的连接请求就激活自身,运行一个绑端口的进程进行正常的木马操作,操作结束后关掉进程,继续进入休眠状态。

采用替代系统功能的方法(改写驱动程序或动态链接库),这样做的结果是:系统中没有增加新的文件,不能用扫描的方法查杀;不需要打开新的端口,不能用端口监视的方法查杀;没有新的进程,使用进程查看的方法发现不了它,也不能用kill进程的方法终止它的运行,在正常运行时木马几乎没有任何的症状,一旦木马的控制端向被控端发出特定的信息后,隐藏的程序就立即开始运作。

这样的木马也存在着一些问题:由于是写入内核和驱动的,对系统会有较大影响,因此容易被发现;代码量较多,编写程序有较大难度;是被动式的。

1.3反弹式木马

如果服务端装有防火墙,客户端发起的连接就会被服务端主机上的防火墙拦截,使服务端程序不能收到连接,软件不能正常工作。同样,局域网内通过代理上网的电脑,因为是多台共用代理服务器的IP地址,而本机没有独立的互联网的IP地址(只有局域网的IP地址),所以也不能正常使用。传统型的木马一般不能入侵装有防火墙和在局域网内部的服务端主机。

对防火墙的特性进行分析发现:防火墙对于连入的连接往往会进行非常严格的过滤,但是对于连出的连接却疏于防范。于是,出现了与一般木马工作原理相反的反弹式(主动式)木马,即:服务端(被控制端)主动连接客户端(控制端),而不是被动的等待客户端发送命令。为了隐蔽起见,客户端的监听端口一般开在80(提供HTTP服务的端口),这样,即使用户使用端口扫描软件检查自己的端口,稍一疏忽就会以为是自己在浏览网页(防火墙也会这么认为的)。

如何使服务端连接客户端呢?可以通过主页空间上的文件实现。当客户端想与服务端建立连接时,登录到PlY服务器或者某个WEB服务器(一般事先定义好了),把信息写到主页上面的一个文件,并打开端口监听,等待服务端的连接;服务端则定期的用HITP协议读取这个文件的内容,当发现是客户端让自己开始连接时,就主动连接,如此就可完成连接工作。

这种反弹式木马威力极大,由于采用主动连接,因此一般防火墙对它无能为力。如果稍有疏忽(比如通过改名等一系列方法,变成类似系统进程或者常用应用程序的名字),该种木马可以轻易的绕过管理员的视线。网络神偷就是典型的这类木马。

1.4溢出植入型木马

溢出植入型木马是基于这样的原理考虑的:由于程序设计的原因(比如数组越界等等),因此很多操作系统都存在着溢出漏洞(特别是存在着可以远程利用的通用漏洞),现在流行的几种操作系统如:Windows、UNIX等都存在着溢出漏洞,而它们的原理是一样的。只要通过客户端把指令以代码的方式发送给溢出漏洞,服务端执行,就实现了远程控制。即利用系统溢出的漏洞,植入木马。这种木马也有较强的隐蔽性。溢出的代码执行是在正常服务的内部进行的,很容易就实现了进程的隐藏;注入到一个正常的应用程序中,其启动和控制无需修改注册表等方式;利用本身的端口和SOCKET很容易就能实现通讯的端口复用和SOCKET复用,实现端口隐藏和绕过防火墙。

制造一个溢出漏洞比较简单且容易实现,即使是一个非常安全的应用程序,制造一个溢出BUG也很容易,如一个收包的代码调用:recv(sock,buf,xxxx,flag),只需要简单的调整XXX的值就使其存在了一个溢出的漏洞。这种木马可以认为是综合了“寄生”和“隐藏进程”的优势。

采用这种方法要考虑几个问题:溢出点的定位、溢出覆盖后对变量的引用、扩展堆栈的修改等等。这种方法最大的缺点是技术难度太高,设计者需要对操作系统的漏洞和原理、内存分配甚至汇编语言等有较深入的研究和较全面的掌握。

2结束语

端口和进程隐藏的方法是目前普遍采用的。该方法比较成熟,很容易实现。进程隐藏的方法已经危害到了Win-dows操作系统的安全和稳定,微软的下一代操作系统将会使用DLL数字签名、校验技术等,预计木马DLL的时代很快会结束。反弹式和溢出植入型则比较少见。反弹式采用主动连接,威力较大,而溢出植入型,基于溢出漏洞考虑,使得服务器端的代码量很少,对系统的影响非常小,而且激活木马的客户端程序只存在内存之中,更难发现和清除。

猜你喜欢

隐蔽性端口木马
隐身空空导弹发展现状及关键技术研究
骑木马
一种端口故障的解决方案
消灭木马等
论电子证据特征 
新媒体自身特性与处理机制研究
中等职业学校“心理契约”的主体类型及其特征
为程序或设备在路由器上打开端口
小木马