ocean

匿名

3 月 192006
 

用 nslookup 测试DNS服务器

很多时候,拨号或者局域网中访问一些站点而不能够的原因只是 DNS 服务器的问题。所以,我一般都会添加多个 DNS服务器,至少要先拿到要访问站点的 ip地址再说,至于防火墙,那是代理的问题。

windows 网络属性 ctp/ip 协议中设置DNS麻烦,而且无法测试是否起作用。

开始 运行 cmd 打开windows命令行 运行

nslookup

得到下面的结果

C:Documents and Settingsguoshuang>nslookup
Default Server: dns.sn.cninfo.net
Address: 61.134.1.4
>

表示当前 DNS 服务器是 61.134.1.4

输入需要解析的域名,比如 blog.guoshuang.com,返回

> blog.guoshuang.com
Server: dns.sn.cninfo.net
Address: 61.134.1.4

DNS request timed out.
timeout was 2 seconds.
Non-authoritative answer:
Name: blog.guoshuang.com
Address: 222.90.70.219
>

表示使用 61.134.1.4 来解析,返回了 222.90.70.219 的结果。换言之,这个 61.134.1.4 DSN服务器有效。

如果想尝试其他DSN服务器,可输入 server 192.168.100.10,然后输入需要解析的域名。如

> server 192.168.100.10
Default Server: [192.168.100.10]
Address: 192.168.100.10

> blog.guoshuang.com
Server: [192.168.100.10]
Address: 192.168.100.10

DNS request timed out.
timeout was 2 seconds.
DNS request timed out.
timeout was 2 seconds.
*** Request to [192.168.100.10] timed-out
>

可以看到这个DNS不能返回结果。换言之,此 DNS 无用。

3 月 142006
 

