网络监听技术是系统安全领域内一个非常敏感的话题.docx

上传人:b****5 文档编号:8341205 上传时间:2023-01-30 格式:DOCX 页数:43 大小:698.33KB
下载 相关 举报
网络监听技术是系统安全领域内一个非常敏感的话题.docx_第1页
第1页 / 共43页
网络监听技术是系统安全领域内一个非常敏感的话题.docx_第2页
第2页 / 共43页
网络监听技术是系统安全领域内一个非常敏感的话题.docx_第3页
第3页 / 共43页
网络监听技术是系统安全领域内一个非常敏感的话题.docx_第4页
第4页 / 共43页
网络监听技术是系统安全领域内一个非常敏感的话题.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

网络监听技术是系统安全领域内一个非常敏感的话题.docx

《网络监听技术是系统安全领域内一个非常敏感的话题.docx》由会员分享,可在线阅读,更多相关《网络监听技术是系统安全领域内一个非常敏感的话题.docx(43页珍藏版)》请在冰豆网上搜索。

网络监听技术是系统安全领域内一个非常敏感的话题.docx

网络监听技术是系统安全领域内一个非常敏感的话题

摘要

网络监听技术是系统安全领域内一个非常敏感的话题,也是一项重要的技术,具有很强的现实应用背景。

网络监听是网络监测、负载分析等管理活动常用的方法,同时也是黑客非法窃取信息的手段。

网络监听工具通过网络传输介质的共享特性实现抓包,获得当前网络的使用状况,为网络管理员对网络中的信息进行实时的监测、分析提供一个合适的工具;同时也让黑客截获本网段的一些敏感信息,威胁网络安全。

本文对网络监听技术的原理和实现进行了比较详细的介绍,讨论了监听技术在Windows下的多种实现,并主要介绍了如何在Win32环境中利用Winpcap开发包开发网络实时监听程序,给出了具体的设计与实现方法。

详细描述Winpcap开发包的主要功能,分析网络监听程序的层次结构(从底到顶依次为NPF驱动程序,Winpcap的dll函数库),监听应用程序。

最后就当前的监听技术的不足提出了分布式监听的观点,还引入了简单网络管理。

关键字:

网络监听,Winpcap,包捕获

Abstract

Networksnifferisanimportantissueandtechniqueinthedomainofsystemsecurity,soithasstrongrealismapplicationbackground.Networksnifferisawaywhichisusedinnetworkmonitor,loadanalysis;atthesametimeitisalsoawaywhichisusedbyhackertogettheinformationillegally.Networksniffertoolssnappacketstogetthenetwork’scurrentstatusbythesharedcharacteristicofthenetworktransmissionmedium.Itprovidesnetworkmanageranicetoolwhichcanhelptheminspectandanalysetheinformationofnetwork;simultaneouslyhackersalsogetsomeimportantinformation,sothreatensystemsecurity.

Inthisarticle,wewillintroducetheprinciplesandimplementationsofthenetworksnifferindetails,discussmulti-implementationsofsniffertechniqueatwindows,andmainlyintroducehowtodevelopsnifferprogramatwin32byWinpcapdevelopmentkit,thedetaileddesignandimplementations.ParticularlywedescribethemainfunctionofWinpcap,analysetheframeworkofnetworksnifferprogramandthesnifferapplicationprogram.

AtlastIbringforwarddistributedsnifferviewpointforthelackofcurrentsniffertechnique.Ialsoimportsimplenetworkmanagement.

Keyword:

networkmonitor,winpcap,packetsnap

 

前言

当今计算机网络及通讯技术的广泛应用,促使Internet的迅速发展,给我们带来产生了巨大的社会和经济效益。

在这种情况下,计算机网络的设计,维护的难度日益增加,因此人们迫切需要能够分析,诊断与测试网络功能的工具软件。

网络监听工具在这种需求下孕育而生。

它对网络上的所有数据进行捕获,一方面对数据包进行检查分析,以便找出我们所关心的网络中潜在的问题,对网络故障做出精确定位,帮助管理员解决网络的故障和性能问题;另一方面它又是黑客窃听网络的工具,黑客利用数据包中携带的数据直接或间接获取的XX信息。

所以实现网络监听技术具有重要的现实和理论意义。

本文主要对网络监听技术的原理和实现进行了比较详细的介绍。

讨论了监听技术在Windows下的多种实现,并主要论述了如何在Win32环境中利用Winpcap开发包开发网络实时监听程序,并给出了具体的设计与实现方法。

