<<返回

3.3 Sniffer探测与防范

 
 

3.3 Sniffer探测与防范
Sniffer意为"嗅探器",可以形象地理解为打入到敌人内部的特工,源源不断地将敌方的情报送出来。在网络上,Sniffer是一种常用的收集有用数据的方法,这些数据可以是用户的账号和密码,可以是一些商用机密数据等等。
3.3.1 Sniffer原理
首先看一个最简单的局域网构造。在图3.1中,若干机器通过一个HUB(也称为集线器)构成星型拓扑结构。那么,HUB是如何工作的呢?下面以共享式HUB为例说明。

图3.1 Sniffer工作环境示意图
由于以太网等很多网络(常见共享HUB连接的内部网)是基于总线方式,物理上是广播的,就是一台机器发给另一台机器的数据,共享HUB先收到然后把它接收到的数据再发给其他所有的端口,共享HUB连接的同一网段的所有机器的网卡都能接收到数据。显然,共享HUB的工作模式使得两台机器传输数据的时候别的端口也占用了,因此共享HUB决定了同一网段同一时间只能有两台机器进行数据通信。
网卡收到传输来的数据(网络体系结构中称为"帧"),网卡内的固化程序先接收数据头的目的MAC地址,判断是否与自己的地址相同,如果相同,就接收下来存在网卡的缓冲区中,然后产生中断信号通知CPU;如果不同就丢弃,所以不该接收的数据到达网卡后就截断了,计算机根本不知道。CPU得到中断信号后产生中断,操作系统根据网卡驱动程序设置的网卡中断程序地址调用驱动程序接收数据,接收的数据放入堆栈让操作系统处理。
了解了HUB、网卡的基本工作原理后,Sniffer就比较容易实现了,只要通知网卡接收其收到的所有数据(这种模式一般叫作乱模式),并通知主机进行处理。如果发现感兴趣的包或者符合你预先设定过滤条件的包,就可以将其存到一个log文件中去。通常设置的这些条件是包含"username"或"password"的包。
Sniffer通常运行在路由器,或有路由器功能的主机上。这样就能对大量的数据进行监控。Sniffer属第二层次(数据链路层)的攻击。通常是攻击者已经进入了目标系统,然后使用Sniffer这种攻击手段,以便得到更多的信息。
Sniffer除了能得到口令或用户名外,还能得到更多的其他信息,比如银行卡号,网上传送的金融信息等等。Sniffer几乎能得到以太网上传送的任何数据包。
有许多运行于不同平台上的Sniffer程序。如Linux tcpdump、The Gobbler、LanPatrol、LanWatch、Netmon、Netwatch、Netzhack等。
通常,Sniffer程序只需看到一个数据包的前200~300个字节的数据,就能发现用户名和口令等信息。
3.3.2 实现Sniffer的源程序
具体源程序参见附录。
3.3.3 发现和防止Sniffer
1.发现Sniffer
实际上,很难在网络上发现Sniffer,因为它们根本就没有留下任何痕迹。要发现Sniffer,一般通过查看进程的方法。
l Unix环境
在Unix系统下使用下面的命令:
ps -aux 或:ps -augx
这个命令列出当前的所有进程,启动这些进程的用户,它们占用CPU的时间,占用内存的多少等等。
l Windows NT环境
在Windows NT系统下,按下【Ctrl+Alt+Del】,看一看任务列表。不过,编程技巧高的Sniffer即使正在运行,也不会在这里出现。
2.防止Sniffer
要防止Sniffer并不困难,有许多可以选用的方法。但关键是用户能否舍得为系统花费较大的开销。常用的方法包括:
l 传输加密
l 采用安全拓扑结构

(1)加密
比较安全的方法是加密,即对传输的数据在传送前加密,对方收到后再解密。如果被Sniffer监听,那么Sniffer所看到的仅仅是加密后的数据。但不幸的是,传统的TCP/IP协议没有采用加密方法进行数据传输,数据都是明文方式的。因此,如果需要彻底解决Sniffer监听,最根本的方法是增强TCP/IP协议,但目前阶段基本是通过打补丁来解决这个问题,如SSH协议和F-SSH协议。
SSH(Secure Shell)是在应用程序中提供安全通信的协议。它建立在客户机/服务器模型上。SSH服务器的服务端口是22,采用RSA算法验证用户并建立连接。在授权完成后,通信数据采用IDEA技术来加密。这种加密算法适合于一般的通信。
SSH后来发展成为F-SSH,提供了高层次的、军方级别的通信加密。它为通过TCP/IP网络通信提供了通用的加密方法。
SSH和F-SSH都有商业或自由软件版本存在。
(2)安全拓扑结构
另一个防止Sniffer的方法是使用安全拓扑结构。使用安全拓扑结构一般需要遵循下列规则:
一个网络段必须有足够的理由才能相信另一网络段。网络段的设计应该考虑数据之间的信任关系,而不是硬件需要。
下面对以上原则作一个简单的说明。
① 一个网络段仅由能互相信任的计算机组成。通常它们在同一个房间里,或在同一个办公室内。比如财务系统,应该固定在某个房间或楼层。
② 所有的问题都归结到信任上。计算机为了和其他计算机进行通信,它就必须信任那台计算机。作为系统管理员,必须采用一种方法,使得计算机之间的信任关系很小。
③ 如果局域网要和Internet相连,仅仅使用防火墙是不够的。入侵者已经能从防火墙后面扫描,并探测正在运行的服务。因此需要考虑到一旦入侵者进入系统,他能得到些什么。必须考虑一条这样的路径,即信任关系有多长。举个例子,假设Web服务器对某一计算机A是信任的,那么有多少计算机是A信任的?又有多少计算机是受这些计算机信任的?一句话,就是确定最小信任关系的那台计算机。在信任关系中,这台计算机之前的任何一台计算机都可能对你的计算机进行攻击并成功。你的任务就是保证一旦出现Sniffer,它只对最小范围有效。
Sniffer往往是攻击者在侵入系统后使用,用来收集有用的信息。因此,防止系统被突破是关键。系统安全管理员要定期对所管理的网络进行安全测试,发现并防止安全隐患。

<<返回