助手的反叛——浏览器劫持
文章整理:网络技术论坛   作者:小金   发布时间:2006-02-20

  一. 谁误导了浏览器

  今天是大年初二,王先生家中来了许多客人,把平时埋头于工作的王先生弄了个手忙脚乱,由于客人带来的几个小孩子嚷嚷着要出去上网,王先生只好把寝室里的电脑让给了这一群孩子玩,好容易到了晚上,客人散尽,王先生想在休息前上网浏览一下新闻,可是当他打开IE的时候,却发现它自动连接到一个莫名其妙的网站去了,而且收藏夹里也多了一些奇怪的网址,王先生担心是系统感染了病毒,赶紧输入一个在线杀毒工具的网址,结果IE打开的却是另一个不知所谓的网站。看着IE地址栏里准确无误的杀毒工具网址和下面那根本扯不上关系的内容,王先生真的手忙脚乱了……

  相信不少用户也遇到过与之类似的奇怪事情,究竟是谁,把我们的浏览器领到了一处陌生的地方呢?

  近年来,针对浏览器的攻击手段层出不穷,对浏览器的渗透攻击逐渐成为入侵者攻破用户层层防御的首要目标,在“钓鱼”(Publishing)危机尚未解除的时候,另一攻击方式也在同时进行着,这就是“浏览器劫持”——故意误导浏览器行进路线的策划者。

  “浏览器劫持”(Browser Hijack)是一种不同于普通病毒木马感染途径的网络攻击手段,它的渗透途径很多,目前最常见的方式有通过BHO、DLL插件、Hook技术、Winsock LSP等载体达到对用户的浏览器进行篡改的目的。这些载体可以直接寄生于浏览器的模块里,成为浏览器的一部分,进而直接操纵浏览器的行为,轻者把用户带到自家门户网站,严重的则会在用户计算机中收集敏感信息,危及用户隐私安全。“浏览器劫持”的后果非常严重,用户只有在受到劫持后才会发现异常情况,但是这时候已经太迟了。目前,浏览器劫持已经成为Internet用户最大的威胁之一。

  二. BHO,你是助手还是敌人?

  为什么“浏览器劫持”能够如此猖狂呢?放眼众多论坛的求助贴,我们不时可以看到诸如“我的IE被主页被改了,我用杀毒工具扫了一遍都没发现病毒,我把主页改回自己的地址,可是一重启它又回来了!”、“我的系统一开机就跳出一个广告,我明明用了最新版的杀毒软件的啊!”等这类关于IE异常问题的求助,80%的提问者都表示纳闷,他们已经安装了杀毒软件,可是IE仍然被“黑”了,这又是为什么?

  其实这些都是典型的“浏览器劫持”现象,但是受害者不是已经安装了杀毒软件吗?为什么浏览器依然躲不过这只黑手?许多用户对这个领域都存在一种误区心理:浏览器劫持?我有最新的杀毒软件,我不怕!

  于是,当他们遭遇“浏览器劫持”时,惊讶了。

  要知道,杀毒软件自身也只是一种辅助工具,它不可能完全保护系统的安全,更何况,杀毒软件用户必须知道一个事实:“浏览器劫持”的攻击手段是可以通过被系统认可的“合法途径”来进行的!杀毒软件只能通过“特征码”的形式来判断程序是否合法,但这是建立在人为定义以后的,而实施“浏览器劫持”的程序可以有很多,防不胜防。

  为什么说“浏览器劫持”可以说是合法的呢?因为大部分浏览器劫持的发起者,都是通过一种被称为“BHO”(Browser Helper Object,浏览器辅助对象)的技术手段植入系统的。

  BHO是微软早在1999年推出的作为浏览器对第三方程序员开放交互接口的业界标准,它是一种可以让程序员使用简单代码进入浏览器领域的“交互接口”(INTERACTIVED Interface)。通过BHO接口,第三方程序员可以自己编写代码获取浏览器的一些行为(Action)和事件通知(Event),如“后退”、“前进”、“当前页面”等,甚至可以获取浏览器的各个组件信息,像菜单、工具栏、坐标等。由于BHO的交互特性,程序员还可以使用代码去控制浏览器的行为,比如常见的修改替换浏览器工具栏、在浏览器界面上添加自己的程序按钮等操作,而这些操作都被视为“合法”的,这就是一切罪恶根源的开始。

  BHO的出现帮助程序员更好的打造个性化浏览器或者为自己的程序实现了方便简洁的交互功能,可以说,如果没有BHO接口的诞生,我们今天就不能用一些工具实现个性化IE的功能了。从某一方面来看,BHO的确是各种缤纷网络互动功能的幕后功臣,但是一切事物都是有两面性的,这个恒古不变的真理同样对BHO有效,于是就有了今天让安全界头痛的“浏览器劫持”的攻击手段诞生。

  看看前面我提到的BHO接口特性,你想到了什么?BHO可以获知和实现浏览器的大部分事件和功能,也就是说,它可以利用少量的代码控制浏览器行为。程序员可以设计出一个BHO按钮以实现用户点击时通知浏览器跳转到某个页面完成交互功能,当然就可以进一步写出控制浏览器跳转到他想让用户去的页面,这就是最初的“浏览器劫持”的成因:BHO劫持。

  在描述BHO劫持之前,我们先要对BHO接口的启动做个简单介绍:符合BHO接口标准的程序代码被写为DLL动态链接库形式在注册表里注册为COM对象,还要在BHO接口的注册表入口处进行组件注册,以后每次IE启动时都会通过这里描述的注册信息调用加载这个DLL文件,而这个DLL文件就因此成为IE的一个模块(BHO组件),与IE共享一个运行周期,直到IE被关闭。

  IE启动时,会加载任何BHO组件,这些组件直接进入IE领域,而IE则成为它们的父进程和载体,从此IE的每一个事件都会通过IUnknown接口传递到BHO用以提供交互的IObjectWithSite接口里,这是BHO实现与IE交互的入口函数。

  BHO接收到IE接口传递来的参数后开始判断IE正在做什么,理论上BHO可以获取IE的大部分事件,然后根据程序员编写的代码,BHO持有对特定事件做出反应的决定权,例如一个可以实现“中文网址”的BHO,就是通过GetSite方法获取到IE当前打开的站点URL(或通过IURLSearchHook接口来获知),如果BHO发现获取到的URL和内置的判断条件匹配,该BHO就会启用SetSite方法强制IE跳转到程序员设定的页面去,这个过程就是利用about:blank篡改主页的“浏览器劫持”方法之一,它的实现原理其实很简单,程序员编写一个恶意BHO组件,当它获取到IE窗口的当前站点为“about:blank”时就强制IE内部跳转到指定的广告页面,于是闹出了不久之前沸沸扬扬的“IE空白页劫持事件”。

  了解了这种类似恶作剧的作案手段,要解决它就容易了,只要找到并删除这个隐藏在系统里的BHO程序即可。

  除了这类“广告软件”性质的BHO,还有一种利用IURLSearchHook接口实现的另一类更隐蔽的BHO,这种BHO从某些方面来说大概不算BHO,因为它并不是响应IUnknown,而是等待IE创建IURLSearchHook来启动。IURLSearchHook被浏览器用来转换一个未知的URL协议地址,当浏览器企图去打开一个未知协议的URL地址时,浏览器首先尝试从这个地址得到当前的协议,如果不成功,浏览器将寻找系统里所有注册为“URL Search Hook”(资源搜索钩子,USH)的对象并把这个IE不能理解的地址发送过去,如果某个USH对象“认识”这个地址,它就返回一个特定的标识告诉IE它知道怎么打开这个地址,然后IE就根据约定的方法调用它,最终打开这个地址。其实USH对象并不陌生,我们一些偷懒的用户就经常为了省事而不输入“http://”,但是IE最终还是能认出并打开某个地址,就是USH的功劳,但是这一点又被恶意程序员拿来磨刀了,通过创建自己的USH对象,恶意程序员能够命令IE在找不到一些网站时自动跳转到事先设置的站点里,如果这个站点带毒或者挂马,用户就完了。

  这类BHO的解决方法和前面一样,只是它比较隐蔽,除非用户经常偷懒,否则可能直到系统崩溃也不会知道自己已经感染了这种东西。也许你会说,只要用户的输入永远不会让IE无法识别,这种渗透不就白费了?但是事实不容乐观,我们无法得知BHO作者还会不会通过其他方法拦截IE,说不定每隔一段时间就让IE弹出一个广告呢?

  上面说了这么多BHO和IE合作搞破坏的事例,可能会给读者造成一种“BHO必须在IE传递数据后才能行动”的误解,然而事实并非如此,浏览器自身也是一个标准的可执行程序,而BHO只是借用这个程序进程启动的DLL,它并非API那种要用的时候就让你过来忙活,忙活完了就一脚踹开的奴隶形态DLL,前面说过了,BHO是一种在浏览器加载时一同启动的例程,它相当于一种自身运行逻辑不太明确的子进程(里面都是对IE事件的响应和操作代码),这个特性就造成了BHO DLL和API DLL本质的区别,BHO并不需要所有事件都必须依赖这个大家伙,它可以有自己决定的权利,只要适当的修改,就能用BHO实现类似DLL木马的功能,当然,这并不是说我们就能在IE眼皮下公然的肆无忌弹干坏事的,由于BHO自身是作为IE子进程启动的,它就必须受到一些限制,例如程序员不能在里面自己创建网络连接,这样会导致IE报错崩溃并供出你写的DLL,害怕BHO成为另一种后门的用户可以松口气了,要在BHO里实现Winsock大概只能在IE休息的时候才可以,但是会有哪个用户开着个开空IE什么事情都不做呢?

  但这并不是说BHO就一定能无害了,虽然用它不能做到远程控制,但是别忘记,BHO能看到IE的所有东西,也就能任意的访问用户文件和注册表,在这个条件成立的前提下,入侵者可以编写代码查找用户隐私,然后在适当时候通过SetSite提交出去——谁叫现在Webmail这么流行呢?这就是为什么许多厂商发布诸如“中文网址”、“网络搜索”、“IE定制”、“IE监视”这些功能的BHO的同时都保证“不搜集用户隐私”的原因,只要你想要,BHO就能得到一切。

  有些人也许会想,既然BHO是微软浏览器的权利,那我不用IE了,我用Opera、Firefox不行?对于这点固然无可厚非,但是你用不用Windows?用不用共享软件?如果你用Windows,那么,你仍然可能处于被BHO接触到的世界,因为Windows本身就是和IE紧密结合的,这就把“IE进程”的范围给扩大了,细心的用户大概会发现,IE里能直接访问“我的电脑”,“我的电脑”窗口也能迅速变成IE,因为它们实质都是依赖于IE内核的,正因为这个原因,BHO可以在你打开一个文件夹时跟着偷偷启动。同时,现在的网络正处于一种“共享软件捆绑战略”大肆实施的时代,你再小心也不能避免某些共享软件固定捆绑了BHO的行为,安装后你才会发现文件夹上又多了个什么“助手”、“搜索”了。要想彻底逃开BHO的围困,大概只能放弃使用Windows了。

  三. Hook,你钩住浏览器了

  “Life finds its way.”——《侏罗纪公园》

  正如《侏》里的这句话一样,入侵者也在不断寻找他们的新出路,虽然上面我说了这么多BHO的负面事例,但是真正的危机并不是只有BHO的,在一些使用BHO行不通的场合里,入侵者开始投掷他们的钩子。

  什么是钩子?让我们先看看它的官方定义:

  钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。

  钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。

  可能上面的官方定义对一部分读者理解有点困难,其实,钩子就像是一切程序的“先知”,一个实现了钩子的程序自身虽然也是普通程序,但是它总能在别的程序得到数据之前就已经知道了一切,这是为什么呢?对Windows系统有一定了解的读者应该知道,Windows系统是一个通“信息处理机制”运作的系统,在这个系统里传递的数据都是通过“消息”(Message)的形式发送的,各个消息都遵循了官方的约定,否则就不能让系统产生回应。而且这个传递步骤是颠倒的,例如我们关闭了某个程序,我们可能会认为是程序自己关闭后通知系统的,其实不然,当用户点击关闭按钮的时候,Windows就会把一个叫做WM_CLOSE的消息传递给这个程序,程序接收到消息后就执行卸载自身例程的操作。理解了这点,就能知道钩子的原理了,所谓钩子程序,就是利用了系统提供的Hook API,让自己比每一个程序都提前接收到系统消息,然后做出处理,如果一个钩子拦截了系统给某个程序的WM_CLOSE消息,那么这个程序就会因为接收不到关闭消息而无法关闭自身。除了消息以外,钩子还可以拦截API,像我们都熟悉的屏幕翻译软件就是Hook了一些文本输出函数如TextOutA而达到了目的。

  Hook技术让编程人员可以轻松获取其他程序的一些有用数据或传递相关数据,像现在常见的一些游戏外挂,它们就是利用Hook技术钩住了游戏窗体,然后就可以识别游戏里面的行为和模拟发送按键鼠标消息,最终实现电脑自己玩游戏的功能。把这个技术应用到浏览器上面,就成了另一种控制浏览器行为的方法。

  钩子有两种,本地钩子(Local Hook)和全局钩子(Global Hook),本地钩子只在本进程里起作用,故不属于讨论范围;全局钩子代码必须以DLL形式编写,以便在钩子生效时被其它进程所加载调用,因此我们看到的大部分Hook程序都是DLL形式的。

  其实之前提到的BHO也可以视为一种针对IE的钩子,它钩的是IE的事件,这就是IE与BHO交互的起点,但是对于再复杂一点的操作,例如判断IE下载的是GIF图片还是JPEG图片,BHO无能为力,因为它仅仅知道IE的事件为DownloadBegin和DownloadComplete,对于具体内容,IE本身是不会告诉它的,否则IE岂不是要忙死了?至少我也没见过哪个领导还需要向秘书汇报中午吃了鸡肉还是鸭肉的吧,BHO可不是IE的老婆,或者说IE没有气管炎。

  所以,为了得到IE的更多数据,程序员开始钩IE了。与BHO不同,钩子不需要被动的等待IE事件,它直接和IE形成上司对下属的关系,这次轮到IE要做什么都得经过它批准了。Hook形式的控制不需要DLL文件必须与IE的注册表入口产生组件关系,它可以是一个独立的DLL,通过Rundll32.exe或自带的Loader EXE启动,而且由于它属于Hook形式, 在钩子有效的情况下会被系统自动插入其他程序的进程中,是不是有点像DLL木马呢?

  IE钩子程序载入进程后便能获知所有的消息类型、API和内容,一旦发现某个符合要求的消息,如IE执行了某个事件,或者用户输入了特定内容,钩子的处理代码就开始工作了,它先拦截系统发送给IE的消息,然后分析消息内容,根据不同消息内容作出修改后再发给IE,就完成了一次Hook篡改过程。用著名的3721实名搜索做例子,一些人会以为它是采用了BHO或者IURLSearchHook完成中文域名的识别跳转的,其实它是用了能够第一个得到Windows消息的Hook技术,这样一来就可以避免被其他的竞争对手抢先解析域名了:3721的主程序就是一个Hook DLL,它监视IE地址栏的消息,一旦用户输入的是中文,它便在其他BHO类插件工作之前拦截了这个消息,并调用自身代码完成中文域名到英文URL的转换工作,然后返回(也可能与自己的BHO DLL配合)一个让IE跳转到英文URL的消息,完成域名的翻译任务。

  IE钩子能帮助程序员用少量代码完成更多的IE交互工作,但是一旦这个钩子被用于犯罪,其后果也是严重的恶意程序员可以写一个拦截IE输入的键盘钩子,达到窃取密码的作用,这样无论你是用HTTP明文协议还是SecurityHTTP加密协议都不能逃避密码被盗的下场了,因为它抓的是你在IE里的输入,后面的数据传输已经不重要了。

  四. Winsock LSP

  全称为“Windows Socket Layered Service Provider”(分层服务提供商),这是Winsock 2.0才有的功能,它需要Winsock支持服务提供商接口(Service Provider Interface,SPI)才能实现,SPI是一种不能独立工作的技术,它依赖于系统商已经存在的基本协议提供商,如TCP/IP协议等,在这些协议上派分出的子协议即为“分层协议”,如SSL等,它们必须通过一定的接口函数调用,LSP就是这些协议的接口。

  通过LSP,我们可以比分析基本协议更简单的得到我们想要的数据内容,如直接得到系统上运行的浏览器当前正在进行传输的地址和内容,不管这个浏览器是IE,还是Opera或Firefox,因为LSP是直接从Winsock获取信息的,即使不用微软生产的汽车,至少你这辆汽车一直是在微软建造的公路上跑的吧。

  LSP用在正途上可以方便程序员们编写监视系统网络通讯情况的Sniffer,可是现在常见的LSP都被用于浏览器劫持,使用户又多了个噩梦。

  五. 亡羊补牢,还是居安思危?

  也许大部分家庭用户都是在经历过一次入侵或中毒事件后才知道安全防范的重要性的,能亡羊补牢当然是好事,但是如果能对自己的要求提高一点,做到未雨绸缪岂不是更好?我们总是依赖于别人的技术,依赖于模式化的杀毒手段,但那些始终都是别人的东西,控制权不能掌握在自己手上,这并不是很好的事情,也许,该是暂时放弃游戏挂级、搜集明星电影,好好研读一下安全方面和系统原理书籍的时候了,否则在这个不安全的网络中,我们随时可能会迷失自己。

  可能有人会想,小金又在发感慨了。也许是的,因为清除“浏览器劫持”一般都需要手工进行,虽然现在已经有了多个检测浏览器劫持的工具如HijackThis、Browser Hijack Recover等软件面世,但是如果你抱着和以往使用杀毒工具那样“一开扫描就安枕无忧”想法的话,你会发现自己真的会迷失了,由于BHO的特殊性(别忘记,它是合法的),这些工具只会把系统的进程、BHO项目、启动项、LSP等需要有一定技术基础方能理解的东西显示给你,然后由你自己决定IE的明天,如果你不曾重视过安全技术,那么就会觉得这些工具如同另一种折磨你的病毒了。

  学,还是不学?这是个必须考虑的问题……

