CSDN博客

img sanjiang

抓住网页恶意代码的"黑手"

发表于2001/10/14 17:39:00  693人阅读

【编者按:病毒的泛滥弄得计算机用户人人自危,木马的流行让人感觉在互联网上毫无隐私可言,而网上愈演愈烈的"网页病毒"更是搅得人心惶惶,从各方面的求救信号中可以略窥这"病毒"的症状:在无意浏览了一些网页后,就发现IE标题栏、IE起始主页被莫名其妙地修改了、每次开机出现莫名其妙的提示框、修改输入法启动项、启动无关程序......,更有文章称:有些网页"病毒"会格式化硬盘。更令人生厌的是,通过IE"工具"菜单下的"Internet选项"操作界面根本不能修改以恢复原状。在互联网发达的今天,谁不天天要浏览众多网页?如果真有这样一些病毒,岂还得了?编者从网友来信、论坛收集了一些信息,并对此作了比较详细的分析后,认 为这"病毒"的更大成分是恶意代码。现在就让我们一步一步地让这些恶意代码曝光,揭开其"神秘"的面纱!】
相关网文摘引
  以下是从网上一篇文章节选(由于不知道出处,敬请作者与我们联系),作者对能格式化硬盘的恶意代码来了一次" 亲密接触", 可真令人心惊胆颤的,看来说什么恶意代码能格式化硬盘并非空穴来风!
  一日,忽然听朋友说,他在上网的时候,不知点击了什么东西,而将他的硬盘全部给格式化了。我首先的念头就是:该不会是中了那个有名的国产宏病毒"七月杀手"?不过这个宏病毒是在系统Autoexec.bat文件中加入了"deltreec://y",应该不会格式化整个硬盘。那该不会是……曾经在某个杂志上看到过一个介绍,说什么IE浏览器可以通过执行ActiveX而把硬盘格式化,而且记得当时还公布了源代码,只是当时公布的源代码是针对西班牙版的Windows,对中文版的Windows没有用,说不定那些代码现在已经被一些高手给改成了针对中文Windows的呢。
  问问自己的朋友,他也是稀里糊涂地被格式化掉硬盘的,当时进入的网站也不记得了。没有办法,我只好自己跑到国内的一些网站去找类似的主题文章。皇天不负苦心人,终于找到了几个可以格式化硬盘的HTML文件。网站上的版主出自好心,提醒下载的网友:只能供自 己研究,不可害人。
  考虑到危险性,我先用记事本随便打开其中一个 看看源代码,没有想到这个源文件竟给加了密,里面是用 JavaScript写的脚本,加密的部分好像只是一些字符的定义,而真正的脚本内容也只是显示一些字符在屏幕上。因为自己的机器是刚装好的,没有什么特别重要的数据,所以就抱着"过把瘾就死"的念头,用IE浏览器打开了这个HTML文件。接着,浏览器发出一个警告:"该页上的ActiveX控件与页上的其它部分进行交互可能不安全,是否允许进行交互?"。如果你选择"是",则就会运行那些不安全控件。不过我试的这个HTML文件只是给大家开个玩笑,你打开它后,它说什么"你的C盘已经被它强行输入格式化,一旦重新启动就格式化了。请不要启动,立即保存有用的文件。"等诸如此类的话。我仔细检查了一下Windows启动程序里的内容,也没有什么变化,于是放心大胆地重启,果然是开的玩 笑。
   在下载的另外一个HTML文件中,看看源代码,不禁吓了一跳。程序仅有的不足30代代码中有24行都是调用Windows里自带的format.com命令,真是够狠的。除了A、B两个驱外,只要你能够分的区C-Z,都会被格式化。为了验证其效果,又不想我的硬盘被格式化,我把Windows里自带的format.com给改了名字,然后用IE打开该HTML文件,浏览器同样发出一个警告:"该页上的某些软件(ActiveX控件)可能不安全。建议您不要运行。是否允许运行?"。当你选择"是"的时候,会弹出几十个DOS窗口,可能是因为它找不到format.com这个文件,找开所有DOS窗口都是什么显示也没有。它不但调用了format.com,另外还加上了一些参数,如快速格式化等,再加上格式化时窗口就已经自动完成了硬盘格式化的工作,等你发现时也已经悔之晚矣。幸好我事先已经把硬盘里的 format.com给改了名字,否则后果可想而知。
