近来有太多的人在提及sniffer,我发现还是有很多人对sniffer这个概念很模糊,所以想再说一下Sniffer.所说全是个人观点,欢迎指正。
sniffing和spoofing一样是作用在网络基础结构的底层。通常情况下,用户并不直接和该层打交道,有些甚至不知道有这一层存在,呵呵。他们只是用ftp.http.telnet.email等,所以,应该说snffer的危害是相当之大的,通常使用sniffer是一次spoofing的开始。
那么到底sniffer是怎样的一种概念呢?
sniffer是利用计算机的网络接口截获目的地为其他计算机的数据报文的一种工具。(ISS)
在合理的网络中,sniffer的存在对系统管理员是致关重要的,系统管理员通过sniffer可以诊断出大量的不可见模糊问题,这些问题涉及两台乃至多台计算机之间的异常通讯有些甚至牵涉到各种的协议,借助于sniffer%2C系统管理员可以方便的确定出多少的通讯量属于哪个网络协议、占主要通讯协议的主机是哪一台、大多数通讯目的地是哪台主机、报文发送占用多少时间、或着相互主机的报文传送间隔时间等等,这些信息为管理员判断网络问题、管理网络区域提供了非常宝贵的信息。但是,同时,如果有心之人(非系统管理员)使用了sniffer,那么,他同样也可以获得和管理员一样多的信息,同样也可以对整个的网络做出判断。当然,SPP相信他不会用这些信息去管理网络。
现在网络上到处可见免费的sniffer,各种平台下的都有,我真不知道,这对管理员来说是好事还是坏事。(参看上一篇关于sniffer的文章,你可以知道现在找个sniffer多容易)
话说回来,那么sniffer是如何在网络上实施的呢?
谈这个问题之前还应该先说一下Ethernet的通讯.通常在同一个网段的所有网络接口都有访问在物理媒体上传输的所有数据的能力,而每个网络接口都还应该有一个硬件地址,该硬件地址不同于网络中存在的其他网络接口的硬件地址,同时,每个网络至少还要一个广播地址。(代表所有的接口地址),在正常情况下,一个合法的网络接口应该只响应这样的两种数据帧:
1、帧的目标区域具有和本地网络接口相匹配的硬件地址。
2、帧的目标区域具有“广播地址”。
在接受到上面两种情况的数据包时,nc通过cpu产生一个硬件中断,该中断能引起操作系统注意,然后将帧中所包含的数据传送给系统进一步处理。
而sniffer就是一种能将本地nc状态设成(promiscuous)状态的软件,当nc处于这种“混杂”方式时,该nc具备“广播地址”,它对所有遭遇到的每一个帧都产生一个硬件中断以便提醒操作系统处理流经该物理媒体上的每一个报文包。(绝大多数的nc具备置成promiscuous方式的能力)
可见,sniffer工作在网络环境中的底层,它会拦截所有的正在网络上传送的数据,并且通过相应的软件处理,可以实时分析这些数据的内容,进而分析所处的网络状态和整体布局。值得注意的是:sniffer是极其安静的,它是一种消极的安全攻击。
通常sniffer所要关心的内容可以分成这样几类:
1、口令
我想这是绝大多数非法使用sniffer的理由,sniffer可以记录到明文传送的userid和passwd.就算你在网络传送过程中使用了加密的数据,sniffer记录的数据一样有可能使入侵者在家里边吃肉串边想办法算出你的算法。
2、金融帐号
许多用户很放心在网上使用自己的信用卡或现金帐号,然而sniffer可以很轻松截获在网上传送的用户姓名、口令、信用卡号码、截止日期、帐号和pin.
3、偷窥机密或敏感的信息数据
通过拦截数据包,入侵者可以很方便记录别人之间敏感的信息传送,或者干脆拦截整个的email会话过程。
4、窥探低级的协议信息。
这是很可怕的事,我认为,通过对底层的信息协议记录,比如记录两台主机之间的网络接口地址、远程网络接口ip地址、ip路由信息和tcp连接的字节顺序号码等。这些信息由非法入侵的人掌握后将对网络安全构成极大的危害,通常有人用sniffer收集这些信息只有一个原因:他正在进行一次欺诈,(通常的ip地址欺诈就要求你准确插入tcp连接的字节顺序号,这将在以后整理的文章中指出)如果某人很关心这个问题,那么sniffer对他来说只是前奏,今后的问题要大条得多。(对于高级的hacker而言,我想这是使用sniffer的唯一理由吧)
那么,通过交换设备(网桥、交换机、路由等)所形成的网络边界是否可以有sniffer存在的空间呢?我想这是一个有趣的问题。能形成网络边界的交换设备并不是把来自一边的所有的帧都丢到另一边的。他们通常允许某些报文通过边界而阻止某些报文(特别是网络广播)通过边界。因此从理论上讲,通过交换设备对网络进行分段后,sniffer将无法透过边界而窥探另一边的数据包。但是,请注意:这是在边界设备不转发广播包的情况下(这也是通常的网络情况)。一旦入侵者使用spoofer诱骗某个边界设备而将自己的广播包流入不该进入的网段后,原理上还是在一个共享设备端使用sniffer,而实际上将是听到了边界的另一边。(详细的spoofer应用我会再整理出来)当然,这样会牵涉到ip欺诈和Mac欺诈的问题,然而,你别忘了,sniffer和spoofer是很少分开来的。
既然sniffer如此嚣张又安静,我要如何才知道有没有sniffer在我的网上跑呢?这也是一个很难说明的问题,比较有说服力的理由证明你的网络有sniffer目前有这么两条:
1、你的网络通讯掉包率反常的高。
通过一些网络软件,你可以看到你的信息包传送情况(不是sniffer),向ping这样的命令会告诉你掉了百分几的包。如果网络中有人在听,那么你的信息包传送将无法每次都顺畅的流到你的目的地。(这是由于sniffer拦截每个包导致的)
2、你的网络带宽将出现反常。
通过某些带宽控制器(通常是火墙所带),你可以实时看到目前网络带宽的分布情况,如果某台机器长时间的占用了较大的带宽,这台机器就有可能在听。
实际操作中,我还发现,如果某台机器(非服务器)在不该使用广播的网络中使用了ICMP类型10、11、9等这一类的广播,呵呵。。有可能。。。非常有可能。。。如果同时出现udp520口的rip广播。呵呵。。那就百分之N接近。。。。。
在非高速信道上,如56Kddn等,如果网络中存在sniffer,你应该也可以察觉出网络通讯速度的变化。
最后再说明的是,并不是使用了交换设备就可以完全阻止sniffer,如果系统管理员错误的使用了网络的拓扑结构,比如,工作站或终端通过某个集连设备集中到交换集线器,然后通过路由再进入主机群。这样的布线表面看来好象有物理上的分割,但实际上,从逻辑的观点,任何一台机器的数据除了到达主机外,还同时流向别的机器。
任何一台机器都有可能架个sniffer来监控从本地网络流向主机的所有数据。安全的布线应该是从各终端就使用交换设备。