English
 电子信箱
 加入收藏

  威盾防火墙 >> 支持与下载 >> 技术文章 >> Web页面防篡改及防重放机制

 

Web页面防篡改及防重放机制

威盾防火墙 2008-06-12

 

0 引言

  当今国内外占统治地位的Web服务器,如Apache、IIS等,对用户请求的页面缺乏完整性保护机制,无法有效防止页面被篡改。这样,黑客可以在不知不觉中侵入系统,并修改关键页面。一般来说,主页的篡改对计算机系统本身不会产生直接的损失,但对电子政务与电子商务等需要与用户通过网站进行沟通的应用来说,就意味着电子政务或电子商务将被迫终止对外的服务。对政府网站而言,网页的篡改,尤其是含有政治攻击色彩的篡改,会对政府形象造成严重损害。最近又出现能自动篡改网页的“蠕虫”病毒更加迫切需要安全的网页防篡改技术。

  同时,很多Web服务器也缺乏对Web页面的防重放机制,对未知Web页面无法进行有效的鉴别。黑客侵入系统后未经授权就可放置木马脚本程序,给黑客非法入侵留下“后门”。

  为此,有必要采取有效措施防止Web服务器上的Web页面文件被篡改或重放。通过对ApacheAPI及模块的研究来实现相应的防篡改和防重放中间件,从而实现对Web服务器攻击的主动防御。

1 页面防篡改和防重放机制

  利用PKI提供的数据完整性服务,基于Apache的模块扩展机制编写自定义中间件,对Web页面进行实时的原始性鉴别,防止Web页面在存储过程中被篡改,保证Web页面的完整性和权威性;同时还能检测未经允许放置的后台Web脚本程序并禁止其非法执行。管理员每次上传Web文件时,服务器采用严格的基于PKI的身份认证,确认管理员身份无误后,建立高强度SSL连接,保证上传文件的可靠性。系统接收文件后,先求出页面文件原文的数据摘要,然后对数据摘要用Web服务器的私钥和非对称加密算法对摘要进行加密得到数字签名。数据摘要提供了一种检测页面文件是否被改动过的方法,而数字签名则防止数据摘要本身被篡改。以后Internet用户每次请求访问页面时,服务器均通过内嵌的页面原始性鉴别中间件进行实时的页面检测,若原始性验证通过,则同意用户访问,否则进行相应处理(如拒绝访问并报警、恢复被篡改的页面等)。这样,即便不幸被黑客侵入系统、修改或重新放置Web页面后,服务器也不会将错误的页面误传给用户而造成不良后果。

  具备防篡改和防重放机制的Web服务器成为增强型的安全Web服务器,其模块化体系结构如图1所示。

2 页面防篡改和防重放的实现

2.1 页面签名

  本文中使用的签名文件具有如图2所示的统一格式。

  其中每个域的具体含义如下:

  签名标志符:其值可以自行定义,如signedpages;

  摘要算法标识符:可以使用目前国内外常用的摘要生成算法,如MD5、SHA 1等;

  签名算法标识符:可以使用目前国内外常用的非对称加密算法,如:RSA、DSA、ECC及DH等;签名长度:数字签名内容的长度,此处固定为128;

  原始Web页面文件长度:未经签名前的原始页面文件长度;

  数字签名:对原文及文件头使用服务器私钥进行数字签名后得到的签名内容;

  原始Web页面文件内容:未经签名前的原始页面文件内容。

 

  具体的签名流程如图3所示。根据不同安全级别的要求和安全Web服务器性能的要求,用户可以使用不同强度的签名算法。

 