中毒现象素描:
  笔者对网上言论进行了搜集,将其分门别类陈列如下:
(一)、默认主页被修改 :
  "最近,我的电脑发生了一个奇怪的现象,浏览器的默认主页被自动设为www.********.com,一开始我并没有留意,心想只要在IE的"Internet选项"中修改回原来的设置就可以了,修改后,果然没事了,但第二天开机,又被改回去了。 "
(二)、IE标题栏被修改:
  "不知从什么时候起,我的每个打开的IE页里的标题栏多出了什么"让历史告诉未来,知青网(www.zhiqing.org)"的字样; "
(三)、开机时出现提示框:
  "一次浏览了一个网页后,在看了作者高现需写的"去除IE默认主页、标题诡异添加之一招两式"(http://www.yesky.com/20010808/191701.shtml)后虽然解决了去除默认主页问题,但没法去掉开机时出现一个提示框,什么“欢迎来访www.play.cn.gs"之类的! "
(四)、IE地址栏下多出了文字 :
  "地址栏下出现一些莫名 其妙的文字,不知怎么去掉。 "
(五)、在注 册表中对IE相关的注册表项如 默认主页等修改无效:
  "有些网站很可恶,它将IE的默认网页设置成了该网站的名称后,我自己通过修改注册表项的"StartPage"和 "Default_Page_URL"后仍不能生效,不知怎么办 !"
(六)、Internet Exploer中点击右键,菜单中出现非法站点 的链接:
  "同样也是由于一次访问了一个网站,以后当浏览网页时,如果点击右键,则弹出的菜单中有非法站点的链接。"
(七)、修改了操作系统
  "浏览了一个网站,后来发现系统已经禁止了'关闭系统'、'运行'、'注销'功能,并且C盘找不到了、注册表编辑器regedit不能使用、DOS程序不能运行,无法进入系统实模式"
程序讲解
  笔者了解一些有关Applet、ActiveX及脚本语言方面的知识,在下载含有恶意代码后,对其引用的Javascript脚本文件进行了一些分析。由于安全原因,请恕我不能将代码完整地写出来或者对程序的编写进行过细的讲解,只是让大家了解到这个代码并不神秘。JAVA的最初应用就是Applet程序。虽然JAVA对Applet的安全作出了限制,但由于浏览器或语言漏洞的原因,当它与功能比较强大的脚本语言结合时,这些小应用程序常可凭借正常或诡秘的手段对用户的机器进行修改,比如修改注册表,运行相关的DOS命令,在用户机器上安装木马或激活相关的应用程序,其功能之强大远非单纯的网页所能胜任,由此看来,现在网上所流传的说什么浏览相关网页中病毒或者硬盘被格式化也就见怪不惊了。另外,还有一种嵌入式应用程序就是ActiveX,是微软的一种插件技术,也可以象Applet一样进行一些针对本机的操作。现在让我们了解一下以下代码编制的机理(如果你不了解脚本语言,可仅看看程序修改了哪些注册表表 项,然后找到 这些表项并修改回来)。