正文第一章主要描述与实现网络监听工具有关的理论,包括网络监听的原理,实现网络监听的多种不同技术。

第二章详细描述在实现本网络监听工具中使用的Winpcap技术,包括DDK驱动开发技术,DLL动态库技术,MFC应用程序开发技术。

本监听工具所具备的功能。

第三章详细描述系统功能。

第四章详细描述系统实现,包括NPF驱动程序的实现;PACKET.DLL动态库程序的实现;应用程序的实现,将给出数据流图,模块结构图,关键程序流程图。

第五章叙述系统测试和使用。

最后一章得出毕业设计的总结,并阐明本软件的缺陷和解决方法。

第1章系统概述

1.1系统目标

本课设从实际工程应用角度出发,以计算机网络原理为指导,结合当前网络中的一些常用技术和标准,模拟仿真了一组网络实验。

为了能够检验实验的结果,我们开发了这个网络监听工具,帮助实验人员对网络中的信息进行实时的监测、分析,诊断网络故障。

同时通过该毕业设计的内容,让我们了解各种抓包技术,熟练掌握基于Winpcap开发包的编程模式;了解网络监听技术的新发展和网络安全防X的新方向;最后能有所体会。

1.2相关理论与技术的简单介绍

1.2.1网络监听原理

共享式局域网采用的是广播信道,也就是说每台主机所发出的帧都会被整个网络内的所有主机接收到[1]。

接收主机对帧的处理根据网卡的工作模式来实现。

一般网卡具有一下4种工作模式:

广播模式,多播模式,直播模式和混杂模式。

网卡缺省工作模式是工作在广播和直播模式下的,即只能接收发送给自己和广播的帧。

正常情况下接收主机的网卡根据帧中所包含的目标MAC地址或是广播MAC地址进行判断,若等于自己的MAC地址或是广播MAC地址,则提交给上层处理程序,否则丢弃此数据包。

当网卡处于混杂模式的时候,它不作任何判断直接把接收到的所有帧交给上层处理程序。

网络监听技术就是基于这个原理,来捕获网络中所有的数据包,实现网络监测和流量分析的。

交换式以太网是基于数据链路层的点到点的信道,所以简单采用应用于共享式以太网的监听技术是完全失效的。

本文主要讨论共享式以太网的情况,最后给出交换式以太网监听难题的解决方案。

1.2.2监听技术相关的实现方法

●原始套接字编程模式[2]:

RawSocket:

原始套接字

可以用它来发送和接收IP层以上的原始数据包,如ICMP,TCP,UDP...

1.创建了一个RawSocket

intsockRaw=socket(AF_INET,SOCK_RAW,IPPROTO_RAW);

2.把网卡置于混杂模式

用RawSocket实现代码如下:

setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&flag,sizeof(flag));

设置IP头操作选项。

flag标志是用来设置IP头操作的,boolflag=ture也就是说要亲自处理IP头。

bind(sockRaw,(PSOCKADDR)&addrLocal,sizeof(addrLocal);

把sockRaw绑定到本地网卡上,addrLocal为本地地址:

SOCKADDR_INaddrLocal。

ioctlsocket(sockRaw,SIO_RCVALL,&dwValue);

让sockRaw接受所有的数据。

dwValue为输入输出参数,为1时执行,0时取消:

DWORDdwValue=1;

3.捕获数据包

recv(sockRaw,RecvBuf,BUFFER_SIZE,0);//接受任意数据包

原始套接字编程模式:

优点:

实现简单,不需要做驱动程序就可实现抓包.

缺点:

数据XX不含帧信息,不能接收到与IP同层的其它数据包,如ARP,RARP,IPX…

●IMD中间层驱动编程模式[3]:

中间层驱动(NDISintermediatedriver)

1.内核级网络驱动介绍:

MicrosoftWindows2000支持三种基本的内核级网络驱动,这三层driver顺序从下到上依次为:

a)MiniportNICdrivers:

微端口网卡驱动,位于最底层,直接操纵网卡并且对高层驱动提供接口。

b)Intermediatedrivers:

IMD中间层驱动位于1和3之间。

c)Protocoldrivers:

高层协议驱动,俗称为TDI(传输驱动程序接口),高于前面两层,直接面向用户级,为用户提供网络服务,也就是绝大多数程序所用到的网络接口。

2.IMD驱动

IMD中间层,它的实质很简单,即:

中间层插入网卡和协议层之间,对上面的协议层表现为一个虚拟的微端口网卡结构,而对下面的网卡则表现为一个协议层的结构。

