Dsniff是一个著名的网络嗅探工具包。其开发者Dug Song早在1999年12月,以在
密歇根大学CITI研究室(Center for Information Technology Integration)的
研究成果为基础,开发了这个后来具有很大影响力的网络安全工具包。Dug Song
开发Dsniff的本意是揭示网络通信的不安全性,借助这个工具包,网络管理员可
以对自己的网络进行审计,也包括***测试。但万事总有其两面性,Dsniff所带
来的负面作用也是“巨大”的,首先它是可以自由获取的,任何拥有这个工具包
的人都可能做“非正当”的事情,其次,Dsniff里面的某些工具,充分揭示了一
些安全协议的“不安全性”,例如针对SSH1和SSL的MITM(Man-In-The-Middle)
***工具—SSHmitm和Webmitm。SSH1和SSL都是建立网络通信加密通道的机制,向
来被认为是很安全的,但人们在具体使用时,往往因为方便性上的考虑而忽视了
某些环节,造成实事上的不安全。所以说,最大的不安全性,往往并不在于对安
全的一无所知,而在于过于相信自己的安全。
Dub Song在2000年12月发布了Dsniff的v2.3版本,该版本支持OpenBSD、Linux、
Solaris系统平台。目前,最新版本是2001年3月发布的v2.4b1的Beta版。Dsniff
的下载网址:
http://www.monkey.org/~dugsong/dsniff/
除了针对Unix系统的版本,从网上也可以得到Windows平台上运行的Dsniff早期版
本,Dsniff v1.8,需要有Winpcap支持,其下载网址:
http://www.datanerds.net/~mike/dsniff.html
(这里还有许多其它常用工具的Windows版本,例如Libnids、ngrep、scanlogd、
snort、Winpcap、Windump等等)
具体使用时,Dsniff依赖于一些第三方的软件包(库),包括:
l	Berkeley DB - 一个嵌入式的数据库系统(包括其开发包),http://www.sle
epycat.com/
l	OpenSSL - http://www.openssl.org/
l	Libpcap - http://www.tcpdump.org/
l	Libnids - http://www.packetfactory.net/Projects/Libnids/
l	Libnet - http://www.packetfactory.net/Projects/Libnet/
Dsniff包中的工具基本上可以分为四类:
l	纯粹被动地进行网络活动监视的工具,包括:dsniff、filesnarf、mailsnarf
、msgsnarf、urlsnarf、webspy、sshow。
l	针对SSH和SSL的MITM“***”工具,包括sshmitm和webmitm。
l	发起主动欺骗的工具,包括:arpspoof、dnsspoof、macof。
l	其它工具,包括tcpkill、tcpnice。
下面我们就简单看看这些工具的主要用途和特点。
1. dsniff
这是一个口令嗅探器,可以处理的协议类型包括:
FTP,Telnet,SMTP,HTTP,POP,NNTP,IMAP,SNMP,LDAP,Rlogin,RIP,OSP
F,PPTP,MS-CHAP,NFS,VRRP,YP/NIS,SOCKS,X11,CVS,IRC,AIM,ICQ,N
apster,ostgreSQL,Meeting Maker,Citrix ICA,Symantec,pcAnywhere,NA
I Sniffer,Microsoft SMB,Oracle QL*Net,Sybase及Microsoft SQL认证信息
。
例如,简单的执行dsniff命令,即可捕获各种口令信息。
[root@audit dsniff-2.3]# ./dsniff
dsniff: listening on eth0
-----------------
12/09/01 17:03:14 tcp 211.80.38.164.1837 -> audit.23 (telnet)
colababy
iloveyou
pwd
cd tools
ls
cd dsniff-2.3
-----------------
12/09/01 17:04:11 tcp 211.80.38.164.1839 -> audit.21 (ftp)
USER anonymous
PASS test@fake
-----------------
12/09/01 17:53:17 202.112.*.* -> 202.*.*.* (snmp)
[version 1]
public
-----------------
12/09/01 18:10:23 doom -> 202.*.*.* (pop)
user colababy
pass ihateyou
2. filesnarf
    从嗅探到的NFS通信中,选定某个文件,转储到本地当前工作目录。
3. mailsnarf
从嗅探到的SMTP及POP通信中,以Berkeley邮件格式转储选定的邮件内容到本地,
可以很方便的离线浏览。
4. msgsnarf
    从嗅探到的AOL Instant Messenger、ICQ2000、IRC、Yahoo Messenger的聊
