通常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接近。。。。。
在非高速信道上,如56K ddn 等,如果网络中存在sniffer ,你应该也可以察觉出网络通讯速度的变化。
最后再说明的是,并不是使用了交换设备就可以完全阻止sniffer , 如果
系统管理员错误的使用了网络的拓扑结构,比如,工作站或终端通过某个集连设备集中到交换集线器,然后通过路由再进入主机群。这样的布线表面看来好象有物理上的分割,但实际上,从逻辑的观点,任何一台机器的数据除了到达主机外,还同时流向别的机器。任何一台机器都有可能架个sniffer 来监控从本地网络流向主机的所有数据。安全的布线应该是从各终端就使用交换设备。(在没有spoofer的情况下)
黑客技术(7)- ARP欺骗
ARP 欺骗技术
本来不打算写这接下的一系列讨论欺骗的文章(计划中有arp欺骗、icmp欺骗、路由rip欺骗、ip地址欺骗等),这主要是自己有些担心有些人会给网管增加日常工作量,但是想想还是写的好,因为通常在你猛打完补丁后,你可能觉得你的系统安全了,但是,实际上,打补丁只是安全措施里的一个很基本的步骤而已,通常一个hacker要进入你的系统,他所要做的并不是你打补丁就可以避免的,象这些欺骗都要求你必须掌握相当的网络底层知识和合理安排物理布线
才可阻止得了的。特别是多种手法混用的时候,特别要说明的是:有些人往往以为会使用某些工具入侵就觉得自己是个hacker, 呵呵。。其实,我认为这只是入门而已(有些是连门都找不到),通过本文,我想让人们知道,一个hacker在真正入侵系统时,他并不是依靠别人写的什么软件的。更多是靠对系统和网络的深入了解来达到这个目的。
我想我会尽可能将我知道的写出来,同时也将尽可能把防止欺骗的解决办法写出来,当然,这只是我知道的而已,如果有失误的地方,欢迎指正。 呵呵。。
首先还是得说一下什么是 ARP ,如果你在UNIX Shell下输入 arp -a
(9x下也是),你的输出看起来应该是这样的:
Interface: xxx.xxx.xxx.xxx
Internet Address Physical Address Type
xxx.xxx.xxx.xxx 00-00-93-64-48-d2 dynamic
xxx.xxx.xxx.xxx 00-00-b4-52-43-10 dynamic
...... ......... ....
这里第一列显示的是ip地址,第二列显示的是和ip地址对应的网络接口卡的硬件地址(MAC),第三列是该ip和mac的对应关系类型。
可见,arp是一种将ip转化成以ip对应的网卡的物理地址的一种协议,或者说ARP协议是一种将ip地址转化成MAC地址的一种协议,它靠维持在内存中保存的一张表来使ip得以在网络上被目标机器应答。
为什么要将ip转化成mac 呢? 呵呵。。解释下去太多了,简单的说,这是因为在tcp网络环境下,一个ip包走到哪里,要怎么走是靠路由表定义,但是,当ip包到达该网络后,哪台机器响应这个ip包却是靠该ip包中所包含的mac地址来识别,也就是说,只有mac地址和该ip包中的mac地址相同的机器才会应答这个ip包(好象很多余,呵呵。。),因为在网络中,每一台主机都会有发送ip包的时候,所以,在每台主机的内存中,都有一个 arp--> mac 的转换表。通常是动态的转 换表(注意在路由中,该arp表可以被设置成静态)。也就是说,该对应表会被
主机在需要的时候刷新。这是由于乙太网在子网层上的传输是靠48位的mac地址而决定的。
通常主机在发送一个ip包之前,它要到该转换表中寻找和ip包对应的mac地址,如果没有找到,该主机就发送一个ARP广播包,看起来象这样子:
“我是主机xxx.xxx.xxx.xxx , mac是xxxxxxxxxxx ,ip为xxx.xxx.xxx.xx1的
主机请报上你的mac来”
ip为xxx.xxx.xxx.xx1的主机响应这个广播,应答ARP广播为:
“我是xxx.xxx.xxx.xx1,我的mac为xxxxxxxxxx2”
于是,主机刷新自己的ARP缓存。然后发出该ip包。
了解这些常识后,现在就可以谈在网络中如何实现ARP欺骗了,可以看看这样一个例子:
一个入侵者想非法进入某台主机,他知道这台主机的火墙只对192.0.0.3(假设)这个ip开放23口(telnet),而他必须要使用telnet来进入这台主机,所以他要这么做:
1、他先研究192.0.0.3这台主机,发现这台95的机器使用一个oob就可以让他
死掉。
2、于是,他送一个洪水包给192.0.0.3的139口,于是,该机器应包而死。
3、这时,主机发到192.0.0.3的ip包将无法被机器应答,系统开始更新自己的
arp对应表。将192.0.0.3的项目搽去。
4、这段时间里,入侵者把自己的ip改成192.0.0.3
5、他发一个ping(icmp 0)给主机,要求主机更新主机的arp转换表。
6、主机找到该ip,然后在arp表中加如新的ip-->mac对应关系。
7、火墙失效了,入侵的ip变成合法的mac地址,可以telnet 了。
(好象很罗嗦,呵呵。。不过这是很典型的例子)
现在,假如该主机不只提供telnet , 它还提供r命令(rsh,rcopy,rlogin等)那么,所有的安全约定将无效,入侵者可以放心的使用这台主机的资源而不用担心被记录什么。
有人也许会说,这其实就是冒用ip嘛。。呵呵。。不错,是冒用了ip,但决不是ip欺骗,ip欺骗的原理比这要复杂的多,实现的机理也完全不一样。
上面就是一个ARP的欺骗过程,这是在同网段发生的情况,但是,提醒注意的是,利用交换集线器或网桥是无法阻止ARP欺骗的,只有路由分段是有效的阻止手段。(也就是ip包必须经过路由转发。在有路由转发的情况下,ARP欺骗如配合ICMP欺骗将对网络造成极大的危害,从某种角度将,入侵者可以跨过路由监听网络中任何两点的通讯,如果有装火墙,请注意火墙有没有提示过类似:某某IP是局域IP但从某某路由来等这样的信息。详细实施以后会讨论到。)
在有路由转发的情况下,发送到达路由的ip的主机其arp对应表中,ip的对应值是路由的mac。
比如:
我 ping
www.nease.net 后,那么在我主机中,
www.nease.net的IP对应项不是nease的mac 而是我路由的mac。其ip也是我路由的IP.(有些网络软件通过交换路由ARP可以得到远程IP的MAC)
有兴趣做深入一步的朋友可以考虑这样一种情况:
假设这个入侵者很不幸的从化学食堂出来后摔了一跤,突然想到:我要经过一个路由才可以走到那台有火墙的主机!!! ^^^^
于是这个不幸的入侵者开始坐下来痛苦的思考:
1、我的机器可以进入那个网段,但是,不是用192.0.0.3的IP
2、如果我用那个IP,就算那台正版192.0.0.3的机器死了,那个网络里的机器也不会把ip包丢到路由传给我。
3、所以,我要骗主机把ip包丢到路由。
通过多种欺骗手法可以达到这个目的。所以他开始这样做:
1、为了使自己发出的非法ip包能在网络上活久一点,他开始修改ttl为下面的过程中可能带来的问题做准备。他把ttl改成255.(ttl定义一个ip包如果在网络上到不了主机后,在网络上能存活的时间,改长一点在本例中有利于做充足的广播)
2、他从贴身口袋中掏出一张软盘,这张有体温的软盘中有他以前用sniffer时保存的各种ip包类型。
3、他用一个合法的ip进入网络,然后和上面一样,发个洪水包让正版的192.0.0.3死掉,然后他用192.0.0.3进入网络。
4、在该网络的主机找不到原来的192.0.0.3的mac后,将更新自己的ARP对应表。于是他赶紧修改软盘中的有关ARP广播包的数据,然后对网络广播说“能响应ip为192.0.0.3的mac 是我”。
5、好了,现在每台主机都知道了,一个新的MAC地址对应ip 192.0.0.3,一个ARP欺骗完成了,但是,每台主机都只会在局域网中找这个地址而根本就不会把发送给192.0.0.3的ip包丢给路由。于是他还得构造一个ICMP的重定向广播。6、他开始再修改软盘中的有关ICMP广播包的数据,然后发送这个包,告诉网络中的主机:“到192.0.0.3的路由最短路径不是局域网,而是路由,请主机重定向你们的路由路径,把所有到192.0.0.3的ip包丢给路由哦。”
7、主机接受这个合理的ICMP重定向,于是修改自己的路由路径,把对192.0.0.3 的ip通讯都丢给路由器。
8、不幸的入侵者终于可以在路由外收到来自路由内的主机的ip包了,他可以开始telnet到主机的23口,用ip 192.0.0.3.
9、这个入侵者一把冲出芙蓉一(229),对着楼下来往的女生喊到:“一二一。。”
呵呵。。他完成了。
注意,这只是一个典型的例子,在实际操作中要考虑的问题还不只这些。
现在想想,如果他要用的是sniffer会怎样?
假如这个入侵者实在是倒霉 (因为喊“一二一。。”而被女生痛殴),当他从地上爬起来后突然发现:其实我要经过好几个路由才可以到那台主机啊。。。。。
这时他要怎么做?
呵呵。。。有兴趣做更深入了解的朋友可以自己构思。通常入侵者是这样做的:
1、苦思冥想六天六夜。。。。。
.
.
.
N、一把冲出芙蓉一(229),狂叫一声,一头栽向水泥马路。
可见,利用ARP欺骗,一个入侵者可以得到:
1、利用基于ip的安全性不足,冒用一个合法ip来进入主机。
2、逃过基于ip的许多程序的安全检查,如NSF,R系列命令等。