“最初的信任已经消失了,伴随着它们的进驻,这里已经成为了一个沼泽——有你想要的宝藏,也有随时能够吞噬掉你的陷阱。”
觉得用这么一句话某部电影中智者的忠告来形容商业化后的互联网实在很恰当。随着商业进驻互联网——这个原本脱形于军事,发展自高校/公司的网络已经成为了一个势力很大的媒体介质。在这个网络上,能搜索到论文资料,结交到朋友,学习到一些身边根本无法接触到的技术——但网络不是乌托邦,在表面的兴盛繁荣下,罪恶之影亦在游走。
新上网的朋友最为困惑的,莫过于对病毒和各种恶意攻击的恐惧和迷惑了——“我什么都没有做,为什么就中毒了?”是天缘常常听到内部网络的疑问。Ok,接下来,就跟随我一起,进入入门级的安全之旅,希望通过此篇文章,能让您对一些概念,机制有所把握。
第一站——病毒防御入门之旅
潘多拉的魔盒被打开,从此世间便多了疾病、瘟疫、灾难——自从1962年,贝尔实验室三位杰出程序员——罗泊.莫里斯、维克多.维索茨基、道格.迈克劳埃以“编制一些程序,让这些程序根据某种规则自己在内存中生存、搏斗”而理念而造就的“磁芯大战”程序开始,计算机世界的潘多拉魔盒就此打开。当时三位积极探索计算机技术的优秀程序员大概不会想到,病毒之门被打开,直至今日阴影仍挥之不去。可悲的是,以技术之钥打开的病毒之门,在半个世纪里越来越堕落,沦为一些人实施经济犯罪或标榜自我的工具,在计算机世界四处游荡着病毒幽灵。
病毒——这个源自医学界的名词,被用在计算机中,是指编制或者在计算机程序中插入的破坏计算机功能或者毁坏数据,影响计算机使用,并能自我复制的一组计算机指令或者程序代码,就像生物病毒一样,计算机病毒有独特的复制能力。计算机病毒可以很快地蔓延,又常常难以根除。它们能把自身附着在各种类型的文件上。当文件被复制或从一个用户传送到另一个用户时,它们就随同文件一起蔓延开来。
木马——来自“特伊诺木马”,指深入到内部进行攻击与破坏的行为。现在的木马程序一般是指,利用系统漏洞或用户操作不当进入用户的计算机系统,通过修改启动项目或捆绑进程方式自动运行,运行时有意不让用户察觉,将用户计算机中的敏感信息都暴露在网络中或接受远程控制的恶意程序。
蠕虫——蠕虫病毒是指利用网络缺陷进行繁殖的病毒程序,其原始特征之一是通过网络协议漏洞进行网络传播。
脚本病毒——利用脚本来进行破坏的病毒,其特征为本身是一个ascii码或加密的ascii码文本文件,由特定的脚本解释器执行。主要利用脚本解释器的疏忽和用户登陆身份的不当对系统设置进行恶意配置或恶意调用系统特点命令造成危害。
但目前,由于病毒,木马,蠕虫,脚本病毒这四类程序在不断杂交中衍生,已经形成了“你中有我,我中有你”的多态特性。为了行文方便,以下统称为“病毒”,但其实四类程序的感染机制和编写方式是完全不同的,请读者们在阅读的时候详加辨析。
现阶段的病毒,主要分为以下几种:
1.感染可执行文件的病毒
病毒描述:这类病毒就是上面所介绍的4种破坏性程序中的传统病毒。这类病毒的编写者的技术水平可说相当高超,此类病毒大多用汇编/c编写,利用被感染程序中的空隙,将自身拆分为数段藏身其中,在可执行文件运行的同时进驻到内存中并进行感染工作,dos下大多为此类病毒居多,在windows下由于win95时期病毒编写者对pe32的格式没吃透,那段时间比较少,之后在win98阶段这类病毒才扩散开来,其中大家广为熟悉的CIH病毒就是一例;在windows发展的中后期,互联网络开始兴盛,此类病毒开始结合网络漏洞进行传播,其中的杰出代表为funlove传播——由于windows操作系统的局网共享协议存在默认共享漏洞,以及大部分用户在设置共享的时候贪图方便不设置复杂密码甚至根本就没有密码,共享权限也开启的是“完全访问”。导致funlove病毒通过简单尝试密码利用网络疯狂传播。
病毒浅析:由于此类病毒的编写对作者要求很高,对运行环境的要求也相当严格,在编写不完善的时候,会导致系统异常(例如CIH的早期版本会导致winzip出错和无法关闭计算机等问题;funlove在nt4上会导致mssqlserver的前台工具无法调出界面等问题)。这类病毒赖以生存的制约是系统的运行时间和隐蔽性。运行时间——系统运行的时间越长,对其感染其他文件越有利,因此此类病毒中一般不含有恶意关机等代码,染毒后短期内(一般24小时内)也不会导致系统崩溃(如果你是25日感染cih除外),和其他病毒相比用户有足够的处理时间。破坏引导区的大脑病毒、择日发作的星期五病毒、直接读写主板芯片,采用驱动技术的CIH病毒都是其中的代表。
感染途径:此类病毒本身依靠用户执行而进行被动运行,常见感染途径为:盗板光盘、软盘、安全性不佳的共享网络;
病毒自查:此类病毒大多通过的是进驻内存后篇历目录树的方式,搜索每个目录下的可执行文件进行感染,因此对内存占用得比较厉害——如果突然在某个时间后发现自己的机器内存占用很高,可能就是感染了此类病毒。
病毒查杀:这类病毒由于编写难度较大,因此升级(病毒也玩升级?对,例如CIH是在1.4版本后才完善的)速度相对较慢,但由于开机后进驻的程序可能已经被病毒感染,因此杀毒条件是各种病毒中最为严格的,且这2种方式比较干净彻底的方法也适用用后面介绍的各种病毒:
1.软盘(光盘)启机使用杀毒软(光)盘进行杀毒;在进行这一步的时候,必须要保证软盘或光盘的病毒库内已经有杀除该病毒的特征码。
2.将硬盘拆下,作为其他机器的从盘;从其他机器的主盘启动进行杀毒(该机需打开病毒即时监控,以防止来自从盘的可执行文件中的病毒进驻到内存中); 以常见的国产几种杀毒软件为例,在购买的正式版本中,除了供安装使用的光盘外,一般还包含几张软盘(一张引导盘,一张杀毒程序盘,一张病毒库盘)。在对待上面提到的这类病毒时,最好的做法就是用引导盘启动计算机,然后根据提示将杀毒程序盘和病毒盘依次插入,进行病毒查杀。注意2点:1.目前比较新版本的杀毒程序盘都能完善地支持ntfs分区的读写,如果您是在几年以前购买的杀毒盘,可以根据厂家的服务方式进行升级;2.由于采用软盘杀毒的时候,使用的是软盘上的病毒库,为了能正确地查杀病毒,请定期升级软盘的病毒库,否则真到用的时候就哭也哭不出来了。
杀毒遗留:由于这类病毒是寄生到其他程序内部,即使非常优秀的杀毒软件,能做到的也只是把该染毒程序内的病毒某关键执行部分删除,使得染毒程序在运行时病毒无法运行。因此并不是严格意义上的完全清除——病毒程序的某部分依然残留在程序内部,俗称“病毒僵尸”。
在杀除这类病毒的时候,最主要的是分析捕捉特征代码,因为抓特征码的过程中不仅要准确地破坏病毒的执行部分,而且不可以触动正常的程序代码。否则会常常出现杀毒之后该程序无法使用的情形——那还叫什么杀毒?还不如直接删除文件比较好嘛!在查杀这类病毒上,根据天缘的使用经验,norton和国内的金山毒霸做的比较好一些。(此评价只根据我个人使用经验如实说出,不带任何广告性质,请各位选择杀毒产品的时候不要以我的介绍为依据,本人不承担任何责任,下同。)
病毒防范:安装包含即时监控的杀毒软件并启机执行,每天升级病毒库获取最新病毒特征代码;尽量不使用来源不可靠的软盘和光盘,使用前先扫描;关于网络防毒部分后面一并介绍。
2.后台运行进行恶意控制和破坏的病毒
病毒描述:帐号被偷,密码被盗,机器被人远程控制着放歌/开关机/屏幕倒转过来,硬盘不住地转动将关键资料向外发出,就是这类病毒的杰作了。这类病毒和上一类病毒最本质的区别是——这类病毒本身是独立的程序,而不是寄生于另一个程序中。这类病毒的编写主要在于对操作系统本身接口的熟悉,网络传输的熟悉,以及对隐蔽性的要求,此类病毒的编写可使用多种语言,对病毒写作者本身的实力也是一种考验。这个病毒中,最出名的莫过于BO了,可以说,它指引了这种病毒在windows平台的发展理念。这类病毒就是统称的“木马”病毒,通过系统漏洞/用户操作疏忽进入系统并驻留,通过改写启动设置来达到每次启机运行或关联到某程序的目的。在windows系统中,表现为修改注册表启动项、关联Explorer、关联notepad等方式。
病毒浅析: 此类病毒编写者的功力就有高有低了。高手所编写的远程控制系统可以和最优秀的远程管理工具相媲美,例如开山鼻主BO,国产的冰河,著名的黄金木马sub7都属于这一类,这类程序分为2个部分,控制端和被控制端;而在unix类平台下的木马经常是一个简单外部命令的重新实现——例如将原本的ls命令替换掉,用自己写的一个程序代替,在执行正常文件列表的同时隐含执行特殊命令,这类木马的编写水平也相当高,但在windows下极少出现类似程序替代的木马,这类病毒的联系一般是单向进行的;还有一类木马就是网络盗窃性质的,以im软件,网络游戏盗号居多,近来发展为对金融业有所染指,这类一般就是通过程序监视当前窗口,并获得当前窗口特定控件的值(用户名/密码框里的值),然后通过email,远程登陆web数据库等方式把获得的密码发出去,这类程序具有一定编程基础的各位朋友都能做到;第4类是惟恐天下不乱的纯捣乱程序,原理跟上一种类似,不过是朝文本框写信息,例如著名的qq尾巴病毒,这类病毒由于病毒作者将源代码放出,改写起来相当容易,智商85以上的人士都能胜任的。这类木马病毒中的杰出代表为BO、冰河、Sub 7等。
感染途径:系统漏洞/用户错误权限/社会工程学;
利用系统漏洞——造成溢出——获取一定权限——利用其他漏洞或用户设置不当提升权限——上传恶意程序/修改系统设置——启动恶意程序。是这类病毒感染的惯用方式。在后期,出现了以诱骗用户执行为主要感染方式的新木马,充分利用了社会工程学,例如在im类软件上给你发送一个名为“我的照片.exe”这样的文件给你,引诱你打开执行。由于木马的用途主要是将病毒编写者感兴趣的资料回发——因此感染途径99%来源于网络,在完全无网络单机状态下的木马等于是没用的死马。
病毒自查:由于木马发送者的企图都是通过控制你的机器操作来获得一定利益,因此都会设置启动时加载该程序。控制类的木马需要占用相当一部分系统资源——用户直接能感觉到的就是启动速度变慢,系统运行速度变慢;而帐号盗取类的木马由于需要获得特定窗口的窗口句柄,因此会在当前窗口切换的时候进行读取判断——在机器配置不高的机器上,如果快速轮循窗口,则感觉到窗口出现速度明显下降;恶作剧类的木马就不用提了,大家都知道不对劲。
木马病毒在编制不够完美的时候,会导致程序溢出——例如运行ie的时候多次出现“非法操作”、打开资源浏览器速度狂慢等现象,也可能是系统中了木马后的蛛丝马迹。在现象判断上,确实没有切实的客观规则可循,主要是依据主观经验判断。总之——如果您没有安装任何软件/修改任何设置,原本昨天速度飞快的机器今天要么总是非法操作,要么速度延迟——那么您被感染了病毒或木马的可能性相当大了。当然,如果您的qq帐号,传奇密码被偷了——更有100%的可能性是潜伏着的木马干的。另外,相当多的木马程序由于带了hook钩子,常常导致调试类程序出错,如果您使用softice调试某些程序时经常无故报错,那或许也是系统中挂接了异常的hook程序——木马。
病毒查杀:木马病毒的繁衍也是相当快速的,特别是行为上难以判断——合法远程控制软件和木马在本质上基本上无区别,在执行行为上也相当类似。而木马的控制协议一般是走tcp/ip协议,理论上是可以在65535个端口中随意选择(当然实际中会避开一些保留端口,防止系统冲突——木马最必要的生存条件就是其隐蔽性),因此也无法利用端口方式准确判断出病毒种类;通过特征码方式,如果木马作者没有留下版本信息或说明文字,则也相当难以判断;特别是木马的源代码公开后,想在其中加入一段独特的功能代码不是什么难事,因而衍生的版本特别快也特别多,这更加大了杀毒软件查杀的的难度。
事实上现在世面上的杀毒软件对待木马的查杀能力并不够强大,如果有可能,可以选择专用的木马查杀软件,如木马克星等。当然,木马也有手工解决的办法,而且对待层出不穷的木马也只有手工查杀才能以不变应万变——感染/修改设置/启动加载/运行获取密码 是木马必经过的4个步骤,让我们看看怎么找出藏在机器中的马来——由于木马需要启动加载执行,因此大多采取修改启动项目来加载的方式进行——那么,我们就到启动项目里去牵马吧;
在这一步,需要用户对自己windows的启动项目熟悉。Win98中,病毒可能在注册表的HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run 或者HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run Services中,或者是system.ini文件的[boot]小节将默认项目修改,或者是在Win.ini中的[Windows]小节中的load、run部分进行加载;在Windows\Start Menu\Programs\启动这里加载,如果是2000或者xp,除了上面提到的几个地方,还可能以服务方式加载,在HKEY_LOCAL_MACHINE\Sytem\Current Control Set\Services可以查到具体的加载项目。
对于这一步,由于每个人的机器设置不同,所以天缘也没办法给出列表来说明到底加载的程序中哪些程序是正常的,哪些是不正常的。有个比较方便的方法是——当您系统把需要安装的软件安装得当时,您查看一下以上几个位置,并把其中的项目记录下来,以后觉得自己可能中木马了后,再对比一下以前的记录,将后来添加的自启动程序记录下名字/路径,进行删除操作。这样做的好处是——即使删除掉的是正常程序,也不会是关键进程,不会导致系统无法启动,有恢复修改的余地。在Win98和XP中有个方便的Msconfig命令便于我们查看以上说的启动项目,如果使用的是Win2000,可以将XP的该文件Copy过去使用。
如果的确发现了可疑的启动项,那么接下来的工作就是删除它了。在删除的步骤上,有2个选择:
1.删除启动项目,重新启机,删除木马文件;
2.禁止当前运行的木马程序,删除启动项目,重新启机;
两种方法各有其优点,下面我们来一一分析。第一种方法,是删除启动设置里的木马程序选项,并记录下该木马文件的位置(可用“查找”功能定位,并记录下来),然后重新启动机器(直到机器被重新启动前木马依然是存活着的),重新启动后,木马程序本身依然存留在硬盘上,然后直接象删除普通程序一样删除掉——这个方法的要点就是先禁止木马的启动然后再行杀除,好处是操作简单,不需要借助其他软件,特别是在Win98下默认是无法查看某些进程的,因此用这个方法相当方便,坏处则是对某些木马无效——某些木马在运行的时候会定期查看设置的启动项是否还存在,若是不存在的话会自动修改过来,属于比较强硬的做法,于是第一种杀除方法就无法应对这样的木马了;第2种方法是先通过进程管理器查看,记录并终止运行可疑程序(不光是注册表/配置文件里的木马启动项,有时候木马程序本身会运行一个附带的独立监视程序来防止自己被改写
因此需要非常熟悉自己的机器上的固定正常运行程序才能准确判断,当然还有一个做法是非关键进程都杀——天缘在给朋友机器手工杀木马的时候常这样),之后再到启动项目里去杀除掉相关的启动项目,重新启动机器后再把刚才记录下的进程进行仔细查看,把确认为木马的文件删除掉。这个方法好处当然就是比较容易杀掉一些定期检查/回写启动项目的疑难木马,不过对用户的操作要求比较高一些。
以上2种方法如果掌握了,基本上就能把目前的木马全部手工杀除掉,但遇到木马使用2个程序互相关联/检查启动,或者是在加载基本驱动阶段时以驱动程序方式嵌入的木马程序时候用上面提到的2种方法都无效。在Win2000/xp中,启动机器的时候会加载system32/drivers目录下的驱动,而如果这些驱动中含有恶意程序,那么它可以做到改写i/o,让Windows修改某些文件无效,或让操作某一注册表无效,目前这一技术在病毒中尚未看到先例,但颇有争议的3721已经成功地运用了该技术,相信在不久的将来一些功力深厚的病毒作者也会运用到此技术。天缘在这里预先提一下对该类病毒的删除方法——由于病毒已改写i/o,故最好的做法是在非windows环境中将其删除,具体的做法是用软盘/光驱引导启动,或者利用vFloppy等工具配合boot引导程序制作一个小型虚拟引导盘,进行杀除工作。
杀毒遗留:由于木马程序并不一定只有一个可执行文件,因此如果利用手工查杀的方法,或许会有一些木马留下的dll,ocx等资源文件留下,副作用没什么,但是会残留在硬盘上。杀毒软件严格意义上来说只是杀除了一些比较流行的主流木马,对待一些不太流行的木马是视而不见的,专业的木马查杀工具能杀除90%左右的木马,但剩下的10%高技术的木马也无法查杀——如上文提到采用3721那种加载到system32/drivers下的木马在windows上改写文件/注册表的读写,则无法在windows环境下查杀。
病毒防御:对待木马,防止感染远比事后杀除更为重要——重要的文件/资料/帐号已经被获取了,即使把木马杀了也无事于补。木马的进驻,除了利用系统漏洞,大多采用欺骗方式——记得一句古话:“便宜莫贪”。网络上初认识的朋友热情地给你发他的照片,四处标榜着的免费游戏外挂,一些小站点吹嘘的精品软件,一些情色站点的专用播放器,一些所谓“安全站点”的所谓黑客工具。
世界上没有绝对免费的事,以上提到的这些事情中的确有一些是免费的,当更多的是木马程序,或者利用程序捆绑技术,将正常程序和木马程序捆绑在一起的。如非必要尽量不要在这些地方进行下载。总想贪图便宜,会吃大亏的——生活中如此,网络上同样是!网络上喜欢你6位qq号的人远比觉得你帅的人多;网络上喜欢你40级帐号的人远比喜欢你在游戏中造型的人多;网络上希望你作他肉机的人远比他做你肉机的人多。总之一句话,无事献殷勤——大多非奸即盗!对待漏洞或权限设置不当的,在后面蠕虫病毒部分一并介绍。
3.蠕虫病毒
繁殖,繁殖,再繁殖,利用系统漏洞,通过网络感染感染其他计算机,繁殖,繁殖,再繁殖。此类病毒深得“乾坤生两仪,两仪生四象,四象生八卦”之能,每台受感染的机器,本身又以病毒发送者的身份将蠕虫病毒送向四面八方。
病毒描述:这类病毒的本质特征之一就是透过网络主动进行感染,本身不具有太多破坏特性,以消耗系统带宽、内存、CPU为主。这类病毒最大的破坏之处不是对终端用户造成的麻烦,而是对网络的中间设备无谓耗用。例如网络中的交换机/路由器/DNS服务器/邮件服务器常常是蠕虫病毒爆发的最大受害者——“互联网瘫痪了!?”——2003年1月的SQL蠕虫爆发就是最好的例证。
病毒浅析:在以前,编写这类病毒的技术要求相当高。1988年,前面提到的“磁芯大战”之子罗伯特.莫里斯在发现了几个系统漏洞后,编写了一个精巧的程序,短短时间便将当时的大半个互联网瘫痪。由以上可以看出,蠕虫的出现,传播,感染是需要系统漏洞和获得系统权限的。莫里斯不愧为技术高手,不光在于对病毒的编写,更在于对系统漏洞的发掘上。随着时间的推移,操作系统的进步,在功能完善的同时,漏洞也随之增加。
不少真正的安全小组在发现漏洞的同时,除了会给出详细的技术说明外,往往附带一个小程序的源代码,说明利用漏洞获得权限的实现。而这个小程序被蠕虫病毒编写者如获至宝,将起改写,加上文件传输,ping扫描,修改启动项自动执行等能用代码简单实现的功能,就成了一个蠕虫病毒——换句话说,现在编写蠕虫病毒的门槛已经大大降低了,所以大家会看到18岁的优秀病毒编写者云云——其实相较起破坏特性来,发现安全漏洞更是需要高超的技术水平——这是安全小组做到的,而不是病毒编写者。因此可以这样概括:自从莫里斯发明出蠕虫病毒以来,该种病毒的编写者自身实力日渐下降,从操作系统级水平沦落到代码编写级水平,不可同日而语。
感染途径:系统漏洞/用户错误权限
蠕虫病毒本事是一个需要以一定身份执行的程序。因此通过系统漏洞进行感染是其手段,提升权限是其企图,重复感染是其目的。没打上系统漏洞补丁的操作系统,权限设置松散的设置,极其简单的用户密码是这类病毒的最爱。
病毒自查:由于通过网络感染,这类病毒都会大量占用网络带宽。由于现在普通pc的性能相当不错,因此一些新兴的蠕虫病毒在大肆占用网卡发送封包的同时,本机速度不会变的太缓慢,这跟自查带来了一定麻烦。以天缘工作为例,检查到内网中有用户染毒后,电话通知他,结果被反问:“我运行单机程序的时候这么快,只有上网的时候才觉得慢,是不是你们网络中心故意捣乱??”网管难做啊,不对单机造成任何伤害的病毒用户一般难以察觉,因此还是后来会导致系统出错1分钟内自动关闭的这类病毒比较受我们网管欢迎呢。上网的朋友可以检查一下网络连接的封包发送,如果自己没进行任何操作的时候,依然有大量的数据报文不断发出——那么有很大可能您中了蠕虫病毒。
病毒查杀:这类蠕虫病毒由于感染非常迅速,而且是通过系统漏洞方式感染,所以对互联网络的危害相当大,唇亡齿寒,因此一般来说发现了该漏洞的操作系统公司和杀毒公司都不会坐视不管,会在第一时间推出补丁和专杀工具。用户下载后,断网进行杀毒,然后打上patch,重新启动系统就能避免再次重复感染了。至于病毒传播速度太快,在杀毒后下载patch的中途又被重复感染的问题,可见我以前的一篇文章《网管笔记之小兵逞英雄》,举一反三则可以 。
杀毒遗留:由于该类病毒本身是独立程序,利用系统漏洞进行远程权限获取,进而上传,运行,感染,所以用专用的软件杀除后,基本无文件残留,但部分专杀工具没有将其启动项目清理得非常完全,可以使用上面查找木马启动设置的方法手工查找加载位置进行删除。另外切记一定在杀毒后第一时间及时打上补丁,否则重复感染机会高达100% 。
病毒防御:
1.勤打补丁,一般说来一个操作系统被发现漏洞以后,大概在15天以内相关的病毒就会出现,因此有必要随时关注自己所使用的操作系统的补丁升级情况,养成每天定时查看补丁升级情形的习惯。这里的补丁不光包括操作系统自身的,也包含程序服务的补丁,例如ftp服务器的补丁等等。
2.权限设置,很多蠕虫感染的条件是需要以root级运行的进程出现漏洞,那么蠕虫才有权限进行上载、执行的权利,在windows下由于大多数后台进程是以administrator权限执行,带来的危害也相当大;*nix下则可设置非关键进程使用普通用户或chroot方式来避免权限提升。
3.尽量少开服务,可开可不开的服务绝对不开,最小化风险;
4.安装网络封包防火墙,只允许特定的端口的数据包通过或者特定的程序访问网络。这部分我们放在后面攻击防御那里介绍。
4.脚本病毒
这类病毒编写最为简单,但造成的危害非常大。我们常见的浏览了xx站点就被改了主页,在收藏夹里被添加上很多无谓的东西,就是拜这类病毒所赐。
病毒描述:这类病毒的本质是利用脚本解释器的检查漏洞和用户权限设置不当进行感染传播;病毒本身是ascii码或者加密的ascii码,通过特定的脚本解释器执行产生规定行为,因其行为对计算机用户造成伤害,因此被定性为恶意程序。最常见的行为就是修改用户主页,搜索页,修改用户收藏夹,在每个文件夹下放置自动执行文件拖慢系统速度等;比较出名的如美利莎邮件病毒、新欢乐时光病毒、office的宏病毒等都属于这类。
病毒浅析:为了完成一些自动化的任务,需要用程序方式来实现。但复杂的程序编写又不是非程序人员能够胜任的。为了提高工作效率,方便用户操作,加强系统特性,于是许多软件/操作系统都预留了接口给用户,用简单的方法编写一些完成一定功能的小程序。程序本身是ascii码的,不编译,直接解释执行,在调试/修改使用上相当简便,虽然牺牲一定效率,但是换来了易用性。这本是一个良好的愿望,但太多的时候,这没有起到积极的作用,反而为脚本病毒编写者提供了良机。
以web病毒为例,由于用户缺乏安全意识用错误的权限登陆,导致ie中的解释器使用wsh可以操作硬盘上的文件和注册表,而javascript和vbscript调用wsh是很容易的事情——于是恶意脚本的作者只需要让你访问该页面,就能在你本地写上一些恶意的脚本,在注册表里修改你的主页/搜索项了。而利用ie的activex检查漏洞,则可以在不提示地情况下从网络上下载文件并自动执行——这就成了木马攻击的前奏曲;利用mime头漏洞,则可以用一个以jpg结尾的url中,指向一个事实上的web页,然后在web页中内嵌图片+恶意代码的方式迷惑计算机用户;利用outlook自动读去eml的特性和mime头检查不严格来执行恶意2进制代码;利用本地硬盘上有执行autorun.inf的特性(这功能本来是光驱用的,我们的光盘之所以放进去就能自动读出程序,就是光盘上有个名为autorun.inf文件起的作用,它是个文本文件,各位可以看看)把一些需要加载的程序写到该文件下导致每次访问该分区的时候就会自动运行;利用windows下会优先读取folder.htt和desktop.ini的特性,将恶意代码写入其中,导致访问任何一个文件夹的时候都会启动该病毒,再配合上锁定注册表的功能,杀除起来异常麻烦——不复杂,但是相当烦琐,一不留意没杀干净一处,又导致死灰复燃,前功尽弃。
病毒自查:上面有提到,这类病毒一般以捣乱居多,所以特别容易发现。而其另一个作用是作为木马进驻系统的先遣部队,利用浏览器漏洞等达到下载木马文件到本地硬盘,并修改启动项,达到下次启机运行的目的。因此一旦发现木马的同时,也可以检查一下是不是有些可疑的脚本文件。
病毒查杀:这类病毒一般来说由于其编写灵活,源代码公开,所以衍生版本格外地多;杀毒软件/木马杀除软件对待这类病毒大多没用。而由于脚本病毒(除宏病毒外)大多是独立文件,只要将这些文件查找出来删除掉就行了。不过这里值得留意的是,利用微软的浏览器的漏洞,在点击选择某些文件的同时就自动执行了,甚至打开浏览器的同时脚本病毒就开始驻留感染——这样是无法杀除干净的。
正确的做法是使用其他第三方的资源浏览器,例如Total Command就是一个非常不错的选择。查杀大致过程如下:首先,在资源浏览器——工具——文件夹选项中,将“使用Windows传统风格的桌面”取消掉,在桌面上点右键,点“属性”——“桌面设置”,将使用活动桌面取消,接着查杀可疑对象;常见查杀对象:各个根分区下的autorun.inf,各个目录下的desktop.ini和folder.htt(有几个是系统自带的,不过删除了也无关系的),这一步最好采用第三方的资源浏览器,例如前面介绍的Total Command来完成。在这一步,最忌讳查杀不净,即使有一个病毒遗漏,很快就又遍布各个文件夹内了。关于邮件病毒的杀除使用专杀工具就行了。
病毒残留:纯粹脚本病毒在杀除后不会有任何残留,但由于目前的病毒大都采用复合形态,捆绑多种传染方式和多种特性,因此不少脚本病毒只是将用户机器的安全防线撕开的前奏——真正的破坏主力木马、蠕虫尾随其后进入系统,因此在杀除掉脚本病毒后,非常有必要连带着检查系统中是否已经有了木马和蠕虫病毒。
病毒防御:脚本病毒的特性之一就是被动触发——因此防御脚本病毒最好的方法是不访问带毒的文件/web网页,在网络时代,脚本病毒更以欺骗的方式引诱人运行居多。由于ie本身存在多个漏洞,特别是执行activex的功能存在相当大的弊端,最近爆出的重大漏洞都和它有关,包括mozilla的windows版本也未能幸免。因此个人推荐使用myie2软件代替ie作为默认浏览器,因为myie2中有个方便的功能是启用/禁用web页面的activex控件,在默认的时候,可以将页面中的activex控件全部禁用,待访问在线电影类等情况下根据自己的需要再启用。关于邮件病毒,大多以eml作为文件后缀的,如果您单机有用outlook取信的习惯,最好准备一个能检测邮件病毒的杀毒软件并及时升级。如果非必要,将word等office软件中的宏选项设置为禁用。脚本病毒是目前网络上最为常见的一类病毒,它编写容易,源代码公开,修改起来相当容易和方便,而且往往给用户造成的巨大危害。
以上4类程序的介绍,为了降低学习难度,我是单态方式来介绍的。事实上目前的病毒大多以具有上面4类程序中的2到3类的特征,因此无论感染,传播,杀除的困难都大大增加。例如发文前夕的mydoom新变种病毒的分析中:它利用系统漏洞/邮件群发/共享漏洞方式传播(具备了蠕虫、脚本病毒和新型病毒的传播特性),进驻用户系统后上载自身并运行(木马特性),获取用户本地outlook中的地址本(木马特性),通过调用google等搜索引擎获取用户email地址本中同后缀的相关选项(调用系统程序,木马功能),再主动给地址本中的每个程序发出email(木马特性)。对待这样一个病毒,无论是系统存在漏洞、共享安全设置不当、或者随意地打开了“朋友”发来的email,都可能导致中毒。关于中毒途径的分析,留待下一站《攻击防御之旅》内一并介绍。
在从第一个病毒出现到现在,已经有整整半个世纪了,病毒的发展日新月异,令查杀的困难大大增加,造成的损失也异常巨大。或许,计算机病毒这个幽灵,从计算机诞生的那一刻起就注定要如影相随的。只要还有用心险恶的人存在,那么病毒就不会消亡。病毒之战,恐怕会在今后的日子里越演越烈……
第二站、攻击防御之旅
除了病毒,互联网络上还有一股暗潮——人为攻击。
早期的攻击者大多是技艺高超之辈,他们对服务器的系统、程序相当熟悉,常常通过寻找他人系统中的漏洞来提高自身技术水平,并以此为乐。不过他们的默认准则之一是不攻击普通终端用户、进驻服务器后不改变服务器重要设置。那是一群令人尊敬的人,他们在技/艺的边缘地带行走,以自己独特的方式磨练着自己;独特立行,或许你曾因为各种原因在im软件上,在web论坛中,在irc聊天室里与他们匆匆邂逅又匆匆离别,却茫然不知道他们的真正身份;都是真正意义上的技术好手,对操作系统,网络协议,编程语言都有相当造诣,他们中相当一部分人的正当职业就是高级程序员、系统分析师、网络管理员——这类人,我们尊敬地称他们为“黑客”,俗称“黑帽”。
到了商业时代,随着金钱利益的驱动,行行色色的各类人进入了互联网。其中有一群被金钱利益驱动着的人,他们也有着不错的技术,却被金钱物欲所俘获,将自己的技术和灵魂出卖给金钱——只要为了经济利益,可以不择手段地进行破坏。他们对没利益的终端个人用户也没有什么兴趣,相比之下服务器更令他们青睐。把攻击得逞的服务器做成肉鸡以备后用是他们的习惯之一。这类人,我们称他们为“骇客”,俗称“灰帽”。
就如有影就有光一样,网络上也有跟“骇客”相反的一类人,他们以研究系统漏洞、帮助企业实施安全方案为职,我们称他们为“安全顾问”。他们具有足以和“骇客”匹敌的能力,网络上的商业服务器攻防之战大多是在他们与“骇客”之间展开,,俗称“白帽”。
最后一类,可说是堕落的平庸者。使用着前几类人所开发者的工具,对网络上的机器——不管是终端用户还是服务器进行扫描;看到有漏洞的系统就又使用他人的教程、工具尝试进入,并在进入之后大肆进行破坏;在无法进入的时候,甚至就直接用DDOS攻击了事。他们破坏的理由大多是为了逞一时之愉快或为了炫耀自己而已,这类人没有什么技术可言,行为也无道德可言。他们不具备扎实地技术功底,大多是使用前三类高手所开发的工具,这样的一类人,一般被称为“脚本小子”。值得附带一提的是,国内不少所谓“安全站点”上驰骋风云、威风八面的“高手”也不过就属于这类档次的混混而已——不知天高地厚的自吹自擂也是这类家伙常见的特性之一呢。
对个人用户而言,由于不具备较大的经济利益,因此前三类人一般不会染指用户的计算机。让用户深受其害的,常常是脚本小子的所为。
攻击的六大步骤
首先,让我们看看这类家伙是怎么样一步步发起攻击的,一次典型的正面攻击大概分这么几步来进行,值得一提目前的网络病毒传染方式从实质上来讲也是一种自动攻击,因此下面的步骤对待病毒也是同样适用;
1.利用扫描工具批量ping一个段的地址,判断存活主机;
为了加快感染的速度,常常是ping不通的主机就放弃后续的操作,相当多的病毒均是属于先ping目标主机,再进行感染操作的;
2.扫描所开放端口;
针对常见的默认端口来猜测服务器的性质,如80是web服务器;21是ftp,22是 ssh,25是smtp等等;
3.根据获得的情报,判断主机的操作系统和决定攻击方式;
如果操作系统开了80的,就看看web服务器的信息;如果开了21,就看看ftp服务器的信息——从这些蛛丝马迹中获得资料,如从iis的版本号、ftp服务的欢迎信息来判断所用的程序,以及操作系统可能使用的版本;
4.尝试攻击——在这一步,分为漏洞攻击、溢出攻击、密码破解攻击;
对待网络共享,一般采用利用弱密码漏洞方式进入;对待公共服务,如web、ftp则通过查找该版本的软件漏洞(这个在google上搜索到很容易,甚至有示范代码的)进行溢出攻击;枚举用户帐号,通过挂载密码字典,进行弱密码穷尽猜测攻击等等;
5.进入系统,想办法提升权限;
如果是通过服务漏洞进入,则不少情况下默认就是最高权限了(windows的服务大多默认以administrator权限运行),如果通过其他方式获得帐号密码的,那么还要想办法提升权限,常见的做法有利用重定向方式写系统设置文件、运行有权限执行的高权限程序并造成溢出获得;
6.获得最高权限后进行破坏行为实施;
常见的就是安装木马、设置后门、修改配置、删除文件、复制重要文件等;
应对攻击行为
让我们分析一下以上6步,看看该怎么应对攻击行为。
利用扫描工具批量ping一个段的地址,判断存活主机;
由于无谓的攻击一个不能确定是否开机的ip地址从效率上来说比较低下,在要求快速攻击/感染的情况下,常常会对目标地址进行ping检测——如著名的冲击波病毒等;换句话说,如果能让我们的主机不回应icmp包,则对方无法确定我们的存活,很可能就此放弃攻击。目前不少免费/商业的个人网络防火墙都带了这一功能;
判断主机的操作系统和扫描所开放端口;
个人用户所开主机的服务类端口不多,但由于windows自身的设置问题,例如win98共享漏洞、win2k默认开着telnet服务等原因,让攻击者有多个攻击选择。在这一步,同样可以用防火墙把必要的端口禁止掉——我常用的做法是把135、137、138、139、445端口禁止掉,这能避免很多麻烦,windows的网络共享安全性实在不怎么好,个人推荐用户考虑放弃网络共享,采用ftp等方式进行必要的文件传输;
根据获得的情报,决定攻击方式;
在这一步,攻击者将上一步扫描的资料进行汇总,然后确定攻击方式——因此上一步中,我们如果能将对外的端口开得尽量少,那么攻击者能利用的资源也就越少,出现漏洞攻击的可能行就越小;
尝试攻击——在这一步,分为漏洞攻击、溢出攻击、密码破解攻击;
由于攻击个人用户的家伙大多是属于脚本小子一级的,只会用别人现成工具的居多,因此有了上面的防御后,能让他们利用的漏洞也不是太多了。只要密切注意自己所用操作系统的动态,随时给系统升级补丁,一般来说攻击者已经没折了。
进入系统,想办法提升权限;
进入到系统之后,对其他平台而言,攻击者获得的大多不是root权限,还要进行权限提升的步骤,利用重定向写配置文件、信任欺骗等手段来提升权限;而在windows下,个人用户大多直接以administrator的身份登陆并进行日常使用(值得一提的是天缘看到不少win2k/nt服务器的管理员在进行日常操作的时候也使用administrator帐号,甚至在服务器上浏览不可信任的web页),且windows的后台服务大多直接以administrator身份运行,因此一旦被入侵,直接获得administrator的几率相当高,客观上降低了攻击难度。漏洞多,补丁慢,服务权限设置设置不严格——这就是攻击者更喜欢攻击windows系列操作系统的原因了。
获得最高权限后进行破坏行为实施;
到这一步,基本上用户已经无力阻挡了——最好的做法是立即拔掉网线再谋对策了。
对待上面这样典型的正面攻击行为,有一个好的个人用户防火墙是不错的选择,天网/金山的的偶比较好用,目前我个人的桌面系统使用的是费尔防火墙,它操作上不如天网/金山方便,但可定制性更好一些。普通用户可以下一个天网的防火墙来用,默认的规则已经可以对付上面提到的大部分攻击行为了。
正因为随着个人防火墙的使用,脚本小子进行正面攻击不容易得逞,因此采用欺骗的手段进行攻击成为了更为可取的方式。
常见欺骗手法
1.im软件中的一个网站地址——该网站地址其实是一个利用了activex漏洞或mime漏洞的页面,当用户采用启用activex的浏览器或mime解析不严格的web浏览器访问该页面时,会导致脚本病毒自动执行,修改用户的本机设置,并将远程木马木马下载到本地,在没有提示的情形下运行起来,之后又挂接到im软件,在用户知情/不知情的情形下,将该网站地址发送到用户im软件里的好友中,以次延续感染;对付activex漏洞的方式是使用能准确控制是否启用页面中activex的浏览器,如myie2;对付mime头的方法是及时打上系统补丁——“美女图片”病毒就是典型的一个利用浏览器没检查jpg的mime的漏洞,而这个漏洞微软在很早前就发布了patch,结果没想到还是很多人中招了。
2.主动在im软件中发送木马——这类方法比较拙劣,攻击者以“这是我的照片”,“新发现一个好用的软件”等借口,将一个文件发过来——并要求你执行,由于可执行文件的后缀是以.exe .bat .pif . scr .cmd 为主,所以用户看到这几类后缀就要小心了。如果的确想看对方的照片怎么办?让对方把图片转成jpg文件发过来,记住是放到你本地来,而不是给你一个url,否则上面提到的mime头检查漏洞正等着你呢!
3.利用邮件方式传播病毒。对利用outlook等客户端工具的朋友来说,自动在邮件里显示出html是一项很贴心的设计——可惜是有漏洞的设计——这样在ie存在漏洞的时候,读取html格式的邮件同样会中毒;预防方式要么是禁用html方式解析,要么是及时升级windows补丁,要么是不采用outlook本地方式收信,而是先利用webmail方式以文本格式读信,然后将有必要的信保留,没必要的删除,再行下载。
本来利用imap远程管理信箱是个好主意——可以将名字/来源email看着不对劲的信直接删除掉;但由于smtp协议本身的不完善和不少邮件病毒采用获取用户outlook地址本的特性,使得信件来源常常来自一个可信任的朋友地址,令远程管理无从仅仅根据信件来源email地址和信件标题判断是否为病毒。对待这类病毒,除了依仗邮件系统自身的杀毒功能外,用户在自己机器上装一个带邮件监控功能的杀毒系统也是非常有益的。当然,最好的方法就是用纯文本方式阅读信件——舍弃一点华丽,换来更多安全是值得的,至少在有重要资料的机器上是如此。
4.程序捆绑欺骗。目前有一种程序,专门将2个文件捆绑到一起,称为捆绑机。具体来说——打个比方,我把a.exe文件和b.exe文件捆绑到一起的话,会生成一个c.exe文件——那么如果我运行c.exe,则等于同时执行了a.exe和b.exe文件。如果正好a.exe或b.exe文件是一个木马的话……常见的做法就是不少所谓的“安全站点”告诉好奇的学习者——这是xx强大的安全工具、扫描工具。结果是捆绑着木马的,下载下来一运行,自己先中招了。不少脚本小子自己的机器上都被人种了木马还茫然不知,真是报应啊,哈哈哈。不过对普通用户来说,对待不信任的人发给的这类文件还是不运行比较好;当然自己去一些不是太正规的站主动下载文件就更是脑袋里进水了。
著名病毒的攻击原理
当然,攻击的方式从来不是被单独利用的 ,让我们分析一下几个著名病毒的攻击原理看看就知道了;
冲击波病毒(蠕虫类病毒):通过ping命令探测主机——检查是否为win2k/xp系统——利用rpc漏洞获取权限——通过tftp上载必要文件——修改注册表,添加服务——感染其他机器;
这类病毒的预防手段:
禁止ping的icmp回应封包发出;
打patch将漏洞补上;
在管理工具 ——服务 中 ,将“允许远程编辑注册表”功能禁用;
网络天空病毒(邮件类病毒):广发病毒邮件——用户收到邮件后打开运行——利用漏洞/欺骗执行邮件中的带毒程序 ——修改系统注册表设置——复制自身到系统目录——搜索本地htm,eml等文件中的邮件地址——利用自带smtp将病毒以多种标题连带欺骗文字向各个地址发出——某些病毒会ddos攻击某些站点;
这类病毒的预防手段:
不阅读来历不明和没理由收到的信件;
使用web方式在线阅读、管理信件;
打上最新的浏览器、outlook补丁;
禁止信件以html格式显示信件;
平时不用administrator身份登陆,而以普通用户登录,让病毒修改注册表和系统文件的权限受到抑止;
使用带邮件即时监控的杀毒程序;
新欢乐时光病毒(脚本类病毒):outlook传播——浏览染毒邮件时利用outlook漏洞运行vb代码——各个目录下生成大量folder.htt和desktop.ini文件,由于资源浏览器的脚本检查漏洞,浏览该目录即感染——搜索网络内其他机器共享——对有可写权限的(新变种能自动枚举尝试123,111,用户名123这样的简单密码)其他机器共享目录上载folder.htt和desktip.ini文件——其他机器使用资源浏览器浏览该文件夹时被感染
此类病毒的预防手段:
最好不使用网络邻居,必要使用的时候请只开放读取权限;
打上outlook补丁和浏览器补丁;
禁止采用html格式查看信件;
采用带即时文件监控的杀毒程序:
采用第三方资源浏览器浏览网络邻居资源,如total command等等;
由此可见,目前的主流病毒/攻击,都是将上面介绍的病毒方式/攻击方式进行复核后,以多种方式传播,力争在最短时间内感染数量尽量多的机器。行文到这里,基本上主要的攻击方式都介绍完了,在下面,我例出一张表,各位可以大致地看看应对方法。
病毒/攻击防御 ——对应主动攻击:
<扫描存活主机>( 防御方法:禁止icmp反馈,用防火墙实现);
<扫描端口、漏洞> (防御方法:1,禁用不必要的服务;2.禁止一些不对外的敏感端口; 3打系统补丁)
<攻击> (防御方法:1.用户密码设置得复杂一些;有特定服务的一定留意该服务的权限设置和打上针对该服务的最新补丁)
病毒/攻击防御2——对应欺骗攻击:
<发起欺骗> (防御方法:检查对方可信任度,这里的对方,不光是指操作计算机的人,而是指对方的机器是否可靠——如果对方是可信任的人,给你发了个url,你可以询问是不是对方发给你,因为病毒是不会自动应答你的询问的,由此你可以判断出是对方给你发的,还是对方机器已经中毒后自动发的)
<访问潜在欺骗源> (防御方法:每一个web页,每一封信件——不管是不是来自朋友,也不管是不是门户站点,都有可能存在木马或脚本病毒,最好的办法就是禁用activex,必要的时候才打开,及时升级浏览器/邮件工具补丁,防止浏览器漏洞被利用;)
病毒不断演化,随着编程技术的进步,目前的病毒具备越来越多的欺骗特征——可以说目前病毒传播的2条主要途径就是漏洞和欺骗;对待漏洞没说的,第一时间打上补丁是最好的解决办法,对待欺骗则就要依靠用户主观的判断了。虽然很难量化标准,但天缘还是尽力把防止病毒/攻击的办法大致例举一下,下面的有些条件比较苟苛,但还是希望能尽力做到——虽然麻烦一点,但总比中毒/攻击后受到损失强。
1.用户密码足够复杂,推荐8~16位数字+大小写字符+特殊符号 ;win2k/xp可考虑把administrator用户改名;
2.尽量使用网络共享,采用ftp等更安全的方式代替(默认共享目录,例举用户名,空密码漏洞是著名的容易被利用);如果必要情况下需要使用,请一定设置上8位以上的复杂密码,并制定文件目录的确实需要的最小权限(例如提供资料让人下载的,就只需要设置成只读权限就行了)
3.及时升级系统和工具补丁;(这点我在此文中一直在强调,但事实上是——不少用户宁可每天花10个小时的时间玩游戏,也不愿意花10分钟去访问一下windows的update站点,安装杀毒软件/防火墙是治标,打patch才是治本,随时打好patch是每日必修功课);
4.安装带有病毒即时监控/邮件监控的杀毒程序,并及时升级病毒库;(很多朋友强调自己用的是正版杀毒软件,但一直忽略了购买正版杀毒软件的最必要因素——获得良好的升级支持服务,不升级病毒库的杀毒软件是无法捕捉到新病毒的。因此天缘个人建议每天2次升级最新病毒库是比较适合的,一次在早上开机时,一次在下午开机时);
5.使用更优秀的软件代替产品;(例如用myie2代替ie,用total command 代替资源浏览器。不是说微软自身的产品不能用——有时候就是因为微软的产品功能太多,众多的功能中有可能有存在漏洞的,就会危机到系统安全了,所以推荐使用代替产品。而事实上不少第三方软件的确相当好用的)
6.使用个人版网络防火墙,将icmp反馈禁止,再根据自己需要把敏感端口全部禁止掉;(在金山等防火墙设置中,很容易找到“禁止icmp回应”,“禁止ping响应”这样的规则,勾选上就行了)win2k/xp自带的ipsec也能实现,不过比较繁复一些,个人感觉适合系统管理员而不是普通用户,另外winxp自带的防火墙也能作到禁止ping回应,各位可以试着开启它)
7.修改xp/win2000的默认设置,在服务中禁止掉自己不需要的一些服务。如messager和远程操作注册表都是常常被利用的服务程序;(在中文版本中,都有详细的中文提示,yesky网站上的介绍文章也相当多,各位可以搜索一下)
8.养成安全意识。网络前辈说过一句名言“安全,从来都不是技术问题,而是一个意识。”前面几条都是在第8条的基础上得到体现的,如果没有了安全意识,即使用再昂贵的杀毒软件也懒于升级、用再优秀的操作系统也懒于打patch,那么一切都是白费了。特别是对待目前逐渐成为主流的病毒/攻击欺骗而言,如果用户不在主观上保持“存疑”的态度,那么随意接受/打开外来的文件,中毒的可能性是相当大的。另外补充一句,网络上只有“本地”和“远程”2个概念,不管是不是朋友的计算机,是不是同一个工作组内的机器,它始终是台远程机器发送过来的数据——保持必要的怀疑,不管该计算机是谁拥有。
9.在金山的主页,对待流行病毒,都有专杀工具和注册表修复工具免费下载,如果用户能确认自己所中的是何种病毒时,使用专杀工具能获得更高的杀毒效率;而且在这些站点上,还有最新的病毒预报可以看到,方便用户提前作好准备以及了解攻击细节。
后记
目前对待联网的桌面操作系统而言,安全主要在于对网络上病毒/攻击的防御,事前充分地做好准备工作,远比病毒、攻击入侵后再进行补救更好。病毒、攻击除了依赖于技术实现,更重要的是依赖于用户自身的安全意识——天缘接触的不少用户都知道要升级操作系统、要买正版杀毒软件、不在网络上随便下载东西,但真到实施的时候却常常因为贪图便利和抱有侥幸心理,最后到病毒、攻击入侵机器后才悔之晚矣。现在的windows系统的升级做的相当方便、杀毒软件更是做得相当贴心,升级不是多麻烦的事情,贵在持之以恒。
安全在各个行业都是一个永恒的话题,桌面操作系统从单机时代走向网络时代是一次计算机业的重大进步,随着互联网络的资讯增多、娱乐丰富、商机渐显,它在我们的生活中变得越来越重要,而随之而来的病毒和攻击也越来越猖獗。希望此文能对饱受病毒/攻击之苦的朋友一点点启示。