网络与信息安全课程设计.docx
- 文档编号:9470958
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:12
- 大小:22.23KB
网络与信息安全课程设计.docx
《网络与信息安全课程设计.docx》由会员分享,可在线阅读,更多相关《网络与信息安全课程设计.docx(12页珍藏版)》请在冰豆网上搜索。
网络与信息安全课程设计
网络与信息安全课程设计
专业班级:
计算机学院网络工程06-2班
学号:
310609040203
姓名:
王凤娟
设计题目:
网络嗅探器的设计与实现
指导老师:
刘琨
日期:
2008年12月27日
网络嗅探器的设计与实现
目录
摘要……………………………………………………………2
一、网络嗅探器的定义……………………………………3
二、网络嗅探器的作用……………………………………4
三、嗅探器的原理…………………………………………4
1、网络技术与设备简介……………………………………4
2、网络监听原理……………………………………………5
3、嗅探器分类………………………………………………6
4、网络监听目的……………………………………………7
四、嗅探器的扩展应用……………………………………8
五、嗅探器的简单用法……………………………………8
六、反嗅探技术……………………………………………10
七、实现一个简单的嗅探器………………………………11
八、总结……………………………………………………16
参考文献……………………………………………………17
网络嗅探器的设计与实现
摘 要
随着网络技术的发展和网络应用的普及,越来越多的信息资源放在了互联网上,网络的安全性和可靠性显得越发重要。
因此,对于能够分析、诊断网络,测试网络性能与安全性的工具软件的需求也越来越迫切。
网络嗅探器具有两面性,攻击者可以用它来监听网络中数据,达到非法获得信息的目的,网络管理者可以通过使用嗅探器捕获网络中传输的数据包并对其进行分析,分析结
果可供网络安全分析之用。
本文对网络嗅探技术进行了简要分析,研究了网络数据包的捕获机制,如winpcap、原始套接字。
文中首先分析了嗅探的原理和危害,并介绍了几种常见的嗅探器,然后研究了入侵检测系统中使用的包捕获技术。
本文利用原始套接字在windows平台下实现了一个网络嗅探器程序,完成了对数据包进行解包、分析
数据包的功能。
一、什么是嗅探器
嗅探器,可以理解为一个安装在计算机上的窃听设备它可以用来窃听计算机在网络上所产生的众多的信息。
简单一点解释:
一部电话的窃听装置,可以用来窃听双方通话的内容,而计算机网络嗅探器则可以窃听计算机程序在网络上发送和接收到的数
据。
可是,计算机直接所传送的数据,事实上是大量的二进制数据。
因此,一个网络窃听程序必须也使用特定的网络协议来分解嗅探到的数据,嗅探器也就必须能够识别出那个协议对应于这个数据片断,只有这样才能够进行正确的解码。
计算机的嗅探器比起电话窃听器,有他独特的优势:
很多的计算机网络采用的是“共享媒体"。
也就是说,你不必中断他的通讯,并且配置特别的线路,再安装嗅探器,你几乎可以在任何连接着的网络上直接窃听到你同一掩码范围内的计算机网络数据。
我们称这种窃听方式为“基于混杂模式的嗅探”(promiscuousmode)。
尽管如此,这种“共享”的技术发展的很快,慢慢转向“交换”技术,这种技术会长期内会继续使用下去,它可以实现有目的选择的收发数据。
二、网络嗅探器的作用
嗅探器是网络的抓包工具,可以对网络中大量数据抓取,从而方便使用者对网络中用户的一些信息进行分析,所以,通常被黑客运用于网络攻击。
我们如果也能掌握网络嗅探器的原理和设计,可以将它运用与网络故障检测、网络状况的监视,还可以加强企业信息安全防护。
三、嗅探器的原理
1.网络技术与设备简介
首先需要讲述局域网设备的一些基本概念。
数据在网络上是以很小的称为帧(Frame)的单位传输的,帧由几部分组成,不同的部分执行不同的功能。
帧通过特定的称为网络驱动程序的软件进行成型,然后通过网卡发送到网线上,通过网线到达它们的目的机器,在目的机器的一端执行相反的过程。
接收端机器的以太网卡捕获到这些帧,并告诉操作系统帧已到达,然后对其进行存储。
就是在这个传输和接收的过程中,嗅探器会带来安全方面的问题。
每一个在局域网(LAN)上的工作站都有其硬件地址,这些地址惟一地表示了网络上的机器(这一点与Internet地址系统比较相似)。
当用户发送一个数据包时,这些数据包就会发送到LAN上所有可用的机器。
如果使用Hub/即基于共享网络的情况下,网络上所有的机器都可以“听”到通过的流量,但对不属于自己的数据包则不予响应(换句话说,工作站A不会捕获属于工作站B的数据,而是简单地忽略这些数据)。
如果某个工作站的网络接口处于混杂模式(关于混杂模式的概念会在后面解释),那么它就可以捕获网络上所有的数据包和帧。
但是现代网络常常采用交换机作为网络连接设备枢纽,在通常情况下,交换机不会让网络中每一台主机侦听到其他主机的通讯,因此嗅探器技术在这时必须结合网络端口镜像技术进行配合。
而衍生的安全技术则通过ARP欺骗来变相达到交换网络中的侦听。
2.网络监听原理
嗅探器程序是一种利用以太网的特性把网络适配卡(NIC,一般为以太网卡)置为杂乱(promiscuous)模式状态的工具,一旦网卡设置为这种模式,它就能接收传输在网络上的每一个信息包。
普通的情况下,网卡只接收和自己的地址有关的信息包,即传输到本地主机的信息包。
要使嗅探器能接收并处理这种方式的信息,系统需要支持BPF,Linux下需要支持SOCKET一PACKET。
但一般情况下,网络硬件和TCP/IP堆栈不支持接收或者发送与本地计算机无关的数据包,所以,为了绕过标准的TCP/IP堆栈,网卡就必须设置为我们刚开始讲的混杂模式。
一般情况下,要激活这种方式,内核必须支持这种伪设备Bpfilter,而且需要root权限来运行这种程序,所以嗅探器需要root身份安装,如果只是以本地用户的身份进入了系统,那么不可能唤探到root的密码,因为不能运行嗅探器。
也有基于无线网络、广域网络(DDN,FR)甚至光网络(POS、FiberChannel)的监听技术,这时候略微不同于以太网络上的捕获概念,其中通常会引入TAP(测试介入点)这类的硬件设备来进行数据采集。
3.嗅探器的分类
嗅探器分为软件和硬件两种,软件的嗅探器有嗅探器Pro、NetworkMonitor、PacketBone等,其优点是易于安装部署,易于学习使用,同时也易于交流;缺点是无法抓取网络上所有的传输,某些情况下也就无法真正了解网络的故障和运行情况。
硬件的嗅探器通常称为协议分析仪,一般都是商业性的,价格也比较昂贵,但会具备支持各类扩展的链路捕获能力以及高性能的数据实时捕获分析的功能。
基于以太网络嗅探的嗅探器只能抓取一个物理网段内的包,就是说,你和监听的目标中间不能有路由或其他屏蔽广播包的设备,这一点很重要。
所以,对一般拨号上网的用户来说,是不可能利用嗅探器来窃听到其他人的通信内容的。
4.网络监听的目的
当一个黑客成功地攻陷了一台主机,并拿到了root权限,而且还想利用这台主机去攻击同一(物理)网段上的其他主机时,他就会在这台主机上安装嗅探器软件,对以太网设备上传送的数据包进行侦听,从而发现感兴趣的包。
如果发现符合条件的包,就把它存到一个LOg文件中去。
通常设置的这些条件是包含字“username”或“password”的包,这样的包里面通常有黑客感兴趣的密码之类的东西。
一旦黑客截获得了某台主机的密码,他就会立刻进入这台主机。
如果嗅探器运行在路由器上或有路由功能的主机上,就能对大量的数据进行监控,因为所有进出网络的数据包都要经过路由器。
嗅探器属于第M层次的攻击。
就是说,只有在攻击者已经进入了目标系统的情况下,才能使用嗅探器这种攻击手段,以便得到更多的信息。
嗅探器除了能得到口令或用户名外,还能得到更多的其他信息,比如一个重要的信息、在网上传送的金融信息等等。
嗅探器几乎能得到任何在以太网上传送的数据包。
四、嗅探器的扩展应用
1、专用领域的嗅探器
嗅探器被广泛应用到各种专业领域,例如FIX(金融信息交换协议)、MultiCast(组播协议)、3G(第三代移动通讯技术)的分析系统。
其可以解析这些专用协议数据,获得完整的解码分析。
2、长期存储的嗅探器应用
由于现代网络数据量惊人,带宽越来越大。
采用传统方式的嗅探器产品很难适应这类环境,因此诞生了伴随有大量硬盘存储空间的长期记录设备。
例如nGeniusInfinistream等。
3、易于使用的嗅探器辅助系统
由于协议解码这类的应用曲高和寡,很少有人能够很好的理解各类协议。
但捕获下来的数据却非常有价值。
因此在现代意义上非常流行如何把协议数据采用最好的方式进行展示,包括产生了可以把嗅探器数据转换成Excel的BoneLight类型的应用和把嗅探器分析数据进行图形化的开源系统PacketMap等。
这类应用使用户能够更简明地理解嗅探器数据。
五、嗅探器的一些简单用法
假设有以下的设置:
在一个子网中有两台主机,一台运行了嗅探器,我们称之为,另一台是66.66.66.7,我们称之为。
<1>你希望检查嗅探器是否能运行sniffit:
~/#sniffit-d-p7-t66.66.66.7并且开另一个窗口:
sniffit:
~/$7
你可以看到嗅探器将你telnet到对方7号端口echo服务的包捕获了。
<2>你希望截获上的用户密码sniffit:
~/#sniffit-p23-t66.66.66.7
<3>主机的根用户声称有奇怪的FTP连接并且希望找出他们的击键sniffit:
~/#sniffit-p21-l0-t66.66.66.7
<4>你希望能阅读所有进出的信件niffit:
~/#sniffit-p25-l0-b-t66.66.66.7&
sniffit:
~/#sniffit-p25-l0-b-s66.66.66.7&
<5>你希望使用用户交互界面sniffit:
~/#sniffit-i
<6>有错误发生而且你希望截获控制信息sniffit:
~/#sniffit-Picmp-b-s66.66.66.7
<7>Gowildonscrollingthescreen.sniffit:
~/#sniffit-Pip-Picmp-Ptcp-p0-b-a-d-x-s66.66.66.7与之效果相当的是sniffit:
~/#sniffit-Pipicmptcp-p0-b-a-d-x-s66.66.66.7
<8>你可以用'more66*'读取下列方式记录下的密码
sniffit:
~/#sniffit-p23-A.-t66.66.66.7
或者sniffit:
~/#sniffit-p23-A^-
六、反嗅探技术
如何才能检测网内是否存在有嗅探程序?
理论上,嗅探程序是不可能被检测出来的,因为嗅探程序是一种被动的接收程序,属于被动触发的,它只会收集数据包,而不发送出任何数据,尽管如此,嗅探程序有时候还是能够被检测出来的。
一个嗅探程序,不会发送任何数据,但是当它安装在一台正常的局域网内的计算机上的时候会产生一些数据流。
举个例子,它能发出一个请求,始DNS根据IP地址进行反相序列查找。
下面一种简单的检测方法:
ping方法
很多的嗅探器程序,如果你发送一个请求给哪台有嗅探程序的机器,它将作出应答
说明:
1.怀疑IP地址为10.0.0.1的机器装有嗅探程序,它的MAC地址确定为00-40-05-A4-79-32.
2.确保机器是在这个局域网中间。
3.现在修改MAC地址为00-40-05-A4-79-33.
4.现在用ping命令ping这个IP地址。
5.没有任何人能够看到发送的数据包,因为每台计算机的MAC地址无法与这个数据包中的目地MAC不符,所以,这个包应该会被丢弃。
6.如果看到了应答,说明这个MAC包没有被丢弃,也就是说,很有可能有嗅探器存在。
现在,这种方法已经得到了广泛的推崇和宣扬,新一代的黑客们也学会了在他们的代码中加入虚拟的MAC地址过滤器很多的计算机操作系统(比如Windows)都支持MAC过滤器(很多过虑器只检查MAC的第一个字节,这样一来,MAC地址FF-00-00-00-00-00和FF-FF-FF-FF-FF-FF就没有区别了。
(广播地址消息会被所有的计算机所接收)。
这种技术通常会用在交换模型的以太网中。
当交换机发现一个未知的MAC地址的时候,它会执行类似“flood”的操作,把这个包发送给每个节点。
七、实现一个简单的网络嗅探器
下面是一个MSN消息捕捉器的源代码
#include
#include
#include
#include
#pragmacomment(lib,"ws2_32.lib")
usingnamespacestd;
structIPHeader
{
unsignedcharmHeaderLengthAndVersion;
unsignedcharmTypeOfService;
unsignedshortmTotalLength;
unsignedshortmIdentifier;
unsignedshortmFragment;
unsignedcharmTTL;
unsignedcharmProtocolType;
unsignedshortmCheckSum;
unsignedintmSourceIP;
unsignedintmDestIP;
intgetHeaderLength()const
{
returnmHeaderLengthAndVersion&0xf;
}
};
structTCPHeader
{
unsignedshortmSourcePort;
unsignedshortmDestPort;
unsignedintmSequence;
unsignedintmAck;
unsignedcharmLengthAndReserve;
unsignedcharmFlags;
unsignedshortmWindow;
unsignedshortmCheckSum;
unsignedshortmUrgent;
};
structUDPHeader
{
unsignedshortmSourcePort;
unsignedshortmDestPort;
unsignedshortmLength;
unsignedshortmCheckSum;
};
structICMPHeader
{
unsignedcharmType;
unsignedcharmCode;
unsignedshortmCheckSum;
unsignedshortmID;
unsignedshortmSequence;
unsignedlongmTimeStamp;
};
voidProcessIPPacket(char*,int);
voidProcessTCPPacket(char*,int);
voidProcessUDPPacket(char*,int);
voidmain()
{
WSADATAdata;
WSAStartup(MAKEWORD(2,0),&data);
SOCKETrawSock=socket(AF_INET,SOCK_RAW,IPPROTO_IP);
charname[1024];
gethostname(name,sizeof(name));
hostent*ent=gethostbyname(name);
SOCKADDR_INaddr;
addr.sin_family=AF_INET;
addr.sin_port=htons(8888);
memcpy(&addr.sin_addr.S_un.S_addr,ent->h_addr_list[0],ent->h_length);
bind(rawSock,(PSOCKADDR)&addr,sizeof(addr));
DWORDdummy;
WSAIoctl(rawSock,SIO_RCVALL,&dummy,sizeof(dummy),&dummy,sizeof(dummy),&dummy,NULL,NULL);
for(;;)
{
vector
ProcessIPPacket(&vc[0],recv(rawSock,&vc[0],(int)vc.size(),0));
}
}
voidProcessIPPacket(char*packet,intsize)
{
IPHeader*header=(IPHeader*)packet;
if(header->mProtocolType==IPPROTO_TCP)
ProcessTCPPacket(packet+header->getHeaderLength(),size-header->getHeaderLength());
elseif(header->mProtocolType==IPPROTO_UDP)
ProcessUDPPacket(packet+header->getHeaderLength(),size-header->getHeaderLength());
}
voidProcessTCPPacket(char*packet,intsize)
{
TCPHeader*header=(TCPHeader*)packet;
cout<<"gottcppacket"< } voidProcessUDPPacket(char*packet,intsize) { UDPHeader*header=(UDPHeader*)packet; cout<<"gotudppacket"< } 八、总结 以前对网络信息安全只是有一点了解,通过这学期的网络信息安全学习以及刘老师诙谐和详细的讲解,对网络信息安全的加密体系以及入侵检测和防护墙的一些设置有了更深刻的认识。 特别是通过此次课程设计,自己动手实现网络嗅探器的设计,加强了对网络通信,数据传输和网络信息安全有的学习,更深了解了相关网络欺骗手段和原理,对以后做好网络安全工作有很大帮助。 当然此次课程设计中还存在许多不足和漏洞,希望刘老师给予指正。 参考文献: 段云所《信息安全概论》2003 谢希仁《计算机网络电子》工业出版社2005 梅晓东《VisualC#网络编程技术与实践》清华大学出版2006 吴成《C#网络与通信程序设计案例精讲》清华大学出版2006
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 信息 安全 课程设计