信息安全产品开发实践项目入侵检测系统.docx

上传人:b****6 文档编号:13082812 上传时间:2023-06-10 格式:DOCX 页数:17 大小:167.19KB
下载 相关 举报
信息安全产品开发实践项目入侵检测系统.docx_第1页
第1页 / 共17页
信息安全产品开发实践项目入侵检测系统.docx_第2页
第2页 / 共17页
信息安全产品开发实践项目入侵检测系统.docx_第3页
第3页 / 共17页
信息安全产品开发实践项目入侵检测系统.docx_第4页
第4页 / 共17页
信息安全产品开发实践项目入侵检测系统.docx_第5页
第5页 / 共17页
信息安全产品开发实践项目入侵检测系统.docx_第6页
第6页 / 共17页
信息安全产品开发实践项目入侵检测系统.docx_第7页
第7页 / 共17页
信息安全产品开发实践项目入侵检测系统.docx_第8页
第8页 / 共17页
信息安全产品开发实践项目入侵检测系统.docx_第9页
第9页 / 共17页
信息安全产品开发实践项目入侵检测系统.docx_第10页
第10页 / 共17页
信息安全产品开发实践项目入侵检测系统.docx_第11页
第11页 / 共17页
信息安全产品开发实践项目入侵检测系统.docx_第12页
第12页 / 共17页
信息安全产品开发实践项目入侵检测系统.docx_第13页
第13页 / 共17页
信息安全产品开发实践项目入侵检测系统.docx_第14页
第14页 / 共17页
信息安全产品开发实践项目入侵检测系统.docx_第15页
第15页 / 共17页
信息安全产品开发实践项目入侵检测系统.docx_第16页
第16页 / 共17页
信息安全产品开发实践项目入侵检测系统.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

信息安全产品开发实践项目入侵检测系统.docx

《信息安全产品开发实践项目入侵检测系统.docx》由会员分享,可在线阅读,更多相关《信息安全产品开发实践项目入侵检测系统.docx(17页珍藏版)》请在冰点文库上搜索。

信息安全产品开发实践项目入侵检测系统.docx

信息安全产品开发实践项目入侵检测系统

基于Libnids的入侵检测系统

详细设计说明书

信息安全产品开发实践项目——入侵检测系统

姓名

学号

责任

谭飞

0543042190

详细设计,演示报告

孙尧

0543042139

概要设计

姚丁菱

0543042251

测试报告

韦聪

0543042069

操作手册

赵国璧

0543032010

进度报告,项目开发总结

 

目录

1.引言3

1.1编写目的3

1.2项目背景3

1.3定义4

1.4参考资料4

2.总体设计5

2.1需求概述5

2.2软件结构5

3.1功能7

3.2性能8

3.3输入项目8

3.4输出项目8

3.5程序实现8

3.6程序逻辑13

3.7限制条件13

3.8测试要点13

 

1.引言

1.1编写目的

该说明文档用于指导开发人员在后阶段的开发,是后面开发人员的参考,开发人员须严格按照这份文档的要求来进行开发。

包括各种细节,比如类的命名,注释的规范,设计模式等,这样才能更有利于团队的协作。

同时该文档也是最后量化该项目整个过程的重要参考资料

1.2项目背景

项目题目:

基于libnids的入侵检测

简单描述:

在该项目是在学习信息安全开发实践(Ⅱ)的同时,与课程相关的实验课,课程需要我们从编写程序的层次来理解安全方面的知识。

所以我们的项目就是一个基于网络入侵检测开发包-libnids的入侵检测工具,能够完成简单的异常ip数据包,tcp数据包,以及端口扫描检测。

项目目的:

了解一些基本的网络安全知识,知道如何在linux利用网络安全开发包进行开发,同时完成一个小的入侵检测程序,让小组的每一个人都能动手进行网络安全开发,并对其有一定的了解,这也与本门课程的要求是一致的。

该项目的开发者是:

谭飞孙尧赵国璧韦聪

系统测试:

姚丁菱

系统运行环境:

a.实验的操作系统

本试验是在Linux下面完成的,其中的操作系统的信息如下:

b.选用的编译器

本实验采用gcc为编译器,其具体的版本信息如下:

root@hanrentanfei-desktop:

/home/hanrentanfei#gcc–v

使用内建specs。

目标:

i486-linux-gnu

配置为:

