如何在网络中发现一个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,全名SecureShell,是一个在应用程序中提供安全通信的协议,建立在客户机/服务器模型上的。SSH服务器的分配的端口是22,连接是通过使用一种来自RSA的算法建立的,在授权完成后,接下来的通信数据是用IDEA技术来加密的。这通常是较强的,适合与任何非秘密和非经典的通讯。
SSH后来发展成为F-SSH,提供了高层次的,军方级别的对通信过程的加密。它为通过TCP/IP网络通信提供了通用的最强的加密。如果某个站点使用F-SSH,用户名和口令成为不是很重要的一点。目前,还没有人突破过这种加密方法。即使是sniffer,收集到的信息将不再有价值,当然最关键的是怎样使用它。
另类安全之法
另一个比较容易接受的是使用安全拓扑结构。这听上去很简单,但实现起来花销是很大的。这样的拓扑结构需要有这样的规则:一个网络段必须有足够的理由才能信任另一网络段。网络段应该考虑你的数据之间的信任关系上来设计,而不是硬件需要。开始处理网络拓扑则要做到以下几点:
第一点:一个网络段是仅由能互相信任的计算机组成的。通常它们在同一个房间里,或在同一个办公室里。比如你的财务信息,应该固定在某一节点,就象你的财务部门被安排在办公区域的的一个不常变动的地方。
第二点:注意每台机器是通过硬连接线接到Hub的。Hub再接到交换机上。由于网络分段了,数据包只能在这个网段上被sniffer。其余的网段将不可能被sniffer。
第三点:所有的问题都归结到信任上面。计算机为了和其他计算机进行通信,它就必须信任那台计算机。作为系统管理员,你的工作是决定一个方法,使得计算机之间的信任关系很小。这样,就建立了一种框架,可以告诉你什么时候放置了一个sniffer,它放在那里了,是谁放的等等。
第四点:如果你的局域网要和INTERNET相连,仅仅使用防火墙是不够的。入侵者已经能从一个防火墙后面扫描,并探测正在运行的服务。你要关心的是一旦入侵者进入系统,他能得到些什么。你必须考虑一条这样的路径,即信任关系有多长。举个例子,假设你的WEB服务器对某一计算机A是信任的。那么有多少计算机是A信任的呢。又有多少计算机是受这些计算机信任的呢?在信任关系中,这台计算机之前的任何一台计算机都可能对你的计算机进行攻击,并成功。你的任务就是保证一旦出现的Sniffer,它只对最小范围有效。