摘要:随着人类社会生活对internet需求的日益增长,网络安全逐渐成为internet及各项网络服务和应用进一步发展所需解决的关键问题。入侵检测作为一种积极主动防御的网络技术,已经成为网络防护安全体系中的重要组成部分。首先比较了各种入侵检测技术,提出了利用基于状态的协议分析技术检测多步骤等复杂攻击的有效性,但面对高速发展的网络,也提出了这种深度检测的技术存在着的弊端。
关键词:状态协议;分析;nids
1协议解析
(1)协议解析。
传统的网络入侵检测方法,要么不做任何协议分析(图1中a方法),要么只对tcp/ip进行分析(图1中的b方法)。基于应用的入侵检测方法(图1中的c方法)在进行tcp/ip分析后,还要对应用协议进行分析,并分别取出应用协议数据中的命令部分与数据部分,然后分别对命令进行解释和对应用数据进行模式匹配,从而对入侵检测进行检测。方法a在ip包中利用模式匹配技术盲目匹配攻击特征,很可能会将ftp的攻击特征用来匹配http的包;方法b由于不能理解应用协议,只能将应用协议数据看成没有结构的比特流,进行盲目地匹配。因此,随着模式与待匹配网络包的增加,传统检测方法的效率将呈线性的下降,其时间复杂度为o(n),n为模式和网络包长度的总和;而基于应用的检测系统由于采用基于协议的树形结构来分析检测,随模式的增加,其复杂度仅为o(log2n)。
(2)协议数据的上下文关联分析。
①ip分片合并。
分片合并对网络入侵检测系统具有重要意义。有一些攻击方法利用了操作系统协议栈中分片合并实现上的漏洞,例如著名的teardrop攻击就是在短时间内发送若干成对的偏移量有重叠的ip分片,目标接收到这样的分片的时候就会合并分片,由于其偏移量的重叠而发生内存错误,甚至会导致协议栈的崩溃。这种攻击手段单从一个数据包上是无法辨认的,需要在协议分析中模拟操作系统的分片合并,以发现不合法的分片。
在分片过程中有两种树结构:不同的ip数据包生成一棵分组splay树,称作分组树,在程序初始化部分即生成,在程序退出时消亡;每个ip数据包的所有分片生成一棵分片splay树,称作分片树,在接收到ip数据包的第一个分片时生成,在完成分片合并或超时删除。
分组树节点主要包括ip数据包中的源ip地址字段,目的ip地址字段,标识字段和协议字段,对于同一个ip数据包的不同分片这些值相同,这四个值作为一个分组树节点的关键值,即对于两个ip数据包a和b,它们的大小关系可以定义为:如果a的源ip地址大于b则a大于b;如果小于,则a小于b;如果相等,则继续比较目的ip地址、标识字段和协议字段,直到比较出大小或相等。分片树的节点主要包括偏移量字段和数据字段,其中偏移量是关键值。当ip数据包的第一个分片和最后一个分片都到达时,进行ip数据包合并。在合并的过程中如果发现偏移量不连续或重叠,则给出报警信息,放弃合并;合并后的ip数据包拷贝了所有分片的内容,与每个分片具有相同的源ip地址字段,目的ip地址字段,标识字段和协议字段,在格式上是一个不分片的ip数据包,然后上交给传输层协议进行分析。
②tcp会话重组。
一些攻击利用了tcp协议的漏洞,tcp会话劫持是其中最典型的一种。在这种攻击下,攻击者伪造具有某ip地址的数据包,发送给与该ip地址进行tcp会话通信的另一端。检测tcp会话劫持是很困难的,因为如果不和真正的通信方进行交互,几乎无法发现伪装的通信方。但是通过模拟操作系统协议栈的工作原理,对tcp会话进行处理,能够从一定程度上检测到可能的会话劫持。检测系统通过重组会话能够发现序列号错误,以及出现序列号错误后双方重新建立同步的握手信息,从而判断可能的入侵。
tcp会话重组利用了和分片合并类似的树状结构。网络上存在的各个会话组织成一棵有序二叉树,每个节点包含会话双方的连接状态、序列号、一些统计信息以及必要的历史信息如上次序列号和确认序列号等。每个会话中,发自客户端和服务器端的数据包分别组织成两棵二叉树,在会话节点中包含指向这两个二叉树的根节点的指针。重组后的tcp会话记录了一次tcp会话中所有的数据包,并且记录了每个数据包到来前和到来后的tcp会话状态。
2基于状态协议分析的入侵检测实现
协议分析方法可以根据协议信息精确定位检测域,分析攻击特征,有针对性地使用详细具体的检测手段。提高了检测的全面性、准确性和效率。针对不同的异常和攻击,灵活定制检测方式,由此可检测大量异常。但对于一些多步骤,分布式的复杂攻击的检测单凭单一数据包检测或简单重组是无法实现的。所以在协议分析基础上引入状态转移检测技术,下面就分析利用基于状态的协议分析技术检测一些典型入侵的实现。
根据网络协议状态信息分析,所有网络都能以状态转移形式来描述,状态转移将攻击描述成网络事件的状态和操作(匹配事件),被观测的事件如果符合有穷状态机的实例(每个实例都表示一个攻击场景),都可能引起状态转移的发生。如果状态转移到一个危害系统安全的终止状态,就代表着攻击的发生。这种方式以一种简单的方式来描述复杂的入侵场景, 步式攻击。
借助声明原语来计算状态转换的条件,包括数据包和网络日志原语,如检查ip地址是否是假冒地址的原语ip_saddr_fake(ip_packet),检查包总长度选项中所声明长度与实际长度是否一致的原语ip_fray_overlap(ip_packet)等等。
a:接收到ip包且分片标记为1,转入状态1;b:规定的时间片中,接收到一个包的所有分片,转入状态2;c:比较ip包长度与包头中声明的包总长度,不相等则进入状态3。
依据上面介绍的检测过程,利用检查网络入侵的原语提出检测ip碎片攻击的简单算法:
int checkipfragment(receivedippacket){
state=s0;
while(true)
{
switch(state)
case s0:
if(ip_is_frazgment(receiveippacket)=true)
state=s1;
case s1:
if(timer_exceed()=false&&receive_all_frag(receiveippacket)=true)
steate=s2;
case s2:
if(ip_frag_overlap(receiveippacket)=false;
alert();break;
}
return 0;
}
2.1检测tcp syn flooding攻击
攻击描述:在短时间内,攻击者发送大量syn报文建立tcp连接,在服务器端发送应答包后,客户端不发出确认,服务器端会维持每个连接直到超时,这样会使服务端的tcp资源迅速枯竭,导致正常连接不能进入。
解决方式:当客户端发出的建立tcp连接的syn包时,便跟踪记录此连接的状态,直到成功完成或超时。同时统计在规定时间内,接受到这种syn包的个数超过了某个规定的临界值,则发生tcp syn flooding攻击。
a:检查包的协议项,若该协议项为tcp协议,则转入状态1;
b:检查tcp头的选项,若flag选项为syn,则转入状态2;
c:打开计时器和计数器,在规定时间内,接收到这种syn包的个数超过临界值则发生攻击。
2.2检测ftp会话
一个ftp会话可以分为以下四个步骤:
(1)建立控制连接:ftp客户端建立一个tcp连接到服务器的ftp端21;
(2)客户身份验证:ftp用户发送用户名和口令,或用匿名登陆到服务器;
(3)执行客户命令:客户向服务器发出命令,如果要求数据传输,则客户使用一个临时端口和服务器端口20建立一个数据连接进行数据的传输;
(4)断开连接:ftp会话完成后,断开tcp连接。
客户端通过身份验证后才合法执行命令,以list命令为例,list命令列表显示文件或目录,将引发一个数据连接的建立和使用,客户端使用port命令发送客户ip地址和端口号给服务器用于建立临时数据连接。
3协议分析技术在高速网络下的局限性
网络的速度的增长已经大大超过了处理器的发展,所以集中的解决方案已经到了他们的极限。特别是如果想要进行深入地、基于状态入侵检测分析,这种情况就更明显了。既然这样,传感器不得不在进行中保存攻击的信息(例如多步骤攻击)或对包的内容进行应用层的分析。这些工作都是极其耗费资源,并且在单结点安装会严重影响到基本数据包正常捕获。
由于要保证与高速网络同步以及网络流量加密的广泛使用给入侵检测带来的困难,一个普遍的观点是在高速网络环境下网络入侵检测是不具有实用性的。还有人主张在计算机网络的外围(periphery)分布安装传感器,这种方式需要网络负载应该更加易于管理。尽管以上提到的两种观点都有好的方面,但在高速网络交互的环境下进行流量分析仍然是实现网络装置的一个基础要求。一些公司尽量在研究如何满足这一需求,很多产品销售商声称他们拥有可以运行在高速atm或千兆以太网环境下的传感器产品。例如,iss提供了net-ice gigabit sentry,这个系统被设计来在高速网络下监控网络流量。公司在产品广告中宣称系统可以进行协议重组和分析不同应用层的协议(例如http,smtp,pop)来识别恶意行为。这个工具被称为“第一个处理千兆网络流量的网络入侵检测系统”。然而gigasentry在实验室环境下可以处理千兆网络,在实际网络环境中它的性能将会减弱。用户一般期望在实际网络环境的使用中工具可以处理至少300mbps,并且可以适应网络本身特点。gigasentry每秒钟只能捕获到不到500 000个数据包。这些表明了在高速网络下实现网络入侵检测的困难程度。产品在上层网络(toplayer networks)提供一个交换机来划分应用层协议会话。网络流也根据这些会话进行分组,将分组分发到各个入侵检测传感器,同属于一个会话的包都发送到一个传感器。这样传感器就可以在一个单独的会话中实现多步骤攻击的检测。但是,在不同会话之间的关联性却不支持。这样导致如果一个攻击针对多个主机(例如ping sweep)或分布在多个会话中就无法检测出来。
参考文献
[1]薛静锋,宁宇鹏,阎慧.入侵检测技术[m].北京:机械工业出版社,2006.
[2]唐正军.入侵检测技术导论[m].北京:机械工业出版社,2005.
[3]刘文涛.linux网络入侵检测系统[m].北京:电子工业出版社,2006.
本文链接:http://www.qk112.com/lwfw/jsjlw/jisuanjiyingyong/244885.html