../src/configure-v--enable-languages=c,c++,fortran,objc,obj-c++,treelang--prefix=/usr--enable-shared--with-system-zlib--libexecdir=/usr/lib--without-included-gettext--enable-threads=posix--enable-nls--program-suffix=-4.1--enable-__cxa_atexit--enable-clocale=gnu--enable-libstdcxx-debug--enable-mpfr

--enable-checking=releasei486-linux-gnu

线程模型:

posix

gcc版本4.1.2(Ubuntu4.1.2-0ubuntu4)

1.3定义

libpcap

linux系统下数据捕获子系统是利用libpcap来开发的。

libpcap是一个通用UNIX系统网络接口程序包,目前支持的操作系统有BSDUNIX、SOLARIS系统、SUNOS、LINUX及HP-UX等系统。

该函数库目前只支持所有的网络接口的读数据的操作。

libnet

允许开发者构造和发送网络数据包。

libnet提供了一个对底层网络数据包进行构造、修改和发送的高级接口。

它隐藏了很多底层细节,省去了很多麻烦,如多路技术、缓冲区管理、网络数据包头信息、字节流顺序、操作系统兼容性,以及校验和计算问题等。

libnet主要提供了在IP层和链路层构造网络数据包的功能和一些非常有用的辅助功能。

使用libnet可以非常轻松、快捷地构造任何形式的网络数据包,开发各种各样的网络安全应用程序,甚至非常复杂的程序。

libnet主要用C语言写成,提供了低层网络数据报的构造、处理和发送功能.

libnids

是一个网络入侵检测开发的专业编程接口。

它实现了基于网络的入侵检测系统的基本框架,并提供了一些基本的功能。

使用libnids可以快速地构建基于网络的入侵检测系统,并可以在此基础上进一步扩展开发。

libnids实现了入侵检测系统的底层功能,使开发者可以专注于高层的功能开发。

libnids是基于libpcap和libnet而开发的,所以它具有libpcap和libnet的优点,具有较强的移植性,效率高,使用简单。

libnids是仿造Linux2.0.x内核中的TCP/IP协议部分而实现的,具有高可靠性,并通过了许多测试。

1.4参考资料

参考文档:

该项目的《概要设计》

参考资料:

编号

资料名称

简介

作者

日期

出版单位

1

Linux软件工程师(C语言)实用教程

基础知识

刘海波张益先

2006年5月

科学出版社

2

LinuxC编程

Linux下面的编程入门书籍

李玉波朱自强 郭军

2004年

清华大学出版社

3

软件工程

教材

[美]Pressman

2006年

机械工业出版社

2.总体设计

2.1需求概述

网络嗅探也成网络监视,主要是指检测网络信息,查看网络内容。

针对不同的目的,有各种各样的故障,它可以利用网络嗅探技术来实现。

对于网络非法攻击者来说,为了获得敏感信息,他也可以利用网络嗅探技术来获取他所需要的内容,如,密码、用户、帐号等。

后面,读者将可以看到,利用Libnids可以轻松获取很多协议传输的用户和密码。

所以说,Libnids是一把双刃剑。

除此之外,利用Libnids还可以重现网络内容,还原网络数据,如重现HTTP协议中传输的网页,POP3协议中传输的电子邮件等。

本系统的主要需要实现的功能如下:

异常TCP数据包检测:

利用libnids检测异常的tcp数据包。

异常IP数据包检测:

利用libnids检测异常的IP数据包

检测端口扫描攻击:

利用libnids检测端口扫描攻击

2.2软件结构

3.程序描述

捕获数据模块:

该模块由libnids完成,由libnids循环捕获数据包。

其是通过nids_run();来完成的。

数据分析模块:

其是根据libnids中定义的结构体的状态来判断其是属于哪一类异常数据包,然后再对其进行分析,再将结果显示打印出来。

其第一级模块分解视图如下:

模块视图的第二级分解:

异常IP数据包处理模块:

该模块首先判断其ip数据包头是否被损坏,如果未被损坏,则打印其头部的相关信息,比如ip地址等,然后再根据其相应的错误编号来打印其攻击信息。

如果ip头部已经损坏则,无法打印其ip地址相关信息,所以直接根据错误号,来打印其相关的入侵信息。

异常TCP数据包处理模块:

同上面的处理一样,该模块首先判断其TCP数据包头是否被损坏,如果未被损坏,则打印其头部的相关信息,比如ip地址等,然后再根据其相应的错误编号来打印其攻击信息。

