005IDXP协议的简易实现样本
(样本只提供该系统的基本情况介绍,若需要完整的设计和论文,建议您购买本系统,凡是购买本站系统的,本站均根据您的要求,把系统上的开发信息,题目等修改成符合您的要求)
本设计包含内容:毕业论文+开题报告+答辩稿
论文大概:
IDXP协议的简易实现
IDXP协议的简易实现
摘 要:本文主要介绍在Beepcore
C库工具包上开发一个IDXP协议的简易框架,IDXP(入侵检测交换协议)是一个用于入侵检测实体之间交换数据的应用层协议,能够实现IDMEF消息、非结构文本和二进制数据之间的交换,并提供面向连接协议之上的双方认证、完整性和保密性等安全特征。
关键字:入侵检测;入侵检测信息交换系统;评估;网络安全;
The realizing simple and easily of
IDXP agreement
Abstract: In this text,it main introducts the developing of a
simple and easy frame of IDXP agreement on Beepcore C
storehouse tool kit.IDXP is an application layer of agreement
use to invade measure entity exchange of datum.it can realize IDMEF
news, structure text and exchange in binary scale of datum.also
offered the safe characteristics faced and connected on the
agreement such as the authentication,integrality and privacy of both
sides.
Key words:intrusion detection;IDWG;standardization;network
security
一、引言
CNNIC发布的《中国互联网络发展状况统计报告》显示,中国现已有几千万上网用户。因此,越来越多的公司将其核心业务向互联网转移、服务成为当前IT业另一个生长点,但网络安全作为一个无法回避的问题呈现在人们面前。随着计算机网络知识的普及,攻击者越来越多,知识日趋成熟,攻击工具与手法日趋复杂多样,单纯的防火墙策略已经无法满足对安全高度敏感的部门的需要,网络
的防卫必须采用一种纵深的、多样的手段。网络环境也变得越来越复杂,各式各样的复杂的设备,需要不断升级、补漏的系统使得网络管理员的工作不断加重,不经意的疏忽便有可能造成安全的重大隐患。于是,入侵检测系统成为了安全市场上新的热点,不仅愈来愈多的受到人们的关注,而且已经开始在各种不同的环境中发挥其关键作用。
为了提高IDS产品、组件及与其它安全产品之间的互操作性,美国国防高级研究计划署(DARPA)和互联网工程任务组(IETF)的入侵检测工作组(IDWG)发起制订了一系列建议草案,从体系结构、API、通信机制、语言格式等方面规范IDS的标准。IDXP(入侵检测交换协议)就是其中的一个用于入侵检测实体之间交换数据的应用层协议,它能够实现IDMEF消息、非结构文本和二进制数据之间的交换,并提供面向连接协议之上的双方认证、完整性和保密性等安全特征。
1.
2.
3.
4. 谁要打开通道
首先,我们要考虑的问题就是:“我怎么才能让初始框架启动呢?”换句话说,谁调用bp_start_request?有两个地方可以调用这个函数。首先,一个框架可以完全“独立”,可以在pro_greeting_confirmation中调用bp_start_request。其次,一个程序也可以等待接受欢迎信息,然后再调用bp_start_request。我们就先看一下这两种情况。
在这一种情况下,可以想象一个对话的客户端从一个它想连接的服务器端那里读如控制命令。在这种情况下,应用程序将要连接到服务器端并且启动wrapper。收到了greeting信息以后,将会触发框架实例打开一个窗口,从而使得用户可以打入消息、框架实例可以把收到的信息放在里面。
在第二种可能下,可以想象一个对话的客户端打开了一个窗口,使得用户可以向里面输入连接的请求。在这种情况下,应用程序必须打开窗口并且处理I/O。当用户输入想要连接的服务器的名字的时候,应用程序读入并解释这个命令。它打开一个socket并且在socket上建立启动一个wrapper,然后等候greeting信息。当收到greeting信息的时候,应用程序调用bp_start_request,把窗口的地址作为客户数据传出去。然后,这个地址又被传到框架实例那里。当收到消息的时候,框架实例用已经保存的窗口的指针来向窗口中送数据。
5. 进一步的内容
当我们只是处理一些简单的profile的时候,有很多主题都用不到。然而,这些主题在处理复杂的profiles的时候,就会用到。这些复杂性我们在这里讨论。
6. 1.启动其他的profiles
很可能,最常用的profile是TLS和SASL的profile。通常,tuning
profiles将会提供启动他们的API。这个API将会允许程序提供没有包括在<start>要求的信息,例如,TLS要用到的证明信息,或者SASL要用到的用户名和密码。我们通常希望tuning
profiles接受一个callback,以便于当调整完毕的时候可以调用,当然,不同的应用也会有不同的调用方法。
另外,一些profile如果已经配置过了并收到一个合适的pro_greeting_confirmation,可以自己启动。通过检查为不同的profile的文档,可以得到这些信息。
6.2.重新调整
当一个tuning
profile该了在socket的协议并希望通过一个新的greeting来开始一个新的session的时候,一个“重新调整(tuning
reset)”就会发生。
6.3.多会话
在一些情况下,可能一个profile可能要同时处理多个交互的会话。在最简单的情况下,被管理会话的个数是被严格限制的。例如,一个被设计用来在一个防火墙上的profile,它要求获得防火墙内一台通过SASL协议登陆的机器。在这种情况下,将会有一个监听的profile接受连接。当对端实体正确地登陆了以后,它可以通过启动profile来向一个防火墙内的机器请求连接。Profiel实例将会收到启动的消息并尝试打开一个piggyback里说明的主机的socket。当那个socket连上了以后,profile实例就会启动一个新的wrapper,这个wrapper是另外一个,在新的socket上处理交互信息的wrapper。然后,一个通道就会在新的wrapper上建立起来,两个活动的profile实例就会被那种profile调整。例如,tuning
profile就是那样的一个profile。再举一个例子,想象一个多用户的游戏的服务器。这个服务器将会在一个UNIX进程里包含很多监听的wrapper。从一个wrapper来的信息可能要和从其他的wrapper中来的信息协同工作。同一个会话中不同的通道可能要承载玩家的对话,环境的图片,视角信息等等。这些会话内的交流会给程序去做的。
7. 实际通讯的情况
这一节将会快速看一下怎么在一个已经建立起来的会话中启动一个通道,追踪不同的私有数据结构的产生过程。这里提供的信息对用户是不不要的。
第一个例子表明了一个叫ALPHA的机器向它的对等实体,叫做BETA要求打开一个通道。并且通道成功的建立了。
ALPHA的应用程序调用bp¬_start_request。
ALPHA的wrapper记住了回调函数和用户数据,然后调用blu_start_request
ALPHA的核心库产生一个通道的结构,把它标记为半开,格式化XML的<start>信息,并把它放在0信道上。
ALPHA的wrapper被通知数据已经准备好了,并且已经被拷贝到socket上。BETA收到头信息,分配了一个frame,并把主信息放到frame中。
BETA把收完整的frame放到自己的0信道结构上,调用notify_upper。
BETA的wrapper调用blu_chan0_parse来接受信息。
blu_chan0_parse解释XML,产生一个通道结构,并把它标记为半开。然后返回chan0_msg。
BETA的wrapper检查chan0_msg,决定实例化哪个profile,产生一个profile实例,并且调用pro_start_indication。
BETA的profile处理piggyback
date(如果有的话)并且通过bpc_start_response返回一个成功的结果。
BETA的wrapper把回应和请求对应起来。如果,是一个profile,不是一个error,那么就把通道标记为全开的。然后,它产生XML并把它放在0通道上。
BETA的wrapper是通过notify_lower来通知的,wrapper把数据拷贝到socket上。
ALPHA的wrapper把数据从socket上获得,并存到库中。当完整的frame到达后,ALPHA的核心库调用notify_upper来通知ALPHA的wrapper一个0通道信息已到。
ALPHA的wrapper调用blu_chan0_parse。blu_chan0_parse解析XML并构造一个chan0_msg。blu_chan0_parse保证这个chan0_msg是以前发送的chan0_msg的积极响应。并把响应的通道标记为全开,然后向wrapper返回chan0_msg。
ALPHA的wrapper得到了积极的确认,产生一个BETA选择的profile实例。然后它调用以前存下的回调函数,调用pro_start_confirmation。
八、入侵检测信息交换协议框架的具体实现和分析
因为IDXP是一种刚刚推出的协议,所以,至今在世界上还没有一个完整的,成熟的产品实现IDXP。正式发布大概要今年秋天,而我们小组选择这个课题,又迫切需要一个稳定的底层通讯平台。这种情况下我们在关于IDXP的文档以及网上的一些资料基础上,编写了一个简化版的基于BEEP的IDXP通讯协议。这个协议只是实现了基本的功能,另外的一些高级功能,例如,授权、加密、穿越防火墙等都没有实现。但是,起码能提供稳定的通讯平台。
前面介绍过一般的BEEP框架还有自己的一些特点。首先,先来看一下我们实现的IDXP协议的重要的函数。如表2所示:
函数名 调用时间 功能
Pro_connection_init 框架向wrapper注册 进行进程范围内的初始化
Pro_session_init 框架可以被一个会话调用时 进行会话范围内的初始化
Pro_session_fin 会话结束时 进行会话的善后工作,释放内存等
Pro_connection_fin Wrapper被释放时 进行进程范围内的善后工作
Pro_start_indication 当一端要打开通道时 尝试建立通道
Pro_start_confirmation 希望打开通道的请求得到回应,通道已经打开 标志通道已经打开
Pro_start_callback 当idxp_start函数的建立通道的请求得到相应 如果回应有错误,则处理
Pro_close_indication 当一端关闭通道时 试图关闭通道
Pro_close_confirmation 已经知道要求关闭通道的请求是否被同意 处理以外
Pro_close_callback 当idxp_close函数的关闭通道的请求得到了响应 处理以外
Pro_tuning_reset_indication
Pro_tuning_reset_confirmation 协议暂没用到
Pro_frame_available 受到一个可读的消息帧 处理帧信息,只有那些被IDXP认为适当的消息才会传给应用程序。
Idxp_prof_set_callbacks 不固定 设定回调函数
Pro_send_error 不固定 发送错误消息
Idxp_generate_greeting 不固定 生成IDXP的欢迎信息
Idxp_handle_greeting 不固定 处理受到的欢迎信息
Idxp_send_greeting 不固定 发送欢迎信息
Idxp_prof_send_message 不固定 发送一个消息帧
Pro_init
Idxp_init
Idxp_start
Idxp_close 四个函数时IDXP模块向应用程序提供的接口。具体的使用和功能将在应用程序部分说明。
表2
我所实现的部分是profile注册,下面详细介绍的是我们小组所做的一部分相关代码以及我所调用的一些函数。