彻底保护你的网站不受RDS攻击的威胁
[ 2007-03-25 02:39:41 | 作者: sun ]
最迅速和最彻底的取消对RDS的支持。(但是如果你确实需要RDS,那么你最好往下读)
----------------------------------------------------------------------
-
----[ 1. 问题
RDS攻击不是一个简单的问题,虽然IIS 4.0存在许多各种各样的安全漏洞,
但是微软从来没有为同一个安全漏洞发布过如此多的补丁程序,一共是发布了三个不同的补丁程序,但是RDS仍然存在问题。
所以我们需要的是真正掌握什么是RDS。然后你就会知道如何来自己修补
这个问题。这个问题从根本上说,是由于Jet 3.5允许调用VBA的shell()函数造成的。
该函数允许你执行外壳命令,具体的过程我想还是不详细介绍了。
现在的问题是,IIS 4.0默认的情况下是安装有MDAC 1.5的,它包含有RDS,
从而允许通过浏览器远程访问ODBC组件,具体的实现是通过一个位
于/msadc/msadcs.dll
的特定的dll文件来实现的。现在你应该可以明白,问题其实是由两部分组成。其实还有个“第三者”,那就是跟随RDS SDK包安装附带的例子程序组件VbBusObj,它可以允许你
饶过那些就是已经安装了微软发布的RDS补丁的情况。
下面将分别就上面三种情况做详细的解决方案描述。
----[ 2. 解决方案
问题是目前有许多种方法来解决,同时这些方法还可以被不同的组合使用。
在这里尽量描述详细。
-解决方案 #1: 移走cmd.exe (ULG推荐的补丁方法)
http://www.aviary-mag.com/News/Powerful_Exploit/ULG_Fix/ulg_fix.html
我推荐ULG的解决方法,虽然该方法仍然存在问题。因为虽然mdac.pl是使用了
cmd.exe
来实现RDS攻击的,但是,要知道
CMD.EXE并不是RDS攻击方法的唯一实现途径
-解决方案 #2: 升级MDAC 1.5 到 2.0
MDAC 2.0将Jet 3.5升级到Jet 3.52。但是仍然存在VBA shell()攻击问题(而这恰好是
RDS攻击的必要条件),并且默认情况下还是支持使用RDS的。事实上,就是你删除了RDS系统还是会重新安装的,其中一些应该注意的事情是:
* 默认的Jet引擎变成了3.52 (仍然有安全漏洞)
* 允许自定义处理 (可以解决匿名RDS使用问题)
* 生成 Microsoft.Jet.OLEDB.3.51* 提供
注意这种解决方法,它的默认设置不是非常好。你需要修改注册表来限制自定义使用RDS处理。注册表中位置是:
HKEY_LOCAL_MACHINE\Software\Microsoft\DataFactory\HandlerInfo\
Keyname: HandlerRequired
Value: DWORD:1 (safe) or 0 (unsafe)
推荐是将它的数值改成1。这其实也是使用微软提供的补丁'handsafe.exe/.reg'完成的。
现在,你可以保护你的系统不被远程RDS攻击了,但是你仍然存在被ODBC其他方式攻击的可能性,
包括Excel, Word, 和 Access木马文件等。所以这个解决方案也有一些不足。
-解决方案 #3: 升级你的MDAC 1.5 到 2.1
MDAC 2.1 将Jet 3.5 升级到Jet 4.0引擎,这个引擎不存在RDS攻击安全漏洞。
但是同时也印证了一个亘古不变的法则,东西越安全它的兼容性能也就越差,
由于3.5和4.0之间存在太大的差异,许多人不愿意为了这些兼容性能而升级。
因为一旦升级后许多现在正在使用的程序将完全不能够使用。具体细节是:
* 默认的数据库引擎为Jet 4.0 (没有这个安全漏洞)
* 支持自定义处理 (可以禁止匿名使用RDS)
但是,自定义处理默认的情况下并不是使用的。你同样需要象上面一样来修改注册表。
-解决方案 #4: 升级你的MDAC 1.5到2.0,然后再到2.1
现在,如果你是一个优秀的管理员,你应该保证你一直升级你的系统。如果你经常升级,就应该服从按顺序升级的次序。虽然同样你需要修改注册表使
能'HandlerRequired'
,同样由于使用了2.1的Jet 4.0(没有漏洞)作为默认的数据库引擎。但是由于你是通过
从2。0的升级,所以你将拥有Microsoft.Jet.OLEDB.3.51.
这意味着你的运用程序(包括RDS)对数据库的调用情况都能够被日志记录下来。而那些
老版本的OLEDB是实现不了的。
你应该从注册表中将老的hooks/providers数值去掉。一个方法是删除下面的键值入口:
HKEY_CLASSES_ROOT\Microsoft.Jet.OLEDB.3.51
HKEY_CLASSES_ROOT\Microsoft.Jet.OLEDB.3.51Errors
但是,你仍然需要面对的问题是兼容性能问题。
-解决方案 #5: 安装JetCopkg.exe (见微软发布的安全公告MS99-030)
JetCopkg.exe是一个修改过的Jet 3.5引擎,它增强了更多的安全特性来防止被攻击。
它主要是对注册表中下列键值的修改:
HKEY_LOCAL_MACHINE\Software\Microsoft\Jet\3.5\engines\SandboxMode
它的值如下:
0 禁止一切
1 使能访问ACCESS,但是禁止其它
2 禁止访问ACCESS,但是使能其他
3 使能一切
(详细的解释可以参考
http://support.microsoft.com/support/kb/articles/q239/1/04.asp)
值得注意的是,默认的允许修改键值权限是不安全的。你必须只能够让有权限的
帐号才能够修改该键值。不然该键值会带来很多安全上的隐患。切记,切记。
只要将键值该成2或则3就可以将一切对RDS的攻击拒绝了。所以,这个解决方案是最好的。
并且由于它仍然使用的是Jet 3.5引擎,所以你不用担心兼容性能的问题。并且同时你还是可以
使用RDS的,虽然已经不能够再使用RDS进行攻击了,但是问题是匿名使用RDS还是会将你的数据库中的信息给
泄露出去的。所以你需要对RDS有较深入的编程基础,我可以建议你禁止使用RDS或则将ODBC升级到
MDAC 2.0,这样你就可以只让有权限的人才能够使用RDS,而拒绝匿名用户使用。
-解决方案 #6: 删除/禁止RDS功能
就是我在本文最开始的位置提到的方法,删除下面这个文件:
?:\Program Files\Common Files\System\Msadc\msadcs.dll
就是它提供了RDS的调用接口。下面是一些更详细彻底清除RDS(如果你确信你的网站不需要该功能的话)的步骤:
* 从IIS控制台删除/msadc虚拟目录
* 删除下面的注册表键值:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W3SVC\Parameters\
ADCLaunch
* 删除下面这个文件目录
?:\Program Files\Common Files\System\Msadc
----[ 3. 情况
-情况 #1: 我确实需要RDS
首先你需要升级你的系统到MDAC 2.0。记住别忘了安装JetCopkg,或者你直接升级到MDAC 2.1.
确保你修改了'HandlerRequired'注册表中的数值,解释见上。同时确保你已经删除了所有的
RDS的例子程序。同时取消匿名帐号对/msadc目录的访问权限,而使用自定义帐号来进行处理。
详细的步骤可以参考:
http://www.microsoft.com/Data/ado/rds/custhand.htm
-情况 #2:我还是想使用那些例子该怎么办?
那么唯一的方法就是你必须禁止匿名帐号对RDS的访问权限。但是例子中的
VbBusObjcls会跳过自定义
访问的限制,如果例子是安装在
?:\Program Files\Common Files\System\Msadc\Samples
的话,那么你应该按照下面的步骤来解决:
*删除下面这个目录下所有的东西
?:\Progam Files\Comman Files\System\Msadc\Samples
* 删除注册表中的键值
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W3SVC\Parameters\
ADCLaunch\VbBusObj.VbBusObjCls
----------------------------------------------------------------------
-
----[ 1. 问题
RDS攻击不是一个简单的问题,虽然IIS 4.0存在许多各种各样的安全漏洞,
但是微软从来没有为同一个安全漏洞发布过如此多的补丁程序,一共是发布了三个不同的补丁程序,但是RDS仍然存在问题。
所以我们需要的是真正掌握什么是RDS。然后你就会知道如何来自己修补
这个问题。这个问题从根本上说,是由于Jet 3.5允许调用VBA的shell()函数造成的。
该函数允许你执行外壳命令,具体的过程我想还是不详细介绍了。
现在的问题是,IIS 4.0默认的情况下是安装有MDAC 1.5的,它包含有RDS,
从而允许通过浏览器远程访问ODBC组件,具体的实现是通过一个位
于/msadc/msadcs.dll
的特定的dll文件来实现的。现在你应该可以明白,问题其实是由两部分组成。其实还有个“第三者”,那就是跟随RDS SDK包安装附带的例子程序组件VbBusObj,它可以允许你
饶过那些就是已经安装了微软发布的RDS补丁的情况。
下面将分别就上面三种情况做详细的解决方案描述。
----[ 2. 解决方案
问题是目前有许多种方法来解决,同时这些方法还可以被不同的组合使用。
在这里尽量描述详细。
-解决方案 #1: 移走cmd.exe (ULG推荐的补丁方法)
http://www.aviary-mag.com/News/Powerful_Exploit/ULG_Fix/ulg_fix.html
我推荐ULG的解决方法,虽然该方法仍然存在问题。因为虽然mdac.pl是使用了
cmd.exe
来实现RDS攻击的,但是,要知道
CMD.EXE并不是RDS攻击方法的唯一实现途径
-解决方案 #2: 升级MDAC 1.5 到 2.0
MDAC 2.0将Jet 3.5升级到Jet 3.52。但是仍然存在VBA shell()攻击问题(而这恰好是
RDS攻击的必要条件),并且默认情况下还是支持使用RDS的。事实上,就是你删除了RDS系统还是会重新安装的,其中一些应该注意的事情是:
* 默认的Jet引擎变成了3.52 (仍然有安全漏洞)
* 允许自定义处理 (可以解决匿名RDS使用问题)
* 生成 Microsoft.Jet.OLEDB.3.51* 提供
注意这种解决方法,它的默认设置不是非常好。你需要修改注册表来限制自定义使用RDS处理。注册表中位置是:
HKEY_LOCAL_MACHINE\Software\Microsoft\DataFactory\HandlerInfo\
Keyname: HandlerRequired
Value: DWORD:1 (safe) or 0 (unsafe)
推荐是将它的数值改成1。这其实也是使用微软提供的补丁'handsafe.exe/.reg'完成的。
现在,你可以保护你的系统不被远程RDS攻击了,但是你仍然存在被ODBC其他方式攻击的可能性,
包括Excel, Word, 和 Access木马文件等。所以这个解决方案也有一些不足。
-解决方案 #3: 升级你的MDAC 1.5 到 2.1
MDAC 2.1 将Jet 3.5 升级到Jet 4.0引擎,这个引擎不存在RDS攻击安全漏洞。
但是同时也印证了一个亘古不变的法则,东西越安全它的兼容性能也就越差,
由于3.5和4.0之间存在太大的差异,许多人不愿意为了这些兼容性能而升级。
因为一旦升级后许多现在正在使用的程序将完全不能够使用。具体细节是:
* 默认的数据库引擎为Jet 4.0 (没有这个安全漏洞)
* 支持自定义处理 (可以禁止匿名使用RDS)
但是,自定义处理默认的情况下并不是使用的。你同样需要象上面一样来修改注册表。
-解决方案 #4: 升级你的MDAC 1.5到2.0,然后再到2.1
现在,如果你是一个优秀的管理员,你应该保证你一直升级你的系统。如果你经常升级,就应该服从按顺序升级的次序。虽然同样你需要修改注册表使
能'HandlerRequired'
,同样由于使用了2.1的Jet 4.0(没有漏洞)作为默认的数据库引擎。但是由于你是通过
从2。0的升级,所以你将拥有Microsoft.Jet.OLEDB.3.51.
这意味着你的运用程序(包括RDS)对数据库的调用情况都能够被日志记录下来。而那些
老版本的OLEDB是实现不了的。
你应该从注册表中将老的hooks/providers数值去掉。一个方法是删除下面的键值入口:
HKEY_CLASSES_ROOT\Microsoft.Jet.OLEDB.3.51
HKEY_CLASSES_ROOT\Microsoft.Jet.OLEDB.3.51Errors
但是,你仍然需要面对的问题是兼容性能问题。
-解决方案 #5: 安装JetCopkg.exe (见微软发布的安全公告MS99-030)
JetCopkg.exe是一个修改过的Jet 3.5引擎,它增强了更多的安全特性来防止被攻击。
它主要是对注册表中下列键值的修改:
HKEY_LOCAL_MACHINE\Software\Microsoft\Jet\3.5\engines\SandboxMode
它的值如下:
0 禁止一切
1 使能访问ACCESS,但是禁止其它
2 禁止访问ACCESS,但是使能其他
3 使能一切
(详细的解释可以参考
http://support.microsoft.com/support/kb/articles/q239/1/04.asp)
值得注意的是,默认的允许修改键值权限是不安全的。你必须只能够让有权限的
帐号才能够修改该键值。不然该键值会带来很多安全上的隐患。切记,切记。
只要将键值该成2或则3就可以将一切对RDS的攻击拒绝了。所以,这个解决方案是最好的。
并且由于它仍然使用的是Jet 3.5引擎,所以你不用担心兼容性能的问题。并且同时你还是可以
使用RDS的,虽然已经不能够再使用RDS进行攻击了,但是问题是匿名使用RDS还是会将你的数据库中的信息给
泄露出去的。所以你需要对RDS有较深入的编程基础,我可以建议你禁止使用RDS或则将ODBC升级到
MDAC 2.0,这样你就可以只让有权限的人才能够使用RDS,而拒绝匿名用户使用。
-解决方案 #6: 删除/禁止RDS功能
就是我在本文最开始的位置提到的方法,删除下面这个文件:
?:\Program Files\Common Files\System\Msadc\msadcs.dll
就是它提供了RDS的调用接口。下面是一些更详细彻底清除RDS(如果你确信你的网站不需要该功能的话)的步骤:
* 从IIS控制台删除/msadc虚拟目录
* 删除下面的注册表键值:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W3SVC\Parameters\
ADCLaunch
* 删除下面这个文件目录
?:\Program Files\Common Files\System\Msadc
----[ 3. 情况
-情况 #1: 我确实需要RDS
首先你需要升级你的系统到MDAC 2.0。记住别忘了安装JetCopkg,或者你直接升级到MDAC 2.1.
确保你修改了'HandlerRequired'注册表中的数值,解释见上。同时确保你已经删除了所有的
RDS的例子程序。同时取消匿名帐号对/msadc目录的访问权限,而使用自定义帐号来进行处理。
详细的步骤可以参考:
http://www.microsoft.com/Data/ado/rds/custhand.htm
-情况 #2:我还是想使用那些例子该怎么办?
那么唯一的方法就是你必须禁止匿名帐号对RDS的访问权限。但是例子中的
VbBusObjcls会跳过自定义
访问的限制,如果例子是安装在
?:\Program Files\Common Files\System\Msadc\Samples
的话,那么你应该按照下面的步骤来解决:
*删除下面这个目录下所有的东西
?:\Progam Files\Comman Files\System\Msadc\Samples
* 删除注册表中的键值
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W3SVC\Parameters\
ADCLaunch\VbBusObj.VbBusObjCls
"熊猫烧香"告一段落 资深黑客为"灰鸽子"支招防毒
[ 2007-03-25 02:39:29 | 作者: sun ]
黑色产业链”说引发恐慌
沸沸扬扬的“熊猫烧香”病毒事件刚刚告一段落,一个名叫“灰鸽子”的病毒及其变种再次引发恐慌。金山公司总裁雷军日前在接受媒体采访时表示,“灰鸽子”背后是一条制造、贩卖、培训病毒为一体的“黑色产业链”。雷军此言一出,立刻引发网民集体恐慌。
晨报记者昨日与上海信息化服务热线反病毒工程师汪浩取得联系,他介绍,“目前‘灰鸽子’的投诉情况尚不严重,据我们所知,金山公司发表此次言论,与金山公司网站被黑有关,瑞星、江民等杀毒软件公司并未对该软件特别重视。”据悉,从3月14日晚10时开始,不明身份黑客组成庞大的“计算机僵尸网络”,向金山毒霸官方网站进行了疯狂攻击。事发3小时之后,毒霸官网才恢复正常。
金山公司公关部黄菁昨日下午告诉晨报记者,事发后,有一不明身份男子致电金山公司,自称来自“灰鸽子工作室”,威胁金山公司程序员说“(追查)再进行下去后果自负”。随后,金山公司发表了针对远程控制软件商“灰鸽子”病毒的有关言论,该工作室随即在主页声明相关病毒与自己无关,认为金山公司言论属“公关宣传”。金山公司针对该声明,撰文《四问“灰鸽子工作室”》进行反驳。
汪浩认为,引发这次纠纷和恐慌的病毒,并非“灰鸽子工作室”的商用软件,而是黑客将相关软件改成变种病毒,对金山公司网站发动攻击。
上海网民16万元网上被盗
上海某美资软件公司总经理蔡中3月10日发现,自己的网上银行账户中16万余元人民币不翼而飞。经查,被盗的款项全部被转入云南的一个账户,后又被多次转账,目前已经“蒸发”在茫茫网海之中。有关部门认为,蔡中的电脑可能被人“安放”木马病毒,通过“网络后门”盗走了资金。
网络银行用户在使用网银时,均安装了银行方面提供的控件,但在“灰鸽子”等网络木马病毒泛滥的今天,控件到底能否彻底保证用户财产的安全?昨日下午,晨报记者拨通沪上一家银行信用卡服务热线,客服小姐针对这一问题的回应是:银行的安全控件并不能完全保证网银的安全,“用户需要就电脑杀毒软件安装的相关问题咨询技术人员,保证自己的电脑不被病毒感染,否则就可能被人盗窃财产。”
客服小姐介绍,如果客户财产被黑客盗走,公司会对资金去向进行查证,如果确定是因为病毒盗号原因造成用户财产损失,“会给予用户一定程度补偿”。她没有透露具体的补偿金额比例。
黑客描述“灰鸽子”的厉害
昨日傍晚,资深黑客“冰刀”面对晨报记者,解析了“灰鸽子”之类木马软件的使用方法。“我曾经看过‘灰鸽子’的部分代码,这个软件在目前基本算是最厉害的木马程序,其设计已经到了‘所见即所得’的水平,与最初的一边‘黑’别人,一边还要输代码的木马程序有很大不同。”
“冰刀”演示说,“灰鸽子”客户端(黑客使用端)界面的主要内容有远程文件、控制命令、注册表、命令广播等部分,黑客可以每过一段时间就扫描网上的IP地址,看有多少电脑已经感染了“灰鸽子”木马程序,然后就可以实现远程控制功能。“几乎就像在本地使用别人家的电脑一样,可以实现复制、粘贴、修改、删除等许多功能。我在本地可以看到被感染电脑的屏幕,并操纵对方的QQ程序。有一次我关掉了对方的QQ,对方居然又打开了QQ并输入密码,此时他的密码立刻被我安装的键盘记录软件传了过来……用同样的方法,可以盗取用户的网络银行账号等信息。”
“冰刀”经历了网络木马病毒的全部发展进程,“目前的木马程序已经比最初厉害了很多,而且种类繁多,只要一种病毒开放了代码,很快就会被其他黑客修改成变种,最后变得不可收拾。这种情况的一个重要原因,就是各大院校学程序设计的毕业生越来越多,有些年轻人的一大兴趣就是黑别人的机器!”
[黑客忠告]
多种措施防御“灰鸽子”
黑客“冰刀”介绍,用户加强安全防范意识,必须了解病毒传播机理。他针对“灰鸽子”的传播方式,向晨报读者提出了几点防御木马建议。
●操作系统打补丁
由于WINDOWSXP等操作系统存在许多漏洞,很容易被木马发布者利用,因此,用户必须及时下载操作系统补丁,这可以有效防范“灰鸽子”等木马病毒。
●对杀毒软件进行科学搭配
在目前的网络环境下,一种杀毒软件往往不能彻底防御网络入侵。需要科学搭配杀毒软件,目前比较有效的防毒软件搭配是卡巴斯基+360安全卫士。
●调整IE选项
由于目前许多病毒通过IE浏览器的临时文件传播,应该把IE“internet选项”的安全、隐私防御级别调到最高。
●提高防范意识
用户最好学习一定的计算机知识,并以此为基础提高防范意识。感染病毒后,鼠标出现莫明其妙的移动、机器运行缓慢、出现弹出窗口,都要引起警惕。下载程序时,如果实际下载的文件大小只有几十K,应该考虑这是否是病毒。
善于利用代码实现对 IP 的访问限制
[ 2007-03-25 02:39:14 | 作者: sun ]
这是以前用ASP写的,本想改成ASP.net的给大家,后来想大家能看懂算法就行了。IP比对的关键是IP地址的线性化,下面就是代码。
'可以进入的ip
'218.7.44.0 - 218.7.45.253
'61.180.240.0 - 61.180.240.253
'202.118.208.0 - 202.118.223.253
'
'218.7.44.0 3657903103
'218.7.45.253 3657903612
'
'61.180.240.0 1035268095
'61.180.240.253 1035268348
'
'202.118.208.0 3396784127
'202.118.223.253 3396788220
ip=request.servervariables("remote_addr")
sip=split(ip,".")
num=cint(sip(0))*256*256*256+cint(sip(1))*256*256+cint(sip(2))*256+cint(sip(3))-1
response.write(ip)
response.write("<br>")
if ((num>=3657903103 and num<=3657903612) or (num>=1035268095 and num<=1035268348)
or (num>=3396784127 and num<=3396788220)) then
response.write("抱歉,您的ip不合法!")
response.End()
else
response.write("您的ip合法")
end if
预防为主 防范“熊猫烧香”病毒的方法
[ 2007-03-25 02:39:01 | 作者: sun ]
“熊猫烧香”病毒不但可以对用户系统进行破坏,导致大量应用软件无法使用,而且还可删除扩展名为gho的所有文件,造成用户的系统备份文件丢失,从而无法进行系统恢复;同时该病毒还能终止大量反病毒软件进程,大大降低用户系统的安全性。
这几天“熊猫烧香”的变种更是表象异常活跃,近半数的网民深受其害。对于已经感染“熊猫烧香”病毒的用户,建议参考《熊猫烧香病毒专杀及手动修复方案》,下载其中的专钉工具进行查杀,也可手动查杀。技术专家还总结了以下预防措施,帮你远离“熊猫烧香”病毒的骚扰。
1、立即检查本机administrator组成员口令,一定放弃简单口令甚至空口令,安全的口令是字母数字特殊字符的组合,自己记得住,别让病毒猜到就行。
修改方法:右键单击“我的电脑”,选择管理,浏览到本地用户和组,在右边的窗中,选择具备管理员权限的用户名,单击右键,选择设置密码,输入新密码就行。
2.、利用组策略,关闭所有驱动器的自动播放功能。
步骤:单击开始,运行,输入gpedit.msc,打开组策略编辑器,浏览到计算机配置,管理模板,系统,在右边的窗格中选择关闭自动播放,该配置缺省是未配置,在下拉框中选择所有驱动器,再选取已启用,确定后关闭。最后,在开始,运行中输入gpupdate,确定后,该策略就生效了。
3、修改文件夹选项,以查看不明文件的真实属性,避免无意双击骗子程序中毒。
步骤:打开资源管理器(按windows徽标键+E),点工具菜单下文件夹选项,再点查看,在高级设置中,选择查看所有文件,取消隐藏受保护的操作系统文件,取消隐藏文件扩展名。
4、时刻保持操作系统获得最新的安全更新,建议用毒霸的漏洞扫描功能。
5、启用windows防火墙保护本地计算机。
对于已经感染“熊猫烧香”病毒的用户,建议参考《熊猫烧香病毒专杀及手动修复方案》,下载其中的专钉工具进行查杀,也可手动查杀。
对于未感染的用户,专家建议,不要登陆不良网站,及时下载微软公布的最新补丁,来避免病毒利用漏洞袭击用户的电脑,同时上网时应采用“杀毒软件+防火墙”的立体防御体系。
这几天“熊猫烧香”的变种更是表象异常活跃,近半数的网民深受其害。对于已经感染“熊猫烧香”病毒的用户,建议参考《熊猫烧香病毒专杀及手动修复方案》,下载其中的专钉工具进行查杀,也可手动查杀。技术专家还总结了以下预防措施,帮你远离“熊猫烧香”病毒的骚扰。
1、立即检查本机administrator组成员口令,一定放弃简单口令甚至空口令,安全的口令是字母数字特殊字符的组合,自己记得住,别让病毒猜到就行。
修改方法:右键单击“我的电脑”,选择管理,浏览到本地用户和组,在右边的窗中,选择具备管理员权限的用户名,单击右键,选择设置密码,输入新密码就行。
2.、利用组策略,关闭所有驱动器的自动播放功能。
步骤:单击开始,运行,输入gpedit.msc,打开组策略编辑器,浏览到计算机配置,管理模板,系统,在右边的窗格中选择关闭自动播放,该配置缺省是未配置,在下拉框中选择所有驱动器,再选取已启用,确定后关闭。最后,在开始,运行中输入gpupdate,确定后,该策略就生效了。
3、修改文件夹选项,以查看不明文件的真实属性,避免无意双击骗子程序中毒。
步骤:打开资源管理器(按windows徽标键+E),点工具菜单下文件夹选项,再点查看,在高级设置中,选择查看所有文件,取消隐藏受保护的操作系统文件,取消隐藏文件扩展名。
4、时刻保持操作系统获得最新的安全更新,建议用毒霸的漏洞扫描功能。
5、启用windows防火墙保护本地计算机。
对于已经感染“熊猫烧香”病毒的用户,建议参考《熊猫烧香病毒专杀及手动修复方案》,下载其中的专钉工具进行查杀,也可手动查杀。
对于未感染的用户,专家建议,不要登陆不良网站,及时下载微软公布的最新补丁,来避免病毒利用漏洞袭击用户的电脑,同时上网时应采用“杀毒软件+防火墙”的立体防御体系。
焚烧系统里的木马 彻底教你防杀木马
[ 2007-03-25 02:38:48 | 作者: sun ]
“我想,我们应该烧掉这个东西。”3000多年前,面对希腊人突然遗留在战场废墟上的这只巨大的木马,特洛伊王国的小王子帕里斯对他的父王说。因为他有一种不安的感觉,这个突然出现的物体会带来厄运。然而没有人听他的话,整个军队固执的把这只庞然大物作为战利品运回了城里。几天后的夜里,藏在木马里的希腊士兵从内部打开了特洛伊那坚不可摧的城门——特洛伊因此沦陷。如果帕里斯仍有灵魂存在的话,他也许会苦苦思索这个问题:如果当初我坚持把这个带来厄运的东西焚烧掉,那么特洛伊将会是怎样一种结局呢?请允许我改编情感作家姜汤的一句话:“二十一世纪的网络是木马横行的世界,人类在解决病毒战争之后,最大的困惑就是木马后门的攻防难题。”众所周知,木马(Trojan,或称后门“BackDoor”)是一种危害巨大的程序,它们让被害的计算机对着未知的入侵者敞开了大门,使得受害者的系统和数据暴露在混乱的网络世界里。和病毒一样,木马也经历了好几代的演变,使得它越藏越深,成为另一种难以揪除的寄生虫。——如果,我们趁早把木马焚烧掉呢?
认识木马
简言之,信息领域的木马,就是一种能潜伏在受害者计算机里,并且秘密开放一个甚至多个数据传输通道的远程控制程序,它由两部分组成:客户端(Client)和服务器端(Server),客户端也称为控制端。木马的传播感染其实指的就是服务器端,入侵者必须通过各种手段把服务器端程序传送给受害者运行,才能达到木马传播的目的。当服务器端被受害者计算机执行时,便将自己复制到系统目录,并把运行代码加入系统启动时会自动调用的区域里,借以达到跟随系统启动而运行,这一区域通常称为“启动项”。当木马完成这部分操作后,便进入潜伏期——偷偷开放系统端口,等待入侵者连接。到此为止,木马还只处于被特洛伊的市民拉入城内的阶段,是不会进行破坏行动的。当入侵者使用客户端连接上木马服务器端开放的端口后,特洛伊的城门就被打开了,到这里,木马的噩梦才正式开始……所以,在木马屠城的军号吹响之前,如果帕里斯及时点燃了这只庞然大物,特洛伊也许就不会消失——至少,它不会是被一只木马给毁掉的。
阻止木马进城——不同时期的木马形态与相应的系统保护
特洛伊被木马计的前提是因为特洛伊人自己把藏有希腊士兵的木马运进了城内,让木马计得以成功实施,换个角度,如果当初特洛伊人任凭木马搁在海滩上发霉发臭,或者直接焚烧了这只装载着厄运的东西,那么“特洛伊木马”将会被作为与“马奇诺防线”同样性质的著名无效战略而被列入史册,而且后世可能再也不会采用这种攻击手段。但是希腊人的木马计成功了,正如现在数以千计的现代网络木马计成功了一样。现代的希腊人——入侵者积极使用各种手段让现代的特洛伊人——受害者把那只木马程序高高兴兴的领回家去。早期的防病毒思想并不盛行,那时候的网民也比较单纯,使用网络防火墙的人也只有少数,所以那时候的入侵者可以算是幸福的,他们只需要一点简单的社会工程学手段就能把木马程序传输给对方执行,这一时期的木马种植手段(如今的普遍称谓为“下马”)基本上不需要牵涉到技术,也许唯一需要的技术就是如何配置和使用一个木马,因为那时候木马也还是个新产物而已。那时候的网民,只能依靠自己的判断和技术,才能免受或摆脱木马之害。因此,当木马技术刚在国内开始的时候,任意一个IP段都有可能存在超过40%的受害计算机开放着大门等待入侵者进攻,可以毫不夸张的说,那时候是木马的第一黄金时期,唯一美中不足的制约条件就是当时的网络速度普遍太慢了。随着时间的流逝,木马技术发展日益成熟,但网民的安全意识也普遍提高,更出现了初期的病毒防火墙概念,这个时期的入侵者必须掌握更高级的社会工程学手段和初期的入侵技术才能让对方受害了,这时期的木马虽然隐蔽性有了相对提高,但仍然是基于客户端寻找连接服务器端的模式。由于出现了病毒防火墙,网民判断和查杀木马的效率大大提高,而且大部分人也知道“人心不古”了,不再轻易接收陌生人给的程序,使得木马不再像上时期那样肆无忌弹的横行,但是因为病毒防火墙是个新兴产物,仍然有相对多的人没有安装使用,以至于许多老旧的木马依然可以横行无忌。再后来,随着网络防火墙技术诞生和病毒防火墙技术的成熟,木马作者被迫紧跟着防病毒厂商的脚步更新他们的作品以避免马儿过早“殉职”,同时由于网络防火墙技术的出现,让计算机与网络之间不再直接,尤其是网络防火墙实现的“拦截外部数据连接请求”与“审核内部程序访问网络请求”的策略,导致大部分木马纷纷失效,这时期的木马逐渐分裂成两个派别:一种依然采用客户端连接服务器端的方式,只是改为了其他传输途径,如E-MAIL、FTP等,或者在内部除掉网络防火墙,以便自己畅通无阻;另一种则改变了入侵的思维,把“客户端连接服务器端”变为“服务器端连接客户端”,再加上一点社会工程学技术,从而突破了网络防火墙的限制,也因此诞生了一种新的木马技术——“反弹型”木马。这一时期里,入侵者与受害者之间的战争终于提升到技术级别,若想保护自己,除了安装网络防火墙和病毒防火墙,以及接触网络攻防技术以外别无他法,这个“基础互动”一直保持到今天的XP时代。到了XP时代,网络速度有了质的飞跃,黑客攻防战更是越来越多的浮上水面,因为系统变了,一个专门为网络应用而诞生的操作系统,必定会存在与网络有关的缺陷。没错,WinXP相对于Win9x的弱点就是它的网络漏洞太多了,无论是利用MIME漏洞传播的信件木马,还是通过LSASS溢出而放下的木马,都能在XP系统上分到一块肉。你也许会说,Win9x同样有许多漏洞,但是为什么它没有XP的烦恼?这是因为Win9x的网络功能太弱了,几乎没有什么系统组件需要依靠网络运行!所以现在的用户,除了使用网络防火墙和病毒防火墙把自己包裹得严严实实以外,还要三天两头去微软的系统更新站点安装各种漏洞修复程序……
别让士兵们下马!——防止木马启动
话说藏在木马里的希腊士兵入城以后,并没有急着下马屠城,而是待到夜深人静之时,才出来打开了牢固的城门,为特洛伊的毁灭奏响了哀歌。而计算机内部没有人类社会的地理和时间关系,即使你的硬盘里现在就存放着100个木马程序,它们也比特洛伊海滩上那只大木马的处境好不到哪里去,因为对于操作系统来说,任何有害程序只要没有运行,它就可以等同于那些未能下马的士兵,一律视为无害。要让系统变成特洛伊城的黑夜,唯一的方法只能是启动木马的服务器端,而启动木马的最简单途径,就是通过“启动项”加载运行。任何操作系统都会在启动时自动运行一些程序,用以初始化系统环境或额外功能等,这些被允许跟随系统启动而运行的程序被放置在专门的区域里供系统启动时加载运行,这些区域就是“启动项”,不同的系统提供的“启动项”数量也不同,对于Win9x来说,它提供了至少5个“启动项”:DOS环境下的Autoexec.bat、Config.sys,Windows环境下的“启动”程序组、注册表的2个Run项和1个RunServices项,到了2000/XP系统时代,DOS环境被取消,却新增了一种称之为“服务”的启动区域,这么多的启动入口,木马自然不会放过,于是我们经常在一些计算机的启动项里发现陌生的程序名,这时候就只能交由你或者病毒防火墙来判断了,毕竟系统自身会在这里放置一些必要的初始化程序,还有一些正常工具,包括病毒防火墙和网络防火墙,它们也必须通过启动项来实现跟随系统启动。此外还有一种不需要通过启动项也能达到跟随系统启动的卑劣手法,那就是“系统路径遍历优先级欺骗”,Windows系统搜寻一个不带路径信息的文件时遵循一种“从外到里”的规则,它会由系统所在盘符的根目录开始向系统目录深处递进查找,而不是精确定位的,这就意味着,如果有两个同样名称的文件分别放在C:\和C:\Windows下,Windows会执行C:\下的程序,而不是C:\Windows下的。这样的搜寻逻辑就给入侵者提供了一个机会,木马可以把自己改为系统启动时必定会调用的某个文件名,并复制到比原文件要浅一级以上的目录里,Windows就会想当然的执行了木马程序,系统的噩梦就此拉开序幕。这种手法常被用于“internat.exe”,因为无论哪个Windows版本的启动项里,它都是没有设置路径的。要提防这种占用启动项而做到自动运行的木马,用户必须了解自己机器里所有正常的启动项信息,才能知道木马有没有混进来。至于利用系统路径漏洞的木马,则只能靠用户自己的细心了。为什么它无法根除?——文件并联型木马的查杀某些用户经常会很郁闷,自己明明已经删除了木马文件和相应的启动项,可是不知道什么时候它自己又原封不动的回来了,这还不算,更悲惨的是有时候杀掉某个木马后,系统也出了故障:所有应用程序都打不开了。这时候,如果用户对计算机技术的了解仅限于使用杀毒软件,那可只能哭哭啼啼的重装系统了!为什么会这样?难道这种木马还恶意修改了系统核心?其实答案很简单,因为这种木马修改了应用
程序(EXE文件)的并联方式。
什么是“并联方式”呢?在Windows系统里,文件的打开操作是通过注册表内相应键值指定的应用程序来执行的,这个部分位于注册表的“HKEY_CLASSES_ROOT”主键内,当系统收到一个文件名请求时,会以它的后缀名为依据在这里识别文件类型,进而调用相应的程序打开。而应用程序自身也被视为一个文件,它也属于一种文件类型,同样可以用其他方式开启,只不过Windows设置它的调用程序为“"%1" %*”,让系统内核理解为“可执行请求”,它就会为使用这种打开方式的文件创建进程,最终文件就被加载执行了,如果有另外的程序更改了这个键值,Windows就会调用那个指定的文件来开启它。一些木马程序把EXE后缀名对应的exefile类型的“打开方式”改成了“木马程序 "%1" %*”,运行程序时系统就会先为“木马程序”创建进程,把紧跟着的文件名作为参数传递给它执行,于是在我们看来程序被正常启动了。因为木马程序被作为所有EXE文件的调用程序,使得它可以长期驻留内存,每次都能恢复自身文件,所以在一般用户看来,这个木马就做到了“永生不死”。然而一旦木马程序被删除,Windows就会找不到相应的调用程序,于是正常程序就无法执行了,这就是所谓的“所有程序都无法运行”的情况来源,并不是木马更改了系统核心,更没必要因此重装整个系统。根除这种木马的最简单方法只需要查看EXE文件的打开方式被指向了什么程序,立即停止这个程序的进程,如果它还产生了其他木马文件的话,也一起停止,然后在保持注册表编辑器开启着的情况下(否则你的所有程序都会打不开了)删除掉所有木马文件,把exefile的“打开方式”项(HKEY_CLASSES_ROOT\exefile\shell\open\command)改回原来的“”%1” %*”即可。
如果删除木马前忘记把并联方式改回来,就会发现程序打不开了,这时候不要着急,如果你是Win9x用户,请使用“外壳替换大法”:重启后按F8进入启动菜单选择MS-DOS模式,把Explorer.exe随便改个名字,再把REGEDIT.EXE改名为Explorer.exe,再次重启后会发现进入Windows只剩下一个注册表编辑器了,赶快把并联方式改回来吧!重启后别忘记恢复以前的Explorer.exe。对于Win2000/XP用户而言,这个操作更简单了,只要在开机时按F8进入启动菜单,选“命令提示符的安全模式”,系统就会自动调用命令提示符界面作为外壳,直接在里面输入REGEDIT即可打开注册表编辑器!XP用户甚至不需要重启,直接在“打开方式”里浏览到CMD.EXE就能打开“命令提示符”界面运行注册表编辑器REGEDIT.EXE了。
偷梁换柱——追回被盗的系统文件
除了添加自己到启动项、路径欺骗和更改文件并联以外,一般的木马还有一种计俩可以使用,那就是替换系统文件。由于如今的操作系统都是由许多文件共同构造的,并不是所有用户都能明白系统文件夹里每个文件的作用,这就给了木马可乘之机,它们盯上了系统里那些不会危害到系统正常运行而又经常会被调用的程序文件,像输入法指示程序internat.exe、让动态链接库可以像程序一样运行的rundll32.exe等。木马先把系统原来的文件改名成只有它们自己知道的一个偏僻文件名,再把自己改名成那个被替换的文件,这样就完成了隐藏极深的感染工作,从此只要系统需要调用那个被替换的程序进行工作,木马就能继续驻留内存了。那么文件被替换会不会导致系统异常呢?只要木马没有被删除,就不会造成系统异常,因为木马在作为原来的程序而被系统启动时,会获得一个由系统传递来的运行参数,这就是系统要求该程序工作的关键所在,木马会直接把这个参数传递给被改名的程序执行,像接力比赛那样完成数据操作,这样在系统看来就是命令被正常执行了,自然不会出现异常。但是也因为这样的特性导致木马被查杀后,系统的某些命令无法传递到本该执行操作的程序中,反而让系统出错了。
要修复它其实很简单,只要记住这个木马的文件名,在删除它之后再从系统光盘复制一个“原配”文件就可以了,如果没有系统光盘,就必须通过工具追踪木马传递参数的目标程序名,再把它改回来。
结束语
木马的发展促进了安全技术的提高,而安全技术的提高又迫使木马必须往更高的级别发展,到现在木马已经形成了多个派系的共存,侦测它们的方法也不能再像以前那样简单了,例如检测异常端口的方法对于反弹木马而言是无效的,它并不在本机开放端口;就算防火墙能阻止内部未授权程序访问网络,但那只能针对TCP/UDP协议的木马,别忘记了还有ICMP后门的存在,防火墙通常不会阻止这类报文的。虽然ICMP协议的数据报文能完成的事情相对较少,但是对于一般的命令控制,它已经足够了……
蠕虫是如何通过Email、漏洞、文件共享、P2P传播?
[ 2007-03-25 02:38:34 | 作者: sun ]
蠕虫传播渠道:
1、Email
这似乎是网络中永恒的主题。简简单单的操作,就让IT世界大乱。
基本传播流程是:在宿主机器上搜集Email地址,然后向这些地址发送自身。这个过程其实很简单,病毒作者通常考虑最多的是怎样隐藏,怎样感染,怎样构造有效的Social Engineer,而不是怎样通过网络传播。这让我想起了DOS时代的病毒,其实DOS就那么点东西,但病毒考虑的不是怎样利用DOS进行感染,而是怎样加密,反跟踪。
2、Web server 漏洞
这种蠕虫,与其说是计算机病毒,倒不如说是网络漏洞的附庸。
基本传播流程是:在宿主机器上扫描网络(一般是随机产生IP),然后对每个IP进行测试,如果发现该IP上有活着的有漏洞的Server,就利用漏洞把自身传播到该IP的机器上。
这个过程要比发送mail复杂的多,但编写者重点放在怎样发包,怎样构造ShellCode。
值得一提的是,这三种颇具威力的蠕虫,都传说是出自中国人之手。
3、LAN,文件共享
这种感染方式,最简单不过了,原理上,可以把共享的磁盘当作本地磁盘一样,可以对之Copy病毒自身,或者感染其上的文件。值得注意的是,随着Internet上的文件共享的增加,现在有越来越多的蠕虫通过文件共享传播。
4、感染本地文件
由于蠕虫感染文件的复杂性,一般的蠕虫作者往往忽略了感染本地文件,结果在被感染的系统上只有孤零零的一个病毒程序。如果大量感染本地文件,我们普通用户的清除病毒工作难度将加大。
1、Email
这似乎是网络中永恒的主题。简简单单的操作,就让IT世界大乱。
基本传播流程是:在宿主机器上搜集Email地址,然后向这些地址发送自身。这个过程其实很简单,病毒作者通常考虑最多的是怎样隐藏,怎样感染,怎样构造有效的Social Engineer,而不是怎样通过网络传播。这让我想起了DOS时代的病毒,其实DOS就那么点东西,但病毒考虑的不是怎样利用DOS进行感染,而是怎样加密,反跟踪。
2、Web server 漏洞
这种蠕虫,与其说是计算机病毒,倒不如说是网络漏洞的附庸。
基本传播流程是:在宿主机器上扫描网络(一般是随机产生IP),然后对每个IP进行测试,如果发现该IP上有活着的有漏洞的Server,就利用漏洞把自身传播到该IP的机器上。
这个过程要比发送mail复杂的多,但编写者重点放在怎样发包,怎样构造ShellCode。
值得一提的是,这三种颇具威力的蠕虫,都传说是出自中国人之手。
3、LAN,文件共享
这种感染方式,最简单不过了,原理上,可以把共享的磁盘当作本地磁盘一样,可以对之Copy病毒自身,或者感染其上的文件。值得注意的是,随着Internet上的文件共享的增加,现在有越来越多的蠕虫通过文件共享传播。
4、感染本地文件
由于蠕虫感染文件的复杂性,一般的蠕虫作者往往忽略了感染本地文件,结果在被感染的系统上只有孤零零的一个病毒程序。如果大量感染本地文件,我们普通用户的清除病毒工作难度将加大。
系统安全之解决IE被恶意修改方法总结
[ 2007-03-25 02:38:17 | 作者: sun ]
【编者按:文中出于安全原因,将“http”替换为“hxxp”!】
经常听到别人说自己电脑的IE被恶意修改了,我也曾经经常遇到过,做事做的好好,突然蹦出个网页实在是郁闷到极点啊。后来我就在网上乱搜一通,简单总结了下他们的方法特在此版块发给新手门,尤其是玩黑的!大概有下面几种解决方法吧。
一、修改IE工具栏
在一般情况下,IE首页的修改可以通过IE工具栏里的“工具”-“Internet选项”-“常规”-“主页”功能模块来实现。在弹出的窗口里,用户只要在“可更改主页”的地址栏中输入自己经常使用的网址然后再点击下面的“使用当前页”按钮就可以将其设为自己的IE首页了;如果是点击了“使用默认页”则一般会使IE首页调整为微软中国公司的主页;至于“使用空白页”选项则是让IE首页显示为“about:blank”字样的空白页,这样便于输入网址。
二、修改注册表
很多情况下,由于受了恶意程序的控制,或中了木马病毒,上面的方法根本不奏效,甚至有时候,“可更改主页”的地址栏都变成了灰色,无法再进行调整;有时候,即使你把网址改回来了,再开启IE浏览器,那个恶意网址又跑回来了。 实在是头大~~如果这样的话,最通常的办法就是修改注册表文件。我们首先启动Windows的注册表编辑器,具体方法是点击Windows界面左下角的“开始”按钮,再选择“运行”,在弹出的对话框中输入“regedit”就可以进入注册表编辑器了。IE首页的注册表文件是放在:
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\Start Page
下的,而这个子键的键值就是IE首页的网址。以笔者的电脑为例,键值是hxxp://www.hao123.com,它是可以修改的,用户可以改为自己常用的网址,或是改为“about: blank”,即空白页。这样,你重启IE就可以看到效果了。如果这种方法也不能奏效,那就是因为一些病毒或是流氓软件在你的电脑里面安装了一个自运行程序,就算你通过修改注册表恢复了IE首页,但是你一重新启动电脑,这个程序就会自动运行再次篡改。这时候,我们需要对注册表文件进行更多的修改,运行“regedit”,然后依次展开
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Current Version\Run
主键,然后将其下的不知明的启动子键值删除,然后对应删除其不知明的自运行程序文件,最后从IE选项中重新设置起始页就好了。除了上面的情况外,有些IE被改了首页后,即使设置了“使用默认页”仍然无效,这是因为IE起始页的默认页也被篡改啦。对于这种情况,我们同样可以通过修改注册表来解决,运行“regedit”展开:
HKEY_LOCAL_MACHINE\Software\Microsoft\InternetExplorer\Main\Default_Page_URL
子键,然后将“Default_Page_UR”子键的键值中的那些篡改网站的网址改掉就好了,或者设置为IE的默认值。
三、使用IE修复软件
虽然修改注册表的方法十分有效,但是对于一般的电脑用户来说较为专业,而且编辑过程中也涉及到了比较多的英语。因此,我们在这里介绍大家使用一些专门的修复工具。一般来说,IE修复工具有两大类。一是商业机构提供的辅助性工具,如瑞星注册表修复工具、3721的上网助手中附带的IE修复专家、超级兔子中的IE修复工具等等,这些软件大多捆绑在商业软件或是工具软件中,有些还需要付费才能够使用。其特点是,功能强大,建议经济实力较强的用户使用。其中瑞星的注册表修复工具是可以免费单独下载的,具体的使用办法可以参考这些软件的帮助文件。还有一点就是看系统启动项在运行里输入msconfig 查看启动项,你在这里可以查到每次开机时访问的网站URL地址,还有一种是在启动栏中有一个连接到本机的连接,该连接有可能是连接到一个*.js的文件,查找时要细心,左边的选勾去掉后,再按照路径把*.JS文件删除,然后重新启动系统就可以了。
经常听到别人说自己电脑的IE被恶意修改了,我也曾经经常遇到过,做事做的好好,突然蹦出个网页实在是郁闷到极点啊。后来我就在网上乱搜一通,简单总结了下他们的方法特在此版块发给新手门,尤其是玩黑的!大概有下面几种解决方法吧。
一、修改IE工具栏
在一般情况下,IE首页的修改可以通过IE工具栏里的“工具”-“Internet选项”-“常规”-“主页”功能模块来实现。在弹出的窗口里,用户只要在“可更改主页”的地址栏中输入自己经常使用的网址然后再点击下面的“使用当前页”按钮就可以将其设为自己的IE首页了;如果是点击了“使用默认页”则一般会使IE首页调整为微软中国公司的主页;至于“使用空白页”选项则是让IE首页显示为“about:blank”字样的空白页,这样便于输入网址。
二、修改注册表
很多情况下,由于受了恶意程序的控制,或中了木马病毒,上面的方法根本不奏效,甚至有时候,“可更改主页”的地址栏都变成了灰色,无法再进行调整;有时候,即使你把网址改回来了,再开启IE浏览器,那个恶意网址又跑回来了。 实在是头大~~如果这样的话,最通常的办法就是修改注册表文件。我们首先启动Windows的注册表编辑器,具体方法是点击Windows界面左下角的“开始”按钮,再选择“运行”,在弹出的对话框中输入“regedit”就可以进入注册表编辑器了。IE首页的注册表文件是放在:
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\Start Page
下的,而这个子键的键值就是IE首页的网址。以笔者的电脑为例,键值是hxxp://www.hao123.com,它是可以修改的,用户可以改为自己常用的网址,或是改为“about: blank”,即空白页。这样,你重启IE就可以看到效果了。如果这种方法也不能奏效,那就是因为一些病毒或是流氓软件在你的电脑里面安装了一个自运行程序,就算你通过修改注册表恢复了IE首页,但是你一重新启动电脑,这个程序就会自动运行再次篡改。这时候,我们需要对注册表文件进行更多的修改,运行“regedit”,然后依次展开
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Current Version\Run
主键,然后将其下的不知明的启动子键值删除,然后对应删除其不知明的自运行程序文件,最后从IE选项中重新设置起始页就好了。除了上面的情况外,有些IE被改了首页后,即使设置了“使用默认页”仍然无效,这是因为IE起始页的默认页也被篡改啦。对于这种情况,我们同样可以通过修改注册表来解决,运行“regedit”展开:
HKEY_LOCAL_MACHINE\Software\Microsoft\InternetExplorer\Main\Default_Page_URL
子键,然后将“Default_Page_UR”子键的键值中的那些篡改网站的网址改掉就好了,或者设置为IE的默认值。
三、使用IE修复软件
虽然修改注册表的方法十分有效,但是对于一般的电脑用户来说较为专业,而且编辑过程中也涉及到了比较多的英语。因此,我们在这里介绍大家使用一些专门的修复工具。一般来说,IE修复工具有两大类。一是商业机构提供的辅助性工具,如瑞星注册表修复工具、3721的上网助手中附带的IE修复专家、超级兔子中的IE修复工具等等,这些软件大多捆绑在商业软件或是工具软件中,有些还需要付费才能够使用。其特点是,功能强大,建议经济实力较强的用户使用。其中瑞星的注册表修复工具是可以免费单独下载的,具体的使用办法可以参考这些软件的帮助文件。还有一点就是看系统启动项在运行里输入msconfig 查看启动项,你在这里可以查到每次开机时访问的网站URL地址,还有一种是在启动栏中有一个连接到本机的连接,该连接有可能是连接到一个*.js的文件,查找时要细心,左边的选勾去掉后,再按照路径把*.JS文件删除,然后重新启动系统就可以了。
教你配置Linux操作系统安全管理服务
[ 2007-03-25 02:38:01 | 作者: sun ]
任何计算机安全措施的一个重要方面是维持实际控制服务的运行。本文向你展示了在Linux操作系统的PC机上如何配置安全服务管理。
任何计算机安全措施的一个重要方面是维持实际控制服务的运行,让不必要的网络服务接受请求将提高系统的安全风险。即使这些网络服务对于服务器的某些功能是必要的也需要仔细管理,并且对其进行配置最小化不受欢迎的入侵和登录的可能性。
为Linux系统配置安全性时,使用/etc/inittab文件、runlevels和一两个服务管理“superdaemons”如inetd或xinetd直接管理服务。
inittab
/etc/inittab文件用于系统的初始化过程启动系统服务。在一个配置好的系统上,虽然它一般都不会包括很多服务,但是在某些Linux系统的默认安装中会加载很多其他服务。/etc/inittab文件内容有些模糊,它的重要之处在于让服务管理变得相对简单。
首先,可不要通过/etc/inittab文件方式向系统启动项中添加服务。
第二,不要移除/etc/inittab文件中第一个冒号之前其第一个字段是单精度型的数字,或整个登录服务的前面部分。以单精度数字开头的行可以打开TTY控制台,所有服务在它们打开之前都一一列出,甚至列出其更重要的功能。也许有些例外情况,在不改动它时是很安全的,尤其如果不确定的情况下请不要改动。
第三,/etc/inittab在导入和runlevel选择的时候用于过程管理。一般不用于正常的系统操作。
第四,在导入时由rc系统开始添加步骤,而不是init系统。如果看看/etc/inittab的内容,将会注意到登录以rc0到rc6这样的字符结束。这是初始化系统如何处理runlevels的说明。
runlevels
基于Linux操作系统的运转可以通过runlevels进行管理。不同的runlevels被定义成有不同的行为,就像Windows操作系统一样,它有正常操作模式、安全模式、在某些情况下还有DOS模式。
Runlevel 0用于关闭系统,如果软电源设置恰当,它能关闭系统电源。
Runlevel 1是单用户无网络的模式,它用于低水平的故障修复和管理操作。
Runlevel 2到Runlevel 5正常系统操作的多用户模式。Runlevel2和3是命令行模式,3有网络连接而2没有网络连接。Runlevel 5用于启动X Windows提供图形用户接口。
Runlevel 6用于系统重启,当整个init系统甚至bootloader 需要重启时采用它。
其他runlevels由系统管理员进行定义,但是“传统”UNIX系统没有此功能。这种情况下,他们不能被定义也不能被使用。
在shell处,可以输入runlevel命令找到以前的renlevel和当前runlevel。如果没有更改系统 runlevel ,命令的输出结果为大写N后面跟runlevel的数字,这里的N表示没有前runlevel,如果要更改runlevel,可以使用init命令,后面跟想要使用到的runlevel的数字。例如,输入init 6表示重启系统,或init 1 进入单用户模式。
配置runlevel的过程每一版本的情况都不同。例如,在Debian GNU/Linux系统中,位于/etc/init.d的服务脚本有来自/etc/rcN.d的路径与它们进行链接,这里的N表示需要配置的runlevel数字。以字母K开头的symlinks指示在进入runlevel时被杀死的程序,而以字母 S开头的symlinks指示在进入runlevel时被启动的程序。字母后面的数字值越大,从1到99,表示启动或杀死的时间愈靠后。
大多数基于RPM的版本都采用RedHat所用到的rc系统。比起基于Debian的系统,这一系统使用更复杂的路径结构,并且不同的基于RPM的系统之间也有很大的不同。说明书上提供了更多的关于管理runlevel的信息。
inetd
一个用于Linux后台程序管理的“superdaemon”是众所周知的inetd,它是个用于服务管理的命令行工具。终止服务很简单:首先,作为根用户用文本编辑器打开/etc/inetd.conf文件。接下来,找到文件中需要终止的服务。最后,在服务所在行的最前面添加#符号(其他还有“尖顶符”和“英镑符”),如下所示。“注释掉”这一行,因此inted以后都不会启动这一服务。
编辑之前服务登录可能是下面这样:
ident stream tcp wait identd /usr/sbin/identd identd
停止之后,服务登录变成下面这个样子:
# ident stream tcp wait identd /usr/sbin/identd identd
如果正在卸载被登录参考的后台程序,可以删除文件中的某些行——是否通过包管理器进行卸载或删除执行文件卸载(对于上面的例子是/usr/sbin/identd文件)。
编辑/etc/inetd.conf文件之后,保存它,inetd以后则可以使用更改。编辑和保存一旦完成,可以在根部输入下面的命令使更改即时生效:
kill -HUP `pidofinetd`
使用修改(保存)后的配置文件会导致inetd重启。
xinetd
另外一个称为xinetd的superdaemon比inetd更新颖更复杂,能完成更多的功能。但是对于关闭服务来说,他们的使用方法相似。
使用xinetd时,必须在/etc/xinetd.conf文件中添加一行关闭服务。如果只想简单的删除服务,必须删除好几行代码而不是一行。找到想要关闭的服务所在的那一块,在块的后面添加“disable = yes”这一行,或者删除整个块。例如,如果关闭telnet服务,需要像下面这样做。(这里的省略号代表了块的其他内容)
service telnet
{
. . .
disable = yes
}
在某些系统中,对于某些服务,服务配置并不在/etc/xinetd.conf文件中。例如,像telnet这样的服务有可能在文件/etc/xinetd.d/telnet中,改变其服务配置方法与它在/etc/xinetd.conf文件中的方法是一样的。
编辑保存了/etc/xinetd.conf文件后或者更改了服务文件后,可以输入下面的命令让修改即时生效:
kill -USR2 `pidofxinetd`
这将通知xinetd程序,使用更改后的配置。
Xinetd除了关闭或移除服务配置之外,还可以用于控制远程主机登录服务。这将通过几个机制完成:
可以为服务指定一个允许的主机。例如:可以通过在服务配置文件中添加only_from = 192.168.0.101这一行限制主机登录telnet服务。尽管使用了词语“only”,但是它只能限制主机的数目,而不仅仅只一台主机。也可以使用部分地址指定完整的网络。例如:可以使用“only_from = 192.168.0.to”表示本地Class C的任何主机都能访问这个服务。
可以在配置文件中为某个服务指定禁止的主机。例如:可以在配置文件中添加“no_access = 192.168.0.102”这一行禁止这个主机远程访问telnet服务。这个也可以使用多次而且也可以使用部分地址指定多个主机。万一某个主机满足only_from和no_access两个限制,则会权衡确定其访问权限。如果xinetd不能确定哪个限制能被应用,则系统默认更安全的选项——服务不会开启。
超越服务管理
对于安全的远程服务访问,还有更多的事情可以做。应该恰当配置防火墙保护服务免受攻击。代理服务器、通过网关服务器端口推进以及网络地址转移都能有效减少服务攻击的风险。针对安全使用,那些用于登录正在运行的服务工具也应进行配置,例如,如果使用安全shell进行远程连接而没有使用X Server时,在SSH中调低X forwarding是很重要的。直接进行安全管理是保证Linux系统安全的重要部分,但是它也只是全面安全计划的一部分。
任何计算机安全措施的一个重要方面是维持实际控制服务的运行,让不必要的网络服务接受请求将提高系统的安全风险。即使这些网络服务对于服务器的某些功能是必要的也需要仔细管理,并且对其进行配置最小化不受欢迎的入侵和登录的可能性。
为Linux系统配置安全性时,使用/etc/inittab文件、runlevels和一两个服务管理“superdaemons”如inetd或xinetd直接管理服务。
inittab
/etc/inittab文件用于系统的初始化过程启动系统服务。在一个配置好的系统上,虽然它一般都不会包括很多服务,但是在某些Linux系统的默认安装中会加载很多其他服务。/etc/inittab文件内容有些模糊,它的重要之处在于让服务管理变得相对简单。
首先,可不要通过/etc/inittab文件方式向系统启动项中添加服务。
第二,不要移除/etc/inittab文件中第一个冒号之前其第一个字段是单精度型的数字,或整个登录服务的前面部分。以单精度数字开头的行可以打开TTY控制台,所有服务在它们打开之前都一一列出,甚至列出其更重要的功能。也许有些例外情况,在不改动它时是很安全的,尤其如果不确定的情况下请不要改动。
第三,/etc/inittab在导入和runlevel选择的时候用于过程管理。一般不用于正常的系统操作。
第四,在导入时由rc系统开始添加步骤,而不是init系统。如果看看/etc/inittab的内容,将会注意到登录以rc0到rc6这样的字符结束。这是初始化系统如何处理runlevels的说明。
runlevels
基于Linux操作系统的运转可以通过runlevels进行管理。不同的runlevels被定义成有不同的行为,就像Windows操作系统一样,它有正常操作模式、安全模式、在某些情况下还有DOS模式。
Runlevel 0用于关闭系统,如果软电源设置恰当,它能关闭系统电源。
Runlevel 1是单用户无网络的模式,它用于低水平的故障修复和管理操作。
Runlevel 2到Runlevel 5正常系统操作的多用户模式。Runlevel2和3是命令行模式,3有网络连接而2没有网络连接。Runlevel 5用于启动X Windows提供图形用户接口。
Runlevel 6用于系统重启,当整个init系统甚至bootloader 需要重启时采用它。
其他runlevels由系统管理员进行定义,但是“传统”UNIX系统没有此功能。这种情况下,他们不能被定义也不能被使用。
在shell处,可以输入runlevel命令找到以前的renlevel和当前runlevel。如果没有更改系统 runlevel ,命令的输出结果为大写N后面跟runlevel的数字,这里的N表示没有前runlevel,如果要更改runlevel,可以使用init命令,后面跟想要使用到的runlevel的数字。例如,输入init 6表示重启系统,或init 1 进入单用户模式。
配置runlevel的过程每一版本的情况都不同。例如,在Debian GNU/Linux系统中,位于/etc/init.d的服务脚本有来自/etc/rcN.d的路径与它们进行链接,这里的N表示需要配置的runlevel数字。以字母K开头的symlinks指示在进入runlevel时被杀死的程序,而以字母 S开头的symlinks指示在进入runlevel时被启动的程序。字母后面的数字值越大,从1到99,表示启动或杀死的时间愈靠后。
大多数基于RPM的版本都采用RedHat所用到的rc系统。比起基于Debian的系统,这一系统使用更复杂的路径结构,并且不同的基于RPM的系统之间也有很大的不同。说明书上提供了更多的关于管理runlevel的信息。
inetd
一个用于Linux后台程序管理的“superdaemon”是众所周知的inetd,它是个用于服务管理的命令行工具。终止服务很简单:首先,作为根用户用文本编辑器打开/etc/inetd.conf文件。接下来,找到文件中需要终止的服务。最后,在服务所在行的最前面添加#符号(其他还有“尖顶符”和“英镑符”),如下所示。“注释掉”这一行,因此inted以后都不会启动这一服务。
编辑之前服务登录可能是下面这样:
ident stream tcp wait identd /usr/sbin/identd identd
停止之后,服务登录变成下面这个样子:
# ident stream tcp wait identd /usr/sbin/identd identd
如果正在卸载被登录参考的后台程序,可以删除文件中的某些行——是否通过包管理器进行卸载或删除执行文件卸载(对于上面的例子是/usr/sbin/identd文件)。
编辑/etc/inetd.conf文件之后,保存它,inetd以后则可以使用更改。编辑和保存一旦完成,可以在根部输入下面的命令使更改即时生效:
kill -HUP `pidofinetd`
使用修改(保存)后的配置文件会导致inetd重启。
xinetd
另外一个称为xinetd的superdaemon比inetd更新颖更复杂,能完成更多的功能。但是对于关闭服务来说,他们的使用方法相似。
使用xinetd时,必须在/etc/xinetd.conf文件中添加一行关闭服务。如果只想简单的删除服务,必须删除好几行代码而不是一行。找到想要关闭的服务所在的那一块,在块的后面添加“disable = yes”这一行,或者删除整个块。例如,如果关闭telnet服务,需要像下面这样做。(这里的省略号代表了块的其他内容)
service telnet
{
. . .
disable = yes
}
在某些系统中,对于某些服务,服务配置并不在/etc/xinetd.conf文件中。例如,像telnet这样的服务有可能在文件/etc/xinetd.d/telnet中,改变其服务配置方法与它在/etc/xinetd.conf文件中的方法是一样的。
编辑保存了/etc/xinetd.conf文件后或者更改了服务文件后,可以输入下面的命令让修改即时生效:
kill -USR2 `pidofxinetd`
这将通知xinetd程序,使用更改后的配置。
Xinetd除了关闭或移除服务配置之外,还可以用于控制远程主机登录服务。这将通过几个机制完成:
可以为服务指定一个允许的主机。例如:可以通过在服务配置文件中添加only_from = 192.168.0.101这一行限制主机登录telnet服务。尽管使用了词语“only”,但是它只能限制主机的数目,而不仅仅只一台主机。也可以使用部分地址指定完整的网络。例如:可以使用“only_from = 192.168.0.to”表示本地Class C的任何主机都能访问这个服务。
可以在配置文件中为某个服务指定禁止的主机。例如:可以在配置文件中添加“no_access = 192.168.0.102”这一行禁止这个主机远程访问telnet服务。这个也可以使用多次而且也可以使用部分地址指定多个主机。万一某个主机满足only_from和no_access两个限制,则会权衡确定其访问权限。如果xinetd不能确定哪个限制能被应用,则系统默认更安全的选项——服务不会开启。
超越服务管理
对于安全的远程服务访问,还有更多的事情可以做。应该恰当配置防火墙保护服务免受攻击。代理服务器、通过网关服务器端口推进以及网络地址转移都能有效减少服务攻击的风险。针对安全使用,那些用于登录正在运行的服务工具也应进行配置,例如,如果使用安全shell进行远程连接而没有使用X Server时,在SSH中调低X forwarding是很重要的。直接进行安全管理是保证Linux系统安全的重要部分,但是它也只是全面安全计划的一部分。
如何防范自己的IP被攻击
[ 2007-03-25 02:37:47 | 作者: sun ]
在正式进行各种“黑客行为”之前,黑客会采取各种手段,探测(也可以说“侦察”)对方的主机信息,以便决定使用何种最有效的方法达到自己的目的。来看看黑客是如何获知最基本的网络信息——对方的ip地址;以及用户如何防范自己的ip泄漏。
获取ip
“ip”作为net用户的重要标示,是黑客首先需要了解的。获取的方法较多,黑客也会因不同的网络情况采取不同的方法,如:在局域网内使用ping指令,ping对方在网络中的名称而获得ip;在internet上使用ip版的qq直接显示。而最“牛”,也是最有效的办法是截获并分析对方的网络数据包。这是用windows 2003的网络监视器捕获的网络数据包,可能一般的用户比较难看懂这些16进制的代码,而对于了解网络知识的黑客,他们可以找到并直接通过软件解析截获后的数据包的ip包头信息,再根据这些信息了解具体的ip。
隐藏ip
虽然侦察ip的方法多样,但用户可以隐藏ip的方法同样多样。就拿对付最有效的“数据包分析方法”而言,就可以安装能够自动去掉发送数据包包头ip信息的一些软件。不过使用这些软件有些缺点,譬如:它耗费资源严重,降低计算机性能;在访问一些论坛或者网站时会受影响;不适合网吧用户使用等等。现在的个人用户采用最普及隐藏ip的方法应该是使用代理,由于使用代理服务器后,“转址服务”会对发送出去的数据包有所修改,致使“数据包分析”的方法失效。一些容易泄漏用户ip的网络软件(qq、msn、ie等)都支持使用代理方式连接internet,特别是qq使用“ezproxy”等代理软件连接后,ip版的qq都无法显示该ip地址。这里笔者介绍一款比较适合个人用户的简易代理软件——网络新手ip隐藏器,只要在“代理服务器”和“代理服务器端”填入正确的代理服务器地址和端口,即可对http使用代理,比较适合由于ie和qq泄漏ip的情况。
不过使用代理服务器,同样有一些缺点,如:会影响网络通讯的速度;需要网络上的一台能够提供代理能力的计算机,如果用户无法找到这样的代理服务器就不能使用代理(查找代理服务器时,可以使用“代理猎手”等工具软件扫描网络上的代理服务器)。
虽然代理可以有效地隐藏用户ip,但高深的黑客亦可以绕过代理,查找到对方的真实ip地址,用户在何种情况下使用何种方法隐藏ip,也要因情况而论。
另外防火墙也可以在某种程度上使用ip的隐藏,如zonealarm防火墙就有一个隐藏在网上的ip的功能。
获取ip
“ip”作为net用户的重要标示,是黑客首先需要了解的。获取的方法较多,黑客也会因不同的网络情况采取不同的方法,如:在局域网内使用ping指令,ping对方在网络中的名称而获得ip;在internet上使用ip版的qq直接显示。而最“牛”,也是最有效的办法是截获并分析对方的网络数据包。这是用windows 2003的网络监视器捕获的网络数据包,可能一般的用户比较难看懂这些16进制的代码,而对于了解网络知识的黑客,他们可以找到并直接通过软件解析截获后的数据包的ip包头信息,再根据这些信息了解具体的ip。
隐藏ip
虽然侦察ip的方法多样,但用户可以隐藏ip的方法同样多样。就拿对付最有效的“数据包分析方法”而言,就可以安装能够自动去掉发送数据包包头ip信息的一些软件。不过使用这些软件有些缺点,譬如:它耗费资源严重,降低计算机性能;在访问一些论坛或者网站时会受影响;不适合网吧用户使用等等。现在的个人用户采用最普及隐藏ip的方法应该是使用代理,由于使用代理服务器后,“转址服务”会对发送出去的数据包有所修改,致使“数据包分析”的方法失效。一些容易泄漏用户ip的网络软件(qq、msn、ie等)都支持使用代理方式连接internet,特别是qq使用“ezproxy”等代理软件连接后,ip版的qq都无法显示该ip地址。这里笔者介绍一款比较适合个人用户的简易代理软件——网络新手ip隐藏器,只要在“代理服务器”和“代理服务器端”填入正确的代理服务器地址和端口,即可对http使用代理,比较适合由于ie和qq泄漏ip的情况。
不过使用代理服务器,同样有一些缺点,如:会影响网络通讯的速度;需要网络上的一台能够提供代理能力的计算机,如果用户无法找到这样的代理服务器就不能使用代理(查找代理服务器时,可以使用“代理猎手”等工具软件扫描网络上的代理服务器)。
虽然代理可以有效地隐藏用户ip,但高深的黑客亦可以绕过代理,查找到对方的真实ip地址,用户在何种情况下使用何种方法隐藏ip,也要因情况而论。
另外防火墙也可以在某种程度上使用ip的隐藏,如zonealarm防火墙就有一个隐藏在网上的ip的功能。
安全的动力——杀毒软件引擎技术之窥探
[ 2007-03-25 02:37:30 | 作者: sun ]
一. 群雄逐鹿的杀毒软件市场
学校机房新购入了一批电脑,负责安装应用程序的李老师在杀毒软件的选择上犯了难,由于机房环境的复杂,如果不安装杀毒软件,势必会因为使用者带来运行的媒体介质感染了病毒而造成系统瘫痪或交叉感染,无论出现哪种情况都会影响上课进度和效率;但是,如果安装的杀毒软件功能不够强大,无法及时更新数据,一样不能防止病毒造成破坏。李老师考虑再三,还是决定来到电脑市场购买正版杀毒软件,但是面对市场上众多品牌的杀毒软件,他又犯了难:瑞星、金山、江民、Norton、趋势、熊猫、卡巴斯基、McAfee……每一款杀毒产品都具备它自己的优缺点和特色,我该选择哪一种呢?
二. 从病毒原理说开去
病毒的定义和行为特征
在这个年代里,计算机病毒(Computer Virus)已经是家喻户晓的名词了,而其在业界里也早已有了定义:计算机病毒是指编制或者在计算机程序中插入的破坏计算机功能或者毁坏数据影响计算机使用,并能够自我复制的一组计算机指令或者程序代码,它可以是一个程序,一段执行代码,像生物病毒一样有独特的复制能力,可以很快蔓延。他们能把自身附着在各种类型的文件上,随文件的传播而蔓延。现在随着计算机网络的发展,病毒和网络技术结合,蔓延的速度更加迅速。计算机病毒具有可执行性、寄生性、传染性、破坏性、欺骗性、隐蔽性、潜伏性、衍生性。
以上便是早期就已经定义好的计算机病毒概念,而如今可称为病毒的,还有各种不会感染文件的特洛伊木马程序(后门)等(Trojan、BackDoor),大部分特洛伊木马除了不具备对文件的传染性以外,其他特征均与病毒符合,而且一部分文件型特洛伊木马还可感染文件。此外,还有一种通过系统漏洞进行传播的恶意程序或“蠕虫”(Worm),利用系统自带的脚本语言功能实现破坏效果的宏病毒和恶意脚本(Macro Virus、Evil Script),因此,文中将把木马后门、蠕虫、宏病毒和传统文件型病毒等统称为“病毒”。
自我复制
病毒的基本动作是复制自身,文件型病毒会把自身插入正常程序文件内部以便程序每次执行时连病毒代码也一并执行,恶意程序或木马后门会将自身复制到系统目录,然后通过多种途径令系统在启动时执行病毒体文件,但是无论是哪种病毒的复制行为,其最终目的都只有一个:潜伏到用户计算机内,伺机执行各种危害操作。
病毒在执行复制行为时必须隐蔽,否则它会轻易被稍有经验的用户发现,因此不同的病毒都会采取各种手段来实现其隐蔽目的,但是无论它们的表现形式如何,最终都可归纳为两种形式:寄生和欺骗。
寄生
这是文件型病毒的传播方式,文件型病毒的成品一般没有自己的独立程序体,它们通过受感染的可执行文件进行传播。当用户执行一个感染了文件型病毒的程序时,由于原程序的执行入口已经被破坏,因此病毒代码会首先得到执行,将自身载入内存中,成为一个“驻留程序”(TSR),根据病毒作者的破坏性差异,病毒可能仅仅停留在内存空间里等待用户执行程序时进行感染操作,也可能会主动出击,搜索用户计算机上符合感染条件的可执行文件进行感染。
较普通的文件型病毒会将自身代码放置到受感染文件的头部或尾部,而后修改文件头部的执行入口指向自身代码起始段,以达到自身先于受感染程序执行的目的,当病毒在入内存后,才会去调用受感染文件的真正执行入口,让受感染文件能够运行,这样用户才不会起疑心。在早期的感染模式里,文件型病毒通常会主动搜索感染可执行文件,甚至因为感染失败而导致文件损坏的事情也常有发生,而自从微软在Windows 2000开始引入“系统文件校验”技术后,主动搜索可执行文件进行感染的病毒寄生技术便因为导致系统不断出现“系统文件遭遇替换”的警告而逐渐退出舞台,继而换成守株待兔类型的等待程序执行后进行感染的被动寄生方式。较新的文件型病毒还会采取不感染系统文件的政策,让用户无论如何都难以发现文件被感染的痕迹。
但是直接把自身简单的插入文件首尾的寄生方式会导致文件体积和修改日期的变化,因此高级的病毒会自动根据目标文件内部的“无用”空间分配情况来将自身代码分段插入文件体内,并修改文件日期为原始日期,如此一来便加大了检测和查杀的难度。这一技术得以实现的原因是PE规范的特点:PE文件的每个节之间留有按簇大小对齐后的空洞,病毒体如果足够小则可以将自身分成几份并分别插入到每个节最后的空隙中,这样就不必额外增加一个节,因而文件大小保持不变,能做到这种形式的病毒体积必须十分小巧,否则它会把文件破坏掉的。当文件被执行时,病毒通过初始化代码的复杂计算将自身全部代码恢复连贯载入内存,继续完成下一次感染过程。
欺骗
并非所有病毒(注意此文的“病毒”所指范围)都是文件型的,例如特洛伊木马、蠕虫和恶意程序等,那么它们如何将自身隐蔽呢?这就要用到欺骗了。所谓欺骗,就是利用各种手段将自身执行文件植入系统,而不被用户轻易察觉,即使被发现,也难以判断真伪或者无法彻底删除,从最初的简单设置文件属性为隐藏,到现在的伪装系统核心文件、DLL形式,甚至驱动程序类型的隐藏,病毒技术的不断发展使得手工查杀增加了难度。
破坏
一个程序是否具备破坏性是衡量它是否属于病毒的一个重要标准,病毒的破坏是多种多样的,其实在它们进行寄生或欺骗操作时就已经对被感染的文件、以及受害计算机的环境完整性形成一定的破坏了,由于病毒需要驻留内存进行感染操作,直接导致的影响就是磁盘读写增加,计算机响应迟钝,更有甚者为了取得最高的响应速度,而修改系统正常的优先级设置让自己达到最高等级,从而导致系统效率严重下降。然而这还不是真正可怕的,当病毒发作时,可能会破坏你的文件档案,或者敞开计算机大门让入侵者随意进出,甚至通过特殊的软件读写达到破坏计算机硬件的目的。
三. 剖析杀毒软件的心脏——引擎技术
病毒和反病毒产品是天生的冤家,由于病毒永无休止的存在,反病毒产品这片领域自然也会出现众多厂商来分割的局面,因此也就衔生出了多种杀毒引擎技术。
杀毒引擎是决定一款杀毒软件技术是否成熟可靠的关键,什么是杀毒引擎呢?简言之,它就是一套判断特定程序行为是否为病毒程序或可疑程序的技术机制,引擎不仅需要具备判断病毒的能力,还必须拥有足够的病毒清理技术和环境恢复技术,如果一款杀毒产品能查出病毒但是却无法清除、或者无法将被病毒破坏的系统环境成功恢复,那它也只能是鸡肋。为了达到查杀病毒的目的,杀毒引擎自身要实施的行为就要比病毒还病毒,例如,为了及时获得环境变动的监控数据,一些杀毒引擎采用DLL的钩子技术将自身注入系统进程中,这一行为和DLL木马无异;而为了成功拦截查杀驱动级别木马Rootkit,杀毒引擎更需要将自身的一部分作为驱动形式运行,以便进入系统内核领域……说到这里,一些计算机配置较低的用户应该能明白,为什么自己安装杀毒软件后计算机速度明显变慢了,这多半是因为杀毒软件的“文件监控”等功能导致的,因为这一功能的实现原理就如文件型病毒的寄生过程一样,只不过文件型病毒是守候在内存中伺机感染每一个打开的文件,而“文件监控”功能是时刻驻守在内存里检查每一个打开的文件是否存在病毒,两者导致的后果都是程序载入内存的时间增加,在低配置的计算机表现得比较明显罢了。
由于以上提到的原因,杀毒软件是会不可避免的对用户计算机运行速度造成一定影响的,但是为了安全,大部分用户只能牺牲一点工作效率来换取安全了,那么,杀毒引擎的具体实现过程又是如何呢?且让我们来对其窥探一番。
1.守住每一个关卡——程序行为捕获
每个程序运行时都需要进行各种交互动作,如收发网络数据、响应某个触发事件、文件读写操作等,这些交互都被称为“行为”(Action),这个周期过程是可以被跟踪记录的,这就是杀毒引擎必须干涉的第一步,当杀毒软件的环境监视模块启动后,它会嵌入系统的操作接口,使得任何非核心程序和除了杀毒软件自身程序的运作过程都要被它实时监视,这一技术通常通过钩子技术和驱动层挂载实现,每个杀毒软件厂商都预先定义了一套病毒行为判断规范,即在一个给定的范围和置信度下,判断相关操作是否为合法。例如一个代码执行后被发现试图将自己写入用户请求执行的程序文件体内、或进行特定的复制动作和添加注册表操作,则可将其怀疑为病毒,移交给查毒过程的第二步进一步判断处理。
为了实现行为捕获操作,杀毒软件引擎必须将自身模块嵌入系统底层,在这个实现方法上,各大厂商都有自己的一套方案,一般厂商普遍采用的是中间件技术,即通过Hook挂钩方式实现对每个进程的访问,这种方案通过在系统底层与应用程序之间嵌入一个全局钩子DLL模块达到目的,从严格上来说,它的相对安全和稳定性较低,但是在源代码不开放的操作系统层面上,这是最简单的方法。
一部分厂商因为与操作系统厂商存在合作关系,因而获得了较其他厂商杀毒产品要高的操作系统特权,所以他们采用的方案是基于系统最底层的系统核心驱动,这种实现方式是最安全的,或者说最高级的实现方式,至今只有Norton获得了这个特权。随着病毒技术逐渐渗透到Rootkit层次,过去的Hook技术逐渐有点力不从心,于是杀毒厂商开始转入驱动方案,当然,由于没有操作系统厂商的授权,他们并无法实现最底层的核心驱动解决方案,于是杀毒厂商编写了一个称为“软件驱动”的中间件,用于在系统中产生一个虚拟硬件。众所周知,在操作系统中,只有驱动模块能通过一个“硬件抽象层(HAL)”的通讯接口而到达系统底层,如今流行的Rootkit木马也是采用驱动形式进入系统核心的,因此杀毒厂商使用“软件驱动”来实现底层监视的方案是要比一般的Hook技术效果显著的,但是这也不可避免会出现一些问题,如果这个“软件驱动”存在缺陷或者被某些程序异常终止(例如出现未预料的错误),在系统底层无任何保护措施的环境下,最直接的一个后果就是系统蓝屏崩溃,造成可能的损失。
引用(小知识:系统的几个“层”)
操作系统作为一个复杂的运作体系,其内部是必须实现一定的功能模块来进行分工合作的,这些功能模块像金字塔一样层层堆积,形成了系统的几个“层”,分别是系统核心层、硬件抽象层、用户层。
系统核心层(Kernel Layer)位于整个操作系统的最底层,负责系统的基本运作,在这一层里的所有行为都由系统内置的指令来实现,所有外界因素都不会对这一处的行为造成影响。能直接进入这个层交互的程序不多,除了操作系统自身,第三方厂商若要能在此层直接工作,必须和系统厂商建立合作关系,使用系统厂商提供的接口函数才能进入。目前能在这个层面直接工作的杀毒软件只有赛门铁克的Norton AntiVirus。
硬件抽象层(Hardware Abstraction Layer)是美国微软公司为了便于操作系统在不同硬件结构上进行移植而提出的将系统底层与硬件相关的部分独立运作的思想,HAL为系统实现了“硬件无关性”,即在不同的硬件平台上,硬件与操作系统的交互也不会有所差异,这样一来,硬件厂商开发驱动的难度便能大大降低,HAL将硬件的接口细节隐藏起来,并为操作系统提供一个标准硬件交互接口,目前所有的硬件驱动都工作在这个层面上,当外界硬件存在指令请求时,驱动程序响应请求并将指令通过HAL转换为系统核心层能理解的指令交给内核执行,如果未找到相应的驱动程序类型,则将其视为“默认硬件”(Default Hardware)处理,什么叫“默认硬件”呢?最简单的例子就是进入安全模式,这时候大部分驱动程序不会被加载,此时的系统便是工作于“默认硬件”上。大部分使用“软件驱动”解决方案的杀毒软件就是在HAL层上虚拟了一个硬件来达到与核心层交互的效果,如McAfee、卡巴斯基等,瑞星2006也是通过这个方案实现了内核交互。
用户层(User Layer)就是平时我们直接看到的部分,例如桌面,大部分杀毒软件也是在这一层运行的,主要用于用户接口交互和将指令传递到杀毒引擎。一般运行于Ring3的程序行为也产生于此,一个应用程序产生的指令要求首先被传递到HAL层,HAL层将其解释处理为核心层可以识别的指令串,然后提交给核心层最后进入CPU的指令处理循环,CPU处理完毕后将结果反向送回到用户层上的应用程序,最终得到运算结果。
2.检测的核心——基于引擎机制的规则判断
这一步环节可以称之为病毒判断的核心阶段,一个好的杀毒引擎能在这个阶段识别出相当规模的病毒,其原理是在引擎中内置一部分病毒的特征代码,称为“基于特征码的静态扫描技术”,即杀毒引擎直接在文件中查找自身携带的特征代码,力求尽量在这一步发现病毒。早期的计算机用户应该记得,当初的杀毒产品并没有非常大的病毒特征数据库,甚至KV300+的所谓病毒特征数据库还是ASCII格式的,并由用户自己手工加入,仅仅作为一种简单的扩充手段来运作而已,这是因为KV300+的主程序内就已经包含了当时各种流行病毒的特征码。
但是如今由于网络普及和计算机技术发展,病毒攻势铺天盖地而来,如果单纯靠杀毒引擎自身携带病毒特征代码,将会造成主程序体积过于庞大而无法高效率运行,且升级麻烦等难点,因而杀毒引擎不得不将病毒特征库从自身脱离开来,形成独立的病毒数据库结构来与自身保持联系,这就是“基于特征码的静态扫描技术”的扩展产物:病毒特征代码数据库。
3.在翰林辞典中穿梭——引擎与病毒特征库的交互
由于上述原因,如今的杀毒软件已经不得不采用外部数据库连接的方法来达到识别病毒的效果,病毒特征代码数据库中以特定格式储存了各种病毒的行为标识和静态代码,在工作时,杀毒引擎需要将捕获到的程序行为转换为它自身可以识别的行为标识和静态代码,然后进入病毒特征代码数据库中查询并期待其返回查询结果,因此这个步骤是整个杀毒过程中最慢的,但是不可否认,当前的杀毒软件对大量病毒的识别都是在这个阶段完成的。因此一个足够庞大的病毒库往往能够弥补杀毒引擎的不足之处,但是当今病毒越发复杂和繁多,如此长期以往,病毒特征库将会有一天过于臃肿而导致不良后果,要解决这个问题,只能在核心技术上尽量实现将病毒检测工作在第二步完成,只可惜在当前我们仍然没有能够实现这个想法的杀毒引擎技术,因此如今的杀毒软件或多或少都依赖着一个几十MB的病毒特征库来维持工作,杀毒厂商在杀毒引擎核心未进行关键修改时发布的病毒更新其实也就是为了往这个特征数据库中添加最新发现的病毒数据,以达到查杀新病毒的作用。
“基于特征码的静态扫描技术”的最大弱点在于它无法发现和查杀“未公开”或“未收录”的病毒,由于它的大部分判断依据来自病毒特征代码数据库,一旦用户被感染了病毒中的“0day”或“私人后门”,杀毒软件就无能为力,甚至落得个被病毒终结运行的下场,当然,由于杀毒软件自身的校验机制,一般不会有病毒愚蠢到去感染杀毒软件,但是如果一个杀毒软件被病毒终止了,它就无法对用户的计算机实施病毒防护了,但是如何判断阻止由病毒发出的关闭指令,而不影响用户正常点击杀毒软件自身提供的“退出”功能,这也是个难题。
一部分杀毒引擎会通过自身的病毒行为判断规范来“怀疑”某些未收录在数据库中的程序为病毒,并询问用户需要什么解决方案,一般情况下,杀毒软件最折衷的默认解决方案是将被怀疑动机不纯的程序文件改名备份到一个被称为“隔离区”的文件夹中,然后将该原始文件销毁。这样做或许能达到查杀未知病毒的目的,但是我们也不能忽视其可能带来的严重后果,例如某个关键文件或重要文档感染了病毒,如果杀毒软件不由分说就将其消灭,那就很可能引发系统崩溃甚至经济损失,因为一个健全稳妥的查杀过程和环境恢复是很重要的。
4.月光宝盒——病毒查杀和系统环境恢复
当杀毒引擎检测到病毒时,需要分为两种情况对待,首先是尚未来得及进行感染或破坏行为的病毒,在这种情况下杀毒引擎只需要简单删除文件就可以了,但是日常操作中用户面临最多的还是已经被病毒实施感染破坏行为后的系统环境,在这种情况下,杀毒引擎必须在使用适当的方式查杀病毒后,根据病毒特征库中记录的病毒行为来智能判断当前系统环境遭受破坏的情况并进行恢复,例如对于受病毒感染的文件,杀毒引擎必须根据一定的算法在文件体内找出病毒代码寄生的部分并给予清除,这个过程必须非常谨慎,否则直接的后果就是导致原文件被破坏,这样的杀毒就毫无意义了。而对于非文件型的木马和恶意程序,由于它们会通过各种方式篡改系统注册表甚至系统文件来达到加载自身之目的,杀毒引擎在清除了这些病毒后能否准确有效的恢复受破坏的系统环境,就是对杀毒引擎的最大挑战。病毒隐藏技术已经从最初的简单加载单一启动项,演化到今天的多重启动项、进程互相保护、线程监视、远程注射、可执行文件关联、服务项目加载、驱动形式加载等方式,甚至采用多项结合的方法,使得查杀工作变得十分困难,甚至只要遗漏了一个文件未能清除,病毒便能卷土重来,因此,如何有效准确的判断和修复受损环境,也是衡量杀毒引擎技术是否成熟的关键。
以上说的是杀毒引擎完整工作过程的原理,那么,它所采取的技术有哪些呢?目前,主流的技术有两种:虚拟机技术、实时监控技术。除此之外,还有两种最新的技术仍在试验阶段,分别是智能码标识技术和行为拦截技术。
1.虚拟机技术
一提起虚拟机,部分读者可能就会联想到VMWare去了,然而这里提到的虚拟机并非如此。在反病毒界里,虚拟机也被称为通用解密器,已经成为反病毒软件中最重要的部分之一。杀毒引擎的虚拟机技术并非是为病毒提供一套计算机仿真系统,让其在内部折腾直到暴露出病毒行为特征,在这里的虚拟机是指杀毒引擎模拟出一个仿真CPU,这个“CPU”具备和真正CPU等同的指令分析功能,杀毒引擎将待检测的程序代码读入“CPU”中逐条指令循环执行,直到出现特定情况才结束工作,在这个过程中探知程序是否具备病毒行为特征或者暴露出病毒特征码。这就是杀毒引擎的“虚拟机技术”,它的目的就是让程序文件在没有实际运行的情况下得到运行后的结果,最初虚拟机技术是为了对付变形病毒而产生的,因为变形病毒会将自身代码以一定的方式进行多次变换,这样传统静态特征码扫描技术就对其无能为力,因为它根本无法确认特征码,但是即使再强悍的变形病毒也不可避免在运行时出现一段相对固定的机器码,否则它自身也无法正常运行完成变形过程,而由于这段机器码只有在运行时才能被捕获到,因此工程师开发了“虚拟机技术”诱使病毒在杀毒引擎产生的“CPU”里尽情运行,而后根据其固定机器码匹配病毒特征数据库中的静态特征来判断这个程序是否病毒。虽然这个技术可能会导致误报,但是仍不能否认其是一种有效的方法。
2.实时监控技术
实时监控技术,说白了其实就是一个文件监视器,它会在文件打开、关闭、修改等操作时将其拦截并送入查毒模块进行分析,而在如今的操作系统中要实现对所有文件操作的拦截并非易事,这需要涉及系统核心,因此,这里所采取的方案原型,就是“软件驱动”。通过驱动进入核心,便能获知每个文件的操作情况并做出反应了。这项技术的难度在于驱动代码的编写,由于内核没有异常处理过程,在这里执行的代码稍有一点错漏都能直接导致系统崩溃,且驱动与用户层的实时交互也需要一套复杂的实现方案,因此只有一定实力的厂家才实现这项技术,且实现了这项技术的厂家大部分都会连同虚拟机技术、静态特征码扫描技术一起结合起来,最终形成自己的产品。
四. 结语
许多用户都在挑选杀毒软件时犯难,实际上,如果抛开许多表面上的东西,杀毒软件的引擎实现技术也就那么几个,关键在于杀毒厂商的研发能力和实际工作效率,也不能只凭杀毒软件在对付某种病毒的差别上就断定它们之间的地位差异。符合自己使用的,就是最好的。
学校机房新购入了一批电脑,负责安装应用程序的李老师在杀毒软件的选择上犯了难,由于机房环境的复杂,如果不安装杀毒软件,势必会因为使用者带来运行的媒体介质感染了病毒而造成系统瘫痪或交叉感染,无论出现哪种情况都会影响上课进度和效率;但是,如果安装的杀毒软件功能不够强大,无法及时更新数据,一样不能防止病毒造成破坏。李老师考虑再三,还是决定来到电脑市场购买正版杀毒软件,但是面对市场上众多品牌的杀毒软件,他又犯了难:瑞星、金山、江民、Norton、趋势、熊猫、卡巴斯基、McAfee……每一款杀毒产品都具备它自己的优缺点和特色,我该选择哪一种呢?
二. 从病毒原理说开去
病毒的定义和行为特征
在这个年代里,计算机病毒(Computer Virus)已经是家喻户晓的名词了,而其在业界里也早已有了定义:计算机病毒是指编制或者在计算机程序中插入的破坏计算机功能或者毁坏数据影响计算机使用,并能够自我复制的一组计算机指令或者程序代码,它可以是一个程序,一段执行代码,像生物病毒一样有独特的复制能力,可以很快蔓延。他们能把自身附着在各种类型的文件上,随文件的传播而蔓延。现在随着计算机网络的发展,病毒和网络技术结合,蔓延的速度更加迅速。计算机病毒具有可执行性、寄生性、传染性、破坏性、欺骗性、隐蔽性、潜伏性、衍生性。
以上便是早期就已经定义好的计算机病毒概念,而如今可称为病毒的,还有各种不会感染文件的特洛伊木马程序(后门)等(Trojan、BackDoor),大部分特洛伊木马除了不具备对文件的传染性以外,其他特征均与病毒符合,而且一部分文件型特洛伊木马还可感染文件。此外,还有一种通过系统漏洞进行传播的恶意程序或“蠕虫”(Worm),利用系统自带的脚本语言功能实现破坏效果的宏病毒和恶意脚本(Macro Virus、Evil Script),因此,文中将把木马后门、蠕虫、宏病毒和传统文件型病毒等统称为“病毒”。
自我复制
病毒的基本动作是复制自身,文件型病毒会把自身插入正常程序文件内部以便程序每次执行时连病毒代码也一并执行,恶意程序或木马后门会将自身复制到系统目录,然后通过多种途径令系统在启动时执行病毒体文件,但是无论是哪种病毒的复制行为,其最终目的都只有一个:潜伏到用户计算机内,伺机执行各种危害操作。
病毒在执行复制行为时必须隐蔽,否则它会轻易被稍有经验的用户发现,因此不同的病毒都会采取各种手段来实现其隐蔽目的,但是无论它们的表现形式如何,最终都可归纳为两种形式:寄生和欺骗。
寄生
这是文件型病毒的传播方式,文件型病毒的成品一般没有自己的独立程序体,它们通过受感染的可执行文件进行传播。当用户执行一个感染了文件型病毒的程序时,由于原程序的执行入口已经被破坏,因此病毒代码会首先得到执行,将自身载入内存中,成为一个“驻留程序”(TSR),根据病毒作者的破坏性差异,病毒可能仅仅停留在内存空间里等待用户执行程序时进行感染操作,也可能会主动出击,搜索用户计算机上符合感染条件的可执行文件进行感染。
较普通的文件型病毒会将自身代码放置到受感染文件的头部或尾部,而后修改文件头部的执行入口指向自身代码起始段,以达到自身先于受感染程序执行的目的,当病毒在入内存后,才会去调用受感染文件的真正执行入口,让受感染文件能够运行,这样用户才不会起疑心。在早期的感染模式里,文件型病毒通常会主动搜索感染可执行文件,甚至因为感染失败而导致文件损坏的事情也常有发生,而自从微软在Windows 2000开始引入“系统文件校验”技术后,主动搜索可执行文件进行感染的病毒寄生技术便因为导致系统不断出现“系统文件遭遇替换”的警告而逐渐退出舞台,继而换成守株待兔类型的等待程序执行后进行感染的被动寄生方式。较新的文件型病毒还会采取不感染系统文件的政策,让用户无论如何都难以发现文件被感染的痕迹。
但是直接把自身简单的插入文件首尾的寄生方式会导致文件体积和修改日期的变化,因此高级的病毒会自动根据目标文件内部的“无用”空间分配情况来将自身代码分段插入文件体内,并修改文件日期为原始日期,如此一来便加大了检测和查杀的难度。这一技术得以实现的原因是PE规范的特点:PE文件的每个节之间留有按簇大小对齐后的空洞,病毒体如果足够小则可以将自身分成几份并分别插入到每个节最后的空隙中,这样就不必额外增加一个节,因而文件大小保持不变,能做到这种形式的病毒体积必须十分小巧,否则它会把文件破坏掉的。当文件被执行时,病毒通过初始化代码的复杂计算将自身全部代码恢复连贯载入内存,继续完成下一次感染过程。
欺骗
并非所有病毒(注意此文的“病毒”所指范围)都是文件型的,例如特洛伊木马、蠕虫和恶意程序等,那么它们如何将自身隐蔽呢?这就要用到欺骗了。所谓欺骗,就是利用各种手段将自身执行文件植入系统,而不被用户轻易察觉,即使被发现,也难以判断真伪或者无法彻底删除,从最初的简单设置文件属性为隐藏,到现在的伪装系统核心文件、DLL形式,甚至驱动程序类型的隐藏,病毒技术的不断发展使得手工查杀增加了难度。
破坏
一个程序是否具备破坏性是衡量它是否属于病毒的一个重要标准,病毒的破坏是多种多样的,其实在它们进行寄生或欺骗操作时就已经对被感染的文件、以及受害计算机的环境完整性形成一定的破坏了,由于病毒需要驻留内存进行感染操作,直接导致的影响就是磁盘读写增加,计算机响应迟钝,更有甚者为了取得最高的响应速度,而修改系统正常的优先级设置让自己达到最高等级,从而导致系统效率严重下降。然而这还不是真正可怕的,当病毒发作时,可能会破坏你的文件档案,或者敞开计算机大门让入侵者随意进出,甚至通过特殊的软件读写达到破坏计算机硬件的目的。
三. 剖析杀毒软件的心脏——引擎技术
病毒和反病毒产品是天生的冤家,由于病毒永无休止的存在,反病毒产品这片领域自然也会出现众多厂商来分割的局面,因此也就衔生出了多种杀毒引擎技术。
杀毒引擎是决定一款杀毒软件技术是否成熟可靠的关键,什么是杀毒引擎呢?简言之,它就是一套判断特定程序行为是否为病毒程序或可疑程序的技术机制,引擎不仅需要具备判断病毒的能力,还必须拥有足够的病毒清理技术和环境恢复技术,如果一款杀毒产品能查出病毒但是却无法清除、或者无法将被病毒破坏的系统环境成功恢复,那它也只能是鸡肋。为了达到查杀病毒的目的,杀毒引擎自身要实施的行为就要比病毒还病毒,例如,为了及时获得环境变动的监控数据,一些杀毒引擎采用DLL的钩子技术将自身注入系统进程中,这一行为和DLL木马无异;而为了成功拦截查杀驱动级别木马Rootkit,杀毒引擎更需要将自身的一部分作为驱动形式运行,以便进入系统内核领域……说到这里,一些计算机配置较低的用户应该能明白,为什么自己安装杀毒软件后计算机速度明显变慢了,这多半是因为杀毒软件的“文件监控”等功能导致的,因为这一功能的实现原理就如文件型病毒的寄生过程一样,只不过文件型病毒是守候在内存中伺机感染每一个打开的文件,而“文件监控”功能是时刻驻守在内存里检查每一个打开的文件是否存在病毒,两者导致的后果都是程序载入内存的时间增加,在低配置的计算机表现得比较明显罢了。
由于以上提到的原因,杀毒软件是会不可避免的对用户计算机运行速度造成一定影响的,但是为了安全,大部分用户只能牺牲一点工作效率来换取安全了,那么,杀毒引擎的具体实现过程又是如何呢?且让我们来对其窥探一番。
1.守住每一个关卡——程序行为捕获
每个程序运行时都需要进行各种交互动作,如收发网络数据、响应某个触发事件、文件读写操作等,这些交互都被称为“行为”(Action),这个周期过程是可以被跟踪记录的,这就是杀毒引擎必须干涉的第一步,当杀毒软件的环境监视模块启动后,它会嵌入系统的操作接口,使得任何非核心程序和除了杀毒软件自身程序的运作过程都要被它实时监视,这一技术通常通过钩子技术和驱动层挂载实现,每个杀毒软件厂商都预先定义了一套病毒行为判断规范,即在一个给定的范围和置信度下,判断相关操作是否为合法。例如一个代码执行后被发现试图将自己写入用户请求执行的程序文件体内、或进行特定的复制动作和添加注册表操作,则可将其怀疑为病毒,移交给查毒过程的第二步进一步判断处理。
为了实现行为捕获操作,杀毒软件引擎必须将自身模块嵌入系统底层,在这个实现方法上,各大厂商都有自己的一套方案,一般厂商普遍采用的是中间件技术,即通过Hook挂钩方式实现对每个进程的访问,这种方案通过在系统底层与应用程序之间嵌入一个全局钩子DLL模块达到目的,从严格上来说,它的相对安全和稳定性较低,但是在源代码不开放的操作系统层面上,这是最简单的方法。
一部分厂商因为与操作系统厂商存在合作关系,因而获得了较其他厂商杀毒产品要高的操作系统特权,所以他们采用的方案是基于系统最底层的系统核心驱动,这种实现方式是最安全的,或者说最高级的实现方式,至今只有Norton获得了这个特权。随着病毒技术逐渐渗透到Rootkit层次,过去的Hook技术逐渐有点力不从心,于是杀毒厂商开始转入驱动方案,当然,由于没有操作系统厂商的授权,他们并无法实现最底层的核心驱动解决方案,于是杀毒厂商编写了一个称为“软件驱动”的中间件,用于在系统中产生一个虚拟硬件。众所周知,在操作系统中,只有驱动模块能通过一个“硬件抽象层(HAL)”的通讯接口而到达系统底层,如今流行的Rootkit木马也是采用驱动形式进入系统核心的,因此杀毒厂商使用“软件驱动”来实现底层监视的方案是要比一般的Hook技术效果显著的,但是这也不可避免会出现一些问题,如果这个“软件驱动”存在缺陷或者被某些程序异常终止(例如出现未预料的错误),在系统底层无任何保护措施的环境下,最直接的一个后果就是系统蓝屏崩溃,造成可能的损失。
引用(小知识:系统的几个“层”)
操作系统作为一个复杂的运作体系,其内部是必须实现一定的功能模块来进行分工合作的,这些功能模块像金字塔一样层层堆积,形成了系统的几个“层”,分别是系统核心层、硬件抽象层、用户层。
系统核心层(Kernel Layer)位于整个操作系统的最底层,负责系统的基本运作,在这一层里的所有行为都由系统内置的指令来实现,所有外界因素都不会对这一处的行为造成影响。能直接进入这个层交互的程序不多,除了操作系统自身,第三方厂商若要能在此层直接工作,必须和系统厂商建立合作关系,使用系统厂商提供的接口函数才能进入。目前能在这个层面直接工作的杀毒软件只有赛门铁克的Norton AntiVirus。
硬件抽象层(Hardware Abstraction Layer)是美国微软公司为了便于操作系统在不同硬件结构上进行移植而提出的将系统底层与硬件相关的部分独立运作的思想,HAL为系统实现了“硬件无关性”,即在不同的硬件平台上,硬件与操作系统的交互也不会有所差异,这样一来,硬件厂商开发驱动的难度便能大大降低,HAL将硬件的接口细节隐藏起来,并为操作系统提供一个标准硬件交互接口,目前所有的硬件驱动都工作在这个层面上,当外界硬件存在指令请求时,驱动程序响应请求并将指令通过HAL转换为系统核心层能理解的指令交给内核执行,如果未找到相应的驱动程序类型,则将其视为“默认硬件”(Default Hardware)处理,什么叫“默认硬件”呢?最简单的例子就是进入安全模式,这时候大部分驱动程序不会被加载,此时的系统便是工作于“默认硬件”上。大部分使用“软件驱动”解决方案的杀毒软件就是在HAL层上虚拟了一个硬件来达到与核心层交互的效果,如McAfee、卡巴斯基等,瑞星2006也是通过这个方案实现了内核交互。
用户层(User Layer)就是平时我们直接看到的部分,例如桌面,大部分杀毒软件也是在这一层运行的,主要用于用户接口交互和将指令传递到杀毒引擎。一般运行于Ring3的程序行为也产生于此,一个应用程序产生的指令要求首先被传递到HAL层,HAL层将其解释处理为核心层可以识别的指令串,然后提交给核心层最后进入CPU的指令处理循环,CPU处理完毕后将结果反向送回到用户层上的应用程序,最终得到运算结果。
2.检测的核心——基于引擎机制的规则判断
这一步环节可以称之为病毒判断的核心阶段,一个好的杀毒引擎能在这个阶段识别出相当规模的病毒,其原理是在引擎中内置一部分病毒的特征代码,称为“基于特征码的静态扫描技术”,即杀毒引擎直接在文件中查找自身携带的特征代码,力求尽量在这一步发现病毒。早期的计算机用户应该记得,当初的杀毒产品并没有非常大的病毒特征数据库,甚至KV300+的所谓病毒特征数据库还是ASCII格式的,并由用户自己手工加入,仅仅作为一种简单的扩充手段来运作而已,这是因为KV300+的主程序内就已经包含了当时各种流行病毒的特征码。
但是如今由于网络普及和计算机技术发展,病毒攻势铺天盖地而来,如果单纯靠杀毒引擎自身携带病毒特征代码,将会造成主程序体积过于庞大而无法高效率运行,且升级麻烦等难点,因而杀毒引擎不得不将病毒特征库从自身脱离开来,形成独立的病毒数据库结构来与自身保持联系,这就是“基于特征码的静态扫描技术”的扩展产物:病毒特征代码数据库。
3.在翰林辞典中穿梭——引擎与病毒特征库的交互
由于上述原因,如今的杀毒软件已经不得不采用外部数据库连接的方法来达到识别病毒的效果,病毒特征代码数据库中以特定格式储存了各种病毒的行为标识和静态代码,在工作时,杀毒引擎需要将捕获到的程序行为转换为它自身可以识别的行为标识和静态代码,然后进入病毒特征代码数据库中查询并期待其返回查询结果,因此这个步骤是整个杀毒过程中最慢的,但是不可否认,当前的杀毒软件对大量病毒的识别都是在这个阶段完成的。因此一个足够庞大的病毒库往往能够弥补杀毒引擎的不足之处,但是当今病毒越发复杂和繁多,如此长期以往,病毒特征库将会有一天过于臃肿而导致不良后果,要解决这个问题,只能在核心技术上尽量实现将病毒检测工作在第二步完成,只可惜在当前我们仍然没有能够实现这个想法的杀毒引擎技术,因此如今的杀毒软件或多或少都依赖着一个几十MB的病毒特征库来维持工作,杀毒厂商在杀毒引擎核心未进行关键修改时发布的病毒更新其实也就是为了往这个特征数据库中添加最新发现的病毒数据,以达到查杀新病毒的作用。
“基于特征码的静态扫描技术”的最大弱点在于它无法发现和查杀“未公开”或“未收录”的病毒,由于它的大部分判断依据来自病毒特征代码数据库,一旦用户被感染了病毒中的“0day”或“私人后门”,杀毒软件就无能为力,甚至落得个被病毒终结运行的下场,当然,由于杀毒软件自身的校验机制,一般不会有病毒愚蠢到去感染杀毒软件,但是如果一个杀毒软件被病毒终止了,它就无法对用户的计算机实施病毒防护了,但是如何判断阻止由病毒发出的关闭指令,而不影响用户正常点击杀毒软件自身提供的“退出”功能,这也是个难题。
一部分杀毒引擎会通过自身的病毒行为判断规范来“怀疑”某些未收录在数据库中的程序为病毒,并询问用户需要什么解决方案,一般情况下,杀毒软件最折衷的默认解决方案是将被怀疑动机不纯的程序文件改名备份到一个被称为“隔离区”的文件夹中,然后将该原始文件销毁。这样做或许能达到查杀未知病毒的目的,但是我们也不能忽视其可能带来的严重后果,例如某个关键文件或重要文档感染了病毒,如果杀毒软件不由分说就将其消灭,那就很可能引发系统崩溃甚至经济损失,因为一个健全稳妥的查杀过程和环境恢复是很重要的。
4.月光宝盒——病毒查杀和系统环境恢复
当杀毒引擎检测到病毒时,需要分为两种情况对待,首先是尚未来得及进行感染或破坏行为的病毒,在这种情况下杀毒引擎只需要简单删除文件就可以了,但是日常操作中用户面临最多的还是已经被病毒实施感染破坏行为后的系统环境,在这种情况下,杀毒引擎必须在使用适当的方式查杀病毒后,根据病毒特征库中记录的病毒行为来智能判断当前系统环境遭受破坏的情况并进行恢复,例如对于受病毒感染的文件,杀毒引擎必须根据一定的算法在文件体内找出病毒代码寄生的部分并给予清除,这个过程必须非常谨慎,否则直接的后果就是导致原文件被破坏,这样的杀毒就毫无意义了。而对于非文件型的木马和恶意程序,由于它们会通过各种方式篡改系统注册表甚至系统文件来达到加载自身之目的,杀毒引擎在清除了这些病毒后能否准确有效的恢复受破坏的系统环境,就是对杀毒引擎的最大挑战。病毒隐藏技术已经从最初的简单加载单一启动项,演化到今天的多重启动项、进程互相保护、线程监视、远程注射、可执行文件关联、服务项目加载、驱动形式加载等方式,甚至采用多项结合的方法,使得查杀工作变得十分困难,甚至只要遗漏了一个文件未能清除,病毒便能卷土重来,因此,如何有效准确的判断和修复受损环境,也是衡量杀毒引擎技术是否成熟的关键。
以上说的是杀毒引擎完整工作过程的原理,那么,它所采取的技术有哪些呢?目前,主流的技术有两种:虚拟机技术、实时监控技术。除此之外,还有两种最新的技术仍在试验阶段,分别是智能码标识技术和行为拦截技术。
1.虚拟机技术
一提起虚拟机,部分读者可能就会联想到VMWare去了,然而这里提到的虚拟机并非如此。在反病毒界里,虚拟机也被称为通用解密器,已经成为反病毒软件中最重要的部分之一。杀毒引擎的虚拟机技术并非是为病毒提供一套计算机仿真系统,让其在内部折腾直到暴露出病毒行为特征,在这里的虚拟机是指杀毒引擎模拟出一个仿真CPU,这个“CPU”具备和真正CPU等同的指令分析功能,杀毒引擎将待检测的程序代码读入“CPU”中逐条指令循环执行,直到出现特定情况才结束工作,在这个过程中探知程序是否具备病毒行为特征或者暴露出病毒特征码。这就是杀毒引擎的“虚拟机技术”,它的目的就是让程序文件在没有实际运行的情况下得到运行后的结果,最初虚拟机技术是为了对付变形病毒而产生的,因为变形病毒会将自身代码以一定的方式进行多次变换,这样传统静态特征码扫描技术就对其无能为力,因为它根本无法确认特征码,但是即使再强悍的变形病毒也不可避免在运行时出现一段相对固定的机器码,否则它自身也无法正常运行完成变形过程,而由于这段机器码只有在运行时才能被捕获到,因此工程师开发了“虚拟机技术”诱使病毒在杀毒引擎产生的“CPU”里尽情运行,而后根据其固定机器码匹配病毒特征数据库中的静态特征来判断这个程序是否病毒。虽然这个技术可能会导致误报,但是仍不能否认其是一种有效的方法。
2.实时监控技术
实时监控技术,说白了其实就是一个文件监视器,它会在文件打开、关闭、修改等操作时将其拦截并送入查毒模块进行分析,而在如今的操作系统中要实现对所有文件操作的拦截并非易事,这需要涉及系统核心,因此,这里所采取的方案原型,就是“软件驱动”。通过驱动进入核心,便能获知每个文件的操作情况并做出反应了。这项技术的难度在于驱动代码的编写,由于内核没有异常处理过程,在这里执行的代码稍有一点错漏都能直接导致系统崩溃,且驱动与用户层的实时交互也需要一套复杂的实现方案,因此只有一定实力的厂家才实现这项技术,且实现了这项技术的厂家大部分都会连同虚拟机技术、静态特征码扫描技术一起结合起来,最终形成自己的产品。
四. 结语
许多用户都在挑选杀毒软件时犯难,实际上,如果抛开许多表面上的东西,杀毒软件的引擎实现技术也就那么几个,关键在于杀毒厂商的研发能力和实际工作效率,也不能只凭杀毒软件在对付某种病毒的差别上就断定它们之间的地位差异。符合自己使用的,就是最好的。