所以,无论是网卡接收并上传的数据报,还是上层要下送至网卡发送的数据报,无一例外地要经过中间层。

3.IMD包过滤技术

前面我们已经看到,所有的数据报都要经过中间层,所以,我们可以在中间层加入我们想要过滤的数据报的特征,实现基于中间层驱动的内核级包过滤。

优势:

首先,在驱动级别上做过滤,无须组包,速度快,效率自然就高;其次,所有的数据报无一例外,只要网卡上传的数据报均可以截获,避免了用户级无法得到所有数据报的缺点。

缺点:

IMD包过滤技术也存在其不可避免的缺点,与操作系统版本关系密切,与硬件联系大,可移植性低,调试困难。

●Winpcap编程模式

Winpcap(windowspacketcapture)是windows平台下一个免费,公共的网络访问系统。

开发Winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。

它提供了以下的各项

功能:

1.获原始数据报,包括在共享式网络上各主机发送/接收的以及相互之间交换的数据报;

2.在数据报发往应用程序之前,按照自定义的规则将某些特殊的数据报过滤掉;

3.在网络上发送原始的数据报;

4.收集网络通信过程中的统计信息。

不足:

Winpcap的主要功能在于独立于主机协议(如TCP-IP)而发送和接收原始数据报。

也就是说,Winpcap不能阻塞,过滤或控制其他应用程序数据报的发收,它仅仅只是监听共享网络上传送的数据报。

因此,它不能用于QoS调度程序或个人防火墙。

目前,Winpcap开发的主要对象是windowsNT/2000/XP,这主要是因为在使用Winpcap的用户中只有一小部分是仅使用windows95/98/Me,并且M$也已经放弃了对win9x的开发。

其实Winpcap中的面向9x系统的概念和NT系统的非常相似,只是在某些实现上有点差异,比如说9x只支持ANSI编码,而NT系统则提倡使用Unicode编码。

1.3系统需求

●能够捕获所需要的所有以太网数据包

●分析捕获的包类型,报文信息

●数据形式显示当前以太网中数据包的分布情况

●图表形式显示当前以太网中数据包的分布情况

●能表现网络中各个节点的相互通讯情况

●可以保存数据到文件

●在数据包中查找敏感信息(匹配关键字)

●具备简单的网络管理功能

●实现简单的分布式监听

 

第2章基于Winpcap开发的技术详解

讨论了各种不同的编程模式之后,本章将阐明我们选择Winpcap技术的原因,然后将对Winpcap做详细的分析。

2.1选用Winpcap技术的原因:

●提供了一套标准的抓包接口,与libpcap兼容,可使得原来许多UNIX平台下的网络分析工具快速移植过来便于开发各种网络分析工具

●原始套接字的编程模式中不能捕获ARP和IPX的数据包对SNIFFER软件有着致命的限制,所以不能选择这种方法。

●IMD编程模式虽然功能强大,而且灵活性强,但是开发调试难度比较大,不适合作为SNIFFER软件的开发模式,甚至在防火墙开发技术中也不用IMD。

●WINPCAP本身不能阻塞,过滤或控制其他应用程序数据报的发收的缺点在我们这个软件的开发过程中,并不影响。

所以经过权衡,我选用了Winpcap编程模式来开发MySniffer软件。

2.2Winpcap的结构分析

Winpcap的主要思想来源于Unix系统中著名的BSD包捕获结构,它的基本结构如图2.1所示:

整个包捕获框架的基础是NDIS(网络驱动器接口规X),它是Windows中最低端的与联网有关的软件,主要是为各种应用协议与网卡之间提供的一套接口函数。

Winpcap由三个模块组成,一个是工作在内核级别上的NPF包过滤器;另外两个是用户级的动态连接库packet.dll和wpcap.dll[4]。

wpcap.dll是packet.dll的上一层封装,提供了编程的高级接口。

为了能更好的了解Winpcap的工作原理,我选用了packet.dll作为程序对底层访问的接口。

因为基于Winpcap开发涉及到驱动程序开发技术,dll动态连接库开发技术,和vc的MFC应用程序开发技术,所以将对它们做一些介绍。

图2.1Winpcap及NPF的结构图[5]

2.3NDIS驱动开发技术

网络驱动程序使用ISO的开放的系统互连网罗标准(OSI),这是一个七层的模型,它的顶层是应用软件层,底层是硬件连接和网络的拓扑结构,网络接口卡(NIC)给大多数的平台提供网络的硬件接口,网络驱动程序是写给指定的NIC的驱动程序。