天会话中记录选定的消息。
5. urlsnarf
可以对TCP80、3128、8080端口的HTTP通信进行解析,并将嗅探到的所有HTTP请求
转存为通用日志格式(Common Log Format,CLF),这种格式是许多Web服务器所
使用的,例如IIS和Apache,事后可以很方便的用一些日志分析工具来分析记录结
果。例如:
[root@audit dsniff-2.3]# ./urlsnarf
urlsnarf: listening on eth0 [tcp port 80 or port 8080 or port 3128]
211.80.38.164 - - [/Nov/2001:16:04:39 +0800] "GET http://bbs.sjtu.edu.cn/HTTP/1
.1" - - "-" "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"
211.80.38.164 - - [/Nov/2001:16:04:39 +0800] "GET http://bbs.sjtu.edu.cn/bbstyle
.css HTTP/1.1" - - "http://bbs.sjtu.edu.cn/ "Mozilla/4.0 (compatible; MSIE 5.01
; Windows NT 5.0)"
6. webspy
将嗅探到的来自某个客户端的URLs请求发送给本地的Netscape浏览器显示,可以
达到“实时”监视网络上HTTP活动的效果。
7. sshow
    对嗅探到的SSH通信进行分析,解析其认证过程、交互会话的口令长度,以及
命令行长度等信息。
8. arpspoof
持续不断的发送假的ARP响应包给一台或多台主机,以“毒害”其ARP缓存表。一
旦成功,即可以用别的嗅探工具来“接收”发送到本地的数据包。与Ettercap不
同的是,arpspoof并不进行真正的“嗅探”,它只是简单的进行ARP欺骗,本地主
机必须启动内核的IP Forwarding功能(或者使用fragrouter这样的工具),否则
,所有“转向”发到本地的数据包就如同进了黑洞,正常的网络通信将无法进行
,而一旦启动了本地的IP Forwarding,内核将自动对本地收到的目的IP却是别处
的数据包进行转发,正常的通信自然可以进行。Ettercap则不光进行ARP欺骗,它
还要做后续的许多工作,包括分析嗅探得到的数据包、修改数据包中的某些信息
以重新转发等等。
在Linux中,缺省是禁止IP Forwarding的,可以使用简单的命令启动它:
[root@audit dsniff-2.3]# echo 1 >/proc/sys/net/ipv4/ip_forward
arpspoof的执行效果如下:
[root@audit dsniff-2.3]# ./arpspoof -t 192.168.0.241 192.168.0.254
0:80:c8:6a:99:94 0:c0:95:e0:3d:9 0806 42: arp reply 192.168.0.254 is-a
t 0:80:c8:6a:99:94
0:80:c8:6a:99:94 0:c0:95:e0:3d:9 0806 42: arp reply 192.168.0.254 is-a
t 0:80:c8:6a:99:94
0:80:c8:6a:99:94 0:c0:95:e0:3d:9 0806 42: arp reply 192.168.0.254 is-a
t 0:80:c8:6a:99:94
0:80:c8:6a:99:94 0:c0:95:e0:3d:9 0806 42: arp reply 192.168.0.254 is-a
t 0:80:c8:6a:99:94
……
这里,192.168.0.241是目标主机(其实就是笔者测试环境中的缺省网关),arp
spoof向它不断的发送ARP响应包,指出IP地址为192.168.0.254的主机的MAC地址
应该是0:80:c8:6a:99:94,这正是本地主机的MAC地址。
9. dnsspoof
如果dnsspoof嗅探到局域网内有DNS请求数据包,它会分析其内容,并用伪造的D
NS响应包来回复请求者。如果是请求解析某个域名,dnsspoof会让该域名重新指
向另一个IP地址(***所控制的主机),如果是反向IP指针解析,dnsspoof也会
返回一个伪造的域名。这种欺骗方法可以旁路掉基于主机的访问控制,也可以用
在MITM方式的***(HTTP、HTTPS、SSH、Kerberos等)。
在dnsspoof的命令选项中,可以指定一个主机列表文件,文件格式与/etc/hosts
相同,如果不指定该文件,dnsspoof会返回本地的IP给域名解析请求者。
10. macof
    在本地网络中发送大量的随机MAC地址的数据包,可以指定源IP、目的IP、源
端口、目的端口,以MAC洪水的方式来导致某些交换机丧失“交换”能力,以达到
共享式嗅探的目的。
11. tcpkill
    中断特定的TCP连接。
12. tcpnice
    在TCP数据中伪造小的窗口值,以降低某个TCP连接会话的传输速度。
