[注意]病毒知识:蠕虫病毒的基本原理
蠕虫很"热",没几天互联网上就来一次蠕虫浪潮,当然浪头有大有小,有的波涛汹涌,势不可挡,很快就波及整个世界,有的在一小片范围内翻了几翻就沉寂下去 了。其实,这些都是表象,蠕虫真正的意义不在于其引起的浪头有多大,而在于是否实现了其目的。散播蠕虫的人的目的是什么呢?有很多种可能,可能是哪个所谓的黑客想提高自己在圈内的知名度,可能那个小孩觉得这东西好玩就做一个出来满足好奇心,可能是某个激进的家伙想试验一下自己的新技术,可能是某个受到伤害的可怜虫想报复社会,也可能是某个网络安全公司为他们的产品促销,当然,还有可能是某为好心人想帮电脑用户自动打上系统补丁,补上安全漏洞。本文不研究蠕虫制作心理学,所以某个蠕虫可能是那类人的作品这不在本文的考虑范围之内。本文关心的是蠕虫的技术方面,具体来说是蠕虫的传播技术。在详细介绍蠕虫的传播技术之前,先给大家补充点基础知识。
一、蠕虫的基本结构和传播过程
蠕虫的基本程序结构为:
1、传播模块:负责蠕虫的传播,这是本文要讨论的部分。
2、隐藏模块:侵入主机后,隐藏蠕虫程序,防止被用户发现。
3、目的功能模块:实现对计算机的控制、监视或破坏等功能。
传播模块由可以分为三个基本模块:扫描模块、攻击模块和复制模块。
蠕虫程序的一般传播过程为:
1.扫描:由蠕虫的扫描功能模块负责探测存在漏洞的主机。当程序向某个主机发送探测漏洞的信息并收到成功的反馈信息后,就得到一个可传播的对象。
2.攻击:攻击模块按漏洞攻击步骤自动攻击步骤1中找到的对象,取得该主机的权限(一般为管理员权限),获得一个shell。
3.复制:复制模块通过原主机和新主机的交互将蠕虫程序复制到新主机并启动。
我们可以看到,传播模块实现的实际上是自动入侵的功能。所以蠕虫的传播技术是蠕虫技术的首要技术,没有蠕虫的传播技术,也就谈不上什么蠕虫技术了。
二、入侵过程的分析
想必大家对入侵的一般步骤都是比较熟悉的。我们简单回忆一下。
第一步:用各种方法收集目标主机的信息,找到可利用的漏洞或弱点。
第二步:针对目标主机的漏洞或缺陷,采取相应的技术攻击主机,直到获得主机的管理员权限。
第三步:利用获得的权限在主机上安装后门、跳板、控制端、监视器等等,清除日志。
我们一步一步分析。
先看第一步,搜集信息,有很多种方法,包括技术的和非技术的。采用技术的方法包括用扫描器扫描主机,探测主机的操作系统类型、版本,主机名,用户名,开放的端口,开放的服务,开放的服务器软件版本等。非技术的方法包括和主机的管理员拉关系套口风,骗取信任,威逼利诱等各种少儿不宜的手段。当然是信息搜集的越全越好。搜集完信息后进入第二步。
第二步,对搜集来的信息进行分析,找到可以有效利用的信息。如果有现成的漏洞可以利用,上网找到该漏洞的攻击方法,如果有攻击代码就直接COPY下来,然后用该代码取得权限,OK了;如果没有现成的漏洞可以利用,就用根据搜集的信息试探猜测用户密码,另一方面试探研究分析其使用的系统,争取分析出一个可利用的漏洞。如果最后能找到一个办法获得该系统权限,那么就进入第三步,否则,放弃。
第三步,有了主机的权限,你想干什么就干什么吧。如果你不知道想干什么,那你就退出来去玩你喜欢玩的游戏吧。
上面说的是手动入侵的一般过程,对于自动入侵来说,在应用上有些特殊之处。
蠕虫采用的自动入侵技术,由于程序大小的限制,自动入侵程序不可能有太强的智能性,所以自动入侵一般都采用某种特定的模式。我们称这种模式为入侵模式,它是由普通入侵技术中提取出来的。目前蠕虫使用的入侵模式只有一种,这种模式是就是我们前面提到的蠕虫传播过程采用的模式:扫描漏洞-攻击并获得shell-利用shell。这种入侵模式也就是现在蠕虫常用的传播模式。这里有一个问题,就是对蠕虫概念的定义问题,目前对蠕虫的定义把这种传播模式作为蠕虫的定义的一部分,实际上广义的蠕虫应该包括那些使用其他自动传播模式的程序。
我们先看一般的传播模式。
三、蠕虫传播的一般模式分析
1.模式:扫描-攻击-复制。
从新闻中看到关于蠕虫的报道,报道中总是强调蠕虫如何发送大量的数据包,造成网络拥塞,影响网络通信速度。实际上这不是蠕虫程序的本意,造成网络拥塞对蠕虫程序的发布者没有什么好处。如果可能的话,蠕虫程序的发布者更希望蠕虫隐蔽的传播出去,因为蠕虫传播出去后,蠕虫的发布者就可以获得大量的可以利用的计算资源,这样他获得的利益比起造成网络拥塞的后果来说显然强上万倍。但是,现有的蠕虫采用的扫描方法不可避免的会引起大量的网络拥塞,这是蠕虫技术发展的一个瓶颈,如果能突破这个难关,蠕虫技术的发展就会进入一个新的阶段。
现在流行的蠕虫采用的传播技术目标一般是尽快地传播到尽量多的电脑中,于是扫描模块采用的扫描策略是这样的:
随机选取某一段IP地址,然后对这一地址段上的主机扫描。笨点的扫描程序可能会不断重复上面这一过程。这样,随着蠕虫的传播,新感染的主机也开始进行这种扫描,这些扫描程序不知道那些地址已经被扫描过,它只是简单的随机扫描互联网。于是蠕虫传播的越广,网络上的扫描包就越多。即使扫描程序发出的探测包很小,积少成多,大量蠕虫程序的扫描引起的网络拥塞就非常严重了。
聪明点的作者会对扫描策略进行一些改进,比如在IP地址段的选择上,可以主要针对当前主机所在的网段扫描,对外网段则随机选择几个小的IP地址段进行扫描。对扫描次数进行限制,只进行几次扫描。把扫描分散在不同的时间段进行。扫描策略设计的原则有三点:
尽量减少重复的扫描,使扫描发送的数据包总量减少到最小2保证扫描覆盖到尽量大的范围3处理好扫描的时间分布,使得扫描不要集中在某一时间内发生。怎样找到一个合适的策略需要在考虑以上原则的前提下进行分析,甚至需要试验验证。
扫描发送的探测包是根据不同的漏洞进行设计的。比如,针对远程缓冲区溢出漏洞可以发送溢出代码来探测,针对web的cgi漏洞就需要发送一个特殊的http请求来探测。当然发送探测代码之前首先要确定相应端口是否开放,这样可以提高扫描效率。一旦确认漏洞存在后就可以进行相应的攻击步骤,不同的漏洞有不同的攻击手法,只要明白了漏洞的利用方法,在程序中实现这一过程就可以了。这一部关键的问题是对漏洞的理解和利用。关于如何分析漏洞不是本文要讨论的内容。
攻击成功后,一般是获得一个远程主机的shell,对win2k系统来说就是cmd.exe,得到这个shell后我们就拥有了对整个系统的控制权。复制过程也有很多种方法,可以利用系统本身的程序实现,也可以用蠕虫自代的程序实现。复制过程实际上就是一个文件传输的过程,实现网络文件传输很简单,这里不再讨论。
2.模式的使用
既然称之为模式,那么它就是可以复用的。也就是说,我们只要简单地改变这个模式中各个具体环节的代码,就可以实现一个自己的蠕虫了。比如扫描部分和复制部分的代码完成后,一旦有一个新的漏洞出现,我们只要把攻击部分的代码补充上就可以了。
利用模式我们甚至可以编写一个蠕虫制造机。当然利用模式也可以编写一个自动入侵系统,模式化的操作用程序实现起来并不复杂。
四、蠕虫传播的其他可能模式
除了上面介绍的传播模式外,还可能会有别的模式出现。
比如,我们可以把利用邮件进行自动传播也作为一种模式。这种模式的描述为:由邮件地址薄获得邮件地址-群发带有蠕虫程序的邮件-邮件被动打开,蠕虫程序启动。这里面每一步都可以有不同的实现方法,而且这个模式也实现了自动传播所以我们可以把它作为一种蠕虫的传播模式。
随着蠕虫技术的发展,今后还会有其他的传播模式出现。
五、从安全防御的角度看蠕虫的传播模式
我们针对蠕虫的传播模式来分析如何防止蠕虫的传播思路会清晰很多。对蠕虫传播的一般模式来说,我们目前做的安全防护工作主要是针对其第二环即"攻击"部分,为了防止攻击,要采取的措施就是及早发现漏洞并打上补丁。其实更重要的是第一环节的防护,对扫描的防护现在人们常用的方法是使用防护墙来过滤扫描。使用防火墙的方法有局限性,因为很多用户并不知道如何使用防火墙,所以当蠕虫仍然能传播开来,有防火墙保护的主机只能保证自己的安全,但是网络已经被破坏了。另外一种方案是从网络整体来考虑如何防止蠕虫的传播。
从网络整体来防止蠕虫传播是一个安全专题,需要进一步研究。这里简单提一下。从一般模式的过程来看,大规模扫描是蠕虫传播的重要步骤,如果能防止或限制扫描的进行,那么就可以防止蠕虫的传播了。可能的方法是在网关或者路由器上加一个过滤器,当检测到某个地址发送扫描包就过滤掉该包。具体实现时可能要考虑到如何识别扫描包与正常包的问题,这有待进一步研究。
了解了蠕虫的传播模式,可以很容易实现针对蠕虫的入侵检测系统。蠕虫的扫描会有一定的模式,扫描包有一定的特征串,这些都可以作为入侵检测的入侵特征。了解了这些特征就可以针对其制定入侵检测规则。
页:
[1]