朋友,您听说过嗅探一词吗?一般而言,它是指:秘密地调查某些内容,以检索出机密的信息。而从信息安全的角度来看,嗅探是指:窃听流量,或将流量路由到可以捕获,分析和监控的目标处。如果用在“正道”上,我们可以通过执行嗅探,来分析网络的使用情况,对网络问题进行故障排查,以及通过监控会话来进行各种开发与测试。不过,我们在此讨论的是被“用歪了”的嗅探攻击,及其如何从复杂数据集中提取有意义的信息。
定义嗅探攻击
在互联网世界中,攻击者可以使用应用程序、网络、以及主机级别的硬件设备,通过执行嗅探,以读取或截获任何网络数据包中的文本信息。此类信息包括:用户名、密码、密钥、银行账号、交易记录等任何有价值的内容。我们可以简单地将此类攻击在技术上等同于物理窃取。
嗅探动机:
获取用户名和密码。窃取银行和交易的相关信息。监控电子邮件和聊天消息。实施身份信息盗窃。嗅探的类型
嗅探可分为主动和被动两种。顾名思义,主动是指:攻击者为了获取信息而进行的一系列活动或交互。而在被动状态下,攻击者只是隐蔽且被动地获取信息。下面,让我们看看两者的特点:
(1)被动嗅探:
此类嗅探往往发生在集线器(hub)上。由于集线器设备可以在某个端口上接收流量,然后在所有其他端口上重新转发该流量,因此,如果攻击者将嗅探器放置在集线器上,则可以直接捕获所有流经集线器的网络流量。而且,嗅探器可以长时间“安静”地在那里监控网络中的一举一动。不过,如今随着集线器使用的减少,以及被交换机所取代,这种攻击方式已显得比较老套了。
(2)主动嗅探:
交换机能够学习带有目标MAC地址的CAM(二层交换机地址)表。根据该表,交换机可以决定将哪个网络数据包发送到何处。在主动嗅探时,嗅探器将使用大量虚假的请求发往交换机,以填满CAM表。CAM满后,交换机将不得不把网络流量,以“合法”的形式发往所有端口,进而方便攻击者进行嗅探。
网络攻击的种类
MAC泛洪:如上文所述,大量的MAC地址涌入交换机,以使CAM表溢出,并方便嗅探的执行。DNS缓存中毒:攻击者通过更改DNS的缓存记录,以便将请求重定向到恶意网站,进而捕获这些流量。由于这些恶意网站在外观上酷似真实的合法网站,因此极具欺骗性。用户一旦输入与账户相关的登录信息,就会立即被嗅探到。邪恶双胞胎攻击(EvilTwinAttack):攻击者通过恶意软件来更改受害者的DNS,并通过设置一对DNS,来响应各种请求。据此,攻击者可以轻松地嗅探流量,并将其重新路由到自己设定的目标网站。MAC欺骗:为了收集到所有连接着交换机的MAC地址,攻击者将嗅探设备的MAC地址,设置为与目标主机相同,以嗅探并截获发往目标主机的消息。如何识别嗅探器?
嗅探器既可能是安装在某个系统上的软件,又可能是嵌入式的硬件设备,还可能是DNS级别的嗅探器或其他网络节点。如您所知,网络在逻辑上被分为7层,每一层都有着各自的专属任务。那么嗅探攻击到底发生在哪一层上呢?总的说来,嗅探器可以从各个层次上捕获PDU(协议数据单元),其中最常见的是第3层(网络)和第7层(应用)。而针对每一层的协议,目前都存在着非安全版本,以及对应的安全版本。下面我们来讨论那些容易受到嗅探攻击的协议:
(1)HTTP:
超文本传输协议位于OSI模型的第7层。作为一个应用层协议,它以纯文本形式传输信息,这一般适用于静态的、或不需要用户输入任何信息的网站。其显著缺点是:任何人都可以在通信双方之间设置一个中间人攻击(Man-in-the-MiddleAttack,MITM)的代理,用来接受所有流量,甚至修改某些数据流。随着Web2.O时代的到来,为了用户之间交互的安全性,我们需要使用HTTP的安全版本(即HTTPS),来保证数据流在离开第7层时就已经被加密了。
(2)TELNET:
Telnet是一种客户端-服务器协议,它可以通过虚拟终端来提供通信功能。由于Telnet在默认情况下并不加密通信内容,因此那些有权访问到客户端和服务器所连接的交换机或集线器的攻击者,都可以嗅探到Telnet的通信内容,进而获取用户名和密码等信息。用作不安全Telnet的替代协议,SSH能够对流量进行加密,进而保证数据的机密性和完整性。
(3)FTP:
FTP常被用于在客户端和服务器之间传输文件。为了进行身份验证,FTP使用了纯文本的用户名和密码机制。不过,和Telnet类似,攻击者完全可以通过嗅探流量,以获取身份凭据,进而访问到服务器上的所有文件。FTP既可以通过SSL/TLS来进行加固,也可以被更安全的SFTP(SSH的文件传输协议)所代替。
(4)POP:
电子邮件客户端可以使用POP协议,从邮件服务器上下载邮件。由于同样使用纯文本机制进行通信,因此该协议也容易受到嗅探攻击。其后续的版本--POP2和POP3,都比原始版本要安全得多。
(5)SNMP:
简单网络管理协议(SNMP)可被用于与网络上的受管理设备进行通信。对于通信过程中的各种往来消息,SNMP使用社区字符串(