维普资讯 http://www.cqvip.com 第33卷 第11期 Vo1.33 ・计算机工程 2007年6月 June 2007 No.11 Computer Engineering 安全技术・ 文章编号:100o_-3428(2007)11—ll132—ll3 文献标识码:A 中图分类号:TN915.04 防火墙规则配置错误快速检测算法 王卫平,陈文惠,朱卫未,陈华平 (中国科学技术大学信息管理与决策科学系,合肥230026) 摘要:在防火墙的规则配置中潜伏着一些问题:安全管理员可能在最初配置规则表的时候,出现一些错误;随着规则表中规则数目的增 长,不忙d的规则之间发生冲突的可能性也相应增加。该文对防火墙规则配置过程中可能出现的错误进行了分析,介绍了防火墙规则配置错 误的几种常见类型,给出了发现错误的算法,并根据防火墙规则表的特点对算法进行了改进,提高了规则配置错误的检测效率。 关健诃:防火墙;包过滤;规则冲突 Algorithm for Fast Detecting Firewall Rule C0nfigurati0n 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,firew',dls 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 iniital configuration.On the other hand,possibility of conflicts among diferent rules increases wih rtule numbers in the table groⅥ ing 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. 【Ke≥,words]Firewall;Packet filtering;Rule conflict 1概述 根据企业制定的安全策略,防火墙中保存着一个访问控 (1)缺少默认规则 当数据包到达防火墙时,防火墙顺序的将其中的规则和 数据包进行比较,直到某一条规则的过滤域和数据包的包头 部分相匹配,再采取该规则规定的动作。如果防火墙的规则 表中所有的规则都和数据包不匹配,那么防火墙就没有办法 决定如何处理这个数据包,错误也就出现了。 (2)存在无关规则 对于防火墙中的任何一条规则,它的源IP地址域和目标 JP地址域必须和防火墙连接的网段相关。否则,匹配该规则 的数据包就不可能到达此防火墙,把这种规则称为无关规则。 (3)规则问相互屏蔽 制列表,用以决定当数据包到来时应该采取的操作。该访问 控制列表由许多列表项组成,每个列表项称为一条规则,每 个规则又由3个部分组成:规则号,过滤域和动作域。规则 号是规则在访问控制列表中的顺序,保证了数据包匹配的次 序。过滤域可以由许多项构成,但常用的有5项:源IP地址, 目标IP地址,源端口,目标端口和协议。动作域通常只有两 种选择:接受,即允许数据包通过防火墙;拒绝,即不允许 数据包通过。表1就是一个防火墙规则表的样例。 表1防火|I规列表样倒 序号 l 2 3 协议 TCP TCP TCP 源IP 地址 l92 l68 30 20 l92 l68 30 源端口 any any any 日标IP 地址 目标 端口 80 80 动作 deny accept 对于防火墙中的每一条规则,都可能会有很多数据包和 它匹配,条件是这些数据包的包头部分和这个规则的过滤域 部分相匹配。把这些数据包放到一起,构成一个集合,记为 该规则的匹配集。考虑两条规则RI和R2,RI在R2之前, R2的匹配集是R1的匹配集的子集,那么规则R2就不可能 被激活,如果二者的动作域不同,那么规则R2就被规则RI 屏蔽了。对于二者动作域相同的情况,下文中有专门的论述。 (4)规则交叉冲突 l92 l68 40 40 80 4 5 6 TCP TCP TCP l92 l68 30 l92168 30 30 192.168 30 any any any l92 l68.40 40 80 2l 2l deny deny 7 8 TCP TCP l92 l68 30} I92I68 8O 40 any any l92 l68 40 40 I92 I68 40 2l any deny accept 9 IO 】I UDP UDP UDP 192168 3O any any any l92 I68.40 5O l92 168 40 50 j92 j68 40 53 53 any accept accept deny 对于规则RI和R2,如果二者的匹配集存在交集,但匹 配集之问并没有包含关系存在,那么规则RI和R2就出现了 规则交叉现象,匹配集的交集部分就给出了同时匹配这两条 规则的数据包集合。此时,如果R1的动作域和R2的动作域 基金项目:国家“863”计划基金资助项目(2003AA103710) l2 UDP any any deny 当数据包到达防火墙时,顺序查找防火墙规则,直到某 条规则的过滤域部分和数据包相匹配,再采取该规则对应的 动作。但是,规则表的配置很容易出现问题,F文中给出了 常见的配置错误。 2规则配置错误的常见类型 在防火墙的规则配置过程中,容易出现以下几种错误: 作者简介:王卫平(1953一),女,副教授,主研方向:数据挖掘,信 息安全;陈文惠、朱卫未,博士生;陈华平,教授、博导 收稿日期:2006—06—22 E-mail:brucechen@ustc.edu l32一 维普资讯 http://www.cqvip.com 不同,那么称这两条规则存在规则交叉冲突。 (5)规则冗余 现在回过头来考虑在讨论规则间相互屏蔽时提到的情 况。对于两条规则R1和R2,R1在R2之前,R2的匹配集是 R1的匹配集的子集,如果二者的动作域不同,那么规则R2 就被规则R1屏蔽了,如果二者的动作域相同,那么,R2就 是Rl的冗余。 3规则配置错误检测算法 针对上文列出的5种常见规则配置错误,设计了相应的 算法。共有两个算法来完成规则配置错误的发现, DetectSimpleError和DetectConfilct。算法DetectSimpleError 可以发现前两种配置错误,因为只要扫描一下规则表就可以 检测到前两种错误,算法比较容易设计,这里就不列出了。 后面3种错误都可以看成是规则间发生冲突,只是冲突的类 型不同而已,算法DetectConflict可以完成后3种规则配置错 误的发现。 3.1规则冲突检测算法原理 首先采用判定树模型 来进行规则冲突检测。 对于规则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的协议域不可比较,l表示Rl的协议域是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项的乘积Jltemp[i】,如果乘积为0,那么必然有部分 过滤域不可比较,R1和R2就没有冲突;如果乘积不为0, 表示所有的temp[i]都不等于0,即过滤域相应部分都可以比 较,就继续进行下去。计算 5 1-I(temp[ ]一1) i=1 的值,如果该值不为0,那么所有的temp[i]要么是2,要么 是3,表示R1的过滤域的每部分不是和R2的对应部分相同, 就是R2的对应部分的超集,再根据动作域的比较结果,就 可以得出具体的错误类型了;那么如果该值为0呢?这就表 示R1的过滤域中至少有一个是R2的对应部分的真子集,再 进行最后一次计算就可以得出比较结果。计算 5 兀(temp…一3) l 如果该值为0,表示Rl的过滤域中至少有一个是R2的 对应部分的超集,那么,再根据动作域的比较结果,我们就 可以判断出R1和R2之间是否存在冲突。下面给出算法 DetectConfljct: DetectConflict(Rule—table r) f for k=l tO r.count一1 for j=k+l to r.count f Compare(r[k],rIj],temp); 把规则r【k]和r[i]的比较结果放入temp数组 / If(兀temp[i]!=0)f =l 5 ifd-=lI( temp[i]一1)!=0)f if(r[k].action=r[j].action) print rU]是 k]的冗余; else print rIj]被 k]屏蔽; ) 5 else if(兀(temp[i]一3)=0 and r【k】.action!=r[j].action) i=I fprint r[j]和r【k]发生交叉冲突;))) ) 3.3仿真结果 将算法DetectSimpleError和DetectConflict分别应用于表 1,得到如下结果: 规则表中缺少默认规则 规则8为无关规则 规则1和规则3发生交叉冲突 规则4被规则2屏蔽 从上面算法输出的结果不难看出,算法能够检测到本文 提出的5种防火墙规则配置错误。考虑到企业防火墙规则配 置的保密性,本算法在虚构的规则集上进行了测试,获得了 良好的效果。与以前规则配置错误的检测算法如ABV,OBV 相比,本算法可以检测到更多的配置错误,在实践中可以进 一步提高规则配置的正确性,增加防火墙的安全性。 但是,上面的规则冲突检测算法DetectConflict还存在着 可以改进的地方。该算法在检测冲突的时候,把每一对规则 都拿出来进行比较,对规则表采用了两个循环操作来发现最 终错误,如果规则表中规则数很多,那么速度就比较慢。因 而可以借鉴包分类算法的思想,进一步地提高规则冲突检测 算法的速度o 4改进的规则冲突检测算法 上文中已经提到了,目前算法执行速度慢的原因在于, 它要对规则表执行两次循环操作。那么为什么要执行两次循 维普资讯 http://www.cqvip.com 环操作呢?这是因为算法并不知道有哪些规则对可能会发生 冲突。如果能够快速地把可能和一条规则发生冲突的规则集 合列出来,就可以把这条规则和集合内的规则依次进行比较, 很明显,这将大大缩短比较的时间,因而可以提高规则冲突 检测的速度。 协议域是规则过滤域部分的其中一项,很显然,协议域 ) ftemp=temPUMhitVect2;} Else ftemp=U 惭f2U ,,lp; ,半L表示节点N以后第一次遇到的有效前缀节点 , //下面是目的IP地址Trie部分 tempi=0; 不同的规则之间不可能发生冲突,因而可以进行第l项改进: 将协议域为TCP的规则单独放入一张表中,名为 TCPRuleTable,规则的序号不变,同时,将协议域为UDP的 规则单独放入一张表中,名为UDPRuleTable,规则的序号也 不变。那么,如果需要查找存在冲突的规则,只需要到相应 ,,得出可能产生冲突的规则 temp2=tempntempi: //将r和temp2中为1的规则进行比较 的表中查找,这可以减少相当一部分搜索时间。 现在考虑规则过滤域中源IP地址和目的IP地址两个部 分。以TCPRuleTable表为例,建立两个Trie J:一个对应于 该表的源IP地址部分,另一个对应于该表的目的IP地址部 分。对于源IP地址Trie中的每一个有效前缀节点N,都有两 个比特向量与之对应。第1个比特向量(bitVect1)的第i位 为l,当且仅当存在规则r【i】,该规则的源IP地址域是节点 前缀的精确匹配。第2个比特向量(bitVect2)满足一个恒等式: N.bitVect 2=(U c.bitVect 2)U N.bitVect 1 实际上,bitVectI为1的位表示对应规则的源IP地址域和节 点前缀相同,bitVect2为l的位表示节点前缀是对应规则的 源IP地址域的前缀。对于目的IP地址Trie,也做同样的工 作,现在已经对TcPRuleTable表构造了两个Trie。同样地, 也对UDPRuleTable表构造两个Trie,构造的方法如上所述。 考虑一条规则R,需要判断它和哪些规则发生冲突。 (1)察看R的协议域,如果协议域是TCP,那么就到 TCPRuleTable表构造的Trie去寻找冲突;否则,就在 uDPRuleTable表的对应Trie寻找。 (2)在源IP地址Tile上寻找。从根节点开始,把所有有 效前缀节点的bitVectl并在一起,记作s_ipVect,结束条件是 找到规则R的精确匹配节点N,此时向量s_ipVect为l的位 表示对应规则的源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地址Tile做同样的工作。 (4)将前两步的结果相交,就形成了最终可能出现冲突的 规则。 (5)类似于前面的算法,在第(4)步的结果集内进行比较, 找到冲突规则。伪代码如下: FastDetectConflict(rule r) {if(r.protocol=TCP) f//下面是源IP地址Trie部分 temp=0; for each valid prefix node M from root until an exact match ofr.s—l p temp MbitVect1Utemp; if r.s—ip matches a valid prefix node M —l34.一 } else if( ̄protocol=UDP) f…) l 算法DetectConflict在查找与一条规则发生冲突的规则 集的时间复杂度是0(n),而算法FastDetectConflict只需在 Trie上查找,时间复杂度是0(h),h是Trie树的高度。当规 则数很大的时候,算法FastDetectconnict的两个改进可以大 大的缩短规则冲突查询的时间。算法DetectConflict只需要把 规则表存储一次,因而空间复杂度为O(n),而算法 FastDetectConflict分散存储了UDP和TCP规则,这一步是 不增加存储空间的,关键是接下来它要存储两个Tde树,对 于树的每一个有效前缀节点还要有两个比特向量,因而算法 FastDetectConflict需要更多的空间。 5结论和展望 作为企业网络安全的屏障,防火墙发挥着巨大的作用。 但是,如果没有对防火墙进行正确的配置,这个屏障也就形 同虚设。本文就防火墙的规则配置过程中容易出现的几种错 误进行了分析,并且给出了检测错误的算法。改进后的算法 具有较快的执行速度,可以获得更高的执行效率。 目前对于防火墙规则配置错误的研究还不太多,我们认 为可以对提高规则配置错误的检测速度、进一步明确规则配 置错误的类型这两个方面进行进一步的研究。目前规则配置 错误的分类还不是很完善,进一步研究规则配置错误的分类 可以使我们发现更多的隐藏错误,提高防火墙的安全性。 参考文献 1 Gouda M,Liu X.Firewall Design:Consistency,Completeness,and Compactness[C]//Proceedings of the 24 IEEE International Conference on Distributed.2004.03. 2 Al—Shaer E.Hamed H.Design and Implementation of Firewall Po ̄cy Advisor Tools[R].School of Computer Science Telecommunications and Information Systems,DePaul University,CTI-techrep:0801, 2oo2一O8. 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 Classiifers[C]//Proceedings of the 10 IEEE International Conference on Network Protocols.2oo2. 5 Han J,Kamber M.Data Mining:Concepts and Techniques[M】. MorganKaufmann,2000.