防火墙规则配置错误快速检测算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2007年6月
June 2007
计 算 机 工 程Computer Engineering 第33卷 第11期
Vol.33 No.11 ·安全技术·
文章编号:1000—3428(2007)11—0132—03
文献标识码:A
中图分类号:TN915.04
防火墙规则配置错误快速检测算法
王卫平,陈文惠,朱卫未,陈华平
(中国科学技术大学信息管理与决策科学系,合肥 230026)
摘 要:在防火墙的规则配置中潜伏着一些问题:安全管理员可能在最初配置规则表的时候,出现一些错误;随着规则表中规则数目的增长,不同的规则之间发生冲突的可能性也相应增加。

该文对防火墙规则配置过程中可能出现的错误进行了分析,介绍了防火墙规则配置错误的几种常见类型,给出了发现错误的算法,并根据防火墙规则表的特点对算法进行了改进,提高了规则配置错误的检测效率。

关键词:防火墙;包过滤;规则冲突
Algorithm for Fast Detecting Firewall Rule Configuration Mistakes
WANG Weiping, CHEN Wenhui, ZHU Weiwei, CHEN Huaping
(Dept. of Information Management & Decision Science, University of Science & Technology of China, Hefei 230026)
【Abstract 】As enterprises’ network security barrier, firewalls play a very important role. Since enterprises configurate firewalls according to its need; the rule table will be included. However, problems may occur during configuration. On one hand, the administrator himself may make some mistakes during initial configuration. On the other hand, possibility of conflicts among different rules increases with rule numbers in the table growing. This paper analyzes possible mistakes in the configuration process. It introduces several familiar types of mistakes in configuration, puts forward the algorithm which can find mistakes. The paper improves the algorithm according to the characteristics of the firewall rule table, which increases efficiency of detecting configuration mistakes. 【Key words 】Firewall; Packet filtering; Rule conflict
1 概述
根据企业制定的安全策略,防火墙中保存着一个访问控
制列表,用以决定当数据包到来时应该采取的操作。

该访问控制列表由许多列表项组成,每个列表项称为一条规则,每个规则又由3个部分组成:规则号,过滤域和动作域。

规则号是规则在访问控制列表中的顺序,保证了数据包匹配的次序。

过滤域可以由许多项构成,但常用的有5项:源IP 地址,目标IP 地址,源端口,目标端口和协议。

动作域通常只有两种选择:接受,即允许数据包通过防火墙;拒绝,即不允许数据包通过。

表1就是一个防火墙规则表的样例。

表1 防火墙规则表样例
序号
协议
源IP 地址
源端口
目标IP 地址
目标端口
动作
1 TCP 192.168.30.20 any *.*.*.* 80 deny
2 TCP 192.168.30.* any *.*.*.* 80 accept
3 TCP *.*.*.* any 192.168.40.40 80 accept
4 TCP 192.168.30.* any 192.168.40.40 80 deny
5 TCP 192.168.30.30 any *.*.*.* 21 accept
6 TCP 192.168.30.* any *.*.*.* 21 deny
7 TCP 192.168.30.* any 192.168.40.40 21 deny
8 TCP 192.168.80.40 any 192.168.40.* any accept
9 UDP 192.168.30.* any 192.168.40.50 53 accept 10 UDP *.*.*.* any 192.168.40.50 53 accept 11 UDP *.*.*.* any 192.168.40.* any deny 12 UDP *.*.*.* any *.*.*.* any deny
当数据包到达防火墙时,顺序查找防火墙规则,直到某条规则的过滤域部分和数据包相匹配,再采取该规则对应的动作。

但是,规则表的配置很容易出现问题,下文中给出了常见的配置错误。

2 规则配置错误的常见类型
在防火墙的规则配置过程中,容易出现以下几种错误: (1)缺少默认规则
当数据包到达防火墙时,防火墙顺序的将其中的规则和数据包进行比较,直到某一条规则的过滤域和数据包的包头部分相匹配,再采取该规则规定的动作。

如果防火墙的规则表中所有的规则都和数据包不匹配,那么防火墙就没有办法决定如何处理这个数据包,错误也就出现了。

(2)存在无关规则
对于防火墙中的任何一条规则,它的源IP 地址域和目标IP 地址域必须和防火墙连接的网段相关。

否则,匹配该规则的数据包就不可能到达此防火墙,把这种规则称为无关规则。