网络驱动程序接口规X(NDIS)给NIC驱动程序提供库支持,通常只允许NIC厂商提供管理硬件特殊细节的MINI驱动程序,更高层的NDIS(中间驱动程序,协议驱动程序)在需要的时候提供媒体转换,过滤。

分层的NDIS如图2所示。

WIN2000提供一个分层的内核模式软件传输驱动接口(TDI),这个分层的在NDIS层和高层软件抽象像插座和NetBIOS,TDI层使WIN2000的高层结构具有更多的可移植性。

图2.网络驱动程序接口规X

2.4DLL动态连接库技术

DLL(DynamicLinkableLibrary)文件通常是一个具有独立功能的程序模块,可以进行单独编译和测试。

在运行时,只有当EXE程序确实要调用这些DLL模块的情况下,系统才会将它们装载到内存空间中。

这种方式不仅减少了EXE文件的大小和对内存空间的需求,而且使这些DLL模块可以同时被多个应用程序使用,只是增加DLL的计数。

当应用程序卸载DLL时,计数则减少,计数为0时DLL就从内存被释放。

PACKET.DLL就是为上层应用程序开发的,提供操作网卡的模块;而且它屏蔽应用程序直接操作底层协议驱动程序的复杂性。

所以应用程序可以使用PACKET.DLL所提供地接口函数,安全简单的操作协议驱动程序,使应用程序更加健壮。

 

第3章系统功能描述

这个网络监听工具虽然不是很庞大,但是有几个功能比较明确,也就是监听功能,显示功能,管理功能,连接功能,所以我把它们划分为四个子系统,来实现。

3.1监听子系统

监听子系统再划分为三个功能,捕获功能,过滤功能,保存功能;三个功能描述如下:

●捕获功能

根据过滤器的设置,捕获ip,arp,ipx,tcp,udp,ospf,icmp,spx,ipx-rip等数据包,并把数据包保存在应用程序的缓冲区内。

●过滤功能

用户自己定义过滤信息(特定协议进行捕获),也就说用户可能只需要了解网络中某种类型的数据包的信息,而不需要捕获太多无用的数据,一方面系统负担比较大,另一方面干扰信息过多不利于用户发现网络中存在的问题。

●保存功能

在捕获的过程中,每十秒钟,把统计信息写入文件中,等待图表显示功能模块提取信息。

保存功能还根据管理功能的需要,保存数据。

如果管理功能被启动,系统将满足管理要求的主机IP地址,记录在IP数据集合中。

等待管理子系统从中提取IP地址,实现管理功能。

3.2显示子系统

显示子系统可再划分为五个功能,总量显示功能,分量显示功能,通讯显示功能,列表显示功能,树形显示功能。

这些功能的详细描述如下:

●总量显示功能

在抓包过程中显示捕获数据包的总量,也就是从开始监听一直到结束,捕获的说有数据包的数量。

●分量显示功能

在抓包过程中显示各种数据包的分量,以及它们在总量中比例(百分比显示)各种数据包的百分比是指,某种类型的数据包除以捕获的数据包的总量。

●通讯显示功能

用直观的方法表示当前各个节点的通讯对象,如果双方存在TCP,UDP,ICMP数据包的往来我们就认为他们之间存在着通讯,然后我们记录他们的信息,并显示在屏幕上。

●列表显示功能

在抓包终止后,显示捕获的数据包的信息。

包括:

包的次序,包的源和目的地址(ip数据包显示ip地址,arp数据包显示mac地址,ipx数据包显示ipx的地址形式)包的长度,包的简要说明

●树形显示功能

可以指定一个数据包,并显示它的详细内容,XX信息,首先判断是网络层中的哪种类型数据包,其次判断是传输层中的哪种类型的数据包,最后判断是哪种应用层的服务。

才判断的过程中不断记录各个XX的信息,并以树状结构加以表现。

3.3管理子系统

简单网络管理功能:

主要指可选择监听某个端口,根据一些信息截断节点与外界的联系。

设计这个功能的目的是,最近这段时间利用WINDOWS远程管理或是远程调用功能的漏洞,出现很多攻击。

它们通常利用135,139或445端口存在的缓冲区溢出的漏洞,使病毒入侵主机,然后利用相同的方法再从被感染的主机向其他网络中的主机发起攻击。

所以如果我们在觉察到某台机器中毒并不断攻击其他主机时,我们可以把他们发出的数据包定位到错误的网关地址,这样就把威胁限制在一个网段内了,还可以造成IP冲突让部分被感染主机无法和网络连接。

3.4连接子系统

