黑客知识之Sniffer、黑客和网络管理史蒂夫?利维在其著名的《黑客电脑史》中指出的“黑客道德准则”(theHackerEthic)包括:通往电脑的路不止一条;所有的信息都应当是免费的;打破电脑集权;在电脑上创造艺术和美;计算机将使生活更美好。黑客文化包含了自由不羁的精神,也包含了反传统、反权威、反集权的精神。广义的、公众认为的“黑客”就是闯入计算机系统的人。这种观念令有才能的、真正的“黑客”感到难过。《MaximumSecurity》一书中对黑客和入侵者定义如下:■“黑客”指对于任何计算机操作系统的奥秘都有强烈兴趣的人。“黑客”大都是程序员,他们具有操作系统和编程语言方面的高级知识,知道系统中的漏洞及其原因所在;他们不断追求更深的知识,并公开他们的发现,与其他人分享;并且从来没有破坏数据的企图。■“入侵者”是指怀着不良的企图,闯入甚至破坏远程机器系统完整性的人。“入侵者”利用获得的非法访问权,破坏重要数据,拒绝合法用户服务请求,或为了自己的目的制造麻烦。“入侵者”很容易识别,因为他们的行为是恶意的。这里黑客的概念源于50、60年代麻省理工学院的实验室里的计算机迷们。他们精力充沛,热衷于解决难题、独立思考并且奉公守法。技术本身是没有错的,错误产生于人。网络安全性的分析可以被真正的黑客用于加强安全性、加强网络的自由度,也可以被入侵者用于窥探他人隐私、任意篡改数据、进行网上诈骗活动。这里,我们讨论网络嗅探器(sniffer)在广义黑客领域的应用和网络管理中的应用。一.嗅探器(Sniffer)攻击原理Sniffer既可以是硬件,也可以是软件,它用来接收在网络上传输的信息。网络可以是运行在各种协议之下的。包括Ethernet、TCP/IP、ZPX等等(也可以是其中几种协议的联合)。放置Sniffer的目的是使网络接口(在这个例子中是以太网适配器)处于杂收模式(promiscuousmode),从而可从截获网络上的内容。嗅探器与一般的键盘捕获程序(KeyCapture)不同。键盘捕获程序捕获在终端上输入的键值,而嗅探器则捕获真实的网络报文。嗅探器通过将其置身于网络接口来达到这个目的――将以太网卡设置成杂收模式。关于以太网(Ethernet)Ethernet是由Xerox的PaloAito研究中心(有时也称为PARC)发明的。下面简介一下信息在网络(这里为以太网)上的传输形式。数据在网络上是以很小的称为帧(Ftame)的单位传输的帧由好几部分组成,不同的部分执行不同的功能。(例如,以太网的前12个字节存放的是源和目的的地址,这些位告诉网络:数据的来源和去处。以太网帧的其他部分存放实际的用户数据、TCP/IP的报文头或IPX报文头等等)。帧通过特定的称为网络驱动程序的软件进行成型,然后通过网卡发送到网线上。通过网线到达它们的目的机器,在目的机器的一端执行相反的过程。接收端机器的以太网卡捕获到这些帧,并告诉操作系统帧的到达,然后对其进行存储。就是在这个传输和接收的过程中,嗅探器会造成安全方面的问题。每一个在LAN上的工作站都有其硬件地址。这些地址唯一地表示着网络上的机器(这一点于Internet地址系统比较相似)。当用户发送一个报文时,这些报文就会发送到LAN上所有可用的机器。在一般情况下,网络上所有的机器都可以“听”到通过的流量,但对不属于自己的报文则不予响应(换句话说,工作站A不会捕获属于工作站B的数据,而是简单的忽略这些数据)。如果某在工作站的网络接口处于杂收模式,那么它就可以捕获网络上所有的报文和帧。Sniffer就是这样的硬件或软件,能够“听”到(而不是忽略)在网上传输的所有的信息。在这种意义上,每一个机器,每一个路由器都是一个Sniffer(或者至少可以说它们可以成为一个Sniffer)。这些信息就被储存在介质上,以备日后检查时用。Sniffer可以是(而且通常是)软件和硬件的联合体,软件可以是普通的网络分析器带有比较强的debug功能,或者就是一个真正的Sniffer。Sniffer必须是位于准备进行Sniffer工作的网络上的,它可以放在网络段中的任何地方。Sniffer成为一种很大的危险,因为:■它们可以捕获口令;■它们可以截获机密的或专有的信息;■它们可以被用来攻击相邻的网络或者用来获取更高级别的访问权限。二.用Sniffer获取信息下面是利用Windows平台上的sniffer工具EtherPeek进行的信报监听结果。让我们分析一下这些数据(为避免不必要的麻烦,其中数据经修改完成)。1.匿名Ftp信报分析Flags:0x00Status:0x00PacketLength:74Timestamp:19:11:21.74300001/18/2000RawPacketData(原始信报数据).h.RT*.洲..E.0090abc068005254ab15d6de08004500[0-15].8..@..)Ri(1..00381009400020062952a2692831cac8[16-31]*..*...f锚..*?P.8c0204b300150066c3aa0004f03f5018[32-47].+T..USERanony220a2b5400005553455220616e6f6e79[48-63]mous......6d6f75730d0a00000000也许这还不够清清楚楚明明白白,下面是该程序作的解码:Flags:0x00Status:0x00PacketLength:74Timestamp:19:11:21.74300001/18/2000EthernetHeaderDestination:00:90:ab:c0:68:00[0-5]Source:52:54:ab:15:d6:de[6-11]ProtocolType:08-00IP[12-13]IPHeader-InternetProtocolDatagramVersion:4[14Mask0xf0]HeaderLength:5[14Mask0xf]Precedence:0[15Mask0xe0]TypeofService:%000[15Mask0x1c]Unused:%00[15Mask0x3]TotalLength:56[16-17]Identifier:4105[18-19]FragmentationFlags:%010DoNotFragment[20Mask0xe0]FragmentOffset:0[20-22Mask0x1fffff]TimeToLive:32IPType:0x06TCP[23]HeaderChecksum:0x2952[24-25]SourceIPAddress:162.105.40.49[26-29]Dest.IPAddress:202.200.140.2[30-33]NoInternetDatagramOptionsTCP-TransportControlProtocolSourcePort:1203[34-35]DestinationPort:21FTPControl-FileTransferProtocol[36-37]SequenceNumber:6734762[38-41]AckNumber:323647[42-45]Offset:5[46Mask0xf0]Reserved:%000000[46Mask0xfc0]Code:%011000[47Mask0x3f]AckisvalidPushRequestWindow:8714[48-49]Checksum:0x2b54[50-51]UrgentPointer:0[52-53]NoTCPOptionsFTPControl-FileTransferProtocolFTPCommand:0x55534552(USER)UserName[54-57]UserName:20[58]Extrabytes(Padding):anonymous..616e6f6e796d6f75730d0a[59-69]FrameCheckSequence:0x00000000哦,这是在传输用户名。用户名Name为anonymous。下面还有源地址、目的地址相同的信报。Flags:0x00Status:0x00PacketLength:71Timestamp:19:11:32.14900001/18/2000RawPacketData.h.RT*.洲..E.0090abc068005254ab15d6de08004500[0-15].5..@..'Ui(1..00351209400020062755a2692831cac8[16-31]*..*...f煤..*.P.8c0204b300150066c3ba0004f0875018[32-47]!|...passguest21c27c00000070617373206775657374[48-63]@......400d0a00000000这是作什么呢?Flags:0x00Status:0x00PacketLength:71Timestamp:19:11:32.14900001/18/2000EthernetHeaderDestination:00:90:ab:c0:68:00[0-5]Source:52:54:ab:15:d6:de[6-11]ProtocolType:08-00IP[12-13]IPHeader-InternetProtocolDatagramVersion:4[14Mask0xf0]HeaderLength:5[14Mask0xf]Precedence:0[15Mask0xe0]TypeofService:%000[15Mask0x1c]Unused:%00[15Mask0x3]TotalLength:53[16-17]Identifier:4617[18-19]FragmentationFlags:%010DoNotFragment[20Mask0xe0]FragmentOffset:0[20-22Mask0x1fffff]TimeToLive:32IPType:0x06TCP[23]HeaderChecksum:0x2755[24-25]SourceIPAddress:162.105.40.49[26-29]Dest.IPAddress:202.200.140.2[30-33]NoInternetDatagramOptionsTCP-TransportControlProtocolSourcePort:1203[34-35]DestinationPort:21FTPControl-FileTransferProtocol[36-37]SequenceNumber:6734778[38-41]AckNumber:323719[42-45]Offset:5[46Mask0xf0]Reserved:%000000[46Mask0xfc0]Code:%011000[47Mask0x3f]AckisvalidPushRequestWindow:8642[48-49]Checksum:0x7c00[50-51]UrgentPointer:0[52-53]NoTCPOptionsFTPControl-FileTransferProtocolFTPCommand:0x70617373(pass)Password[54-57]Password:20[58]Extrabytes(Padding):guest@..6775657374400d0a[59-66]FrameCheckSequence:0x00000000哦,这里传输的就是密码啊!试想,如果这里不是匿名登录,而是telnet、rlogin或pop3等的用户名与密码,那么……2.Http信报分析下面是捕获的一个HTTP信报。Flags:0x00Status:0x00PacketLength:844Timestamp:19:28:09.40000001/18/2000RawPack