Web 的入侵防御系统的设计与实现
摘 要
Web 服务器往往得不到传统防御方式的有效保护,使其成为整个网络环境中
安全最薄弱的地方。缓冲区溢出、SQL 注入、基于脚本的 DDos、盗链和跨站等攻
击行为对 Web 服务器的安全和稳定造成极大的威胁,而目前缺少有效的防御和保
护的方式。本课题中首先调研了当前 Web 服务器所面对的威胁,然后针对这些安
全威胁设计了一套入侵防御系统,并通过 ISAPI 实现了对 Windows 平台下的 IIS
服务器的保护。在这套入侵防御系统中,可以通过制定策略来检测所有访问 Web
服务器的行为,可以有效地阻止恶意攻击从而保护 Web 服务器的安全。这套入侵
防御系统的策略引擎可以加载和调用 Lua 语言编写的策略脚本,使策略脚本的编
写更加简单。
关键词: 入侵防御;网络安全;ISAPI;Lua
Design and Implementation of Web
Intrusion Prevention System
Abstract
Web server can not often get the effective protection of traditional defense
mechanism, makes it become the weakest area in the whole network. The attacks,
such as Buffer overflow, SQL injection, DDos based on script, Resource steal and
Cross-site, cause the great threat to the security and stability of Web server, and lack
effective defense and protection way at present. This paper introduces the different
attack ways to a Web server at first, then designs an intrusion prevention system for
the Web server and implements the protection of IIS server under Windows platform
through ISAPI. The intrusion prevention system can measure the behaviors of all
visiting Web servers through the strategies and protect the Web Server against the
malicious attacks. The security strategies engine of the system can load and transfer
the strategy scripts written in Lua language, It make strategy scripts writing more
simpler.
Key words: Intrusions prevention; network security; ISAPI; Lua
目 录
1 引言 .................................................................................................................................... 1
2 Web 服务器所受的威胁及防御........................................................................................1
2.1 缓冲区溢出 ............................................................................................................ 1
2.2
SQL 注入攻击 ........................................................................................................1
2.3 基于脚本的 DDos 攻击.........................................................................................2
2.4 其他的不安全因素 ................................................................................................ 3
3 Web 的入侵防御系统的设计 ............................................................................................4
3.1 体系结构 ................................................................................................................ 4
3.2 处理流程 ................................................................................................................ 5
3.3 对客户端访问的响应 ............................................................................................7
3.4 策略引擎的设计 .................................................................................................... 8
3.4.1 策略的属性 .................................................................................................8
3.4.2 策略的加载 .................................................................................................9
3.4.3 策略的调度 ...............................................................................................10
3.4.4 策略的接口 ...............................................................................................10
4 Web 的入侵防御系统的实现 ..........................................................................................11
4.1 基于 ISAPI 的解析及响应模块的实现 .............................................................11
4.1.1 使用 ISAPI Filter 获取 Http 报文信息 ....................................................11
4.1.2 使用 ISAPI 进行 Http 响应 ..................................................................... 13
4.1.3 在服务器上的安装配置 ISAPI Filter......................................................14
4.2 基于 Lua 的策略实现..........................................................................................15
4.2.1 对策略的封装 ...........................................................................................15
4.2.2 Lua 策略脚本示例 .................................................................................... 15
4.3 基于 xml 的策略管理..........................................................................................16
5 系统运行过程及测试...................................................................................................... 16
论 .................................................................................................................................. 18
参考文献 .................................................................................................................................. 18
结
1 引言
连接入互联网中的每一台服务器每时每刻都会受到来自病毒蠕虫的侵扰和
黑客的入侵。目前,很多针对 Web 服务器的攻击都是通过 Http 协议发起的,所
以传统的防火墙对诸如 SQL 注入这种攻击方式不能提供很好的保护。在很多网
络环境中,正是由于 Web 服务器同时对内部网络和外部网络提供服务,使其成
为整个网络中最常被攻击的目标。恶意的攻击者往往通过 Web 服务器上的突破
口,来进一步对内部网络进行渗透。所以,Web 服务器的安全显得尤为重要。
本课题的首先对 Web 服务器所受到的威胁及相应的防御方式做了一些调研,
然后针对 Web 服务器所受的这些威胁设计了一套专门针对 Web 服务器安全的轻
量级的入侵防御系统, 并通过 ISAPI 实现了 Windows 平台环境下保护 IIS 服务
器的系统。这套系统通过策略来控制访问 Web 服务器的行为,它的策略引擎可
以加载 Lua 脚本编写的策略,所以策略的编写十分容易。通过对这套系统的运行
检测可以发现它能有效的保护 Web 服务器的安全。
2 Web 服务器所受的威胁及防御
Web 服务器在互联网环境中会遭受格式各样的安全威胁,下面列出的是一些
当前主流的针对 Web 服务器的攻击方式,它们有的会导致服务器被非法控制,
有的会使服务器无法提供正常的服务,而有的甚至会对访问者的机器造成破坏。
2.1 缓冲区溢出
缓冲区溢出[1]主要是因为 Web 服务器程序对客户端提交的数据缺少安全必
要的长度检测,服务器程序的堆栈被恶意数据填充,导致服务器程序执行非法的
指令或产生拒绝服务。如曾经造成十分大危害的蠕虫“红色代码(Red Code)”
和“尼姆达(Nimda)”都是利用 IIS 的缓冲区溢出的漏洞而传播的。目前,缓冲
区溢出是很难杜绝的,因为 Web 服务器程序开发的测试阶段无法对所有客户端
可能提交的数据进行测试,所以不能确保 Web 服务器程序完全没有缓冲区溢出
威胁的存在。
因为 Web 服务器程序提供专有的 HTTP 服务,所以我们可以通过 HTTP 协
议确定客户端提交数据中每个字段的长度的合理范围,通过对所有用户提交的数
据都进行严格的长度检测是对缓冲区溢出攻击的有效防御方式。
2.2 SQL 注入攻击
SQL 注入攻击[2]是近几年非常流行的攻击方式。对一个内部网络的渗透往往
是从 Web 服务脚本入手(如 ASP,PHP 等),而 SQL 注入漏洞通常是 Web 服务
脚本中最容易找到的。目前互联网上仍然存在很多有此风险的服务器。
SQL 注入同样也是对客户端提交的数据没有进行必要的检测过滤造成的。
构造特殊的数据提交到存在此缺陷的 Web 服务器上后,可以导致恶意的 SQL 语
句注入到 Web 脚本的 SQL 调用中,从而泄露敏感信息或者执行威胁的 SQL 指令。
无论是何种 Web 脚本语本语言或何种数据库,如果编码人员缺乏相关的安全意
识,都可能会导致此缺陷的存在。
目前对 SQL 注入攻击提出的防御方案有:
(1) 在服务端正式处理之前对提交数据的合法性进行检查;
(2) 封装客户端提交信息;
(3) 替换或删除敏感字符/字符串;
(4) 屏蔽出错信息。
方案(1)被公认是最根本的解决方案,在确认客户端的输入合法之前,服务
端拒绝进行关键性的处理操作,不过这需要开发者能够以一种安全的方式来构建
网络应用程序,虽然已有大量针对在网络应用程序开发中如何安全地访问数据库
的文档出版,但仍然有很多开发者缺乏足够的安全意识,造成开发出的产品中依
旧存在注入漏洞;方案(2)的做法需要 RDBMS 的支持,目前只有 Oracle 采用该
技术;方案(3)则是一种不完全的解决措施,例如,当客户端的输入为“…
ccmdmcmdd…”时,在对敏感字符串“cmd”替换删除以后,剩下的字符正好是
“…cmd…”;方案(4)是目前最常被采用的方法,很多安全文档都认为 SQL 注入
攻击需要通过错误信息收集信息,有些甚至声称某些特殊的任务若缺乏详细的错
误信息则不能完成,这使很多安全专家形成一种观念,即注入攻击在缺乏详细错
误的情况下不能实施。
2.3 基于脚本的 DDos 攻击
当一个入侵者无法找到目标 Web 服务器的有效渗透方式时,很可能选择
DDos 这种攻击方式。传统的 DDos 攻击方式在一台硬件防火墙面往往失去了它
的威力,而基于脚本的 DDos 攻击在近几年里逐渐成为对 Web 服务器发起拒绝
服务的有效方式。
和传统的 DDos 攻击针对服务器操作系统本身或网络带宽的消耗而言,基于
脚本的攻击方式是针对应用程序的消耗来达到拒绝服务攻击的目的。对静态网页
来说,这种攻击方式往往达不到它的攻击效果,而动态网页中,都会有一些对资
源占用比较多的页面,比如包含复杂查询语句的页面,很可能在一次访问过程中
会有较长时间访问数据库的行为,通过多线程,分布式的访问这个页面就可以造
成拒绝服务的效果。目前,流行的 CC 工具就是利用这个原理来实现基于脚本的
DDos 攻击。
基于脚本的 DDos 的另一种攻击方法是利用 Web 系统中信息提交的功能提
交垃圾数据。
防御这种攻击方式的方法有以下几种:
(1) 防止客户端的快速刷新,可以通过 Cookie 或者 Session 来实现
(2) 对消耗较大的页面进行识别码认证,确保是人而不是恶意的自动化程序
在访问这个页面。
(3) 限制每个客户端访问的线程数
2.4 其他的不安全因素
除了上面所列的几种 Web 服务器常见的攻击威胁外,还存在一些其他的不
安全因素。
(1) 缺少经验的系统管理员往往没有正确的设置服务器文件系统的权限
当一个入侵者获得到 Web 服务器上的较低的权限时,他通常会想方设法的
提升自己的权限,而服务器文件系统的权限系统没有正确设置时,可以通过较低
的权限下获取到服务器上的敏感信息,为提升权限提供了条件。
(2) 盗链
盗链虽然不是一种攻击手段,但因其消耗了大量的服务器资源和带宽,所以
也是对当前 Web 服务器的稳定影响比较大的因素。盗链的定义是:此内容不在
自己服务器上,而通过技术手段,绕过别人放广告有利益的最终页,直接在自己
的有广告有利益的页面上向最终用户提供此内容。 常常是一些名不见经传的小
网站来盗取一些有实力的大网站的地址(比如一些音乐、图片、软件的下载地址)
然后放置在自己的网站中,通过这种方法盗取大网站的空间和流量。另外一种盗
链是像讯雷这样的 P2SP 的下载软件,可以让客户端以类似 BT 的方式同时从多
台服务器上下载文件。
对盗链的防御往往是通过设定一些访问策略来实现,如检查客户端 http 报头
的 refer 字段等。
(3) 脚本自身的 Bug
Web 服务器上所运行的动态脚本(ASP、ASP.NET、JSP 和 PHP 等等)自身所带
的 Bug 也会给 Web 服务器的安全带来极大的威胁。例如前面所提的 SQL 注入也
是属于 Web 脚本的 Bug。恶意的攻击者可能可以利用这些脚本中的 Bug 轻易的
获得 Web 服务器的权限。很多 Web 服务器上采用的是开源的网站系统,而有的
管理员因为设置上的疏忽(例如编辑源码后产生的 bak 文件,数据库的路径没有
保护等等),给攻击者入侵打开了方便之门。
对于这类来自脚本自身的安全威胁,好的防御方式是时常关注源码站点的补
丁信息,对 Web 服务器的环境进行安全配置,防止数据库这样会透露敏感信息
的文件被下载等等。
上面所介绍的这些对 Web 服务器的威胁,虽然只是对 Web 服务器众多攻击
方式中的某几种,但我们可以看出,对 Web 服务器的攻击行为往往都具有和普
通的访问不同的行为。我们可以通过这些非正常的访问行为鉴别出恶意的攻击访
问。下面将介绍对 Web 服务器进行入侵防御系统的设计和实现。
3 Web 的入侵防御系统的设计
由于系统要对客户端发送的 Http 报文进行分析,这需要对 Http 报文进行解
析,Http 报文解析的方式主要有两种:
(1)自解析:系统对原始数据报文自行解析;
(2)由 Web 服务器进行解析,需要时系统通过 Web 服务器提供的接口查询。
方式(1)可以提供比方式(2)更好的移植性,但这种报文解析的方式需要一种
截获下层原始报文的能力,这可以通过截获传输层或网际层报文的实现,由于我
们将这套系统定位于仅针对 Web 访问的入侵防御,我们对 Http 协议外的报文并
不关心,所以我们选择方式(2)作为我们的 Http 报文解析方案,即通过 Web
服务器提供的接口仅仅截获应用层的 Http 报文。
要对客户端发起的请求进行完全的监控光靠检测客户端的行为是不够的,因
为这样我们只知道客户端发起什么样的请求但无法知道服务器端是如何对客户
端进行响应的。一次完整的 Http 会话既然包括客户端发送请求和服务器端对请
求的响应,那么只有监控服务器端响应的内容后,才能知道这次 Http 会话何时
结束。如果 Web 服务器提供 Http 报文封装的接口,则在对客户端进行响应时我
们也尽量调用 Web 服务器的这些接口而不是自己组装 Http 报文。
这样,这套入侵防御系统的核心便是其策略引擎, 通过强大而灵活的策略
引擎来实现特征检测或者异常检测。下面将介绍这个 Web 的入侵防御系统的具
体体系结构和处理流程。
3.1 体系结构
通常一个系统会采用多层或者单层的体系结构。多层的结构将不同功能的模
块进行了划分,层与层之间靠定义好的接口进行通信,单层的结构将模块都紧耦
合在一起,模块与模块间有交叉调用。多层的结构比单层的结构具有良好的扩展
性,而单层结构可以模块间的交互更加高效。为了能使系统适合不同的 Web 服
务器平台,综合以上的因素考虑后,本系统采用分层的体系结构。图 1 为本系统
的体系结构图。
如图 1 所示,这个 Web 的入侵防御系统主要分层了以下三层:
(1) 解析及响应层
这一层为整个防御系统提供对客户端发送的 Http 报文请求的解析及服务器
响应时 Http 报文封装的接口。当有客户端访问服务器时,通知策略引擎调度策
略检测客户端的访问信息,并为策略引擎提供响应的实现。按照前面的分析,这
一层是由服务器提供的接口封装实现。
(2) 策略引擎
这一层的作用是策略的调度,在策略中通过“解析及响应”层提供的接口获
取客户端的信息,具体的响应也交给“解析及响应”层完成。同时策略引擎还需
解析及响应
Http 报文的解析及响应
策略引擎
策略引擎
数据管理
日志记录
配置管理
策略脚本解析
图 1 Web IPS 的体系结构
要调度数据管理层完成策略的加载,以及日志记录的功能。
(3) 数据管理
这一层提供日志记录、配置管理及策略脚本解析的功能。所以对数据进行处
理的过程都是在这一层里完成。
每一层都完成相对独立的功能,当某一层的实现发生变化时,只要提供的接
口没有变化,对其他几层就没有影响。这样整个结构就有很大的扩展性,例如:
我们可以把解析和响应层的具体实现是由调用 Web 服务器自身接口的方式替换
为直接截获传输层网络层封包的方式等等。下面将介绍具体的处理流程。
3.2 处理流程
Web IPS 的处理流程如图 2 所示,具体流程如下:当客户端发送 Http 请求时,
原始的数据报文经 Http 报文解析模块解析,报文解析模块会通知策略引擎模块
对客户端的信息进行检测,策略引擎会依据策略脚本中编写的策略,通知 Http
响应模块对客户端的行为做出响应,并依据策略脚本中的策略,通知日志记录模
块记录相应的日志。
依据 Web IPS 系统的体系结构及处理流程,系统主要模块和作用如下:
(1) IPS 管理模块
负责管理和连接各个模块,管理数据流,读取配置文件后完成整个系统的初
始化,对整个系统的状态进行管理:运行,停止,重新加载。当 Http 报文解析
模块通知有客户端的访问时,调用策略引擎对客户端的行为及信息进行检测,对
策略引擎返回的结果通知 Http 响应模块进行响应。