潘无忧 2008-7-16 19:09
网页防篡改高招
外部网站因需要被公众访问而暴露于因特网上,因此容易成为黑客的攻击目标。虽然目前已有防火墙、入侵检测等安全防范手段,但现代操作系统的复杂性和多样性导致系统漏洞层出不穷,防不胜防。黑客入侵和篡改页面的事件时有发生。针对此,网页防篡改系统应运而生。目前市场上的网页防篡改系统产品还比较单一,且部署网页防篡改系统,需要改变现有的单服务器模式,增加服务器,改变服务器的架构,软件价格也偏高。
本文采用常见的C语言程序设计,在Windows平台上,调用Windows操作系统本身提供的相应命令,采用改进型外挂轮询设计的方式,提供用户自定义轮询时间,能够对任意类型文件进行监控。另外,程序还考虑到了连续篡改攻击保护:第一次发现篡改时,程序自动恢复被篡改网页,并进入非正常状态,加快轮询速度;若连续第二次发生篡改,则自动停止Web服务,并关闭计算机,防止篡改文件扩大影响。其结构如图1所示。
[align=center][url=http://new.51cto.com/files/uploadimg/20070727/1534580.jpg][img=365,347]http://new.51cto.com/files/uploadimg/20070727/1534580.jpg[/img][/url]
图1 网页防篡改系统结构图[/align][size=4][b]篡改的原因和特点[/b][/size]
一个网站在Internet上发布,需要依赖两个服务,一个是操作系统提供的http服务,另一个就是网站自身组成页面所提供的页面服务。由于现代操作系统的复杂性和多样性,以及构成网站的页面(如静态网页、执行脚本、二进制文件等)日趋复杂,可以预知,在现有技术架构下,网站漏洞将长期存在,这就给网页篡改带来了技术上存在的可能性。
潘无忧 2008-7-16 19:10
网页篡改的特点如下:
◆ 网站传播速度快,阅读人群多。
◆ 复制容易,事后消除影响难。
◆ 预先检查和实时防范较难。
◆ 作案环境和工具相对简单。
[b][size=4]程序设计的关键点[/size][/b]
[b]改进型外挂式轮询设计[/b]
常见监测网页篡改的方法有两种:外挂轮询和事件触发。二者各有利弊,对比如表1所示。
[align=center][url=http://new.51cto.com/files/uploadimg/20070727/1534581.jpg][img=319,243]http://new.51cto.com/files/uploadimg/20070727/1534581.jpg[/img][/url]
表1 外挂轮询和事件触发设计对比分析[/align]采用外挂轮询式的网页防篡改系统,对每个网页来说,轮询扫描存在着时间间隔,一般为数十分钟。在这数十分钟的间隔中,黑客可以攻击系统并使访问者访问到被篡改的网页。采用事件触发式的网页防篡改系统,也是一种被动式的策略,不能保证外界看不到篡改后的网页。而且如果黑客采用大规模的篡改活动,这种响应机制将变得很慢而不可取。
潘无忧 2008-7-16 19:10
本文采用改进型外挂轮询设计,利用C语言中提供的delay()和sleep()函数,分别可以达到毫秒和秒级的延时,从而可以动态设置轮询间隔时间,提高检测时间。同时,由于程序基于操作系统的文件级别进行监测,并不区分文件的类型,从而实现了对动态网页脚本(如asp、jsp)的监测。
改进型后,外挂轮询设计对比分析如表2所示。
[align=center][url=http://new.51cto.com/files/uploadimg/20070727/1534582.jpg][img=316,240]http://new.51cto.com/files/uploadimg/20070727/1534582.jpg[/img][/url]
表2 改进型外挂轮询设计对比分析[/align][b]监测篡改参数[/b]
针对篡改网页出现的特征,同时考虑到占用系统资源的状况,程序在监测时,选择了文件修改时间和大小两个参数进行监测。同时,考虑到现在网站基本上都利用新闻系统进行新闻的发布和更新,而发布新闻后,网页大小可能会发生变化,故而在程序设计时,还新增了监测网页内容的模块,该模块由网页文件大小发生变化的事件触发,检测网页代码中事先放置的内容是否发生了变化。其监测流程如图2所示。
潘无忧 2008-7-16 19:10
[align=center][url=http://new.51cto.com/files/uploadimg/20070727/1534583.jpg][img=323,378]http://new.51cto.com/files/uploadimg/20070727/1534583.jpg[/img][/url]
图2 页面防护系统监测流程[/align][b]计算机自动报警模块[/b]
发生篡改后,要及时报警。但受限于机房的环境和条件,我们只能使用网络报警的方式,利用winpopup 或者net send命令来向指定计算机发送警告信息。在C语言中,我们利用system()函数调用net send命令,发送警告信息。需要接收警告信息的计算机,必须开启windows messager服务。我们将这些计算机的IP地址统一放在一个指定位置的文本文件中,程序开始时,创建单向链表,从文本中分析并读出每个IP地址,并创建net send发送命令链表,利用system()自动批处理这些命令。
单个计算机报警信息发送程序如下:
[table=400][tr][td]System("net send 报警IP 报名消息");[/td][/tr][/table]
[b]紧急处理程序[/b]
当判断出现篡改后,系统进入紧急处理程序。紧急程序首先做的是恢复被篡改文件,将“样本”文件覆盖到Web Service的指定目录中去,使Web服务正常;然后发送报警信息,同时,缩短轮询时间为每50毫秒一次。当继续检测到异常时,首先停止Web服务,然后发送报警信息,发送完毕后,关闭计算机。
[b]停止Web服务的处理[/b]
停止Web服务,可以利用Windows提供的net stop w3svc命令。在C语言中调用的命令如下:
[table=400][tr][td]system("net stop w3svc");[/td][/tr][/table]
潘无忧 2008-7-16 19:11
[b][size=4]防范连续篡改攻击[/size][/b]
黑客一般在夜间对网站页面进行篡改,而此时网站工作人员都已下班,故而防范连续篡改攻击需要采用“破釜沉舟”的方法。当黑客第一次篡改后,程序可以及时恢复被篡改的文件,黑客篡改完验证是否成功时,发现篡改失败,很有可能继续进行第二次篡改(此时漏洞依然存在),如果程序继续恢复页面,则黑客很有可能调转目标,转而攻击防篡改程序,以达到目的。故而,为安全起见,当发现第二次篡改行为时,程序停止Web服务,并关闭计算机,使黑客失去攻击目标,直到服务器有人启动并对篡改进行处理。
我们可以利用Windows Server 2003操作系统中提供的shutdown/s命令关机。如果在其他版本的Windows Server中使用,可以拷贝该程序。
本文讨论了一个基于Windows 平台的、采用外挂式轮询技术设计并实现的网站页面防篡改系统。该系统目前已得到初步应用,为用户提供了一个简单、省时省力的平台。另外,该C程序经过一些改动,同样适用于Linux平台下运行。