3 月 142006
 

做自己的救世主——系统安全保卫战
文章整理:网络技术论坛   作者:小金   发布时间:2006-02-20

  一. 谁是救世主

  相信看过《黑客帝国》系列的朋友都不会对主人公尼奥感到陌生,这位闯入虚拟世界的程序员一次又一次演绎了“救世主”的角色,保护了城市居民,其形象早已深入人心。而离开电影后,我们广大的计算机用户要面对的又是另一种亦真亦假的数字虚拟世界——网络,这里同样潜伏着许多危险,同样存在“黑客帝国”,但这里却没有尼奥这个人的存在,我们能看到的,只有形形色色的安全厂商和他们所提供的安全工具,除此之外,似乎已经没有别的选择。

  于是乎,许多用户把各种安全工具看成了这个世界中的“救世主”,我们看到许多关于安全工具的广告,我们购买市面上流行的防病毒软件,我们在听闻每周一次“新病毒预警”时赶紧升级病毒特征库,我们每周都对电脑进行一次漫长的病毒扫描……许多人都这样做,许多人不得不这样做,因为我们把一切都交给杀毒工具了,我们什么都不需要做了,我们只管肆无忌弹的上网聊天看电影下软件,因为我们有杀毒工具,这些工具都具备一个“实时监测”的功能,它每时每刻都会检查我们刚下载的文件,我们感到自己很安全,我们以为这就是网络中的防御。

  然而,事实真的如此美好吗?依稀记得有一句话好像是这么说的,“无论你做什么事情,你都不可避免要付出一定的代价”,在我们安然自得的享受由杀毒工具带来的安全防御的同时,我们也在付出相应的代价。为什么呢?因为杀毒工具是一套在系统启动的时候就开始运行直到关机或者用户退出它的时候才会停止运行的程序,它们的检测和防御机制的效率是不能和尼奥相比的。举个简单例子,学过编程的人大概都知道,象棋程序是最难写得完美的,因为象棋的走法从来都没有一个固定的模式,我们能创造出许多花样,但是程序不能,它只能按照有限的判断机制去决定每一步棋怎么走,这就是为什么如今的许多象棋程序看起来像个傻瓜的原因。有人也许会说,做一个强大的象棋程序把尽可能遇到的走法都写进去就可以了,这个象棋程序必然无敌。这样是可行的,但是由此带来的代价就是每个和它下棋的人可能都要花一辈子的时间了,因为程序在每走一步棋之前都要把所有尽可能遇到的情况都“思考”一遍,这样是要付出时间作为代价的,如果要缩短时间,就要让程序在同一时刻思考多种走法,但着时候,代价就变成庞大的系统资源消耗了——你能忍受么?

  同样的缺陷正在杀毒软件身上发生,我们知道,大部分杀毒软件是采用“特征码”技术去搜索病毒的,就是说,杀毒软件引擎读取一个程序或文件内容,并与自身数据库里储存的已被确认为病毒程序体内某段特定代码进行匹配,一旦两者相同,杀毒软件就“确认”此文件为病毒。随着病毒家族的庞大,这个数据库体积的增长也到了不可忽视的地步,加载的速度也就慢了。而且数据库每增加一个病毒特征码,杀毒引擎的判断分支就要增多一条,相应的时间也会延长,为了避免出现扫描一个文件需要半小时的尴尬情况,杀毒软件会采用各种提高匹配速度的方案,但这些方案无一例外都要疯狂剥削用户的系统资源,如果一台电脑的配置并不是很高,那么在用户查毒的时候,他基本上已经不能正常做其他工作了,找个电视台慢慢看连续剧吧,这就是尼奥的代价。

  那么,谁才是我们的救世主?答案就是——你自己。能信任的人永远只有自己,只要肯努力,每个人都可以做尼奥,不过这也是有代价的,因为它把系统资源的消耗转变为脑子的消耗,把判断分支和经验写入脑子里,在处理分支的效率上,人永远比程序要灵活,而且这样一来就不会出现依赖的恶性循环了,离开了杀毒软件,我们要学会靠自己来保护自己不被这个虚拟世界伤害到。现在,就让我们来做自己的救世主吧。

  二. 做自己的救世主

  小时候曾经看过一个故事《另一种侵略》,被人类打败的宇宙侵略者送给人类一种水晶,只要人类拿起它想一种物品,这个物品就会出现在自己面前,于是每个人都开始沉浸于无尽的享受中,再也没人去钻研科技国防了,几十年后,人类开始出现退化现象。这时候,宇宙侵略者又来访问地球了,这次它们只用了一条条鞭子就征服了地球,在最后一个人类被驱逐进囚笼之前,他回头含糊不清的说了句什么话——连他的舌头都退化得差不多了,也许他是说:“地球完了。”

  以上的故事或许只是虚无的幻想,但类似的行为却正在当代发生,如果一个用户怀疑自己的电脑感染了后门,他的第一个反应大概会是打开杀毒工具。故事里的人类太依赖水晶的魔力,现实中的我们太依赖杀毒软件的方便快捷!也许有人会反对,既然能使用工具方便快捷的保护计算机安全,我又何必自寻烦恼学习安全防御?会这样想的用户没有想到网络的复杂,能闯进计算机的“客人”并非就是在各大安全工具厂商通缉名单上的成员,因为网络中还流传着一部分小规模使用而且没有被公开的“私人后门”(例如大部分DDoS后门工具其实都是自己写自己用的),有能力的人都可以自己写“私人后门”,然后通过多种途径放到别人的计算机上执行。这时候,“病毒库特征码”技术的局限性就开始显露了,被感染了“私人后门”的用户偶尔会察觉到计算机异常,然后他会开始查毒,结果因为渗透进系统的后门程序并没有在病毒特征库里“登记”过,杀毒软件就认不出它了,用户只能在浪费大量时间后看着杀毒软件报告的“没有发现病毒”消息继续“享受”被入侵的感觉。这个事实可笑吗?我们只能在自己信赖的尼奥面前被敌人杀死——甚至这个尼奥也不复存在了,如果后门能把它踢出内存并删除掉的话。

  还是那句话,能信任的人只有自己,更何况这是网络。所以,我们不能再战战兢兢的躲在掩体里等待救世主消灭所有敌人了,我们要做自己的救世主!

  三. 捕获不请自来的“客人”

  “600型机器人包裹的是橡胶外皮,很容易被认出来,但现在的101型机器人是生化技术制造的,有真实皮肤,会呼吸、流血、甚至口臭,一切都和人类一样,直到它开始攻击,你才能知道它不是人类。”
  “那你们怎么办?”
  “我们用狗识别终结者。”
  ——《终结者》

  在《终结者》里,狗是唯一可以区分敌我的工具,因为它判断对方的方式并不仅仅靠眼睛——眼睛是可以被欺骗的,但是气息不能,一个机器人无论伪装得再怎么逼真,都不能具备生命体的气息,但是它能欺骗人类的视觉和听觉,这就足够了。

  后门技术从诞生到现在,已经发展了好几代,对自身的伪装技术也越来越成熟了,从最初的启动项结合隐藏进程方式,到最新的Ring0驱动方式,我们越来越难发现这些“客人”的痕迹,当它开始破坏的时候,已经来不及做补救措施了,所以,我们需要一种可以嗅出后门气息的“狗”。

  1.准备工作

  在进行一切工作之前,用户需要对系统有点了解,例如注册表、启动项、服务、常见的程序和进程名等,这是学习手工查毒最基本的要求,在初期可以多参考一些介绍系统概念的文章如到处都流传的“系统进程详解”、“WinXP系统服务简介及优化措施”等,并做一点笔记,力求日积月累尽快记住一些最常见的系统程序和相关工具的使用方法,如果过不了这个门槛,后面的工作也就无从谈起。

  首先,我们必须了解Windows系统的三大知识点:注册表(Registry)、进程(Process)和权限(Privilege)。

  “注册表”是出现在Windows 95及以后版本的一种数据库。在这之前,用户要对软硬件工作环境进行配置,就要修改一种被称为“配置设置”(INI)的文件来完成,但是由于每种设备或应用程序都得有自己的INI文件,无形中增加了管理难度,为了解决这个问题,微软开始一标准并将各种信息资源集中起来存储,最终形成了将应用程序和计算机系统配置信息容纳在一起的“注册表”,用来管理应用程序和文件的关联、硬件设备说明、状态属性以及各种状态信息和数据等,注册表维持着整个系统的正常运作。

  注册表采用一种类似文件目录的结构树来描述配置信息,最顶端的5个项目称为“根键”(ROOT_KEY),系统能识别的所有的数据都是从它们这里展开的,这5个根键分别是:

  HKEY_CLASSES_ROOT(负责各种组件注册类别和文件并联信息)
  HKEY_CURRENT_USER(当前登录用户的环境信息)
  HKEY_LOCAL_MACHINE(整个系统的公共环境信息)
  HKEY_USERS(所有用户的环境配置信息)
  HKEY_CURRENT_CONFIG(当前的配置信息)

  其中,我们主要关注的是前面三个根键里的数据,它们是后门最爱篡改的地方,分别是三个启动项目“HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun”、“HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRun”和“HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRunServices”,一般的后门都要通过修改这里加入自己的配置信息以达到跟随系统启动的目的;除此之外就是文件并联信息“HKEY_CLASSES_ROOT”,并联型后门最爱更改这里的.exe、.bat、.scr、.com等可执行文件的注册信息,让自己抢先一步运行。更多涉及到的注册表内容以后会提到,现在让我们来看看进程是什么。

  “进程”,是指一个可执行文件在运行期间请求系统在内存里开辟给它的数据信息块,系统通过控制这个数据块为运行中的程序提供数据交换和决定程序生存期限,任何程序都必须拥有至少一个进程,否则它不被系统承认。进程从某一方面而言就是可执行文件把自身从存储介质复制在内存中的映像,它通常和某个在磁盘上的文件保持着对应关系,一个完整的进程信息包括很多方面的数据,我们使用进程查看工具看到的“应用程序”选项卡包含的是进程的标题,而“进程”选项卡包含的是进程文件名、进程标识符、占用内存等,其中“进程文件名”和“进程标识符”是必须掌握的关键,“进程标识符”是系统分配给进程内存空间时指定的唯一数字,进程从载入内存到结束运行的期间里这个数字都是保持不变的,而“进程文件名”则是对应着的介质存储文件名称,根据“进程文件名”我们就可以找到最初的可执行文件位置。

  最后是“权限”,这里涉及的权限是指80386模式的Ring权限。操作系统是由内核(Kernel)和外壳(Shell)两部分组成的,内核负责一切实际的工作,包括CPU任务调度、内存分配管理、设备管理、文件操作等,外壳是基于内核提供的交互功能而存在的界面,它负责指令传递和解释。由于内核和外壳负责的任务不同,它们的处理环境也不同,因此处理器提供了多个不同的处理环境,把它们称为运行级别(Ring),Ring让程序指令能访问的计算机资源依次逐级递减,目的在于保护计算机遭受意外损害——内核运行于Ring 0级别,拥有最完全最底层的管理功能,而到了外壳部分,它只能拥有Ring 3级别,这个级别能操作的功能极少,几乎所有指令都需要传递给内核来决定能否执行,一旦发现有可能对系统造成破坏的指令传递(例如超越指定范围的内存读写),内核便返回一个“非法越权”标志,发送这个指令的程序就有可能被终止运行,这就是大部分常见的“非法操作”的由来,这样做的目的是为了保护计算机免遭破坏,如果外壳和内核的运行级别一样,用户一个不经意的点击都有可能破坏整个系统。但是现在,Ring已经屡屡被后门木马利用成为一个令人头痛的凶器。

  2.进程伪装型后门的歼灭

  最初的后门靠注册“系统服务”的方法在Win9x系统里隐藏自己的运行信息,到了NT架构里,这个方法失效了——NT家族自带的任务管理器(Task Manager,TaskMgr.exe)把所有普通进程都一视同仁的显示出来,连初级用户都能轻易发现后门运行的痕迹,于是后门制造者开始攻克心理学和障眼法,让后门进程在任务管理器里把自己标榜为“系统关键进程”,达到欺骗用户的目的。

  我们都知道,任务管理器列出的众多进程里包含着一部分“关键进程”,它们是无法通过任务管理器中止的,而且许多文章也会提到相关进程名,久而久之,我们又养成一个习惯:查看进程信息时,只要看到熟悉甚至类似的进程名就忽略不计了,仅仅去寻找不熟悉的进程名,于是后门制造者就直接利用这个心理暗角配合路径遍历法则,让后门进程显示为“smss.exe”、“svchost.exe”、“lsass.exe”、“csrss.exe”、“winlogon.exe”等关键进程名就欺骗了用户和任务管理器。

  在这种情况下,系统自己的任务管理器已经不能信任了,因为它遗漏了最重要的路径信息,后门就利用了这一点——它可以把自己伪装成svchost.exe放到Windows目录下,然后在注册表启动项里加上不带路径信息的“svchost.exe”信息,系统在根据目录遍历法则一层层深入寻找svchost.exe时会在Windows目录里发现并执行它,而真正的关键进程svchost.exe是在SYSTEM32里的,而且它也必须通过“服务管理器”(Service Control Manager,SCM)加载,于是任务管理器会显示多个svchost.exe进程,但是由于缺乏路径指示,我们根本不知道系统已经多了一个假的svchost.exe。即使我们发现了它是假的,也无法用任务管理器终止它的运行,因为任务管理器只是简单的判断了文件名就认为它是“关键进程”了,自然不会让你终止。类似的后门伪装文件名还有“SYSTEM
