随着计算机硬件技术的迅速发展,处理器集成晶体管数量越来越多,主频也越来越高,处理器的性能越来越强大。同时,现代社会对信息网络处理速度的要求也提高了,不断需要更强处理能力的CPU。众所周知,处理器性能不断提高主要基于两个原因:-是半导体工艺的逐渐进步;二是处理器体系结构的不断发展。它们相辅相成,互相刺激以促进对方的发展。但是由于半导体工艺发展到今天,处理器集成的晶体管数量有数亿个,半导体工艺已经达到了物理极限,处理器的频率已经很难再有所提高。
并行计算技术成为提高计算机系统性能的主要方案。嵌入式领域的迅速发展,对并行性技术的要求愈来愈高。尤其在网络和服务方面,对于I/O处理能力有很高要求,如网络交换机,路由器,防火墙,IDS,VPN等,都需要大量的并行计算。所有这些都要求处理器朝着多核的并行性技术发展。单核处理器线程是并发执行的,即多个线程交替执行,在同一时刻只能有一个线程执行。多核体系通过增加计算机中物理处理器的数量,有效地利用线程级并行性,实现真正意义上的并行执行,多个线程或者进程能够在多个处理器上同时执行。
多核技术的出现,给软件系统结构,软件模型,操作系统,核间通信技术等诸多方面带来巨大挑战,也带动了软件的革命。充分利用多核的硬件特性,必然要求软件系统的变革。
网络多核处理器软件系统实现的一个挑战在于软件设计与网络处理器的硬件结构关系非常紧密,必须面向网络处理器的硬件体系结构编程,通过合理分配和使用网络处理器为数据包处理的各种硬件资源,如多处理引擎、专用硬件处理单元、各类寄存器、片上内存和其它硬件单元,才能得到一个高性能的系统。
网络入侵检测系统(NIDS)通过捕获和分析网络数据包判断是否存在攻击行为。由于网络带宽越来越高,NIDS的处理能力越来越难以跟上网络的速度。为了满足NIDS高性能高效率的要求,利用网络多核处理器来提高NIDS的处理能力。硬件的并行处理也增加了软件开发的困难,如何充分利用网络多核处理器硬件,开发高性能的NIDS系统,做为本文研究的主要内容。
入侵检测系统(
Intrusion Detection System ,简称 IDS ),顾名思义,是对入侵行为的检测。它通过收集和分析计算机网络或计算机系统中若干关键点的信息,检查网络或系统中是否存在违反安全策略的行为和被攻击的迹象,它是网络安全防护体系的重要组成部分。 随着人们安全意识的逐步提高,入侵检测系统( IDS )的应用范围也越来越广,各种各样的 IDS 也越来越多。IDS的运行方式有两种,一种是在目标主机上运行以监测其本身的通信信息,称为主机型入侵检测系统。往往以系统日志、应用程序日志等作为数据源,当然也可以通过其他手段(如监督系统调用)从所在的主机收集信息进行分析。主机型入侵检测系统保护的一般是所在的系统。另一种是在一台单独的机器上运行以监测所有网络设备的通信信息,比如Hub、路由器,称为网络型入侵检测系统。
高速通信网络技术的发展,网络设备也必然以提高性能为主要目标。多核处理器的出现,为提高网络设备性能提供了新的解决方案。同时也要求编程人员深入了解多核硬件体系结构,根据硬件的特性开发具体的应用。文章详细分析了网络多核的硬件体系结构,对各个硬件处理单元的功能及软件编程方法做了总结。
目前,多核技术已经成为最受关注的话题和研究方向。多核体系结构为性能提高和节能计算等领域开辟了新的方向。然而,现在的多核处理器还没有统一的标准,基本上处于探索阶段。核与核之间的连接方式、通讯协调方式、同一处理器中核与核间结构的差异、器件资源分配策略、任务调度策略、节能策略、软硬件协同设计策略等方面都处于研究探索之中。多核必将带来影响整个计算机行业方方面面的巨大变革,包括体系结构研究、嵌入式系统设计和解决方案设计、编译技术、操作系统核心算法、应用软件设计等计算机系统的各个领域。
在单核处理器研究中,主要集中在提高频率,提高指令级并行度等方面。而在多核体系中,更加关注核与核之间的协作、共享资源的分配、提高线程级并行度等方面。
多核处理器必然带来一个问题是,需要提高程序的并行度,因为单线程程序是无法发挥多核处理器的优势的。通过编译优化可以把原先单线程的代码编译成多线程的形式。OpenMP提供了一种方法,程序员根据需要把可以并行处理的代码加上合适的标记,编译器根据这些标记把相应代码编译成多线程的程序段。多线程程序开发涉及到多线程调试的难题,这在多核处理器上会变得更加困难,所以多核体系导致程序开发模式发生巨大变化。
多核处理器上的任务调度也是个新问题,常用的调度算法有全局队列调度和局部队列调度。前者是指操作系统维护一个全局的任务等待队列,当系统中有一个CPU核心空闲时,操作系统就从全局任务等待队列中选取就绪任务开始在此核心上执行。这种方法的优点是CPU核心利用率较高。后者是指操作系统为每个CPU内核维护一个局部的任务等待队列,当系统中有一个CPU内核空闲时,便从该核心的任务等待队列中选取恰当的任务执行,这种方法的优点是任务基本上无需在多个CPU核心间切换,有利于提高CPU核心局部Cache命中率,从而提高系统的性能。目前多数CMP操作系统采用的是基于全局队列的任务调度算法。
如何有效地利用多核技术,对于多核平台上的应用程序员来说是个首要问题。多核时代的到来需要软件开发者必须找出新的开发软件的方法,选择程序执行模型。在多核系统中,核心是通过内存共享数据和通讯。为了充分利用多核,程序需要同时做很多事情。并行程序执行指令的速度将比传统的串行程序要快很多,因为它能将工作负载按照不同需求分配给处理器的不同核心。
探索多核环境下的软件开发技术,方法。本文针对Cavium Octeon处理器总结了嵌入式软件的加载,启动过程,软件设计模型,核间通信技术。并以开源软件snort为基础,构件NIDS系统,针对硬件对程序做了优化。分析了一些常用的优化方案,对于其它类型的多核处理器,也具有相同的指导意义。
本文并没有关注snort在网络安全方面的实现原理,机制。保留了snort提供的接口,针对硬件对snort性能做了改进,使其达到最大性能。对既有软件向多核处理器移植提供了一种解决方案。
Snort是一个强大的轻量级的网络入侵检测系统。它具有实时数据流量分析和日志IP网络数据包的能力,能够进行协议分析,对内容进行搜索/匹配。它能够检测各种不同的攻击方式,对攻击进行实时报警。此外,snort具有很好的扩展性和可移植性。Snort遵循通用公共许可证GPL,只要遵守GPL的任何组织和个人都可以自由使用。Snort的其特点如下
Ø 代码简洁、短小,目前源代码压缩包大约4M。
Ø 跨平台性,可以支持Linux,Solaris,HP-UX,IRIX,windows等操作系统。
Ø 功能完备,具有实时流量分析的能力,能够快速地监测网络攻击,并能及时地发出警报。使用协议分析和内容匹配的方式,提供了对TCP,UDP,ICMP等协议的支持,对缓冲区溢出、秘密端口的扫描、CGI扫描、SMB探测、探测操作系统指纹特征等企图都可以检测得到。
Ø 使用插件的形式,方便管理员根据需要调用各种插件模块。比如使用TCP流插件,可以对TCP包进行重组;使用SPADE插件,Snort能够报告可疑包,从而对端口进行有效地检测。
Ø 具备传输层连接恢复、应用层数据提取、基于统计的数据包异常检测的功能,并且拥有很强的系统防护功能。
Ø snort规则的简单描述语言,能够对新的网络攻击做出很快的反应。它支持的插件功能可以将新的功能以插件的形式添加调用,具有非常好的可扩展性和灵活性。
Snort在基于共享网络上检测原始的网络传输数据分析捕获的数据包,主要工作是匹配入侵行为的特征或者从网络活动的角度检测异常行为,进而完成入侵的预警或记录。从检测模式而言,Snort属于误用检测,该方法对已知攻击的特征模式进行匹配,包括利用工作在网卡混杂模式下的嗅探器被动地进行协议分析以及对一系列数据包解释分析特征。从本质上来说,Snort是基于规则检测的入侵检测工具,即针对每一种入侵行为,都提炼出它的特征值,并按照规则写成检测规则,从而形成一个规则数据库。然后将捕获的数据包按照规则库逐一匹配,若匹配成功则认为该入侵行为成立。
Snort已经基本具备了NIDS的功能,它的规则具有简单、高效、灵活、更新迅速的特点。它的规则选项概念清楚明确,选项之间没有从属关系,规则之间除了启动与被启动之外没有其它的关系。规则所提供的选项基本上能完全描述一个数据包的特征,通过对选项加以组合基本上就能清楚地描述出基于单包的攻击,绝大多数规则只需要一行代码就行,这样也使规则匹配引擎能够实现高效、高速的处理。规则从技术类型、攻击类型、威胁类型等角度进行了分类,而且还定义了优先级,虽然在理论上不太科学完整,但在实现运用中还是相当实用的,可以比较方便地针对各种网络环境做出调整,对规则集加以剪裁。由于Snort本身定位在一个轻量级的入侵检测工具,尽管与商业的入侵检测工具比起来,它的规则语言略显简陋,在报警方式和图形化使用界面上也显露出不足之处,但是程序的整体结构清晰,规则语言简单实用并提供插件的功能支持,用户可以添加自己的检测规则和处理函数,这对于规则库的及时更新有着极为现实的意义。作为一种开放源代码的免费软件,Snort有着其它商用软件所无法比拟的特点。
在snort的实现中,相对耗时的操作主要有四个:从网络传输介质上捕获数据包,分析数据结构,规则匹配以及对每一个数据包进行的校验。其中,规则匹配是snort的核心运算模块,如果能够提高它的运算速度,将有效提高snort的整体性能。Snort 1.x受到诟病最多的是规则匹配的效率较为低下,不能满足100M或更高速的网络环境。自Snort 2.0发布以后,引入了WM和AC算法,模式匹配的效率有了明显提高,在最好的情况下,其匹配性能是1.x版本的18倍。对Snort早期版本的研究表明,出现大量小数据包或非TCP包时,规则头匹配耗时严重;出现大量HTTP等TCP流量时,内容匹配成为系统瓶颈。
利用octeon 报文处理硬件,优化snort的代码。Octeon DFA提供了硬件级的关键字匹配算法,利用DFA作为snort的规则匹配算法,发挥网络多核处理器的硬件报文处理特性,可以实现高性能的NIDS系统。