document.write("〈APPLET HEIGHT=0 WIDTH=0 code=.......〉〈 /APPLET〉");
file://嵌入Applet文件
function f){ file://做出种种修改的语句就在这个函数里
try
{
//ActiveX initialization
a1=document.applets[0]; file://获取applet运行对象,以下语句指向注册表中有关IE的表项
a1.setCLSID("{.............}");
a1.createInstance();
Shl = a1.GetObject();
a1.setCLSID("{.............}");
a1.createInstance();
FSO = a1.GetObject();
a1.setCLSID("{.............}");
a1.createInstance();
Net = a1.GetObject();
try
{
if ( document.cookie.indexOf("Chg") == -1)
{
//以下是对操作系统相关注册表项值项的修改
//使系统没有“运行”项,以防止用户就不能通过注册表 编辑器 来修复设置。
Shl.RegWrite ( "HKCU//Software//Microsoft//Windows//CurrentVersion// Policies//
Explorer//NoRun", 01, "REG_BINARY");
//让操作系统无“关闭系统” 选项
Shl.RegWrite ( "HKCU//Software//Microsoft//Windows//CurrentVersion// Policies//
Explorer//NoClose", 01, "REG_BINARY") ;
//让操作系统无“注销”选项
Shl.RegWrite ( "HKCU//Software//Microsoft//Windows//CurrentVersion// Policies//
Explorer//NoLogOff", 01, "REG_BINARY");
注:使受害者系统没有“注销”项
//让操作系统无逻辑驱动器C
Shl.RegWrite ( "HKCU//Software//Microsoft//Windows//CurrentVersion// Policies//
Explorer//NoDrives", "00000004", "REG_DWORD");
//禁止运行所有 的DOS应用程序;
Shl.RegWrite ( "HKCU//Software//Microsoft//Windows//CurrentVersion// Policies//
WinOldApp// Disabled","REG_BINARY") ;
//让操作系统无法切换 至传统DOS的实模式下
Shl.RegWrite ( "HKCU//Software//Microsoft//Windows//CurrentVersion// Policies/
/WinOldApp//NoRealMode","REG_BINARY") ;
// 让系统登录时显示一个登录窗口,以下是写入启动弹出对话 框标 题
Sh1.RegWrite ( "HKLM//Software//Microsoft//Windows//CurrentVersion//
Winlogon//Legal NoticeCaption", "........");
// 写入启动弹出对话框内容
Sh1.RegWrite ( "HKLM//Software//Microsoft//Windows//CurrentVersion//
Winlogon//Legal NoticeText", "...............");
//以下是对IE 相关注册表项值项 的修改
// 设置浏览器默认主页
Sh1.RegWrite ("HKCU//Software//Microsoft//Internet Explorer//Main//Start Page",
"..............");
// 修改启动中的输入法启动项
Sh1.RegWrite ( "HKLM//Software//Microsoft//Windows//CurrentVersion//
Run//internat.e xe", "..............");
// 设置注册不可更改
Sh1.RegWrite ( "HKCU//Software//Microsoft//Windows//CurrentVersion//
Policies//WinOl dApp//NoRealMode", "00000000", "REG_DWORD");
//修改 浏览器的标题栏
Shl.RegWrite("HKLM//Software//Microsoft//InternetExplorer//Main//WindowTitle",
"...............");
Shl.RegWrite("HKCU//Software//Microsoft//InternetExplorer//Main//WindowTitle",
"..............");
// 以下程序是将含恶意代码的网页添加至 收藏夹中
var WF, Shor, loc;
WF = FSO.GetSpecialFolder(0);
loc = WF + "//Favorites";
if(!FSO.FolderExists(loc))
{
loc = FSO.GetDriveName (WF) + "//Documents and Settings//
" + Net.UserName + "//Favorites";
if(FSO.FolderExists( loc))
{
AddFavLnk(loc, "显示标题.....", "URL......" );
}
}
//设置 cookie值
var expdate = new Date((new Date( )).getTime() + (1));
document.cookie="Chg=general; expires=" + expdate.toGMTString( ) + "; path=/;"
}
}
catch(e)
{}
}
catch(e)
{}
}
//初始化函数,并每隔一秒执行修 改程序
function init()
{
setTimeout("f()", 1000);
}
init();
因应对策:
   当不小心遭了恶意代码时,首先需要做的是动修改注册表相关表 项值:
一、手动修改
1、改正对默认 主页的修改:
在HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/InternetExplorer/Main中的"Start
Page"和"Default_Page_URL"。
2、更改对Internet Explorer的标题栏的修改:
在 HKEY_LOCAL_MACHINE/Software/Microsoft/Internet Explorer/Main中右边的
窗口中修改字符串值“Window Title”为新标题的名 字。
3、改正对地址栏 下的文字修改:
在 HKEY_CURRENT_USER/Software/Microsoft/Interner
Explorer/Toolbar,在右边找到键值LinksFolderName,将其中的内容删去即可 。
4、改正对Windows启动栏的 修改:
这种情况适用于通过修改注册表项?quot;Start Page"和
"Default_Page_URL"仍不能生效的情况,可试着依次打开如下主键:
HKEY_LOCAL_MACHINE/Microsoft/Windows/CurrentVersion/run修改右栏里的
“qwe”的键值,删掉表项值,重新启动计算机。
5、改正在Internet Exploer中点击右键中出 现非法站点的链接:
在 HKEY_CURRENT_USER/Software/Microsoft/Internet Explorer/MenuExt中删除
非法链接的该键值即可。
6、清除浏览器中地址栏中无用的地址:
在 HEKY_CURRENT_USER/Software/Microsoft/Internet
Explorer/TypeURLs中删除无用的键值即可。
二、应用工具软件
  下载《反修改精灵》软件:
  该软件能有效地防止IE修改 ,可到天极网mydown下载站下载。
三、备份与命令恢复
  1:对于Win9x用户,可在机器启动时按F8键,选择到MS-DOS方式下,使用Scanreg/restore命令来恢复以前备份的正常注册表。
  2:对于Win2000用户,把以下内容copy下来,存为recover.reg文件,选带命令行的安全模式,用命令regedit recover.reg导入,然后重启机器:
recover.reg文件内容如下:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/ Policies/Explorer]
"NoDriveTypeAutoRun"=dword:00000095
"NoRun"=hex:
"NoLogOff"=hex:
"NoDrives"=dword:00000000
"RestrictRun"=dword:00000000
[HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Policies/System]
"DisableRegistryTools"=dword:00000000
[HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Policies/System]
"DisableRegistryTools"=dword:00000000
[HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Policies/WinOldApp]
"Disabled"=dword:00000000
[HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Policies/WinOldApp]
"NoRealMode"=dword:00000000
[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Winlogon]
"LegalNoticeCaption"=""
"LegalNoticeText"=""
[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Internet Explorer/Main]
"Window Title"=""
[HKEY_CURRENT_USER/Software/Microsoft/Internet Explorer/Main]
"Window Title"=""
防患于未然:
  笔者阅读了网上相关文章,对防御方法作了一些总结,希望 你能作些 积极的防范。
  1、要避免中招,关键是不要轻易去一些自己并不了解的站点,特别是那些看上去美丽诱人的网址更不要贸然前往 ,否则吃亏的 往往是你。
  2、运行IE,点击“工具→Internet选项→安全→ Internet区域的安全级别,把安全极别由“中”改为“高” 。
  3 、由于该类网页是含有有害代码的ActiveX或Applet、Javascript的网页文件,因此在IE设置中将ActiveX插件和控件、Java脚本等全部禁止就可以避免中招。具体方法是:在IE窗口中点击“工具→Internet选项,在 弹出的对话框中选择“安全”标签,再点击“自定义级别”按钮,就会弹出“安全设置”对话框,把其中所有ActiveX插件和控件以及Java相关全部选择“禁用”即可。不过,这样做在以后的网页浏览过程中可能会造成一些正常使用ActiveX的网站无法浏览。唉,有利就有弊,您还是自己看着办吧。
  4、对于Windows98用户,请打开C:/WINDOWS/JAVA/Packages/CVLV1NBB.ZIP,把其中的“ActiveXComponent.class”删掉;对于WindowsMe用户,请打开C:/WINDOWS/JAVA/Packages/5NZVFPF1.ZIP,把其中的“ ActiveXComponent.class”删掉。请放心,删除这个组件不会影响到你。
  5、安装网络防火墙,特别是安装了Norton2001后,进入该类网页就会报警提示有脚本写注册表,国产反病毒软件KVW3000也有此类功效,建 议您也安装一个这样的软件。
  6、虽然经过一番辛苦的劳动修改回了标题和默认连接首页,但如果以后又不小心进入该站就又得麻烦一次 。其实,你可以在IE中做一些设置 以便永远不进该站点:
  打开IE,点击“工具”→“Internet选项”→“内容”→“分级审查”,点“启用”按钮,会调出“分级审查”对话框 ,然后点击“许可站点”标签,输入不想去的网站网址,如输入:http://www.XXX.com,按“从不”按钮,再点击“确定”即大功告成! 正常浏览网页的。
  7、设置注册表相关值项,为注册表"加锁"
  (1)运行注册表编辑器regedit.exe;
  (2)在HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Policies/System下,增加名为DisableRegistryTools的DWORD值项,并将其值改为“1”,即可禁止使用注册表编辑器regedit.exe。
  如果你由于其它原因需要修改注册表,可用如下解锁方法:
  用记事本编辑一个任意名字的.reg文件,比如recover.reg,内容如下:
REGEDIT4
[HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Policies/System]
"DisableRegistryTools"=dword:00000000
  则双击运行recover.reg即可。
背景资料:
一、什么是注册表
注册表是在Windows中,存储关于计算机配置信息的数据库。注册表包含Windows2000操作时不断引用的信息,例如:
每个用户的配置文件。
计算机上安装的程序和每个程序可以创 建的文档类型。
文件夹 和程序图标的属性设置。
系统中 的硬件。
正在使用的端口 。
注册表按层次结 构来组织,由项、子项、配 置单元和值项组成。
请 参阅配置单元 ;子项;值项。
二、什么是值项
  出现在注册表窗口右窗格中的数据字符串,它定义了当前所选项的值。值项有三个部分:名称、数据类型和值本身。
三、什么是注册表项
  在“注册表编辑器”中,出现在“注册表编辑器”窗口的左窗格中的文件夹。项可以包含子项和值项。例如,Environment 是 HKEY_CURRENT_USER 的一个项。
四、 什么 是Java Applet
  Java语言可以编写两种类型的程序:应用程序(Application)和小应用程序(Applet)。应用程序是可以独立运行的程序,而Applet不能独立运行,需要嵌入HTML文件,遵循一套约定,在支持Java的浏览器(如:NetscapeNavigator2.02版本以上,HotJava,MicrosoftInternetExplorer3.0版本以上)运行,是Java一个重要的应用分支,也是当时Java最令人感兴趣的地方(它一改网页呆板的界面),就是在WWW网页(HomePage/Pages)设计中加入动画、影像、音乐等,而要达到这些效果使用最多的是JavaApplet和JavaScript(这是一种Java的命令稿语言)。
五、什么是JavaScript
  JavaScript是一种基于对象(Object)和事件驱动(EventDriven)并具有安全性能的脚本语言。使用它的目的是与HTML超文本标记语言、与Web客户交互作用。从而可以开发客户端的应用程序等。它是通过嵌入或文件引用在标准的HTML语言中实现的。它的出现弥补了HTML语言的缺陷,它是Java与HTML折衷的选择,具有基于对象、简单、安全、动态、跨平台性等特性 。
六、什么是ActiveX
  ActiveX是Microsoft提出的一组使用COM(ComponentObjectModel,部件对象模型)使得软件部件在网络环境中进行交互的技术。 它与具体的编程语言无关。作为针对Internet应用开发的技术 ,ActiveX被广 泛应用于WEB服务器以及客户端的各个方面。同时,ActiveX技术也被用于方便创建普通的桌面应用程序。在Applet中可以使用ActiveX技术,如直接嵌入ActiveX控制,或者以ActiveX技术为桥梁,将其它开发商提供的多种语言的程序对象集成到Java中。与Java的字节码技术相比,ActiveX提供了“代码签名”(CodeSigning)技术保证其安全性。

 

0 0

相关博文

我的热门文章

img
取 消
img