undll32.exe”、“SYSTEM32
undll.exe”(NT架构里根本没有rundll.exe这个程序)、“SYSTEMservices.exe”等,要发现并歼灭这些后门,除了要求我们对常见的系统关键进程有所了解以外,还需要第三方提供的扩展任务管理器协助,例如Windows优化大师携带的进程查看器,用它便可迅速发现路径不对的“假兄弟”。

  其实最迅速的查找方法是运行“系统配置实用程序”(MSCONFIG.EXE),切换到“启动项”,如果在这里发现了“系统关键程序”的信息,那它一定是假的。

  3.服务欺骗型后门的战役  

  Windows的任务管理器不可终止两种程序的运行:一种是关键进程,另一种是通过服务管理器SCM启动的系统服务程序(NT-Service),所以一部分后门制造者设法把后门做成服务形式,让SCM直接帮助启动服务进程,不再借用注册表启动项加载,这样即使是对注册表启动项有一定了解的用户也难以发现异常,而且就算他想终止任务管理器里显示的奇怪进程,也会被拒绝,如果用户对服务管理器的了解不深,那他将会在眼花缭乱的服务面前变得束手无策。

  这时候,我们又需要请“系统配置实用程序”出山了,切换到“服务”选项卡,把“隐藏所有Microsoft服务”,这里就只显示非微软开发的普通服务程序列表了,包括服务欺骗型后门的服务项,一般它会包含欺骗性质的字符或者伪装成某厂商的服务名,如“Rising Virus Monitor”(瑞星监控)、“Macromedia License”等,记住这里显示的列表名称,接着运行“服务管理器”(Services.msc)找到对应的项目,看看属性的文件和路径是不是真的,如果你并没有安装KAV、MCAFEE这些杀毒软件而SCM里却找到对应项目的话,它就是狡猾的后门没错了。一些间谍软件还会自作主张的把自己命名为“Windows Print Controller”,简直就是无视系统自身的“Print Spooler”服务。

  找到这类后门后,不要急着终止它的运行,既然后门作者知道SCM能直接停止它们,就必然会做一些复活措施,所以我们必须先把后门服务的“启动类型”设置为“禁止”,然后重启一次确保后门程序无法跟随系统启动,这时候才能开始清理后门。其中文件的路径信息SCM已经提供给我们了,直接在磁盘上找到删除即可,但是服务项目不能直接用SCM删除,要删除这个残留的服务项,首先要对系统服务有个最初的概念。

  官方对系统服务的定义如下:

  在NT架构系统中,服务是指执行指定系统功能的程序、例程或进程,以便支持其他程序,尤其是底层(接近硬件)程序。通过网络提供服务时,服务可以在Active Directory中发布,从而促进了以服务为中心的管理和使用。服务是一种应用程序类型,它在后台运行。服务应用程序通常可以在本地和通过网络为用户提供一些功能,例如客户端/服务器应用程序、Web服务器、数据库服务器以及其他基于服务器的应用程序。 既然服务自身也是独立出来的程序,它就必须有一个加载的入口,我们可以把这个入口理解为第二个启动项,这个入口是由SCM负责的,无论是什么身份的用户进入系统,SCM启动服务的位置都固定在注册表的HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices分支里,所以只要找这个分支就可以发现所有服务——也许你会说,这里显示的名字似乎都毫无意义,我怎么知道哪个是我正在找的?其实很简单,我们回到SCM,查看一个服务的属性,例如“DNS Client”服务,它的属性里写着“显示名称:DNS Client 服务名称:Dnscache”,现在回到注册表分支,查找“Dnscache”,就会看到它是CurrentControlSet ServicesDnscache,这就是我们在SCM里看到的“DNS Client”服务,如果你删除掉“Dnscache”项目,那么整个“DNS Client”服务也就消失了。以此类推,很快就可以清理掉服务欺骗型后门。

  4.最艰难的寻找:Ring 0后门

  随着安全技术的发展和计算机用户群的技术提高,一般的木马后门越来越难生存,于是一部分有能力的后门作者把眼光投向了系统底层——Ring 0。位于Ring 0层的是系统核心模块和各种驱动程序模块,所以位于这一层的木马也是以驱动的形式生存的,而不是一般的EXE。后门作者把后门写成符合WDM规范(Windows Driver Model)的驱动程序模块,把自身添加进注册表的驱动程序加载入口,便实现了“无启动项”运行。一般的进程查看器都只能枚举可执行文件EXE的信息,所以通过驱动模块和执行文件结合的后门程序便得以生存下来,由于它运行在Ring 0级别,拥有与系统核心同等级的权限,因此它可以更轻易的把自己隐藏起来,无论是进程信息还是文件体,甚至通讯的端口和流量也能被隐藏起来,在如此强大的隐藏技术面前,无论是任务管理器还是系统配置实用程序,甚至系统自带的注册表工具都失去了效果,我们不得不借助于更强大的第三方工具。幸好,一部分持有编写Ring 0程序能力的人并没有加入Ring 0木马的阵营,而是把技术用到了安全检查方面,于是我们有了IceSword、RootkitRevealer、knlsc等优秀的检测工具。

  一般的进程工具是运行在Ring 3级别的,它们读取的依据来自Ring 0层,这些数据是可以被运行于Ring 0级别的木马修改的,所以它们根本无法知木马程序信息,而IceSword等检测工具不同,它们和Ring 0木马一样,也是通过驱动的模式进入Ring 0层工作的,不再需要从Ring 0层获取信息,所以它们能得到未被木马篡改的原始链表数据,例如最原始的进程信息,它是不能被更改的,如果木马把它自身从原始进程信息里删除,就意味着它要自我终结了。所以一旦有进程工具从 Ring 0层直接读取了原始数据,再把这个数据和Ring 3层获取到的进程列表比较一下,就能迅速发现哪个是拼命隐藏自身的木马程序了。很巧合的是,驱动程序和系统服务共享同一个加载入口,即HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices,只要查找相应的Ring 0木马文件名,就会发现它,删除掉注册表的加载数据后重新启动计算机,再删除掉木马文件就可以解决了。

  5.清理不受欢迎的附属产品

  “21世纪什么最贵?人才!”——《天下无贼》

  黎叔说的这句话固然无可厚非,只是他大概不知道,在21世纪的网络上,网民最恨的就是一部分利用歪点子制造“广告软件”(Adware)和“流氓/间谍软件”(Spyware)的“人才”。如今的网络已经被这些不受欢迎的软件使用捆绑战术给占领了,随便下载个共享工具,有点良心的会在安装界面里默认打上“安装附属产品”的勾,更多的则是一口气给你把所有附属工具都装上了,许多用户在安装了一些共享软件后,突然发现浏览器多了一堆这个条那个霸的,想要卸载时却发现所谓的卸载程序只是个把用户当小孩来哄的界面!可以说,这些恶意软件才是当今网络最令人厌恶的东西,“流氓软件猛于后门也”!

  与各种后门木马的意图不同,恶意捆绑软件的立场是自家公司的利益,它们一般不会携带破坏性质的代码(但不代表没有),通常还会拥有一些号称“服务大众”的功能,这些功能或许可以让它得到一些用户的拥戴,但是这种光环并不能掩盖其“服务大众”背后的暴利黑幕。首先,恶意捆绑软件可以轻易收集到用户信息,任何一台被安装了“X手X霸X猪X搜”的计算机都不再与“个人隐私”这个词语有缘。其次,恶意捆绑软件可以借用广大计算机作为它无偿弹出公司广告的殖民地,如果每条广告都能给该软件背后的公司带来一点利润,那么一年下来这个公司就已经从广大用户群的身上搜刮到一大笔可观的钱财了。天下并没有免费的午餐,在你使用这些捆绑软件提供的“快捷服务”时,你就已经付出了代价。

  最初,捆绑软件都比较单纯,仅仅使用BHO技术(Browser Helper Objects,浏览器辅助模块)把自己安家在浏览器上而已,但是现在,也许因为被用户清理得多了,一些公司恼羞成怒把ring 0级别的木马技术应用在了自家产品上,配合一种令人厌恶的强制安装技术,再利用金钱开路,让一些网站加载自己的产品,只要用户浏览某个页面,就会不知不觉被安装上一堆BHO,这已经不是一般的强盗行为了,而由于商业关系,一般的杀毒程序是不能去查杀它们的,即使它们与木马后门的特征无异,这时候,用户就要靠自己来了。

  首先,浏览器的BHO加载项目是固定在系统目录的“Downloaded Program Files”文件夹里的,对于在浏览器上出现的栏目,只要简单的在这个文件夹里选中删除即可,但是其余残留文件就只能自行寻找了,由于制作恶意捆绑BHO的公司太多,文件存放位置也不同,这里无法给出很全面的删除方法,所以只能推荐两个工具:Upiea和RogueCleaner,使用它们即可快速卸载掉惹人讨厌的附属产品。

  四. 生存法则

  在森林里,鹿妈妈会告小鹿不要去到太偏僻或者太远的地方玩耍,因为那里可能隐藏着恶狼。在网络上有更多的恶狼存在,但是却没有人能收到有效的警告。要成为自己的救世主,必须把那一份多余的好奇心收起来,直到已经掌握了清理“不速之客”的技术以后,方可放开好奇心到处看看,否则一不小心被自己的好奇心弄得系统出毛病了,又没法判断清理,最终恐怕还是会回到依赖杀毒软件的用户群去。最后还有一句恒古不变的真理:网络充满风险,勤打系统补丁。

