随着互联网的迅猛发展,蠕虫对于网络安全的威胁日益严重。
1988年11月,Morris蠕虫造成了世界6000多台计算机瘫痪;
1999年3月,Melissa蠕虫通过微软的Word和Outlook传播,感染速度惊人地快;
2000年5月,“我爱你”病毒,别名LoveBug,它使用社会工程和诈骗主题队列catchy subject lines诱骗Windows用户运行可执行文件;
2001年7月爆发的红色代码(Code Red),它借助于微软Internet信息服务器IISWeb服务器上的一个漏洞传播,使网站上出现“Hacked By Chinese!”的字样,在9个小时内侵入了世界上25万台计算机系统,在很大范围内引起了恐慌;
2003年8月爆发的冲击波蠕虫,8天在全球造成了20亿美元的损失;
2004年4月爆发的Sasser病毒,是一个利用微软操作系统的Lsass缓冲区溢出漏洞进行传播的蠕虫,中文名为“震荡波”蠕虫,给全球带来数千万美元的损失;
2006年12月爆发熊猫烧香病毒,它是一款拥有自动传播、自动感染硬盘能力和强大的破坏能力的病毒,被感染的用户系统中所有.exe可执行文件全部被改成熊猫举着三根香的模样,中毒企业和政府机构超过千家,其中不乏金融、税务、能源等关系到国计民生的重要单位;
2010年6月,Stuxnet震网病毒席卷全球工业界,感染了全球超过45000个网络,其中伊朗遭到的攻击最为严重,60%的个人电脑感染了这种病毒;
2017年5月,WannaCry,一种蠕虫式的勒索病毒软件,大小3.3MB,由不法分子利用美国国家安全局泄露的危险漏洞“EternalBlue”(永恒之蓝)进行传播,至少150个国家、30万名用户中招,造成损失达80亿美元,已经影响到金融、能源、医疗等众多行业,造成严重的危机管理问题。
日益严重的蠕虫问题,不仅给企业和个人用户造成了巨大的损失,而且严重威胁着国家安全。
蠕虫的定义
蠕虫这个生物学名词在1982年由Xerox PARC的John F.Shoch等人最早引入计算机领域,并给出了计算机蠕虫的两个最基本特征:“可以从一台计算机移动到另一台计算机”和“可以自我复制”。他们编写蠕虫的目的是做分布式计算的模型试验。在他们的文章中,蠕虫的破坏性和不易控制已经初露端倪。1988年Morris蠕虫爆发后,Eugene H.Spafford为了区分蠕虫和病毒,给出了蠕虫的技术角度的定义,“计算机蠕虫可以独立运行,并能把自身的一个包含所有功能的版本传播到另外的计算机上。”
蠕虫的组成
我们可以把一个蠕虫病毒看作一个工程,并把这个工程分成4个模块:
·攻击模块:首先得需要有一个大量系统受影响的能被简单利用的严重漏洞,以便能够远程控制机器,比如猜测薄弱口令、远程溢出等。
·感染模块:考虑怎么让计算机在被攻击后,执行蠕虫编写者想要实现的功能,完成对一个主机的感染。对远程溢出来说也就是完善shellcode的过程,这中间还要考虑感染传播(繁殖)途径的问题。
·传播模块:可以是扫描一个网段中有相关弱点的机器,保存为一个文件,然后对这些IP进行攻击,或者随机生成IP然后对这些IP进行攻击等。这个过程简单的说就是扫描防范薄弱的机器。
·功能模块:功能模块可以视为一个附加的模块,可以使计算机在被感染后保留一个后门或者来发动分布式拒绝服务攻击(DDoS)。从现在的趋势来看,越来越多的蠕虫都会附加上这个模块,以便造成更大的破坏。
一个蠕虫病毒最重要的是攻击模块和感染模块这两部分,它们决定了蠕虫的影响范围和传播速度,而这是一个蠕虫是否能够造成巨大破坏的关键因素。
蠕虫的传播途径
蠕虫可以通过多种方式在网络上进行传播,一般通过以下几种方式进行:
·Email:电子信箱传播方式,这是一种比较普遍的方式,通过Email进行传播的蠕虫有求职信病毒(W32.wantjob.worm),小邮差病毒(W32.Mimail.A.Worm)等;
·FTP:通过利用某些FTP服务程序(如Wu_FTP等)的漏洞进行传播,此类蠕虫比较少见,且危害往往也不是很大,例子有Linux.Ramen.worm;
·HTTP:此类蠕虫也很常见,利用Microsoft IIS或Apache服务器的漏洞来进行传播,如红色代码(W32.Codered.Worm),尼达姆病毒(W32.Nimda.Worm)等;
·NetBios:蠕虫也可以通过NetBios,利用打开的局域网共享资源进行传播,比如W32.Hai.Worm,W32.Dalbug.Worm等;
·RPC:此类蠕虫病毒通过Microsoft Windows操作系统中的远程过程调用RPC(Remote Procedure Call)服务中的漏洞进行传播。明显的例子是冲击波蠕虫病毒(W32.Blaster.Worm),此病毒造成了巨大的破坏,而且此RPC漏洞也被认为是有史以来危害最严重、传播最广泛的漏洞之一;
·数据库:蠕虫可以利用网络上的数据库进行传播,比如利用Microsoft SQLServer数据库的漏洞进行传播,并造成巨大破坏的W32/SQL.Slammer.Worm。
蠕虫的生命周期
网络蠕虫被定义为能够将其自身复制到远程计算机上并执行的进程。一个蠕虫的生命周期包含四个阶段,如下图所示:
·初始化阶段:这个阶段负责安装蠕虫本身,确定本地机器的配置,全局变量初始化,以及蠕虫进程的启动等活动。
·负载激活阶段:这个阶段用来执行蠕虫所附带的应用功能,其中包括与蠕虫传播无关的可能对计算机产生破坏作用的功能。
·网络繁殖阶段:这是影响蠕虫传播的最重要的步骤,其中还可以分为目标获取,网络侦察,攻击和感染四个子阶段。
·消亡阶段:这个阶段是蠕虫受到控制后,开始逐步消失的过程。
蠕虫的网络繁殖阶段,能够再进一步分为四个子阶段。由于这四个阶段对于蠕虫的传播意义重大,所以有必要进行更加深入的研究。
目标获取阶段是蠕虫选择用来作为攻击目标的计算机的过程。通常蠕虫利用一个同余函数(如,h = a*b mod n)或者其它随机数发生器来进行选择,结果是生成一个32bits的随机IP地址,用来作为被攻击的目标。
网络侦察阶段是蠕虫用来了解周围环境,尤其是目标周围环境的过程。因为被选择上的目标并不一定存在,也可能不包含蠕虫可以利用的漏洞,所以需要进行侦察来确定是否发动攻击。蠕虫常用的有网络层侦察(如ping),传输层侦察(如端口扫描)或者应用层侦察(如利用banner)。
攻击阶段是蠕虫在被感染的计算机上获取、提升权限的过程。这其中,蠕虫要利用一个或者多个系统安全漏洞来达到目的。
感染阶段是蠕虫在被感染的计算机上获得所需要的权限之后,开始运行初始化程序,产生一个新的蠕虫副本的过程。由于缓冲区溢出漏洞常常能够允许攻击者执行任意代码,所以在蠕虫的传播中,缓冲区溢出漏洞是被利用最多的漏洞。
蠕虫攻击技术
·缓冲区溢出攻击
蠕虫攻击需要利用系统中含有的安全漏洞。据统计,在安全漏洞中,缓冲区溢出漏洞攻击占远程网络攻击的80%。这种攻击可以使一个匿名的互联网用户获取一台主机的部分或者全部的权限。
比如在微软的Windows操作系统中,有多个系统服务存在着或曾经存在着可被利用的缓冲区溢出漏洞。
○ Internet Information Services(IIS),其含有的漏洞曾经被红色代码恪虫所利用;
○ Microsoft SQL Server(MSSQL),其含有的漏洞曾经被SQL蠕虫王所利用;
○ Remote Procedure Call(RPC),其含有的漏洞曾经被冲击波蠕虫所利用;
○ Local Security Authority Subsystem Service(LSASS),其含有的漏洞曾经被震荡波蠕虫所利用。
·Email攻击
利用Email来进行攻击,也是蠕虫经常使用的方式,其代表有求职信蠕虫,小邮差蠕虫等。Windows操作系统本身包含的Email软件Outlook Express和Office包含的软件Outlook均被发现含有多个安全漏洞。蠕虫利用这些安全漏洞,并通过遍历Email软件中的地址簿来搜索其它的被攻击者。
Email攻击通过发送大量的垃圾邮件造成网络和邮件服务器的瘫痪。而且,有些利用Email传播的蠕虫本身也含有能够对系统进行破坏的恶意代码,这主要是通过附加附件的方式进行。如果用户不慎运行了蠕虫所携带的附件程序,就有可能导致系统遭受破坏。
自我保护技术
·代码变形技术
通过对蠕虫代码进行某些方式的改造,可以使蠕虫在功能不受影响的情况下,形式发生变化,从而达到防止被发现的目的。
(1)添加无用代码:添加无用的代码可以改变蠕虫而不会影响其运行方式和预期达到的功能,一个最为简单的例子就是在代码的任意部分添加若干个“NOP”指令。稍微复杂一些的变化可以是对一个寄存器反复进行PUSH,POP操作,或者对寄存器或存储器中数据进行偶数次的置换等。
(2)代码移位:将某些代码进行移位可以改变蠕虫的形式而不改变其功能。通过对代码进行分析可以找出执行先后顺序不存在依赖关系的代码块,改变这些代码块的相对位置是不会影响程序运行的。对于存在先后依赖关系的代码块,也可以改变它们的相对位置,只要适当添加JMP等调转语句就可以实现在功能上的等价。
(3)寄存器替换:在汇编语言中,寄存器的使用是大量的。除去对于某些特定的操作,如堆栈操作、函数返回值等,需要利用制定的寄存器外,可以将所使用的寄存器相互变换,而不会改变程序所要实现的功能。
(4)指令替换:指令替换是一个相对负载的过程。以Intel i386指令集为例,它提供了相当丰富的指令,这就使得程序的编写者可以通过很多种方式实现某种目的。比如,对于一个寄存器清零,可以采用的方式有:XOR REG,REG或SUB REG,REG或MOV REG,0;JMP指令和CALL指令可以进行相互替换等。
·加密技术
加密技术是蠕虫自我保护的一种手段。通过对代码进行加密,可以使分析者无法正常调试和阅读蠕虫的代码,无法知道蠕虫的工作原理,也就无法抽取特征串。从加密的内容上看,加密手段可以分为信息加密、数据加密和程序代码加密。对程序代码加密是一种使用比较普遍的方式。
在蠕虫运行时,程序被解密,以便在内存中运行。为了防止调试工具对其代码进行反汇编,蠕虫还可以采取代码分块执行的方式。程序代码以分块的密文形式装入内存,在执行时由解密程序进行译码,某一段代码执行完毕后立即清楚,保证任何时刻分析者不能从内存中得到完整的执行代码。
·压缩技术
蠕虫为了更加迅速和隐蔽的进行传播,需要将自身的代码长度尽可能的缩小,利用加壳工具对可执行文件进行压缩就是一种常用的手段。
ASPack、UPX等均为目前流行的可执行文件加壳工具。通过加壳,可以将可执行文件的长度大幅度的缩减。比如,冲击波蠕虫利用UPX进行加壳,将代码长度由原先的11296字节缩减为6176字节。
蠕虫防御技术
·基于特征的检测技术
这是目前检测蠕虫最普遍的技术,主要源于模式匹配的思想。扫描程序工作之前,先要建立蠕虫的特征文件,根据保存在特征文件中的特征串,在扫描文件中进行匹配查找。用户通过更新特征文件更新扫描软件,从而能够实现扫描新出现的蠕虫的目的。这种方法的缺陷就是只能够查找已知的蠕虫,而对于未知蠕虫无法做到有效的防御。
·基于语义的分析技术
基于特征的检测技术对于未知的蠕虫没有防御能力,为了克服这个缺点,通过对蠕虫进行语义研究,从而发现代码中是否含有破坏性成分的方法应运而生。Wisconsin大学Madison分校计算机科学系开发了基于CodeSurfer的反病毒软件。通过对于程序代码中的指令进行上下文分析,确定此程序是否会对计算机系统造成破坏作用。
·防火墙及路由控制
合理配置防火墙,禁止除需要的服务端口外的其它所有端口。由于蠕虫要通过网络感染系统,向开放的端口发送攻击代码是必不可少的一个步骤,禁止端口可以切断蠕虫的发动攻击的通道。同时,对于已经被感染的系统,防火墙也可以使它不能够再对网络中的其它计算机发动攻击。通过配置路由器,可以屏蔽和过滤含有某个蠕虫特征的报文,达到封堵的效果。
结语
网络安全就是生产力,学习相关安全知识,更加有利于抵御日趋严重的网络攻击,防范于未然。网络靶场是构建网络安全能力的关键基础,更有效地实现与网络安全相关的学习、研究、检验、竞赛、演习等行为,从而提高人员及机构的网络安全对抗水平。洞见信息在网络靶场领域多年耕耘,有着深厚的技术与经验积累,各种实战模拟带您飞速提升网络安全知识。