◆高振铁 冯亚丽
一种基于Hadoop集群的分布式入侵检测系统模型
◆高振铁 冯亚丽
(深圳华威世纪科技股份有限公司 广东 518029)
入侵检测系统是一项对网络安全进行检测、报警、响应的技术,它通过采集网络中某些关键信息并对其进行分析,从而发现异常或者入侵攻击行为。随着网络规模的扩大,传统的入侵检测系统已不足以应对海量数据处理。本文主要针对传统入侵检测系统在数据规模较大时,数据处理能力不足、单点失效的问题,设计了一种基于Hadoop集群的入侵检测系统模型。
入侵检测;Hadoop;数据收集;数据存储
随着计算机网络的发展和互联网信息规模的增长,加之互联网开放性等特点,使得网络被攻击的可能性大大增加。信息被篡改、病毒入侵、黑客攻击等恶意性问题,以及信息人员不规范操作导致的非恶意性安全问题频发。因此,如何确保信息的完整性、安全性以及信息系统的安全稳定运行已成为一个亟待解决的问题。
传统的信息安全研究主要集中在数据认证加密机制、安全审计机制、防火墙设置等静态安全技术领域。但从信息安全管理的角度来说,仅靠静态防御技术来解决网络安全问题是远远不够的,还需要建立动态自学习、自适应的动态策略以达到保护网络的“双重保险”。入侵检测具有动态监控、预防和主动抵御攻击等多种功能,它是对静态防御技术的一个有效补充,同时入侵检测配置也十分简单、易懂。
入侵检测技术作为继防火墙之后的计算机网络和系统的第二道安全防线,在网络安全领域具有重要的地位。以美国为代表的众多国外研究部门在入侵检测研究方面一直处于世界领先地位,我国在入侵检测研究和应用方面起步较晚,但也取得了一些成果,如“天眼”入侵检测系统以及启明星辰的黑客入侵检测与预警系统等[1]。
智能化的入侵检测已经成为发展趋势,将数据挖掘技术、云计算技术等技术引入入侵检测领域,能够创造出更为高效、智能的入侵检测算法和系统模型。
1.1 Hadoop相关技术简介
Hadoop是一个基于Java的分布式数据处理和数据分析的框架,不需要使用昂贵的服务器或超级计算机就可以实现高性能计算,同时也不需要考虑单点失效的问题。Hadoop包括两个核心部分:分布式文件系统(HDFS)和MapReduce计算框架。HDFS使用流式数据访问模式来对大规模的文件进行存储,实行一次写入、多次读取的文件访问方式,提高了系统的吞吐量[2]。
MapReduce是一个并行化的编程模型,用户只需要编写Map和Reduce函数,不需要了解太多的知识,系统会自动地管理Map和Reduce的任务执行,同时也会对任务间的调度进行管理。Map和Reduce这两个阶段的输入和输出的形式都是键值对,用户可以自由地对类型进行定义。
1.2 常见的分布式IDS架构
入侵检测系统指在网络环境中能够对入侵行为进行检测的软硬件。它通过采集数据(日志、流量等),再经特定的方法处理后判断是否有入侵行为,最终做出响应,同时不会影响网络的性能。1997年,DARPA 提出了通用入侵检测框架CIDF,不仅对组件间的通信机制进行了规范,而且对描述检测信息的语言格式进行了定义。但这种单一的检测防御方式并不能够保障整个网络的安全,特别是面对网络内部的入侵,分布式入侵检测技术应运而生。很多分布式IDS结构是基于CIDF设计而成的,大致归纳为以下三类:
(1)集中分布式
集中分布式IDS结构的所有数据传感组件全部分布在网络中,并且数据处理的功能依赖于固定数量的组件来完成。其优点是可以充分利用组件提供的检测数据,再对数据进行融合处理后,快速地做出正确的判断。当传感组件数量较少时,具有很明显的优势。缺点是可能会出现单点失效问题以及扩展性比较差。其结构如图1所示。
图1 集中分布式IDS架构
(2)层次分布式
相对于集中分布式,该结构主要是由数据传感层、数据分析层以及决策控制层组成。数据传感层负责收集数据,对其提炼、精简后,上传至数据分析层。数据分析层接收到数据后,对其做一个简单的处理,然后将结果上传给决策控制层。控制层负责控制和数据处理,对数据进行分析,并在入侵发生后采取一定的措施。其结构如图2所示。
图2 层次分布式IDS架构
(3)对等协作分布式
该系统结构的所有组件都是对等的,相互之间进行协作,不存在任何的上下级关系或者从属关系。这些IDS节点可以单独进行数据收集,处理数据并采取措施。对等协作分布式可以很好地改善系统的容错性。但当节点数据规模比较大时,会产生很大的通信量。其结构如图3所示。
图3 对等协作分布式IDS架构
1.3 影响大规模数据入侵检测的因素
影响IDS性能的主要有以下两个因素:
(1)硬件
在处理规模比较大的数据时,IDS需要进行数据包的捕获、数据预处理、数据分析等过程,这些过程统统离不开网卡、内存、带宽、CPU以及I/O等。数据包的捕获需要依靠网卡,当包达到一定值时,会出现被丢弃的情况。捕获的数据包一般都放在内存中,内存的大小严重影响着IDS的性能。CPU主要在IDS进行抓包以及对数据包进行分析的过程中工作,CPU的数量和主频会影响到IDS的性能。在对数据进行传输的时候,I/O同样也会影响IDS的性能。
(2)软件
在IDS的架构方面,分布式的架构更加能够适应对大规模数据的处理。同样地,在检测算法方面,分布式的检测算法可以很好地提高检测性能。通过上面的分析,在提高IDS性能方面,可以通过改善系统配置,对网卡设备进行优化,提高内存以及CPU的性能,也可以采用分布式的检测算法。
2.1 HIDS模型描述
对于目前各种入侵行为对计算机网络和系统的攻击,入侵检测系统已经能够在很大程度上对其进行抵御,但是还存在着很多不足之处。
2.1.1 系统设计思想
集中分布式IDS容易出现单点失效问题,可能导致整个系统崩溃。对等协作分布式IDS的各个节点具有自主性,但是对系统的智能化程度要求很高,而且在节点相互通信过程中通信开销太大,给系统带来负担。层次分布式IDS的优势非常适用于构建实际的IDS,但是高层组件的特别容易成为制约整个系统性能的阻碍,无法处理海量数据以及系统单机的处理能力有限等问题制约入侵检测系统的性能。本文针对传统入侵检测系统在数据规模较大时,表现出数据处理能力不足、单点失效的现象,设计了一种基于Hadoop集群的入侵检测(HIDS)系统模型。该系统主要由分布在网络节点上的检测代理、数据收集组件和基于Hadoop集群构建的监控中心构成。其架构如图4所示。
图4 HIDS架构图
2.1.2 HIDS各组件描述
(1)检测代理
检测代理分布于网络中的各个节点,工作在HIDS系统的最底层。主要由数据采集器、数据处理模块、通信模块以及控制模块组成。
数据采集器是系统最基础的部分,负责收集系统需要的数据。数据采集器可以对系统日志、用户行为等主机行为信息或者是记录网络行为的原始数据包等对象进行采集。 数据处理模块对不同格式的数据进行处理,然后封装成统一的格式,上传给上一层组件。通信模块主要负责实现检测代理模块与上层模块之间的相互通信。控制模块接收来自通信模块的传感器命令之后,对传感器做出相应的操作。
(2)数据收集组件
数据收集组件将底层的检测代理分成若干个区域,解决了检测代理直接与Hadoop集群交互可能导致的单点瓶颈问题,包括数据解析引擎、数据接收模块和数据发送模块三部分。
数据解析引擎:数据收集组件工作后,会重新注册系统的最新格式的元数据。这些元数据包括了数据格式、数据解析器等内容。引擎在接收到检测代理传送的数据后,会根据数据格式信息,匹配适合的数据解析器,将接收到的数据解析成为指定的格式。数据接收模块主要负责对检测代理的数据进行接收,然后把这些数据发送到数据解析引擎。数据发送模块主要负责将解析后的数据发送到监控中心。
(3)监控中心
监控中心是依赖于Hadoop集群构建的,底层会将所有收集到的数据传送到监控中心。监控中心主要由存储模块、挖掘模块、规则库以及用户界面组成。
挖掘模块对收集的入侵行为数据进行挖掘,寻找记录之间的相关特性,发现和记录新的特征。存储模块里面的数据包括两个部分:第一部分是数据格式元数据,主要保存系统可以解析的数据格式信息;第二部分是系统各个组件的状态信息,不定时地更新各个组件的运行状态。规则库和挖掘模块提供的入侵行为记录进行比对,若是新的行为,则对其记录。用户界面确保安全管理人员可以通过接口对入侵的行为记录进行查询。
2.1.3 HIDS系统特点
开放性:传感器模块是整个系统的检测能力的核心组件。传感器可以适用于不同的工作环境。若需要添加新的功能的传感器,只需要定义好新的数据格式元数据以及与之对应的数据格式解析器。
分布性:该系统可以在不同的结构上实现了数据收集、数据分析以及处理。该系统的监控中心主要依赖于Hadoop集群构建,这样就降低了传统分布式系统的高层组件的系统瓶颈和单点失效问题的风险。
扩展性:系统可以根据不同的需要,进行对应的配置。
鲁棒性:系统的组件是相对独立的,当一个组件不能工作时,系统只会损失部分检测功能。
2.2 关键模块实现分析
上一节主要对提出的分布式IDS系统(HIDS)框架以及各个组件进行了描述,本节将对检测代理、数据采集器、存储模块等模块或组件的实现进行阐述。
2.2.1 检测代理的实现
(1)运行流程
检测代理是HIDS系统分布在网络中各个节点的底层组件,通过内部运行的各个模块对信息进行简单的检测。数据采集器不会直接和数据收集组件进行数据传输,而是经由检测代理将信息发送到数据收集组件。其运行流程如图5所示。
图5 检测代理运行流程
(2)数据传输格式
检测代理将接收到的数据进行处理,统一数据的格式,然后将其发送给数据接收组件。HIDS选取的数据格式是JSON数据格式全称是JavaScript Object Notation。拥有这个格式的数据一般都相对简单,并且易于对该格式的数据进行解析。检测代理的数据传输格式如表1所示。
表1 检测代理数据传输格式
TimeS:代表检测代理进行数据发送的时间戳。
AgentID:发送的数据来自哪个检测代理。
Data:发送的数据内容。
Source:发送到检测代理数据是来自于哪个传感器。
2.2.2数据收集组件
在检测代理中,数据采集器以插件的方式进行工作。由于采集器和检测代理之间不是耦合关系,所以数据采集器可以是所有的外部程序。本系统使用抽象的Adaptor类来表示采集器的运行方式,同时定义了基础属性以及方法接口。Adaptor类属性的代码如下:
public abstract class Adaptor{
protected String type;
protected String id;
protected Manager control;
}
type表示该类的数据输出类型。数据收集组件在接收到数据后,会根据该类型选择与之对应的数据解析器。id是Adaptor类的标识符,是唯一的。control表示该类的控制接口。本文实现了一个派生于Adaptor类的NetAdaptor类,该类通过实现两个读写线程来实现对数据的传输。读的线程从进程的输出流中读取数据,同时以JSON格式对数据进行包装,接下来,将其写入一个缓存队列。写的线程不停地检查缓存队列,当队列中存在数据时,线程则将数据写入到全局发送队列Queue类中。在没有数据的情况下,进入休眠状态,直到缓存队列的写线程唤醒。
2.2.3数据处理模块的设计
数据处理模块主要用于对网络数据进行捕获、分析以及检测。HIDS的检测代理利用Snort软件来实现数据处理模块的重要功能。Snort的工作流程如图6所示:
图6 Snort工作流程
捕获数据:系统进行检测时需要先从网络中对数据包进行捕获。Snort利用libpcap来捕获数据包。Libpcap可以单独地从网络中捕获没有经过任何修改的数据包,原始包的所有信息都是完整的。
包解码程序:网络数据包收集到以后,Snort会建立堆栈,在数据包中,由低层协议到高层协议的顺序,对所有的协议元素进行解码。
预处理程序:一是对数据包进行检查或者修改,使得检测引擎可以正确地处理数据包;二是对流量进行标准处理,使得检测引擎可以进行特征匹配。
检测引擎:检测引擎的主要功能是对Snort的规则进行分析,建立攻击特征;同时对流量和规则进行匹配。
输出插件:Snort输出插件的目的是用来将入侵记录的数据存储到另外的文件或者资源当中,比如:数据库、日志等。在本系统中,选取CSV作为插件的输出结构,CSV需要进行两项配置,一是配置告警字段的输出顺序;二是输出文件名设置成/des/file,表示会将输出到标准的输出流中。经过这样的配置,检测代理就可以捕获到输出的结果。
2.2.4 存储模块实现
存储模块主要功能是存储入侵行为记录,提供给安全管理人员进行查询、分析。同时,里面也存放着所有的元数据信息。HDFS默认的块比传统的块要大得多,这样的设定使得有助于提高整个系统对数据的吞吐率。
在本文的HIDS系统中,在底层的传输的数据大小一般不会超过64M,假如直接将这些数据存放到HDFS里面,会造成很大的存储资源浪费。同时,如果将底层的数据先存入到缓冲中,数据量达到64M时再传输,会影响系统对入侵行为检测的实时性。因此,如何在存储效率和检测实时性之间找到一个平衡点,是HIDS实现存储模块的一个关键问题。本HIDS系统采用了HBase数据库,可以实时地对大规模数据集进行随机读写。
HIDS系统的存储模块,主要对以下两种数据进行存放:
(1)组件状态数据库
组件的状态信息,会定时地进行更新。时间戳、组件的标识以及组件的类型构成了Row Key,如果该系统没有在一定时间内接收到来自组件的信息,则说明组件已经失效,需要向安全管理人员报告。Message代表组件发送到状态信息。如表2所示。
表2 组件状态数据库
(2)数据格式元数据库
在该数据库上,存放着解析器在HDFS上面的路径,以及代表HIDS能够解析的数据格式信息。如表3所示。
表3 数据格式元数据库
Type:同数据格式对应的标识符;
ClassName:解析器的类名;
Path:在HDFS上,用于解析的jar包的存放路径。
随着网络业务的不断增多以及网络流量规模急剧加大,传统的入侵检测系统的单机处理模式已经难以对庞大的数据集进行处理,检测入侵行为也变得越来越困难。因此,本文结合分布式技术与入侵检测技术,提出了一种基于Hadoop的入侵检测系统HIDS,首先介绍了系统的架构,并且对各个组件的功能进行了阐述,同时介绍了系统的特点;然后介绍了HIDS几个重点组件的实现机制,阐述了检测代理的处理流程,数据采集器和数据处理模块的实现;最后,阐述了数据收集组件以及存储模块的实现。
[1]李贺玲.数据挖掘在网络入侵检测中的应用研究[D].吉林大学,2013.
[2]Wbite T.Hadoop权威指南[M].北京:清华大学出版社,2011.
[3]周永福,曾志.Linux下采用Libpcap实现IDS的网络数据包监控[J].现代计算机,2015.
[4]卢荣.基于Snort的分布式入侵检测系统[J].信息系统工程,2015.
深圳市技术创新计划技术攻关项目(项目编号:深科技创新[2015]293号)。