论文部分内容阅读
摘要:通过分析各种入侵检测系统的特点,提出了一种基于移动Agent和主从数据库模式的分布式入侵检测系统的模型MADIDS,实现了基于该模型的分布式入侵检测系统,该模型中的Agent相互独立、互相协作,并有效的对数据库进行层次划分,提高了系统的效率、健壮性、可扩展性和可靠性。
关键词:入侵检测;移动Agent;MYSQL
中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)24-1181-04
The Research of Distributed Intrusion Detection System Based on Mobile Agent and MYSQL
XUAN Song-sheng, CHEN Zhong-min
(College of Science, Huazhong Agricultural University, Wuhan 430070, China)
Abstract: Through analysis of the characteristics of Intrusion Detection System, the model of a distributed intrusion detection system called MADIDS based on mobile agent and master-slave database model is proposed and simply realized.The Agents are independent and cooperative. The layered construction is used to the model of database.The MADIDS has advantages of efficiency,robustness,scalability and reliability.
Key words: intrusion detection; mobile agent; MYSQL
1 引言
随着网络的发展和应用的深入,黑客入侵事件变得越来越猖獗,人们发现,仅仅依靠传统的操作系统加固和防火墙隔离等静态安全防御技术已经远远无法满足现有网络安全的需要了。入侵检测系统作为近十多年来发展起来的新一代安全防范技术,得到了深入的研究和广泛的应用。[1]
入侵检测系统按系统结构分为集中式入侵检测系统和分布式入侵检测系统。
1) 集中式入侵检测系统CIDS(Centralized Intrusion Detection System)中,无论监视的网络有多少主机,数据分析都在一个固定的位置进行。CIDS采用单个数据分析组件进行数据分析,因此其扩展性较差,存在单点故障问题,同时也耗费大量的通信和处理资源。
2) 分布式入侵检测系统DIDS(Distributed Intrusion Detection System)则将数据分析任务分配给多个处于不同位置的数据分析组件,这些组件采用完全分布方式或分层方式进行协作。根据分布的程度,又可再分为部分分
布式和完全分布式结构。
2 移动Agent和Aglet概述
移动Agent技术是集分布式对象技术、软件Agent技术、移动代码技术于一体的技术,它是为解决复杂、动态、分布式智能应用而提出的一种全新的计算手段,不仅结合了代理的自治、智能的特点,而且引入了移动的思想,极大的延伸了分布式计算的概念。该技术融合了人工智能和分布式计算技术的技术将很可能成为智能化分布式计算的一个重要组成部分。移动Agent理论方面的研究比较成熟,目前市场已有的移动Agent平台有IBM公司的Aglet。
Aglet是由日本IBM公司所提出,完全用Java发展的移动agent技术,并提供实用的平台Aglets Workbench来完成开发或执行mobile agent系统。Aglets中的移动agent称为Aglet,是一个可移动的Java对象。Aglet以线程的形式产生于一台机器上,可随时暂停正在执行的工作,之后可将整个Aglet分派到另一台机器上重新启动,执行任务。因为Aglet是线程的,所以不会消耗太多的系统资源。[2]
目前使用移动Agent技术开发入侵检测系统有:
Purdue大学开发的AAFID(Autonomous Agents For Intrusion Detection,自治代理入侵检测系统)采用了agent分层控制和报告的层次结构,包括四类基本组件:agent、过滤器(Filter)、转发器(Transceiver)和监视器(Monitor)。[3]
美国Iowa州立大学开发的MAIDS(Mobile Agent Intrusion Detection System)是一个基于移动agent技术的分布式入侵检测系统。该系统提供了一个实现移动agent网络的有色Petri网体系结构。[4]
3 基于移动agent的MADIDS的设计
作为网络安全的补充,本文在现有入侵检测系统基础上,将移动agent技术运用于入侵检测系统的数据采集部分和检测分析部分,提出了基于移动agent的网络入侵检测系统MADIDS。
3.1 MADIDS系统结构设计
为了提高检测效率,增强系统的健壮性,系统决定采用完全分布式协同检测结构,如图1所示。
在该系统结构中,最下层的数据采集节点负责采集数据,根据安全策略对大量数据进行过滤,以减轻上层分析检测节点的数据处理压力,提高检测效率。每个数据采集节点负责采集一个或几个主机的网络数据,当某个节点出现故障或者流量过大时,可以和其他节点通信,由其他节点全部或部分接管该节点的数据采集工作。除此之外,节点间需要实时传递自己状态信息,以便某个节点出现故障时其他节点接管其工作。数据节点间相互协作,以保证迅速快捷的数据采集。
分析检测节点从数据采集节点接收数据并利用检测规则检测数据是否是入侵数据。如果是入侵数据则提交给上层,由上层采取相应的响应措施。管理控制节点负责系统策略的生成、发布和对于入侵的响应等。
3.2 MADIDS系统模型的设计
图2为MADIDS系统的模型。
在入侵检测系统中使用代理完成数据采集、数据预处理和数据分析等功能,使用移动代理实时就地处理数据和突发事件,可减少系统内部通信量,加速对入侵响应和追踪等,因此具有能够减轻网络负载、减少网络延迟、动态适应网络变化、可扩展性好及能够在异构环境下执行等优点。[5]
3.3 MADIDS数据库的设计
一个好的分布式入侵检测系统数据库的设计至关重要,而且分布式入侵检测需要有分布式的数据库管理与之相对应。数据库存储各种规则、事件、策略和管理员的配置信息等。
1) 数据库模式
数据库采用MYSQL主从服务器模式,主服务器负责各种信息的写入,从服务器自动从主服务器复制数据,并提供本机上相应模块的数据读取。使用主从式数据库模式既可以提高系统访问数据的速度,同时可以避免由于某个数据库服务器出现故障而造成系统瘫痪。
2) 数据库详细设计
事件库中存放某些出现攻击的数据包的摘要以及做出的反应,如表1所示。用户配置信息中包含对某些协议屏蔽、日期时间等信息,如表2所示。
3.4 MADIDS模型中各功能模块的设计
系统分为数据采集模块、数据分析模块、管理控制模块三大部分。
1) 数据采集模块:数据采集模块由数据采集代理完成,使用包过滤技术。数据采集模块分布在被监视的主机中,每个代理监控某几个主机。代理截获数据包后,首先做简要的分析,根据过滤策略把需要向上层传递的数据包转发给上层。数据采集代理之间需要相互协作,某个代理如果出现故障或者流量过大,需要其他代理协作。
2) 数据分析模块:数据分析模块是系统最重要的模块,由数据分析代理完成。数据分析代理从数据采集代理那里接受数据并检测是否是入侵数据包,根据检测结果向上层发出报告。数据分析代理与数据采集代理之间需要经常交换状态信息,如果某个代理数据处理任务过重,需要向下层传递其过重状态,由下层选择空闲代理完成数据解析任务。
3) 管理控制模块:管理控制模块包含响应代理、数据库代理和用户接口代理管理三个部分。
① 响应代理:响应代理根据不同的入侵行为按照预先指定的响应策略做出相应反馈。
② 数据库代理:数据库代理负责和数据库交互,读取数据库中的配置信息和向数据库中写入规则或者响应等信息。
③ 用户接口代理:用户接口代理以一种可视化的方式提供了用户与该入侵检测系统的接口,不具有移动性。该代理功能较多,主要负责整个系统的管理,包括Aglet生存管理、Aglet状态监视、Aglet初始参数设置、安全管理器设置和保证Aglet的正常运行等,便于用户监视系统中各子agent的运行状态,并根据具体情况设定各种系统参数完成特定功能的检测分析agent的配置。
4 基于移动agent的MADIDS的初步实现
4.1 分布式数据库的建立
数据库分主从两种,主数据库服务器可以安装在系统管理模块主机上,也以安装在单独主机上,从服务器安装在管理模块和分析检测模块上。
主从服务器的设置增加了健壮性。通过在主服务器和从服务器之间切分处理客户查询的负荷,可以得到更好的客户响应时间。
假设主服务器IP为192.168.0.1,从服务器IP为192.168.0.3,实现Mysql主从服务器的具体步骤是:
1) 在主服务器上为从服务器建立一个用户:
grant replication slave on *.* to ’db1’@’192.168.0.3’ identified by ’abcdef’;
2) 编辑主服务器上的my.ini文件,一般位于C:\Windows\my.ini。
server-id=1
log-bin=mysql-bin
binlog-do-db=madids
3) 编辑从服务器上的my.ini文件,加入以下语句:
server-id=2
master-host=192.168.0.1
master-user=db1
master-password=abcdef
master-port=3306
replicate-do-db=madids
4) 将主服务器上的madids数据库拷贝到从服务器,重启各个主从服务器。
如果需要设置多个从服务器,参考上面步骤即可,可以写一个bat程序来执行上述操作。
5) 数据库的连接
Java数据库连接性(Java Database connectivity,JDBC)是一种Java API,支持结构化查询语言的执行。SQL是连接RDBMS所用的、事实上的行业标准。
JDBC提供各种工具,以支持下述功能:建立到RDMS的连接,发送SQL语句,处理结果。[6]
本系统中,连接数据库的代码如下:
Connection sqlConn=null;
Statement sqlStm=null;
try{
Class.forName("com.mysql.jdbc.Driver");
sqlConn=DriverManager.getConnection("jdbc:mysql://localhost:3306/madids","root","abcdef");
sqlStm=sqlConn.createStatement();}
catch(Exception e){
System.out.println(e.toString() e.getMessage());}
4.2 数据采集模块的实现
1) 数据采集部分
数据采集代理是基于混杂网卡模式下的数据监听,利用WinPcap和Jpcap函数库从网络上直接抓取数据包并做简单的过滤。
为了捕获包,API提供了JpcapCaptor.getDeviceList()方法实现利用Jpcap监听哪个网络设备的选择。该方法返回了一个NetworkInterface类的实例,出现的多个设备名称都记录其中。openDevice()方法需要指定即将打开的设备名,从设备上一次读取的最大字节数,说明是否将设备设为混杂模式的Boolean值和以后调用processPacket()方法要使用到的超时值四个参数。openDevice()方法将一个参数返回到用以捕获的Jpcap对象。
public class CaptureAgent extends Aglet implements PacketReceiver{
public void receivePacket(Packet packet){
try{
if(packet instanceof TCPPacket)
{ String destip=((IPPacket)packet).dst_ip.getHostAddress();
StringTokenizer st = new StringTokenizer(destip,".");
String[] ips = new String[st.countTokens()];
ips[0] = st.nextToken();
ips[1] = st.nextToken();
ips[2] = st.nextToken();
ips[3] = st.nextToken();
if(Integer.parseInt(ips[0])==ipwatchs[0]
关键词:入侵检测;移动Agent;MYSQL
中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)24-1181-04
The Research of Distributed Intrusion Detection System Based on Mobile Agent and MYSQL
XUAN Song-sheng, CHEN Zhong-min
(College of Science, Huazhong Agricultural University, Wuhan 430070, China)
Abstract: Through analysis of the characteristics of Intrusion Detection System, the model of a distributed intrusion detection system called MADIDS based on mobile agent and master-slave database model is proposed and simply realized.The Agents are independent and cooperative. The layered construction is used to the model of database.The MADIDS has advantages of efficiency,robustness,scalability and reliability.
Key words: intrusion detection; mobile agent; MYSQL
1 引言
随着网络的发展和应用的深入,黑客入侵事件变得越来越猖獗,人们发现,仅仅依靠传统的操作系统加固和防火墙隔离等静态安全防御技术已经远远无法满足现有网络安全的需要了。入侵检测系统作为近十多年来发展起来的新一代安全防范技术,得到了深入的研究和广泛的应用。[1]
入侵检测系统按系统结构分为集中式入侵检测系统和分布式入侵检测系统。
1) 集中式入侵检测系统CIDS(Centralized Intrusion Detection System)中,无论监视的网络有多少主机,数据分析都在一个固定的位置进行。CIDS采用单个数据分析组件进行数据分析,因此其扩展性较差,存在单点故障问题,同时也耗费大量的通信和处理资源。
2) 分布式入侵检测系统DIDS(Distributed Intrusion Detection System)则将数据分析任务分配给多个处于不同位置的数据分析组件,这些组件采用完全分布方式或分层方式进行协作。根据分布的程度,又可再分为部分分
布式和完全分布式结构。
2 移动Agent和Aglet概述
移动Agent技术是集分布式对象技术、软件Agent技术、移动代码技术于一体的技术,它是为解决复杂、动态、分布式智能应用而提出的一种全新的计算手段,不仅结合了代理的自治、智能的特点,而且引入了移动的思想,极大的延伸了分布式计算的概念。该技术融合了人工智能和分布式计算技术的技术将很可能成为智能化分布式计算的一个重要组成部分。移动Agent理论方面的研究比较成熟,目前市场已有的移动Agent平台有IBM公司的Aglet。
Aglet是由日本IBM公司所提出,完全用Java发展的移动agent技术,并提供实用的平台Aglets Workbench来完成开发或执行mobile agent系统。Aglets中的移动agent称为Aglet,是一个可移动的Java对象。Aglet以线程的形式产生于一台机器上,可随时暂停正在执行的工作,之后可将整个Aglet分派到另一台机器上重新启动,执行任务。因为Aglet是线程的,所以不会消耗太多的系统资源。[2]
目前使用移动Agent技术开发入侵检测系统有:
Purdue大学开发的AAFID(Autonomous Agents For Intrusion Detection,自治代理入侵检测系统)采用了agent分层控制和报告的层次结构,包括四类基本组件:agent、过滤器(Filter)、转发器(Transceiver)和监视器(Monitor)。[3]
美国Iowa州立大学开发的MAIDS(Mobile Agent Intrusion Detection System)是一个基于移动agent技术的分布式入侵检测系统。该系统提供了一个实现移动agent网络的有色Petri网体系结构。[4]
3 基于移动agent的MADIDS的设计
作为网络安全的补充,本文在现有入侵检测系统基础上,将移动agent技术运用于入侵检测系统的数据采集部分和检测分析部分,提出了基于移动agent的网络入侵检测系统MADIDS。
3.1 MADIDS系统结构设计
为了提高检测效率,增强系统的健壮性,系统决定采用完全分布式协同检测结构,如图1所示。
在该系统结构中,最下层的数据采集节点负责采集数据,根据安全策略对大量数据进行过滤,以减轻上层分析检测节点的数据处理压力,提高检测效率。每个数据采集节点负责采集一个或几个主机的网络数据,当某个节点出现故障或者流量过大时,可以和其他节点通信,由其他节点全部或部分接管该节点的数据采集工作。除此之外,节点间需要实时传递自己状态信息,以便某个节点出现故障时其他节点接管其工作。数据节点间相互协作,以保证迅速快捷的数据采集。
分析检测节点从数据采集节点接收数据并利用检测规则检测数据是否是入侵数据。如果是入侵数据则提交给上层,由上层采取相应的响应措施。管理控制节点负责系统策略的生成、发布和对于入侵的响应等。
3.2 MADIDS系统模型的设计
图2为MADIDS系统的模型。
在入侵检测系统中使用代理完成数据采集、数据预处理和数据分析等功能,使用移动代理实时就地处理数据和突发事件,可减少系统内部通信量,加速对入侵响应和追踪等,因此具有能够减轻网络负载、减少网络延迟、动态适应网络变化、可扩展性好及能够在异构环境下执行等优点。[5]
3.3 MADIDS数据库的设计
一个好的分布式入侵检测系统数据库的设计至关重要,而且分布式入侵检测需要有分布式的数据库管理与之相对应。数据库存储各种规则、事件、策略和管理员的配置信息等。
1) 数据库模式
数据库采用MYSQL主从服务器模式,主服务器负责各种信息的写入,从服务器自动从主服务器复制数据,并提供本机上相应模块的数据读取。使用主从式数据库模式既可以提高系统访问数据的速度,同时可以避免由于某个数据库服务器出现故障而造成系统瘫痪。
2) 数据库详细设计
事件库中存放某些出现攻击的数据包的摘要以及做出的反应,如表1所示。用户配置信息中包含对某些协议屏蔽、日期时间等信息,如表2所示。
3.4 MADIDS模型中各功能模块的设计
系统分为数据采集模块、数据分析模块、管理控制模块三大部分。
1) 数据采集模块:数据采集模块由数据采集代理完成,使用包过滤技术。数据采集模块分布在被监视的主机中,每个代理监控某几个主机。代理截获数据包后,首先做简要的分析,根据过滤策略把需要向上层传递的数据包转发给上层。数据采集代理之间需要相互协作,某个代理如果出现故障或者流量过大,需要其他代理协作。
2) 数据分析模块:数据分析模块是系统最重要的模块,由数据分析代理完成。数据分析代理从数据采集代理那里接受数据并检测是否是入侵数据包,根据检测结果向上层发出报告。数据分析代理与数据采集代理之间需要经常交换状态信息,如果某个代理数据处理任务过重,需要向下层传递其过重状态,由下层选择空闲代理完成数据解析任务。
3) 管理控制模块:管理控制模块包含响应代理、数据库代理和用户接口代理管理三个部分。
① 响应代理:响应代理根据不同的入侵行为按照预先指定的响应策略做出相应反馈。
② 数据库代理:数据库代理负责和数据库交互,读取数据库中的配置信息和向数据库中写入规则或者响应等信息。
③ 用户接口代理:用户接口代理以一种可视化的方式提供了用户与该入侵检测系统的接口,不具有移动性。该代理功能较多,主要负责整个系统的管理,包括Aglet生存管理、Aglet状态监视、Aglet初始参数设置、安全管理器设置和保证Aglet的正常运行等,便于用户监视系统中各子agent的运行状态,并根据具体情况设定各种系统参数完成特定功能的检测分析agent的配置。
4 基于移动agent的MADIDS的初步实现
4.1 分布式数据库的建立
数据库分主从两种,主数据库服务器可以安装在系统管理模块主机上,也以安装在单独主机上,从服务器安装在管理模块和分析检测模块上。
主从服务器的设置增加了健壮性。通过在主服务器和从服务器之间切分处理客户查询的负荷,可以得到更好的客户响应时间。
假设主服务器IP为192.168.0.1,从服务器IP为192.168.0.3,实现Mysql主从服务器的具体步骤是:
1) 在主服务器上为从服务器建立一个用户:
grant replication slave on *.* to ’db1’@’192.168.0.3’ identified by ’abcdef’;
2) 编辑主服务器上的my.ini文件,一般位于C:\Windows\my.ini。
server-id=1
log-bin=mysql-bin
binlog-do-db=madids
3) 编辑从服务器上的my.ini文件,加入以下语句:
server-id=2
master-host=192.168.0.1
master-user=db1
master-password=abcdef
master-port=3306
replicate-do-db=madids
4) 将主服务器上的madids数据库拷贝到从服务器,重启各个主从服务器。
如果需要设置多个从服务器,参考上面步骤即可,可以写一个bat程序来执行上述操作。
5) 数据库的连接
Java数据库连接性(Java Database connectivity,JDBC)是一种Java API,支持结构化查询语言的执行。SQL是连接RDBMS所用的、事实上的行业标准。
JDBC提供各种工具,以支持下述功能:建立到RDMS的连接,发送SQL语句,处理结果。[6]
本系统中,连接数据库的代码如下:
Connection sqlConn=null;
Statement sqlStm=null;
try{
Class.forName("com.mysql.jdbc.Driver");
sqlConn=DriverManager.getConnection("jdbc:mysql://localhost:3306/madids","root","abcdef");
sqlStm=sqlConn.createStatement();}
catch(Exception e){
System.out.println(e.toString() e.getMessage());}
4.2 数据采集模块的实现
1) 数据采集部分
数据采集代理是基于混杂网卡模式下的数据监听,利用WinPcap和Jpcap函数库从网络上直接抓取数据包并做简单的过滤。
为了捕获包,API提供了JpcapCaptor.getDeviceList()方法实现利用Jpcap监听哪个网络设备的选择。该方法返回了一个NetworkInterface类的实例,出现的多个设备名称都记录其中。openDevice()方法需要指定即将打开的设备名,从设备上一次读取的最大字节数,说明是否将设备设为混杂模式的Boolean值和以后调用processPacket()方法要使用到的超时值四个参数。openDevice()方法将一个参数返回到用以捕获的Jpcap对象。
public class CaptureAgent extends Aglet implements PacketReceiver{
public void receivePacket(Packet packet){
try{
if(packet instanceof TCPPacket)
{ String destip=((IPPacket)packet).dst_ip.getHostAddress();
StringTokenizer st = new StringTokenizer(destip,".");
String[] ips = new String[st.countTokens()];
ips[0] = st.nextToken();
ips[1] = st.nextToken();
ips[2] = st.nextToken();
ips[3] = st.nextToken();
if(Integer.parseInt(ips[0])==ipwatchs[0]