实现分布式监听,这是指我们在各个网段安排不同的MySniffer,然后把各个网段的信息汇总到一台服务器中。

服务器可以对数据加以显示,帮助管理人员觉察到网络的异常情况。

 

第4章系统实现

4.1协议驱动程序NPF的设计

参考Windows系统的DDK(DriverDevelopmentKit)中的网络驱动程序(NetworkDriver)开发文档,针对不同类型的网罗驱动程序,NDIS定义的一些必须向系统进行登记和实现的接口,作为系统操作和管理某一个网卡的入口。

开发驱动程序主要的工作便是对这些接口进行实现。

系统采用协议驱动程序(也叫中间驱动程序)来进行网络数据包的读取,下面就是协议驱动程序需要实现和登记的主要几个接口。

具体实现包括:

●NTSTATUSDriverEntry(INPDRIVER_OBJECTDriverObject,

INPUNICODE_STRINGRegistryPath)[6]:

DriverEntry是系统调用设备驱动程序的入口函数,当协议驱动程序被加载到内存开始运行时它被调用。

它初始化驱动程序,注册所有的驱动程序的回调函数,创建虚拟设备,在NDIS结构中定义协议驱动程序。

参数:

DriverObject系统创建的一个协议驱动程序对象

RegisterPath注册表中与协议驱动有关的注册项的路径

返回值:

包括一组网卡的串。

●NdisRegisterProtocol:

在驱动程序初始化的时候,调用该函数向系统进行登记,将自己注册成一个协议驱动程序。

●NdisOpenAdapter:

在驱动程序初始化的时候,调用该函数绑定(BIND)和打开(OPEN)一个或多个网络适配器(Adapter)。

●在高层应用程序,发出要求绑定协议驱动程序或者要求接收和发送数据包的请求时,协议驱动程序调用以下函数:

NPF_BindAdapterHandler:

NDIS通过这个函数请求协议驱动程序绑定到一个底层的NIC(网卡)或者虚拟的NIC

NPF_UnbindAdapterHandler:

NDIS通过这个函数关闭协议驱动程序到NIC或者虚拟NIC的连接。

NPF_OpenAdapterpleteHandler:

当协议驱动程序调用NdisOpenAdapter函数的返回是NDIS_STATUS_PENDING时,这个函数来指定(Binding)操作完成。

NPF_CloseAdapterpleteHandler:

当协议驱动程序调用NPF_NdisCloseAdapter函数返回是NDIS_STATUS_PENDING时,这个函数来指定(Unbinding)操作完成。

NPF_ReceiveHandler:

当一个数据包到达时,便调用这个接口进行处理。

NPF_ReceivepleteHandler:

指示进行接收的数据是否已经接收完成。

NPF_TransferpleteHandler:

当协议驱动程序调用NdisTransferData函数的返回值是NDIS_STATUS_PENDING,系统调用这个函数指示传送的数据时候已经发送完成。

NPF_SendpleteHandler:

当协议驱动程序调用NdisSend函数的返回值为NDIS_STATUS_PENDING,系统调用这个函数指示进行发送的数据时候已经发送。

NPF_Read:

为用户提供读操作。

NPF_Write:

为用户提供写操作。

NPF_IoControl:

处理IOCTL操作。

以上所罗列的是协议驱动程序中用到或是实现的主要的几个函数。

4.2动态连接库程序PACKET.DLL的设计

首先声明一些相关的数据结构:

1.typedefstruct_ADAPTERADAPTER[6]//描述一个网络适配器;

2.typedefstruct_PACKETPACKET//描述一组网络数据报的结构;

3.typedefstructNetTypeNetType//描述网络类型的数据结构;

4.typedefstructnpf_if_addrnpf_if_addr//描述一个网络适配器的ip地址;

5.structbpf_hdr//数据报头部;

5.structbpf_stat//当前捕获数据报的统计信息。

下面,将介应用程序用到的各个函数,他们都是在packet.dll中定义的:

1>LPPACKETPacketAllocatePacket(void)

当需要给程序接收数据包的时候,需要先分配一个接收缓冲区,而接受缓冲区又需要一个描述它的结构体。

所以在分配缓冲区的时候,调用这个函数分配这个结构体的空间。

如果运行成功,返回一个_PACKET结构的指针,否则返回NULL。

成功返回的结果将会传送到PacketReceivePacket()函数,接收来自驱动的网络数据报。

2>VOIDPacketCloseAdapter(LPADAPTERlpAdapter)

当应用程序需要关闭监听功能的时候,需要调用这个函数。

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

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1