论文部分内容阅读
摘要:入侵检测系统的测试和评估一直是业界普遍关注的内容。但目前对IDS仍然没有一个公开的测试或评估标准,目前入侵检测系统的误报率、漏报率仍然较高,吞吐量也有待提高。本文探讨了入侵检测系统的测试和评估技术,目前没有统一的入侵检测标准,因此本文从各个不同的角度对Snort进行测试。测试表明Snort在百兆以内的网络环境有很好的表现,但在千兆环境中将发生不同程度的丢包情况。
关键词:入侵检测;SNORT;测试;评估
1 引言
1980年,James P.Anderson第一次系统阐述了入侵检测的概念,并将入侵行为分为外部渗透、内部渗透和不法行为三种,还提出了利用审计数据监视入侵活动的思想。1986年Dorothy E.Denning提出实时异常检测的概念并建立了第一个实时入侵检测模型,命名为入侵检测专家系统(IDES),1990年,L.T.Heberlein等设计出监视网络数据流的入侵检测系统,NSM(Network Security Monitor)。1991年出现分布式入侵检测体系。20世纪90年代中后期入侵检测的体系结构的研究又有了许多发展,因此,产生了对各种入侵检测系统的功能和性能评估的需求。
入侵检测系统的测试和评估一直是业界普遍关注的内容。目前,入侵检测系统的误报率仍然较高,还常常出现漏报的情况,吞吐量也有待提高。在使用入侵检测系统之前,首先需要对其进行详细的测试和评估。然而,作为一种网络安全设备,对入侵检测系统的测试通常是复杂的。
对于IDS目前仍然没有一个公开的测试或评估标准。最常用的测试方法是,搭建一个小型网络,在小型网络中释放一些攻击数据。但这种小型网络的拓扑结构、功能和复杂度都没有统一的标准。另一种测试的方式是在测试网络中重放真实网络中捕获的流量,这种测试方式的缺陷是无法将新的入侵手段及时有效地加入流量中。
一种比较合理的测试方法是,搜集所有已知的攻击工具,并将这些工具产生的攻击流与背景流混合。对背景流的流量和攻击流的比例进行控制,可以得知IDS在何种情况下会出现丢包、漏报或误报等情况。
2 测试lDS需要解决的问题
DARPA于1998年启动了一项入侵检测系统评估项目。它主要涉及背景流的生成和恶意攻击行为的研究。通过使用在背景流中混杂恶意数据的方式,可以测试IDS的算法和系统设计是否合理。虽然该项目于1999年终止,但它留下了大量可用的测试数据,成为评估入侵检测系统的重要数据来源,是迄今为止最权威的IDS评估。
DARPA采用如下的方式对IDS进行评估。它包含两种测试数据:离线训练数据(Training Data)和在线测试数据(TestingData)。离线数据时长7星期,其中标明了哪些数据包是正常的,哪些数据包是恶意的,它们可以用于训练入侵检测系统,使入侵检测系统完成对网络情况的学习。在线数据时长2星期,用于模拟真实网络。在使用这些数据时,使用tcpreplay将其重放。
使用DARPA的思想生成用于测试IDS的流量时,需要解决两个问题。一是如何生成背景流,背景流是不含任何恶意的数据包的流量。二是如何生成攻击。两种流量经过混合后,进入入侵检测系统。一个具有良好适应性的IDS应当能准确地从背景流中区分出攻击数据。
攻击流量通常基于攻击特征数据库,其中保存了所有恶意流,测试者可在必要的时候发动攻击。这个数据库需要维护和更新,因为每天都可能出现新的攻击。
目前,使用穷举所有攻击的方式来测试IDS是不可行的。可行的方法是为每一种攻击类型选取有代表性的攻击案例。这种方式称作等价划分。
3 衡量IDS的指标和测试方法
(1)完备性(Completeness)
完备性(有时也称为覆盖性)是指IDS在最理想的状态下能够检测出所有攻击行为的能力。如果存在一个攻击行为,无法被IDS检测出来,那么该IDS就不具有检测完备性。也就是说,它可能把对系统的入侵活动当作正常行为而漏报。所谓最理想的状态,是指测试通常在简单的网络环境、没有背景流存在的情况下进行。由于在一般情况下,攻击类型、攻击手段的变化很快。很难得到关于攻击行为的所有知识,所以关于IDS的检测完备性的评估相对比较困难。
(2)误报率(False Alarm Rate)
误报率是指入侵检测系统在一段时间内发生错误报警的次数,误报也称为“虚警”。误报常常是由不完善的规则所引起的。一些网络管理软件产生的正常流量也常常会导致IDS误报。误报率是很难测量的,因为没有一个“标准”的网络可以用来测试IDS,IDS在不同的网络环境下其误报率也是不同的。误报率=错误报警数量/(总体正常行为样本数量+总体攻击样本数量)。
(3)检测率(Detection Rate)
检测率是指网络在受到攻击时,入侵检测系统能够产生正确报警的概率。通常利用已知入侵攻击的实验数据集合来测试系统的检测率。检测率=入侵报警的数量/入侵攻击的数量。
美国的林肯实验室用接收器特性(ROC.Receiver Operating Characteristic)曲线来描述lDS的性能。该曲线准确刻画了IDS的检测率与虚警率之间的变化关系。ROC广泛用于输入不确定的系统的评估。根据一个IDS在不同的条件(在允许范围内变化的阈值,例如异常检测系统的报警门限等参数)下的虚警率和检测率,分别把虚警率和检测率作为横坐标和纵坐标,就可做出对应于该IDS的ROC曲线。ROC曲线与IDS的检测门限具有对应的关系。
(4)漏报率(False Negative Rate)
漏报率是指网络受到入侵攻击时,系统不能正确报警的概率。通常利用已知入侵攻击的实验数据集合来测试系统的漏报率。漏报率=未报警的数量/入侵攻击的数量。与误报相比,漏报更有危险性。
(5)处理性能(Performance)
指一个IDS处理数据源数据的速度。显然,当IDS的处理性能较差时,它就不可能实现实时的IDS,并有可能成为整个系统的瓶颈,进而严重影响整个系统的性能。
目前,硬件IDS已达到千兆甚至更高级别,但软件达到这样的性能十分困难。事实上,测试IDS时一个更为重要的指标是其每秒处理包数量(Packet Per Second,pps),而非带宽。在同样的带宽下,包大小可能从64字节至大约1500字节不等。即在同样的千兆网络中,包流量大约在8300至1950000pps之间,相差20余倍。对于入侵检测系统来说,包 数量对性能的影响要比包长度大得多。同样,对计算机系统而言,网卡每秒钟处理包的能力是有限的,并非所有千兆的网卡在处理64字节长度的包时都能达到1000Mbps。
(6)其他指标
除以上提及的主要指标之外,IDS自身抗攻击能力、资源占用状况、事件生成、确认事件等因素也是重要的评估指标。
IDS自身抗攻击能力是指IDS抵御黑客直接攻击的能力。不可避免地,IDS自身也往往存在某些安全缺陷。倘若黑客攻陷IDS,可能会造成之后所有的攻击行为都无法记录。因此,IDS首先必须保证自己的安全性。
资源占用状况是指IDS对内存、CPU和硬盘空间及其他I/O设备的要求。通常,在相同的网络环境下,对资源要求较低的IDS,其处理数据的能力就越大。
总之,IDS是个比较复杂的系统,对IDS进行测试和评估不仅和IDS本身有关,还与应用IDS的环境有关。测试过程中涉及到操作环境、网络环境、工具、软件、硬件等方面。我们既要考虑入侵检测的效果如何,也要考虑应用该系统后它对实际系统的影响,有时要折衷考虑这两种因素。
4 测试Snort
依照衡量IDS的指标,对Snort的完备性、误报率、检测率、处理性能及其他指标进行测试。
Snort运行在Windows Server 2003和Redhat 9(2.4.3内核)的主机上,版本为2.4.3,使用2006年3月8日公布在官方网站上的规则。
(1)UDP背景流测试
纯UDP背景流测试的主要目的是检测IDS的包接收和处理能力。UDP协议相对简单,IDS不需要处理与连接相关的信息,因此可以测试IDS在最佳情况下的包处理能力。实验通过发送不同长度的数据包,以测试IDS处理不同大小的数据包时对性能产生的影响。
实验中,分别向Snort/Snorting发送长度为64、128、328、528、728、928、1028、1500字节的UDP包,包中的内容为不含攻击成份的随机数据,其源端口和目的端口均为135。使用不同的流量以测试它们在不同流量下的处理能力。
测试表明,在千兆环境下,Snort的丢包可分为两部分:一是分析能力不足,收到数据包后不能收理,直接丢弃;二是网卡接收能力不足,交换机发往网卡的数据,网卡无法接收。当包长度较小时,网卡接收能力首先成为瓶颈,当包渐渐增大时,IDS分析能力成为主要瓶颈。
(2)TCP背景流测试
TCP是网络中比例最大的协议。网络中超过80%的流量均为TCP包。现在,入侵检测系统分析TCP的能力,很大程度上决定其性能的优劣。
实验中,分别向Snort发送长度为128bytes、512bytes、1024bytes、1418bytes的TCP-SYN包,包中的内容为不含攻击成分的随机数据,其目的端口均为80。使用不同的流量以测试它们在不同流量下的处理能力。
(3)Nessus与XScan完备性测试
使用Nessus与XScan扫描主机时产生的数据测试IDS,可以发现Snort在真实环境中的表现。在这两项测试中,Snort均产生大量报警,这两项测试仅仅用于产生基准数据。
XScan包含3013条攻击脚本,使Snort产生545条报警。Nessus包含8834条攻击脚本,使Snort产生1422条报警。这两个工具均造成CPU使用率的明显上升,在10%-50%之间波动。
Stick和Mucus都是针对IDS的测试软件,它们本是用于测试IDS部署是否正确、能否产生预期报警的。它们都采用Snort规则生成相应的数据包,对IDS进行测试。IDS收到这些包后,会产生大量报警。正是由于这个原因,后来Stick成为较为著名的IDS拒绝服务攻击工具。后来,大多数的IDS都针对这个问题进行了修正,避免虚假攻击包引起的报警。
与Stick类似,Mucus也是一款IDS测试工具,它使用比Stick更新的规则版本(Snort1.8.6),且可以模拟攻击连接。
实验表明,Mucus对IDS的攻击效果比Stick更好,它可以产生大量不同报警。而Stick的发包速度比Mucus更快,但生成的报警大多数都是名为Invalid UDP header警告,Snort的预处理器Frag3在解码阶段即能发现异常,使攻击失去实际意义。
5 总结
近年来,IDS得到了很大的发展,我国在入侵检测方面的研究工作和产品开发也有了很大的进展,但现在对入侵检测测试评估方面的研究还不是很多。现在的入侵检测产品很需要一个大家公认的IDS测试评估标准,各个产品都使用这个统一的尺度来衡量、比较彼此的优劣。现在一些入侵检测产品的宣传未必就十分可信,即使是完全可信的,由于不是由权威的检测部门使用测试评估标准来进行检测得出的结果,所以也难免被使用者怀疑。因此,尽快建立一套IDS的测试评估标准,对产品开发商和用户都有好处。
关键词:入侵检测;SNORT;测试;评估
1 引言
1980年,James P.Anderson第一次系统阐述了入侵检测的概念,并将入侵行为分为外部渗透、内部渗透和不法行为三种,还提出了利用审计数据监视入侵活动的思想。1986年Dorothy E.Denning提出实时异常检测的概念并建立了第一个实时入侵检测模型,命名为入侵检测专家系统(IDES),1990年,L.T.Heberlein等设计出监视网络数据流的入侵检测系统,NSM(Network Security Monitor)。1991年出现分布式入侵检测体系。20世纪90年代中后期入侵检测的体系结构的研究又有了许多发展,因此,产生了对各种入侵检测系统的功能和性能评估的需求。
入侵检测系统的测试和评估一直是业界普遍关注的内容。目前,入侵检测系统的误报率仍然较高,还常常出现漏报的情况,吞吐量也有待提高。在使用入侵检测系统之前,首先需要对其进行详细的测试和评估。然而,作为一种网络安全设备,对入侵检测系统的测试通常是复杂的。
对于IDS目前仍然没有一个公开的测试或评估标准。最常用的测试方法是,搭建一个小型网络,在小型网络中释放一些攻击数据。但这种小型网络的拓扑结构、功能和复杂度都没有统一的标准。另一种测试的方式是在测试网络中重放真实网络中捕获的流量,这种测试方式的缺陷是无法将新的入侵手段及时有效地加入流量中。
一种比较合理的测试方法是,搜集所有已知的攻击工具,并将这些工具产生的攻击流与背景流混合。对背景流的流量和攻击流的比例进行控制,可以得知IDS在何种情况下会出现丢包、漏报或误报等情况。
2 测试lDS需要解决的问题
DARPA于1998年启动了一项入侵检测系统评估项目。它主要涉及背景流的生成和恶意攻击行为的研究。通过使用在背景流中混杂恶意数据的方式,可以测试IDS的算法和系统设计是否合理。虽然该项目于1999年终止,但它留下了大量可用的测试数据,成为评估入侵检测系统的重要数据来源,是迄今为止最权威的IDS评估。
DARPA采用如下的方式对IDS进行评估。它包含两种测试数据:离线训练数据(Training Data)和在线测试数据(TestingData)。离线数据时长7星期,其中标明了哪些数据包是正常的,哪些数据包是恶意的,它们可以用于训练入侵检测系统,使入侵检测系统完成对网络情况的学习。在线数据时长2星期,用于模拟真实网络。在使用这些数据时,使用tcpreplay将其重放。
使用DARPA的思想生成用于测试IDS的流量时,需要解决两个问题。一是如何生成背景流,背景流是不含任何恶意的数据包的流量。二是如何生成攻击。两种流量经过混合后,进入入侵检测系统。一个具有良好适应性的IDS应当能准确地从背景流中区分出攻击数据。
攻击流量通常基于攻击特征数据库,其中保存了所有恶意流,测试者可在必要的时候发动攻击。这个数据库需要维护和更新,因为每天都可能出现新的攻击。
目前,使用穷举所有攻击的方式来测试IDS是不可行的。可行的方法是为每一种攻击类型选取有代表性的攻击案例。这种方式称作等价划分。
3 衡量IDS的指标和测试方法
(1)完备性(Completeness)
完备性(有时也称为覆盖性)是指IDS在最理想的状态下能够检测出所有攻击行为的能力。如果存在一个攻击行为,无法被IDS检测出来,那么该IDS就不具有检测完备性。也就是说,它可能把对系统的入侵活动当作正常行为而漏报。所谓最理想的状态,是指测试通常在简单的网络环境、没有背景流存在的情况下进行。由于在一般情况下,攻击类型、攻击手段的变化很快。很难得到关于攻击行为的所有知识,所以关于IDS的检测完备性的评估相对比较困难。
(2)误报率(False Alarm Rate)
误报率是指入侵检测系统在一段时间内发生错误报警的次数,误报也称为“虚警”。误报常常是由不完善的规则所引起的。一些网络管理软件产生的正常流量也常常会导致IDS误报。误报率是很难测量的,因为没有一个“标准”的网络可以用来测试IDS,IDS在不同的网络环境下其误报率也是不同的。误报率=错误报警数量/(总体正常行为样本数量+总体攻击样本数量)。
(3)检测率(Detection Rate)
检测率是指网络在受到攻击时,入侵检测系统能够产生正确报警的概率。通常利用已知入侵攻击的实验数据集合来测试系统的检测率。检测率=入侵报警的数量/入侵攻击的数量。
美国的林肯实验室用接收器特性(ROC.Receiver Operating Characteristic)曲线来描述lDS的性能。该曲线准确刻画了IDS的检测率与虚警率之间的变化关系。ROC广泛用于输入不确定的系统的评估。根据一个IDS在不同的条件(在允许范围内变化的阈值,例如异常检测系统的报警门限等参数)下的虚警率和检测率,分别把虚警率和检测率作为横坐标和纵坐标,就可做出对应于该IDS的ROC曲线。ROC曲线与IDS的检测门限具有对应的关系。
(4)漏报率(False Negative Rate)
漏报率是指网络受到入侵攻击时,系统不能正确报警的概率。通常利用已知入侵攻击的实验数据集合来测试系统的漏报率。漏报率=未报警的数量/入侵攻击的数量。与误报相比,漏报更有危险性。
(5)处理性能(Performance)
指一个IDS处理数据源数据的速度。显然,当IDS的处理性能较差时,它就不可能实现实时的IDS,并有可能成为整个系统的瓶颈,进而严重影响整个系统的性能。
目前,硬件IDS已达到千兆甚至更高级别,但软件达到这样的性能十分困难。事实上,测试IDS时一个更为重要的指标是其每秒处理包数量(Packet Per Second,pps),而非带宽。在同样的带宽下,包大小可能从64字节至大约1500字节不等。即在同样的千兆网络中,包流量大约在8300至1950000pps之间,相差20余倍。对于入侵检测系统来说,包 数量对性能的影响要比包长度大得多。同样,对计算机系统而言,网卡每秒钟处理包的能力是有限的,并非所有千兆的网卡在处理64字节长度的包时都能达到1000Mbps。
(6)其他指标
除以上提及的主要指标之外,IDS自身抗攻击能力、资源占用状况、事件生成、确认事件等因素也是重要的评估指标。
IDS自身抗攻击能力是指IDS抵御黑客直接攻击的能力。不可避免地,IDS自身也往往存在某些安全缺陷。倘若黑客攻陷IDS,可能会造成之后所有的攻击行为都无法记录。因此,IDS首先必须保证自己的安全性。
资源占用状况是指IDS对内存、CPU和硬盘空间及其他I/O设备的要求。通常,在相同的网络环境下,对资源要求较低的IDS,其处理数据的能力就越大。
总之,IDS是个比较复杂的系统,对IDS进行测试和评估不仅和IDS本身有关,还与应用IDS的环境有关。测试过程中涉及到操作环境、网络环境、工具、软件、硬件等方面。我们既要考虑入侵检测的效果如何,也要考虑应用该系统后它对实际系统的影响,有时要折衷考虑这两种因素。
4 测试Snort
依照衡量IDS的指标,对Snort的完备性、误报率、检测率、处理性能及其他指标进行测试。
Snort运行在Windows Server 2003和Redhat 9(2.4.3内核)的主机上,版本为2.4.3,使用2006年3月8日公布在官方网站上的规则。
(1)UDP背景流测试
纯UDP背景流测试的主要目的是检测IDS的包接收和处理能力。UDP协议相对简单,IDS不需要处理与连接相关的信息,因此可以测试IDS在最佳情况下的包处理能力。实验通过发送不同长度的数据包,以测试IDS处理不同大小的数据包时对性能产生的影响。
实验中,分别向Snort/Snorting发送长度为64、128、328、528、728、928、1028、1500字节的UDP包,包中的内容为不含攻击成份的随机数据,其源端口和目的端口均为135。使用不同的流量以测试它们在不同流量下的处理能力。
测试表明,在千兆环境下,Snort的丢包可分为两部分:一是分析能力不足,收到数据包后不能收理,直接丢弃;二是网卡接收能力不足,交换机发往网卡的数据,网卡无法接收。当包长度较小时,网卡接收能力首先成为瓶颈,当包渐渐增大时,IDS分析能力成为主要瓶颈。
(2)TCP背景流测试
TCP是网络中比例最大的协议。网络中超过80%的流量均为TCP包。现在,入侵检测系统分析TCP的能力,很大程度上决定其性能的优劣。
实验中,分别向Snort发送长度为128bytes、512bytes、1024bytes、1418bytes的TCP-SYN包,包中的内容为不含攻击成分的随机数据,其目的端口均为80。使用不同的流量以测试它们在不同流量下的处理能力。
(3)Nessus与XScan完备性测试
使用Nessus与XScan扫描主机时产生的数据测试IDS,可以发现Snort在真实环境中的表现。在这两项测试中,Snort均产生大量报警,这两项测试仅仅用于产生基准数据。
XScan包含3013条攻击脚本,使Snort产生545条报警。Nessus包含8834条攻击脚本,使Snort产生1422条报警。这两个工具均造成CPU使用率的明显上升,在10%-50%之间波动。
Stick和Mucus都是针对IDS的测试软件,它们本是用于测试IDS部署是否正确、能否产生预期报警的。它们都采用Snort规则生成相应的数据包,对IDS进行测试。IDS收到这些包后,会产生大量报警。正是由于这个原因,后来Stick成为较为著名的IDS拒绝服务攻击工具。后来,大多数的IDS都针对这个问题进行了修正,避免虚假攻击包引起的报警。
与Stick类似,Mucus也是一款IDS测试工具,它使用比Stick更新的规则版本(Snort1.8.6),且可以模拟攻击连接。
实验表明,Mucus对IDS的攻击效果比Stick更好,它可以产生大量不同报警。而Stick的发包速度比Mucus更快,但生成的报警大多数都是名为Invalid UDP header警告,Snort的预处理器Frag3在解码阶段即能发现异常,使攻击失去实际意义。
5 总结
近年来,IDS得到了很大的发展,我国在入侵检测方面的研究工作和产品开发也有了很大的进展,但现在对入侵检测测试评估方面的研究还不是很多。现在的入侵检测产品很需要一个大家公认的IDS测试评估标准,各个产品都使用这个统一的尺度来衡量、比较彼此的优劣。现在一些入侵检测产品的宣传未必就十分可信,即使是完全可信的,由于不是由权威的检测部门使用测试评估标准来进行检测得出的结果,所以也难免被使用者怀疑。因此,尽快建立一套IDS的测试评估标准,对产品开发商和用户都有好处。