一. 可怕的“45分钟定律”
早些时候,网络上公布了一份专家报告称:在当前这个病毒、蠕虫和黑客出没的网络上,一台刚安装好Win2000/XP等主流操作系统的计算机从连接网络到被感染病毒或被入侵的最长时间为45分钟,而实际上,如果考虑到所处网段和黑客扫描的活跃状态,这个时间也许会更短。
许多网民都看过这份报告,依靠网络获得经济收入的美术设计师小江也不例外,他是属于SOHO一族的,为一些公司制作LOGO、效果图,所有的交互都在网络上进行,久而久之,小江开始变得非常依赖网络,他的所有工具都从网络上获得,除非真的无处可寻,否则他绝对不会去软件市场购买光盘,如果操作系统的安装可以通过网络进行,他恨不得抽屉里一张光盘都没有。他始终认为,既然网络这么便利,又何必把资金浪费在软件版本更新不及时的用光盘做载体的软件上呢?
这天小江比较烦,因为他的电脑昨天被表弟玩出问题了,小江虽然在电脑美术方面有过人之处,但是系统维护方面却一窍不通,在他的胡乱摆弄后,系统彻底罢工,这下只能重装系统了。
因为这次小江已经知道了“45分钟定律”,所以安装好驱动程序后,他立即连接上网络,来到Windows Update网站下载补丁,可是补丁还没打完,机器就出现异常了:突然间的一次蓝屏重启后,每次进系统都在1分钟倒计时后重启,很明显是被感染XX波蠕虫了。小江欲哭无泪,他还没来得及打补丁呢,怎么预防网络上的漏洞蠕虫?不上网就不会被感染,可是那样怎么打补丁?(图1.先补丁还是先连网?)
网络在给人们提供便利的时候,还带来了严重的危机。也许,面对这个高科技时代里“先补丁还是先连网”的问题,困惑的不仅仅是小江……
我们都知道,就目前的网络环境而言,能避免被“黑”一下的方法只有用多个防御措施把自己武装起来,而刚安装好的系统之所以会被轻易入侵,是因为这样的系统什么防御措施都没有,完全是对外界开放的,无怪乎病毒和入侵者能轻易进来。45分钟,已经属于很长的时间了。
既然刚安装的系统如此不堪一击,那么岂不是所有新装的系统都不能轻易上网?其实这个问题比“先有蛋还是先有鸡”更好解决。首先要清楚,无论是什么样的病毒和黑客,他们能入侵的途径只有一个,就是系统与网络之间的窗口——网络端口。每个网络端口都是由特定的应用程序控制的,系统漏洞往往都是因为这些程序代码出了疏忽的地方,例如无法正确处理带有恶意指令的网络数据包,当系统接收处理这些数据后,就会出现例外错误,如果被影响的程序属于系统运行必备组件,那么计算机轻则死机,重则被黑客入侵,这就是远程入侵的实质,它们必须通过端口进行。
既然端口是个敏感地带,那么,如果我们在安装系统后设法阻止端口的外部访问,让外部数据包无法顺利连接计算机,这样不就可以免疫最初的网络攻击了吗?而网络防火墙就是一种能阻止端口访问的程序。(图2.设置防火墙规则)(图2.设置防火墙规则)
所以,打破“45分钟定律”的方法就是:
1. 在不连接网络的情况下安装好系统和驱动程序;
2. 安装网络防火墙,记得配置规则为“禁止任何人连接端口”或与之类似的规则;
3. 连接网络,去Windows Update打完所有补丁;
4. 安装防病毒软件;
5. 视用户个人能力,设置系统服务和管理规则等加强措施。
经过这5步最初设置,计算机防御病毒和入侵的能力将会大大提高。毕竟,这样已经是一个好的开头,只要以后再多加防范,病毒和黑客就没那么容易动你的计算机了。
二. “傀儡网络”离你有多远?
现在才开始上网的用户是幸福的,因为他们不必经历几年前那些用户必须经历的慢如蜗牛的拨号网络,我至今都还记得当初在2001年时听闻一个在上海的网友可以直接在线聆听MP3后,口水淌了一地的情景,这在当今网络环境的人听来简直不可思议,可是经历那个时代的人都清楚,当时的下载速度能达到9KB/s是件多么自豪的事情——可是放到现在来看待呢?不会抱怨网络慢的都不属于正常人。
正因为现在的个人网络速度越来越快了,于是一种新的攻击体系也开始浮出水面,这就是“傀儡网络”(Zombie Net,或称“僵尸网络”),这种入侵早期仅用于服务器,入侵者们也是千方百计要在受害者的计算机里“下马”,即种植一个木马服务端。看到这里你也许会说,这不就是现在最滥用的木马手段吗,何必旧事重提?如果你有此想法,那你一定没有理解“Zombie”的含义。在“傀儡网络”的领域里,入侵者并不是对你机器上的数据感兴趣,而是为了方便它们能够以你的身份去完成某些事情罢了。在这种情况下,植入你机器的后门不会做出破坏你机器的事情,因为正如寄生虫和宿主的关系一样,如果宿主死亡,寄生虫还靠什么活下去?“傀儡网络”正是依赖被害人计算机的寄生虫,因此它不会随便做出破坏行为让宿主发现异常,否则幕后黑手还凭什么来控制整个“傀儡网络”的运作?
细心的读者会从我的描述中看出一个很熟悉的攻击体系结构,那就是拒绝服务攻击DDoS的控制模型:攻击者控制网络上大量被种植了DDoS服务端的计算机对目标发起垃圾数据攻击。实际上,早期的“傀儡网络”就是为了实现这个任务而运作的,它需要大量高带宽高数据吞吐量的网络节点设备才能发动高流量的数据洪水,在以前大家普遍使用Win98系统来拨号上网的时候,这点数据吞吐量和系统的稳定性并不能满足“傀儡网络”的需求,于是当时这种体系仅仅限于在服务器系统之间感染传播,因此没有造成大规模危害。(图3.早期的傀儡网络模型)
时过境迁,如今个人计算机的网络速度最少都能达到512kbps的流量,于是新的一轮“傀儡网络”攻击拉开了序幕,要知道入侵个人计算机往往要比入侵服务器容易得多!虽然个人计算机网络速度相对于服务器而言还是太慢了点,可是黑客如果入侵控制数十台1Mbps的个人计算机形成一个“傀儡网络”,其攻击强度不会低于他拼了老命才得手的一台10Mbps的网络服务器。衡量一下两边的利弊,你认为他会选择入侵谁?于是在这个高带宽的网络时代里,个人用户也会被“傀儡网络”的黑手触到了。而且由于个人用户的系统环境相对于服务器系统环境所带的防御检测工具更少,于是这个攻击体系的寿命将会相对的延长。如果要追寻利用个人计算机做“傀儡网络”的不足,可能仅仅因为个人计算机相对服务器而言的不稳定性质致使它不能24小时待命而已,但是别忘记网络服务器和个人计算机之间的比例差异。设想一下,如果当初搞瘫整个世界网络的并不是专门针对SQL服务器的SQL蠕虫,而是RPC DCOM或者LSASS蠕虫,恐怕没有一台根域名服务器能幸免了吧,这种由上亿台个人计算机组成的“傀儡网络”将会比服务器形成的“傀儡网络”攻击遭受的损失更大。
(图4.现在的傀儡网络模型)
而且“傀儡网络”能实现的攻击还不仅仅限于DDoS,入侵者能通过更改傀儡服务器端来实现其他功能,例如“跳板攻击”、“多级代理”等,前者可以借刀杀人,后者可以隐藏真正的入侵者。
要检测计算机是否感染了“傀儡网络”是一件需要耐心的事,因为它们通常不会让你的系统看起来有什么不妥,除了在“傀儡网络”发动DDoS攻击时由于带宽和性能消耗而表现出的系统响应缓慢、网络速度突降以外再没任何不良反应,没有网络攻防经验的一般用户根本不会想到自己的计算机正在被别人用来做破坏工具,而且因为无法预知“傀儡网络”什么时候发动攻击,更增加了检测难度。但是由于木马也需要和控制端进行数据交互,因此需要开放端口监听连接,除非感染的是反弹类型的木马,否则通常可以用端口检测程序配合进程名称判断程序是否值得怀疑,但是有一些傀儡木马被设定为在指定时间自动对固定目标发动攻击,这样的木马由于不需要控制,根本连端口都不用开,例如当时攻击微软网站的SCO蠕虫,遇到这样的木马,平时是无害的,可是过了爆发那一天以后,如果“傀儡网络”的作者加入了逻辑炸弹,让木马连同宿主一起销毁,那就不是闹着玩的了,所以这类木马隐藏的危机要比随时能控制的木马更大,若清除不及时,可能会带来恶性后果。(图5.傀儡网络服务端不易被察觉)
通常,如果用户不是那么粗心的使用者,那么要发现“傀儡网络”也不算难事,因为一般的“傀儡网络”也属于木马类型,无论隐藏得多深,都要有数据通讯的,用端口查看工具就能发现本地监听的端口,直接清理掉即可;如果是反弹型的“傀儡网络”,虽然表面上不开端口,可是别忘了它也要接收控制端指令的,而一般作者的习惯都是让木马在启动或者检测到网络可用后马上自动连接事先设定的IP读取指令,因此它更容易暴露自己,对于一般用户来说,最简单的检测方法是在开机后打开嗅探工具,然后再连接网络,记录此时的数据连接,如果重复几次连接都发现本机自动发出对某个固定地址的连接请求的数据,就要怀疑是否感染反弹木马了,再配合防火墙的“应用程序网络状态”功能,很快就能把“傀儡网络”揪出来。
三. 来自内核的欺骗——Rootkit木马
老宏是一家大公司的资深网管之一,常年负责维护整个公司的网络运作和安全设置,几年下来平安无事,可是最近公司网络频频出问题,职员电脑里的资料也遭遇盗窃,公司管理阶层很注重这事情,怀疑网络已经被入侵,老宏和其他网管从天亮就开始在机房里忙着检查系统,由于公司内部网络复杂,十几台承担各种网络功能的服务器系统也不尽相同,客户机更是多不胜数,连续几天下来,检测工作一无进展,负责系统检测的老宏更是想不通,所有系统看起来都没有被入侵的痕迹,也查找不到可疑文件和进程,那究竟是什么东西在折腾?无奈之下,公司暂时切断了内部网络,老宏在一台被独立出来的基于Linux系统的网络服务器旁看着显示器发呆。屏幕上进程监视程序里都是熟悉的进程,也没有任何数据传输,因为连接内部的网线已经拔掉了,网络服务也已经停止了。老宏点了支烟,望着不远处的交换机出神,在烟雾缭绕中,他仿佛看到交换机面板上代表这台网络服务器的数据指示灯在闪烁,公司网络没出问题的时候,这里有多么繁忙的数据传输啊,它代表着公司业务的……老宏突然吓得差点把烟甩掉,因为他突然清醒过来了:交换机的数据指示灯真的一直在闪烁!他转头看看显示器上的流量统计,它们却一直没变化!显示器表达的信息与交换机表达的信息不能同步,老宏只觉得整个机房变得诡异起来……
这样的事情并不一定会发生在所有个人计算机用户的身上,因为它们并非主流的群体,然而一旦不幸发生,却会给你带来远比以前遭受的一切病毒袭击更恐惧的感受,你会惊恐的发现系统有点异常行为、敏感数据遭遇盗窃、甚至有明显的木马感染的表现,但是杀毒软件报告你的系统完好,你用流行的进程查看工具也没有发现可疑程序,但是你的机器却一直表现异常……
正如自然界的规则一样,最流行的病毒,对生物的伤害却是最小的,例如一般的感冒,但是最不流行的病毒,却是最夺命的。Rootkit木马就是信息世界里的AIDS,一旦感染,就难以用一般手段消灭了,因为它和自然界里的同类做的事情一样,破坏了系统自身检测的完整性——抛开术语的描述也许难以理解,但是可以配合AIDS的图片想象一下,由于AIDS破坏了人体免疫系统,导致白细胞对它无能为力,只能眼睁睁看着人体机能被慢慢破坏。计算机系统没有免疫功能,但是它提供了对自身环境的相关检测功能——枚举进程、文件列表、级别权限保护等,大部分杀毒软件和进程工具都依赖于系统自带的检测功能才得以运作,而Rootkit木马要破坏的,正是这些功能。
要了解Rootkit木马的原理,就必须从系统原理说起,我们知道,操作系统是由内核(Kernel)和外壳(Shell)两部分组成的,内核负责一切实际的工作,包括CPU任务调度、内存分配管理、设备管理、文件操作等,外壳是基于内核提供的交互功能而存在的界面,它负责指令传递和解释。由于内核和外壳负责的任务不同,它们的处理环境也不同,因此处理器提供了多个不同的处理环境,把它们称为运行级别(Ring),Ring让程序指令能访问的计算机资源依次逐级递减,目的在于保护计算机遭受意外损害——内核运行于Ring 0级别,拥有最完全最底层的管理功能,而到了外壳部分,它只能拥有Ring 3级别,这个级别能操作的功能极少,几乎所有指令都需要传递给内核来决定能否执行,一旦发现有可能对系统造成破坏的指令传递(例如超越指定范围的内存读写),内核便返回一个“非法越权”标志,发送这个指令的程序就有可能被终止运行,这就是大部分常见的“非法操作”的由来,这样做的目的是为了保护计算机免遭破坏,如果外壳和内核的运行级别一样,用户一个不经意的点击都有可能破坏整个系统。
由于Ring的存在,除了由系统内核加载的程序以外,由外壳调用执行的一般程序都只能运行在Ring 3级别,也就是说,它们的操作指令全部依赖于内核授权的功能,一般的进程查看工具和杀毒软件也不例外,由于这层机制的存在,我们能看到的进程其实是内核“看到”并通过相关接口指令(还记得API吗?)反馈到应用程序的,这样就不可避免的存在一条数据通道,虽然在一般情况下它是难以被篡改的,但是不能避免意外的发生,Rootkit正是“制造”这种意外的程序。简单的说,Rootkit实质是一种“越权执行”的应用程序,它设法让自己达到和内核一样的运行级别,甚至进入内核空间,这样它就拥有了和内核一样的访问权限,因而可以对内核指令进行修改,最常见的是修改内核枚举进程的API,让它们返回的数据始终“遗漏”Rootkit自身进程的信息,一般的进程工具自然就“看”不到Rootkit了。更高级的Rootkit还篡改更多API,这样,用户就看不到进程(进程API被拦截),看不到文件(文件读写API被拦截),看不到被打开的端口(网络组件Sock API被拦截),更拦截不到相关的网络数据包(网络组件NDIS API被拦截)了,幸好网络设备的数据指示不受内核控制,否则恐怕Rootkit要让它也不会亮了才好!我们使用的系统是在内核功能支持下运作的,如果内核变得不可信任了,依赖它运行的程序还能信任吗?
(图6.普通应用级别的木马后门和Rootkit木马的对比)
但即使是Rootkit这一类恐怖的寄生虫,它们也并非所向无敌的,要知道,既然Rootkit是利用内核和Ring 0配合的欺骗,那么我们同样也能使用可以“越权”的检查程序,绕过API提供的数据,直接从内核领域里读取进程列表,因为所有进程在这里都不可能把自己隐藏,除非它已经不想运行了。也就是说,内核始终拥有最真实的进程列表和主宰权,只要能读取这个原始的进程列表,再和进程API枚举的进程列表对比,便能发现Rootkit进程,由于这类工具也“越权”了,因而对Rootkit进行查杀也就不再是难事,而Rootkit进程一旦被清除,它隐藏自身的措施也就不复存在,内核就能把它“供”出来了,用户会突然发现那个一直“找不到”的Rootkit程序文件已经老实的呆在文件管理器的视图里了。这类工具现在已经很多,例如IceSword、Patchfinder、gdb等。(图7.IceSword界面)
四. 谁动了我的计算机
在这个不安全的网络时代,入侵防范变得越来越复杂,然而很多人还依赖着多年前的Process Viewer和传统防病毒软件的保护里,因此,在高级木马到来时,所有的防护措施都成了“马奇诺防线”;由于一般的“受害思维”影响,人们总是认为任何木马都是为了害自己的,却忽略了“傀儡网络”的存在;而大部分群体,则让自己计算机裸露于网络上,使得“45分钟定律”屡屡成为现实……要知道,在现在的网络环境里,差不多每分钟都会有一次网络流行漏洞扫描经过你的计算机,每天可能就有一次针对性的全面扫描,如果我们自己不做足够的防范,那么,也许在某天,你只能无助的看着自己的爱机,说一句:“Who moved my computer?”