2.2 中间件对页面请求的处理

  我们通过研究Apache对页面请求进行处理的详细过程,设计出Apache防篡改和防重放中间件,实现对已签名页面的实时访问控制。

  Apache对页面请求的处理用到了一个非常重要的请求对象结构request_rec,它包含了请求的URI、文件名、路径信息、参数、正文内容的类型和正文内容的译码方式等众多信息,其请求过程可分解为如下几个环节,如表1所示。

  这些步骤通过搜寻一系列有“继承”关系的模块来进行处理。每一步骤可以对应一个处理程序,如果某一模块句柄匹配某一步骤的处理,就尝试调用该模块来进行处理。在模块中一般执行如下任务:

  1)处理请求,如果成功执行,就返回信息OK。

  2)拒绝处理请求,并返回信息DECLINED。这种情况下,服务器会认为对应的处理程序不存在。

  3)通过返回一个HTTP错误代码发出出错信号,终止对客户端请求的处理。 

  Web页面防篡改和防重放中间件是使用ApacheAPI编写的一个Apache服务器扩展模块,它嵌入到Apache中运行,其处理被放在了Apache事务处理过程的头部解析处理阶段。用户通过浏览器请求已进行数字签名的Web页面时,由该模块在传输之前对该文件进行原始性鉴别,然后根据页面的当前状况以不同形式反馈给用户。其模块signedornot_module定义如下所示:

moduleMODULE_VAR_EXPORTsignedornot_module={

STANDARD_MODULE_STUFF,

NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,

signedornot_handler,  //防篡改和防重放hook

NULL,NULL,NULL}

  Apache通过使用钩子函数来调用定制代码。钩子函数是一个在Apache上的注册函数,它在特定点被调用。对于不需要执行特定处理程序的钩子函数,模块声明中用NULL值表示,否则必须给出对应的处理函数名。在Web页面防篡改和防重放模块的模块声明时,就注册了用于防篡改和防重放处理的signedornot_handler钩子函数:

staticintsignedornot_handler(request_rec req)

{……/* 具体的防篡改和防重放过程 */}

  其执行过程如图4所示。

3 结语

  一般的Web页面防篡改系统采用的是外挂轮询式技术,即周期性地从外部逐个访问Web页面,来判断页面的原始性。对于每个Web页面来说,轮询扫描存在着较长的时间间隔。在这个时间间隔里,黑客可以攻击系统并使公众访问到被篡改的网页。本文提出的内嵌式Web页面防篡改和防重放中间件,运行于Web服务器内部,与Web服务器无缝结合。每次Web服务器对外发送Web页面时,都会进行页面防篡改和防重放检测,从而能够实时地监测每个被访Web页面的原始性,即便网站不幸被黑客入侵,也不用担心Web页面被恶意篡改,还可以防范黑客重新放置恶意页面或脚本等,提高系统的安全性。将其与页面加密存储访问技术等结合使用,更能积极主动地保障Web服务器的内部安全。

  上面给出的Web页面防篡改和防重放机制已在研制出的多功能安全Web服务器中应用,有效增强了服务器的安全性和可靠性。

参考文献:

[1] THAURS.ApacheAPInotes[EB/OL].http://modules.apache.org/doc/API.html,2004-12-26.

[2]] PAREKHS. Introduction to programming for the Apache API[EB/OL].http://modules.apache.org/doc/Intro_API_Prog.html,2005-04-13.

[3] KABIRMJ.Apache服务器实用大全[M].北京:水利水电出版社,2001.

[4] HOLDENG.ApacheServer源代码分析[M].北京:机械工业出版社,2000.

[5] 张建华,李涛,刘晓洁,等.Web页面加密存储及访问机制[J].计算机工程,2004,30(13):97-98.


相关内容: 最新内容:
从理论上讲 网页防篡改技术追踪[2008-06-12]
从理论上讲 网页防篡改技术追踪[2008-06-12]
增强Exchange服务器的安全性[2008-06-10]
打造完美安全系统—修补系统全攻略[2008-06-10]
安装IIS后出现500错误的解决办法[2008-06-09]
在win2003下设置IIS及DNS的问题[2008-06-09]
解决IIS6目录检查安全漏洞的办法[2008-06-09]