(3)规则间相互屏蔽
对于防火墙中的每一条规则,都可能会有很多数据包和它匹配,条件是这些数据包的包头部分和这个规则的过滤域部分相匹配。

把这些数据包放到一起,构成一个集合,记为该规则的匹配集。

考虑两条规则R1和R2,R1在R2之前,R2的匹配集是R1的匹配集的子集,那么规则R2就不可能被激活,如果二者的动作域不同,那么规则R2就被规则R1屏蔽了。

对于二者动作域相同的情况,下文中有专门的论述。

(4)规则交叉冲突
对于规则R1和R2,如果二者的匹配集存在交集,但匹配集之间并没有包含关系存在,那么规则R1和R2就出现了规则交叉现象,匹配集的交集部分就给出了同时匹配这两条规则的数据包集合。

此时,如果R1的动作域和R2的动作域
基金项目:国家“863”计划基金资助项目(2003AA103710)作者简介:王卫平(1953-),女,副教授,主研方向:数据挖掘,信息安全;陈文惠、朱卫未,博士生;陈华平,教授、博导 收稿日期:2006-06-22 E-mail :brucechen@
—132

不同,那么称这两条规则存在规则交叉冲突。

(5)规则冗余
现在回过头来考虑在讨论规则间相互屏蔽时提到的情况。

对于两条规则R1和R2,R1在R2之前,R2的匹配集是R1的匹配集的子集,如果二者的动作域不同,那么规则R2就被规则R1屏蔽了,如果二者的动作域相同,那么,R2就是R1的冗余。

3 规则配置错误检测算法
针对上文列出的5种常见规则配置错误,设计了相应的算法。

共有两个算法来完成规则配置错误的发现,DetectSimpleError 和DetectConfilct 。

算法DetectSimpleError 可以发现前两种配置错误,因为只要扫描一下规则表就可以检测到前两种错误,算法比较容易设计,这里就不列出了。

后面3种错误都可以看成是规则间发生冲突,只是冲突的类型不同而已,算法DetectConflict 可以完成后3种规则配置错误的发现。

3.1 规则冲突检测算法原理
首先采用判定树模型[5]来进行规则冲突检测。

对于规则R1和R2,R1在R2之前,判定树的根节点表示二者协议域的比较,根节点有4个分支,分别表示:(1)R1的协议域是R2的协议域的真子集;(2)R1的协议域是R2的协议域的超集;(3)R1的协议域和R2的协议域相同;(4)R1的协议域和R2的协议域不相关。

对于分枝A 、B 和C 来说,它的根节点接着进行R1和R2的源IP 地址域的比较,并根据比较结果继续创建分枝,这个过程一直持续下去,直到能够产生比较结果。

对于分枝D ,很显然,规则R1和R2不可能产生冲突,R1和R2的比较也就完成了。

把判定树模型转化为算法就可以进行规则冲突的检测了。

判定树方法的特点是简单明了,但是速度却比较慢。

因此,在判定树方法的基础上,提出了一种新的规则冲突检测算法DetectConflict 。

3.2 规则冲突检测算法的实现
通过观察判定树模型,可以归纳出3种冲突错误的发生条件。

考虑两条规则R1和R2,R1在R2之前。

如果R1的过滤域的每部分是R2的对应部分的超集,或者和R2的对应部分相同,那么,当二者的动作域相同时,发生规则冗余,当二者的动作域不同时,R2被R1屏蔽。

如果R1的过滤域中至少有一个是R2的对应部分的超集,同时至少有一个是R2的对应部分的真子集,并且剩下的过滤域都和R2的对应部分存在包含关系,那么,当二者的动作域不同时,发生规则交叉冲突。

为了快速地确定规则R1和R2之间是否存在规则配置错误,首先把R1和R2的过滤域对应部分相比较,比较结果放到数组temp 中。

temp 数组共有5项,temp[1]存放的是协议域的比较结果,共有4种取值:0,1,2,3。

0表示R1的协议域和R2的协议域不可比较,1表示R1的协议域是R2的协议域的真子集,2表示R1的协议域和R2的协议域相同,3表示R1的协议域是R2的协议域的超集。

temp 数组的其它4项temp[2],temp[3],temp[4]和temp[5],分别对应源IP 地址域,源端口域,目标IP 地址域和目标端口域的比较结果,也共有4种取值:0,1,2,3,取值的意义参考协议域。