3 月 132006
 

今天,Google发布了一款免费的在线网页创建工具,用户可以通过此工具可以在短短数分钟内创建自己的网页或出版物,且不受任何时间和地点的限制,只要能上网就能制作出精美的网页,Google将此工具命名为Google Page Creator,地址为http://pages.google.com ,目前尚处于公开测试阶段。

除免费提供制作工具之外,Google还为每一位Gmail用户配备了100M的网页存储空间,用户在使用Google Page Creator制作页面时,仅通过浏览器就能完成页面的制作、图片上传、发布等所有工序,无需安装任何桌面软件。Google Page Creator里内置了很多网页模板,用户可以随意选择,同时,也支持通过HTML的方式创建和修改网页、上传图片及网页元素的整合管理,在页面制作完成后还可以选择发布到互联网或是发送给朋友,而所有这一切对用户来说都是完全免费的。

业界一直猜测Google会对桌面办公软件有一次革命性的变化,现在终于看到相关的产品诞生了。当前软件互联网化趋势越来越明显的环境,给了Google们创造一个挑战和超越微软的机会,大家都相信Google不会放弃这一大好机会,而巧合的是Google Page Creator的推出距离微软宣布Office 2007在线战略仅仅几天时间。从Google Page Creator本身看,Microsoft Office的很多元素已经包含于其中,甚至包含很多用户的使用习惯都融入里面,算是Google对在线Office的一个尝试。而这个尝试对于用户而言,就等于拥有了免费的在线FrontPage,那么,接下来的免费的在线Word、在线Excel离我们还遥远吗?