如果ip头部已经损坏则,无法打印其ip地址相关信息,所以直接根据错误号,来打印其相关的入侵信息。

此处应该注意的是,如果其头部损坏我们是无法获得其端口信息的。

端口扫描检测模块:

当扫描攻击发生后,我们首先列出其扫描数。

然后列出其主机信息以及被扫描端口信息,然后获得其标志为来判断其扫描类型。

系统的大体模块和其实现如上面所描述。

3.1功能

其功能点描述如下:

用户配置文件,这是加强可修改性而使系统具备的一个功能,通过配置文件战术来满足这个质量属性。

(注:

该功能点暂时还未实现)

抓取网络数据包,这是入侵检测的第一步,目的是捕获网络上面的数据包,只有抓到了数据包才能对数据包进行分析,进而发现其中的攻击信息。

IP碎片重组,这是将分片到来的数据包进行重新组合,以使分散的信息重新组合成完整的信息,进而可以方便的进行分析,保证不会让任何企图以分片发送的信息漏掉。

TCP数据流重组,这是要求在利用Libnids分析基于TCP协议的各种协议时,不仅可以分析各种单个的TCP协议数据包,而且可以分析整个的TCP连接过程。

这对于分析诸如FTP,HTTP,POP3等协议非常有帮助。

端口扫描攻击检测,端口扫描一般是网络攻击的第一步,本系统要求具备识别端口扫描攻击的能力,能在敌人进行端口扫描的时候进行报警并进行相应的措施进行挽救。

异常数据包检测,这是本系统的核心功能,也是诸如端口扫描攻击检测的基础,通过数据包异常检测,可以分析隐藏在数据包里面的攻击信息。

将分析得到的攻击信息以友好的方式显示给用户,这是和用户打交道的功能之一,目的是将系统通过分析和检测得到的攻击信息显示给用户,让用户即时的了解到系统的信息。

3.2性能

由于本程序的实现比较简单,利用的是libnids包进行开发的,其在性能基本能达到预定的期望,在测试的时候能够及时的发现端口扫描攻击,由于时间上的限制,在构造异常的ip数据包和tcp数据包上没有很好的完成,所以正两部分的性能完成不还不知道。

3.3输入项目

输入项目:

为其nids捕获的各种数据包

3.4输出项目

输出项目:

对数据包分析后打印其结果,比如入侵主机的信息,扫描端口的信息,扫描的类型等。

3.5程序实现

本系统的主要程序源代码如下:

#include"string.h"

#include"nids.h"

#include

#include

#include

#include

#include

#include

#include

/*

下面是检测扫描用的扫描信息数据结构

*/

structscan

{

u_intaddr;/*地址*/

unsignedshortport;/*端口号*/

u_charflags;/*标记*/

};

/*

下面是检测扫描时用到的扫描主机数据结构

*/

structhost

{

structhost*next;/*下一个主机结点*/

structhost*prev;/*前一个主机结点*/

u_intaddr;/*地址*/

intmodtime;/*时间*/

intn_packets;/*个数*/

structscan*packets;/*扫描信息*/

};

/*

下面是IP协议首部的数据结构

*/

structip_header

{

#ifdefined(WORDS_BIGENDIAN)

unsignedintip_v:

4,ip_hl:

4;

#else

unsignedintip_hl:

4,ip_v:

4;

#endif

unsignedintip_tos;

unsignedcharip_len;

unsignedcharip_id;

unsignedcharip_off;

unsignedintip_ttl;

unsignedintip_p;

unsignedcharip_csum;

structin_addrip_src;

structin_addrip_dst;

};

/*

下面是TCP协议首部的数据结构

*/

structtcp_header0

{

unsignedcharth_sport;/*源端口号*/

unsignedcharth_dport;/*目的端口号*/

unsignedshortth_seq;/*序列号*/

unsignedshortth_ack;/*确认号*/

#ifdefWORDS_BIGENDIAN

unsignedintth_off:

4,/*数据偏移*/

th_x2:

4;/*保留*/

#else

unsignedintth_x2:

4,/*保留*/

th_off:

4;/*数据偏移*/

#endif

unsignedintth_flags;

unsignedcharth_win;/*窗口大小*/

unsignedcharth_sum;/*校验和*/

unsignedcharth_urp;/*紧急指针*/

};

