Web的入侵防御系统的设计与实现
摘要
Web服务器往往得不到传统防御方式的有效保护,使其成为整个网络环境中安全最薄弱的地方。缓冲区溢出、SQL注入、基于脚本的DDos、盗链和跨站等攻击行为对Web服务器的安全和稳定造成极大的威胁,而目前缺少有效的防御和保护的方式。本课题中首先调研了当前Web服务器所面对的威胁,然后针对这些安全威胁设计了一套入侵防御系统,并通过ISAPI实现了对Windows平台下的IIS服务器的保护。在这套入侵防御系统中,可以通过制定策略来检测所有访问Web服务器的行为,可以有效地阻止恶意攻击从而保护Web服务器的安全。这套入侵防御系统的策略引擎可以加载和调用Lua语言编写的策略脚本,使策略脚本的编写更加简单。
关键词:
入侵防御;网络安全;ISAPI;Lua
Design and Implementation of Web
IntrusionPreventionSystem
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)
策略的名称
用来标示不同的策略,在加载过程中,C++加载器通过此名称生成C++策略的对象。在属性列表中这一条不能省略。
(2)
描述
描述策略的功能。可以省略。
(3)
类型
按类型可以把策略分为系统策略和用户策略。系统策略永远都是在用户策略前面调度。这两种不同类别的策略都可以由C++的类或者以脚本的方式实现。此属性的作用是在增加策略优先级调度的粒度。可以在配置文件中设置此值
(4)
加载器
表示策略该有什么样的加载器加载,加载器会将该策略转换成策略引擎能够调度的策略对象。
(5)
开启状态
可以给策略的设置开启状态:Enable和Disable,当一个策略处于Disable状态时,策略引擎会跳过对其的加载。
(6)
加载状态
策略的加载状态:Unloaded/Loaded,当策略的加载状态不处于Loaded时,策略引擎不对其进行调度。这个值不能在配置文件中设置,默认为Unloaded,当策略引擎成功加载此策略时,会将此值设置为Loaded。
(7)
优先级
通过优先级可以控制策略调度的顺序,优先级得范围是:0-255,值越低的优先级越高。
(8)
路径
记录策略脚本的位置,加载时通过这个属性找到相应的策略文件的路径。这个属性只对脚本加载器有效。
策略引擎加载策略的步骤如下:
(1)
IPS通过配置模块读取出策略属性列表,去掉此列表中策略名称重复的项,然后将此列表作为策略引擎初始化的参数或者作为策略引擎重新加载的参数。
(2)
策略引擎将由此列表中策略类型属性和优先级属性,由系统策略到用户策略,从高优先级策略到低优先级的策略的次序,进行排序。形成一个新的策略列表。
(3)
按后面的步骤依次加载这个策略列表中的属性。
(4)
如果策略的开启状态属性不为Enable,则跳过该策略,继续加载策略列表中后面的策略。
(5)
如果加载器的属性为C++则交由C++的策略加载器处理,如果是为脚本的就由相应的脚本加载器处理。如果不能识别则跳过该策略。
C++的加载器为一个策略对象的工厂类,会根据策略的名称生成不同的策略对象,如果找不到为该名称的策略则返回NULL表示加载失败。
脚本加载器会根据属性中的路径字段去读取策略脚本,加载器要完成策略脚本语法检测的步骤,加载成功时也是返回一个策略对象,加载失败返回NULL。
如上所述,加载器会将策略对象的初始化(C++对象是通过调用构造函数来实现)。所以在策略的调度前不需要再对策略做初始化。
(6)
加载成功后就将该策略的状态属性置为Loaded,如果是加载失败就保持该选项为Unload。
(7)
直到策略列表中的所有项都处理结束后,重新遍历这个列表,把Loaded的项依次提取出来,形成策略调度用的策略列表。
如果觉得《web服务器攻击与防御系统设计 Web的入侵防御系统的设计与实现论文》对你有帮助,请点赞、收藏,并留下你的观点哦!