13. sshmitm
这是整个Dsniff工具包中最突出的工具之一,借助于dnsspoof的“帮助”,sshm
itm可以对某个SSH会话发动MITM(Monkey-In-The-Middle)***(注意,这里的
Monkey是Dsniff包readme文件中的解析,而不是常见的Man,这种区别实际上是没
有“区别”,也许就是因为Dsniff以猴子做为其标志的原因吧)。通过sshmitm,
***者可以捕获某个SSH会话的登录口令,甚至可以“劫持”整个会话过程(***
者在其主机上通过OpenSSL提供的代码生成伪造的证书,以欺骗目标主机,使之相
信就是有效的通信另一方,结果是,***者主机成了SSH安全通道的中转站)。目
前,对于SSH1,这种MITM***已经构成了严重的威胁。
MITM并不是一个新的概念,它是一种对认证及密钥交换协议进行***的有效手段
。通常,在SSH会话中,服务器首先会给客户端发送其公钥,严格来说,这种密钥
的交换和管理应该是基于X.509这种公钥基础设施(PKI)的,但因为PKI本身的复
杂性导致真正应用了这种公钥管理机制的服务器非常少,所以,通常情况下,服
务器只是简单的自己生成密钥对,并将其中的公钥发送给客户端。客户端收到服
务器的公钥后,必须独立验证其有效性。
通常,使用SSH的客户端会由sysadmin或其它账号来维护一个“密钥/主机名”的
本地数据库,当首次与某个SSH服务器建立连接时,客户端可能被事先配制成自动
接受并记录服务器公钥到本地数据库中,这就导致可能发生MITM***。
其实,建立加密的安全网络都存在一个基本的问题,无论如何,某种程度上讲,
加密通道的初始化连接总是建立在一个存在潜在危险的网络之上的,如果密钥交
换机制并不健全,或者是根本就被忽略了,那之后建立起来的加密通道也形同虚
设了。
按道理讲,SSH之类的协议本身是没有问题的,只要严格按照标准来建立加密及密
钥交换管理机制(例如PKI),***者是根本不会有可乘之机的,可问题就在于,
许多时候,为了使用上的方便,“复杂”的保证技术就被人们抛之脑后了。当然
,一种协议如果其可用性并不很强,也许本身就是问题,现在,SSH2较SSH1已经
有了较大改进。
具体来说,在某个SSH连接建立之初,如果客户端收到一个未知的服务器端公钥,
OpenSSH会有下列配置处理方式:
l	自动增加该公钥到本地数据库;
l	发出下面列出的警告消息,并询问用户是添加该公钥还是放弃连接;
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@  WARNING: HOST IDENTIFICATION HAS CHANGED!  @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now 
(man-in-the-middle attack)! It is also possible that 
the host-key has just been changed.  Please contact 
your system administrator.
l	拒绝接受。
如果客户端对未知公钥的验证被取消了(或者客户端配置本身已经旁路掉了这个
过程),或者如果客户端保存已知主机CA证书的缓存被“毒害”了,就很有可能
导致***者发起MITM***。
从根本上讲,要防止MITM方式的***,用户自身加强安全措施才是关键,例如,
密钥的初始交换也许可以换做其它方式(比如软盘),严格管理本地的证书列表
数据库,对于出现的告警提示,应该仔细甄别,防止第三方的欺骗行为。
14. webmitm
与sshmitm类似,也需要dnsspoof的“配合”,不同的是,webmitm“劫持”的是
HTTP和HTTPS会话过程,捕获SSL的加密通信。

Dsniff工具包中各种工具的使用方法(命令格式及选项),可以参见其用户手册
,下面的网址中有各种语言版本的下载:
http://www.groar.org/trad/dsniff/english.shtml
4.4.5 其它交换网络嗅探器
除了Ettercap,还有一些比较典型的交换网络嗅探器:
l	Snarp
这是一个运行在Windows NT上的交换网嗅探器,其实,严格说,它并不具备嗅探
功能,因为它只是对目标主机进行ARP欺骗,并以中间人的身份对收到的数据进行
转发,真正的抓包分析工作,还要借助于其它工具,例如Windump、Ngrep等等。
Snarp的运行需要LibnetNT(Windows系统中的Libnet库)和Winpcap的支持,下载地址为:
http://packetstorm.securify.com/NT/snarp.zip
l	Parasite
提供ARP欺骗和MAC洪水两种交换网络嗅探方式,最新版本是v1.1,下载地址:
http://www.thehackerschoice.com/releases.php