/*

下面是检测扫描攻击和异常数据包的函数

*/

staticvoidmy_nids_syslog(inttype,interrnum,structip_header*iph,void*data)

{

staticintscan_number=0;

charsource_ip[20];

chardestination_ip[20];

charstring_content[1024];

structhost*host_information;

unsignedcharflagsand=255,flagsor=0;

inti;

charcontent[1024];

switch(type)/*检测类型*/

{

caseNIDS_WARN_IP:

/*ip数据包异常*/

if(errnum!

=NIDS_WARN_IP_HDR)

{

strcpy(source_ip,inet_ntoa(*((structin_addr*)&(iph->ip_src.s_addr))));

strcpy(destination_ip,inet_ntoa(*((structin_addr*)&(iph->ip_dst.s_addr))));

printf("%s,packet(apparentlyfrom%sto%s\n",nids_warnings[errnum],source_ip,destination_ip);/*打印出异常信息*/

}

else

{

printf("%s\n",nids_warnings[errnum]);

break;

}

caseNIDS_WARN_TCP:

/*ip数据包异常*/

strcpy(source_ip,inet_ntoa(*((structin_addr*)&(iph->ip_src.s_addr))));

strcpy(destination_ip,inet_ntoa(*((structin_addr*)&(iph->ip_dst.s_addr))));

if(errnum!

=NIDS_WARN_TCP_HDR)/*头部正常*/

{

/*printf("%s,from%s:

%hito%s:

%hi\n",nids_warnings[errnum],source_ip,ntohs(((structtcp_header*)data)->th_sport),destination_ip,ntohs(((structtcp_header*)data)->th_dport));*/

}

else

{

printf("%s,from%sto%s\n",nids_warnings[errnum],source_ip,destination_ip);

}

break;

caseNIDS_WARN_SCAN:

/*扫描攻击发生*/

scan_number++;

sprintf(string_content,"-------------%d-------------\n",scan_number);

printf("%s",string_content);

printf("-----发现扫描攻击-----\n");

host_information=(structhost*)data;

sprintf(string_content,"扫描者的IP地址为:

\n");

printf("%s",string_content);

sprintf(string_content,"%s\n",inet_ntoa(*((structin_addr*)&(host_information->addr))));

printf("%s",string_content);

sprintf(string_content,"被扫描者的IP地址和端口号为:

\n");

printf("%s",string_content);

sprintf(string_content,"");

for(i=0;in_packets;i++)

{

strcat(string_content,inet_ntoa(*((structin_addr*)&(host_information->packets[i].addr))));

sprintf(string_content+strlen(string_content),":

%hi\n",host_information->packets[i].port);

flagsand&=host_information->packets[i].flags;

flagsor|=host_information->packets[i].flags;

}

printf("%s",string_content);

sprintf(string_content,"");

if(flagsand==flagsor)

{

i=flagsand;

switch(flagsand)

{

case2:

strcat(string_content,"扫描类型为:

SYN\n");

break;

case0:

strcat(string_content,"扫描类型为:

NULL\n");

break;

case1:

strcat(string_content,"扫描类型为:

FIN\n");

break;

default:

sprintf(string_content+strlen(string_content),"标志=0x%x\n",i);

}

}

else

{

strcat(string_content,"标志异常\n");

}

printf("%s",string_content);

break;

default:

sprintf(content,"未知");

printf("%s",string_content);

break;

}

}

/*

主函数

*/

intmain()

{

nids_params.syslog=my_nids_syslog;

/*注册检测攻击的函数*/

nids_params.pcap_filter="ip";

/*设置过滤规则,只捕获ip数据包*/

if(!

nids_init())

/*Libnids初始化*/

{

printf("出现错误:

%s\n",nids_errbuf);

exit

(1);

}

nids_run();

/*进入循环捕获数据包的状态*/

}

3.6程序逻辑

程序的大体流程图如下:

3.7限制条件

限制条件:

1.必须运行在X86-based的Linux操作系统下面

2.gcc版本需在4.1.2以上。

3.系统必须安装了:

LibPcap、Libnids等网络安全开发包

4.系统必须要安装flex,运行:

apt-getinstallflex

5.系统必须安装bison,需要用到里面的yacc,运行:

apt-getinstallbison

3.8测试要点

测试异常IP数据包检查

测试异常TCP数据包检查

测试检测端口扫描

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2