计算这5项的乘积∏,如果乘积为0,那么必然有部分过滤域不可比较,R1和R2就没有冲突;如果乘积不为0,
表示所有的temp[i]都不等于0,即过滤域相应部分都可以比较,就继续进行下去。

计算
=5
1
][i i temp ∏=−5
1
)
1][(i i temp
的值,如果该值不为0,那么所有的temp[i]要么是2,要么
是3,表示R1的过滤域的每部分不是和R2的对应部分相同,就是R2的对应部分的超集,再根据动作域的比较结果,就可以得出具体的错误类型了;那么如果该值为0呢?这就表示R1的过滤域中至少有一个是R2的对应部分的真子集,再进行最后一次计算就可以得出比较结果。

计算
∏=−5
1
)
3][(i i temp
如果该值为0,表示R1的过滤域中至少有一个是R2的对应部分的超集,那么,再根据动作域的比较结果,我们就可以判断出R1和R2之间是否存在冲突。

下面给出算法DetectConflict :
DetectConflict (Rule_table r ) { for k=1 to r.count-1 for j=k+1 to r.count { Compare(r[k],r[j],temp);
/*把规则r[k]和r[j]的比较结果放入temp 数组*/ If (∏!=0) {
=5
1][i i temp if (∏!=0) {
=−5
1
)1][(i i temp if (r[k].action=r[j].action)
print r[j]是r[k]的冗余; else
print r[j]被r[k]屏蔽; }
else if (∏=0 and r[k].action!=r[j].action)
=−5
1)3][(i i temp {print r[j]和r[k]发生交叉冲突; } } } }
3.3 仿真结果
将算法DetectSimpleError 和DetectConflict 分别应用于表1,得到如下结果:
规则表中缺少默认规则 规则8为无关规则
规则1和规则3发生交叉冲突 规则4被规则2屏蔽 …
从上面算法输出的结果不难看出,算法能够检测到本文提出的5种防火墙规则配置错误。

考虑到企业防火墙规则配置的保密性,本算法在虚构的规则集上进行了测试,获得了良好的效果。

与以前规则配置错误的检测算法如ABV ,OBV 相比,本算法可以检测到更多的配置错误,在实践中可以进一步提高规则配置的正确性,增加防火墙的安全性。

但是,上面的规则冲突检测算法DetectConflict 还存在着可以改进的地方。

该算法在检测冲突的时候,把每一对规则都拿出来进行比较,对规则表采用了两个循环操作来发现最终错误,如果规则表中规则数很多,那么速度就比较慢。

因而可以借鉴包分类算法的思想,进一步地提高规则冲突检测算法的速度。

4 改进的规则冲突检测算法
上文中已经提到了,目前算法执行速度慢的原因在于,它要对规则表执行两次循环操作。

那么为什么要执行两次循
—133—
环操作呢?这是因为算法并不知道有哪些规则对可能会发生冲突。

如果能够快速地把可能和一条规则发生冲突的规则集合列出来,就可以把这条规则和集合内的规则依次进行比较,很明显,这将大大缩短比较的时间,因而可以提高规则冲突检测的速度。

协议域是规则过滤域部分的其中一项,很显然,协议域不同的规则之间不可能发生冲突,因而可以进行第1项改进:将协议域为TCP 的规则单独放入一张表中,名为TCPRuleTable ,规则的序号不变,同时,将协议域为UDP 的规则单独放入一张表中,名为UDPRuleTable ,规则的序号也不变。

那么,如果需要查找存在冲突的规则,只需要到相应的表中查找,这可以减少相当一部分搜索时间。

现在考虑规则过滤域中源IP 地址和目的IP 地址两个部分。

以TCPRuleTable 表为例,建立两个Trie [4]:一个对应于该表的源IP 地址部分,另一个对应于该表的目的IP 地址部分。

对于源IP 地址Trie 中的每一个有效前缀节点N ,都有两个比特向量与之对应。

第1个比特向量(bitVect1)的第i 位为1,当且仅当存在规则r[i],该规则的源IP 地址域是节点前缀的精确匹配。

第2个比特向量(bitVect2)满足一个恒等式:
U U 1.)2.(2.bitVect N bitVect C bitVect N =
实际上,bitVect1为1的位表示对应规则的源IP 地址域和节点前缀相同,bitVect2为1的位表示节点前缀是对应规则的源IP 地址域的前缀。

对于目的IP 地址Trie ,也做同样的工作,现在已经对TCPRuleTable 表构造了两个Trie 。

同样地,也对UDPRuleTable 表构造两个Trie ,构造的方法如上所述。

考虑一条规则R ,需要判断它和哪些规则发生冲突。

(1)察看R 的协议域,如果协议域是TCP ,那么就到TCPRuleTable 表构造的Trie 去寻找冲突;否则,就在UDPRuleTable 表的对应Trie 寻找。

(2)在源IP 地址Trie 上寻找。

从根节点开始,把所有有效前缀节点的bitVect1并在一起,记作s_ipVect ,结束条件是找到规则R 的精确匹配节点N ,此时向量s_ipVect 为1的位表示对应规则的源IP 地址域要么是R 的前缀,要么和R 相同。

如果N 是有效前缀节点,那么N 的第2个比特向量bitVect2就记载了这些规则,R 的源IP 地址是它们的前缀,把N.bitVect2和s_ipVect 并在一起,就可以看到所有和R 的源IP 地址有关的规则;如果N 不是有效前缀节点,那么把N 的所有第1次遇到的孩子节点的bitVect2并在一起,条件是这些孩子节点是有效前缀节点,把合并的结果再和s_ipVect 并在一起,也可以看到所有和R 的源IP 地址有关的规则。

(3)对目的IP 地址Trie 做同样的工作。

(4)将前两步的结果相交,就形成了最终可能出现冲突的规则。

(5)类似于前面的算法,在第(4)步的结果集内进行比较,找到冲突规则。

伪代码如下:
FastDetectConflict(rule r)
{ if (r.protocol=TCP)
{ //下面是源IP 地址Trie 部分 temp=0;
for each valid prefix node M from root until an exact match of r.s_ip
;
U temp bitVect M temp 1.= if r.s_ip matches a valid prefix node M
{; }
U 2.bitVect M temp temp = Else
{;
U U temp bitVect L temp 2.=/* L 表示节点N 以后第一次遇到的有效前缀节点 */
}
//下面是目的IP 地址Trie 部分 temp1=0; …
//得出可能产生冲突的规则
21temp temp temp =∩;
//将r 和temp2中为1的规则进行比较 … }
else if (r.protocol=UDP) { … } }
算法DetectConflict 在查找与一条规则发生冲突的规则集的时间复杂度是O(n),而算法FastDetectConflict 只需在Trie 上查找,时间复杂度是O(h),h 是Trie 树的高度。

当规则数很大的时候,算法FastDetectConflict 的两个改进可以大大的缩短规则冲突查询的时间。

算法DetectConflict 只需要把规则表存储一次,因而空间复杂度为O(n),而算法FastDetectConflict 分散存储了UDP 和TCP 规则,这一步是不增加存储空间的,关键是接下来它要存储两个Trie 树,对于树的每一个有效前缀节点还要有两个比特向量,因而算法FastDetectConflict 需要更多的空间。

5 结论和展望
作为企业网络安全的屏障,防火墙发挥着巨大的作用。

但是,如果没有对防火墙进行正确的配置,这个屏障也就形同虚设。

本文就防火墙的规则配置过程中容易出现的几种错误进行了分析,并且给出了检测错误的算法。

改进后的算法具有较快的执行速度,可以获得更高的执行效率。

目前对于防火墙规则配置错误的研究还不太多,我们认为可以对提高规则配置错误的检测速度、进一步明确规则配置错误的类型这两个方面进行进一步的研究。

目前规则配置错误的分类还不是很完善,进一步研究规则配置错误的分类可以使我们发现更多的隐藏错误,提高防火墙的安全性。

参考文献
1 Gouda M, Liu X. Firewall Design: Consistency, Completeness, and Compactness[C]//Proceedings of the 24th IEEE International Conference on Distributed. 2004-03.
2 Al-Shaer E, Hamed H. Design and Implementation of Firewall Policy Advisor Tools[R]. School of Computer Science Telecommunications and Information Systems, DePaul University, CTI-techrep: 0801, 2002-08.
3 Hari B, Suri S, Parulkar G . Detecting and Resolving Packet Filter Conflicts[C]//Proceedings of IEEE INFOCOM'00. 2000-03.
4 Baboescu F, Varghese G . Fast and Scalable Conflict Detection for Packet Classifiers[C]//Proceedings of the 10th IEEE International Conference on Network Protocols. 2002.
5 Han J, Kamber M. Data Mining: Concepts and Techniques[M]. Morgan Kaufmann, 2000.
—134
—。

相关文档
最新文档