网络入侵检测系统中相关技术的分析与研究本科毕业论文内容摘要:

系统品太操作,对系统影响最小等特征,管理员能够在短时间内通过修改被指进行实时的安全响应,更为重要的是能够从成为整体安全结构的重要成员。 Snort 作为一个轻量级的入侵检测系统,它的功能却非常强大,相较于其他系统 特点如下 : 1) Snort 移 植性非常好,而且它的代码简短。 目前支持 Linux 系列, Solaris,BSD 系列, IRIX, HPUNIX, Windows 系列等。 2) Snort 能够提供多种多样的警报方式, Unixsocket, Syslog, WinPopup 等,他对于网络攻击的检测非常灵敏,速度非常快,从而及时地发出警报。 另外他的 实时流量分析 的能力,和对 日志 IP 网络数据包的分析能力都很强。 3) Snort 可以 协议分析 入侵问题 , 对内容进行很好地匹配和搜索。 目前 它 的水平 能够分析的协议有 TCP、 UDP、和 ICMP。 不久的 将来 他还 可以支持更多 的 系统,如 IPX、 RIP、 OSPF 等。 4) Snort 的日志方式非常的灵活。 他 支持 XML 格式,使用数据库输出插件,支持 Tcpdump 的二进制格式, 同时 也支持 ASCll 字符形式,数据库日志格式 也可以运行。 当前支持的数据库有 Postagresql、 Mysql,任何 UnixODBC、 Microsoft SQL Server、 Oracle 等。 5)使用 TCP 流插件, TCP 包 通过 Snorth 进行重组。 这 是 Snort 可以对抗“无状态”攻击 的基本前提。 无状态攻击是网络黑客在进行攻击时,每次只发送一个字节的数据包,从而避开 监 视,然后被攻击 的电脑的 主机的 TCP 栈会重新组合这些数据包, 从而将攻击数据会被发送给目标端口上的监听的进程,来 摆脱 IDS 的检测。 6)使用 Spade (Statistical Packet Anomaly Detection Engine)插件, Snort能够报告异常的数据包,从而对端口进行有效的检测。 7) Snort 还具有很强的系统防护能力。 能够实现入侵检测主机和防火墙的联动,这一功能是通过 使用 IPTables, IPFilter 插件 实现的 , 还可以 通过 FlexResp 功能,Snort 能够命令防火墙断开恶意连接。 8) 能够快速的应对新的攻击,且扩展性好。 Snort 中 最基本的规则知识包含四潍 坊 学 院 本 科 毕 业 设 计 9 个域 :处理动作、协议、方向、端口。 他采用了规则描述语言,且简单易懂,一旦遇到 新的攻击 他会 迅速建立规则表。 9) Snort 支持插件, 他使用的报告具有特定的能 ,检测子系统插件对其进行功能扩展。 当前支持的插件有 :数据库日志输出插件、破碎包检测插件、端口扫描检测插件、 HttpURL 插件、 XML 网页生成插件等。 SNORT 的体系结构 数据包 图 Snort的体系结构 1) Sniffer(数据包嗅探器 ) 2)预处理器 3)检测引擎 4)报警日志 SNORT 流程 概要分析 流程 概要 现在看看 Snort 是如何实现对数据包的分析和检测入侵的。 在 main 函数的最后部分有如下比较重要的语句: /*Read all packets on the until t pakets read*/ If(pacap_loop(pd,(pcap_handler)ProcessPacker,NULL)0) { „ } 这里 pcap_loop 函数有 4个参数, OpenPcap 函数中对 pd 赋值的语句分别为 : Sniffer 预处理器 检测引擎 报警、日志 规则 设置 潍 坊 学 院 本 科 毕 业 设 计 10 /* get the device file descriptor,打开网卡接口 */ pd = pcap_open_live(, snaplen, ? PROMISC : 0, READ_TIMEOUT, errorbuf)。 或 者 /* open the file,打开文件 */ pd = pcap_open_offline(intf, errorbuf)。 所以,参数说明的是 从哪里取得 的需要 分析的数据。 第 2个参数是 , /* initialize the packet counter to loop forever */ = 1。 ParseCmdLine 中相关语句如下: case 39。 n39。 : /* grab x packets and exit */ = atoi(optarg)。 第 3 个参数是回调函数,该回调函数处理捕捉到的数据包。 这里为函数ProcessPacket,下面将详细解释该函数。 第 4个参数是字符串指针 : Int pcap_loop(pcap_t *p, int t, pcap_handler callback, u_char *user) { register int n。 for (。 ) { //for 循环 if (p != NULL) n = pcap_offline_read(p, t, callback, user)。 else { /* * XXX keep reading until we get something * (or an error occurs) */ do { //do 循环 n = pcap_read(p, t, callback, user)。 } while (n == 0)。 } if (n = 0) 潍 坊 学 院 本 科 毕 业 设 计 11 return (n)。 //遇到错误,返回 if (t 0) { t = n。 if (t = 0) return (0)。 //到达指定数量,返回 } //只有以上两种返回情况 } } 现在看看 ProcessPacket 的实现了,这个回 调函数用来处理数据包。 该函数是是 pcap_handler 类型的, 中类型的定义如下: typedef void (*pcap_handler)(u_char *, const struct pcap_pkthdr *, const u_char *)。 第 1个参数这里没有什么用; 第 2个参数为 pcap_pkthdr 结构指针,记录时间戳、包长、捕捉的长度; 第 3个参数字符串指针为数据包。 函数如下: void ProcessPacket(char *user, struct pcap_pkthdr *pkthdr, u_char *pkt) { Packet p。 //Packet 结构在 中定义,用来记录数据包的各种信息 /* call the packet decoder,调用拆包函数,这里 grinder 是一个全局 函数指针,已经在 main 的 SetPktProcessor 调用中设置为正确的拆包函数 */ (*grinder)(amp。 p, pkthdr, pkt)。 /* print the packet to the screen,如果选择了详细显示方式, 那么把包的数据,显示到标准输出 */ if() { ...... //省略 } /* check or log the packet as necessary 如果工作在使用检测规则的方式,就调用 Preprocess 进行检测, 否则,仅仅进行日志,记录该包的信息 */ 潍 坊 学 院 本 科 毕 业 设 计 12 if(!) { ... //进行日志,省略 } else { Preprocess(amp。 p)。 } //清除缓冲区 ClearDumpBuf()。 } 这里 Preprocess 函数进行实际检测。 Plugins 根据输出规则进行报警或日志。 函数如下: void Preprocess(Packet *p) { PreprocessFuncNode *idx。 do_detect = 1。 idx = PreprocessList。 while(idx != NULL) { idxfunc(p)。 idx = idxnext。 } if(!pfrag_flag amp。 amp。 do_detect) { if(Detect(p)) //调用检测函数 { CallOutputPlugins(p)。 //如果匹配,根据规则输出 } } } 潍 坊 学 院 本 科 毕 业 设 计 13 规则解析流程 parseRule()的流程如图 所示。 是。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。