一.数据包嗅探基础(http://cs.baylor.edu/~donahoo/tools/sniffer/packetsniffers.htm)
1.什么是数据包嗅探?
一个数据包嗅探程序是一个能够通过指定的网络接口,指定的计算机,指定的网络上记录所有在网络之间传播的数据包的程序.它能够用来检查校正网络问题,也可以用来提取敏感信息如未加密登录会话的凭证(Credentials)等.
2.嗅探程序(sniffer)
一个嗅探程序是一个能够监控和分析网络信息流,检测网络瓶颈和问题的程序.使用这些相关的信息,一个网管人员能够(让网络)保持有效率的信息流通.
一个嗅探程序同时也能够用于非法抓取在网络上传送的数据.一个网络路由读取每个经过它的数据包,判断(数据包)是否打算发送给路由的内网(router's own network)还是需要发往Internet.这样一个带嗅探功能的路由器也许能够像发送方和接收方一样读取数据包里的数据.
单词"sniffer"有时候是指用以分析数据的程序而不是分析网络信息流.例如,一个数据库能够被此类程序进行分析(a database could be analyzed for certain kinds of duplication).
3.什么是嗅探器和它的工作原理
不像电话电路,计算机网络是共享通信信道的.这完全是由于为每一对通信的计算机在转换器(或集线器)建立本地回路(local loops)代价太高.共享意味着计算机能够接收发送给其他机器的信息.抓取通过网络的信息就称为嗅探.
连接计算机最流行的方式是通过以太网(Ethernet).以太网协议以发送数据包信息给相同线路上全部主机的方式工作.数据包头部包含有正确目标机器地址.设想只有匹配地址的机器才接受数据包.如果一个机器不管数据包头部设置的地址如何接收所有的数据包,则这个机器处于混杂模式(promiscuous mode).
4.嗅探器
在一个普通的网络环境中,由于帐户和密码信息以明文形式在以太网上传输,因此一个入侵者当他获得root权限之后能很容易使计算机进入混杂模式并通过嗅探危及相同网络上的其他计算机.
一个程序或者一个设备能够监控流通于一个网络上的数据.嗅探器能够发挥其合法的网络管理功能也可以用以偷取网络信息.未被授权的嗅探对于网络安全将会极其危险因为他们事实上不可能被检测到(译注:太过绝对化)同时能够在(网络上)任何地方被注入(嗅探点).
在TCP/IP这个嗅探数据包的网络当中,他们经常被叫做数据包嗅探器.
5.其他
数据包嗅探的流行源于他能够看到任何东西(数据包).被嗅探的典型内容包括:
SMTP,POP,IMAP通信信息--能够让入侵者读取当前的E-mail.
POP,IMAP,HTTP基础,Telnet身份验证--从线路传输的明文中读取密码.
SMB,NFS,FTP通信信息--从线路上读取文件.
SQL数据库--读取金融业务交易和信用卡号码.
二.嗅探(网络窃听,嗅探器)FAQ(http://cs.baylor.edu/~donahoo/tools/sniffer/sniffingFAQ.htm)
1.基础
1.1什么是"数据包嗅探器"?
数据包嗅探是一个插入到网络当中的窃听设备并窃听网络通信.就像电话窃听允许FBI听取其他人之间的谈话,一个"嗅探"程序能够让某人听取计算机之间的对话.
然而,计算机会话是由显然随机的二进制数据组成.因此,网络窃听程序同时也包含了一个协议分析的功能部件,能够允许他们"解码"计算机通信信息使其具有意义.
嗅探相对于电话窃听有一个有利条件就是:许多网络使用"共享介质".这意味着你不需要闯入布线室去安装你的窃听设备,你能进行它(嗅探)在几乎任何一个网络连接来偷听你的邻居.这叫做"混杂模式"嗅探器.然而,这种"共享"技术正在快速向"交换"技术发展,在交换技术当中不再可能进行混杂模式嗅探,这意味着你讲不得不真的接入到(网)线上.
1.1.1"packet sniffer"被注册了么(傻x问题不翻译了)
1.2嗅探器是用来做什么的?
嗅探程序长久以来以两种形式存在.商业数据包嗅探程序是用来帮助维护网络.地下数据包嗅探程序(Underground packet sniffers)用来入侵计算机.
此类窃听程序的典型功能包括:
1)从网络传送的明文当中自动筛选密码和用户名.黑客/骇客用以入侵系统.
2)将(传输)数据转换为人可读格式使能够读取通信信息.
3)故障分析用以发现网络中存在的问题,如为何计算机A无法与计算机B通信.
4)性能分析用以发现网络瓶颈.
5)网络侵入窃密检测用以发现黑客/骇客(参考http://www.robertgraham.com/pubs/network-intrusion-detection.html)
6)网络通信日志,创建黑客们不能更改和消除的日志
1.3Internet当中是否存在某个节点能够让我插入并查看所有通信信息?
没有.Internet的链接更像渔夫的网,通信信息流经某个网格,并且没有某个点能够看到全部信息.Internet是以经受住核弹攻击而建立的--并且在某些节点故障的时候能够保持有效.这同样也防止了在任意点的嗅探.
这样想这个问题:你有两台机器在你自己的办公室里面相互通信,并且都处在Internet当中.他们使用直线路线通信,并且这些通信信息不会经过外部公共Internet的一部分.任何通信在任何地方都遵循类似的"最小代价路径"原则.
(译注:就是指明嗅探是在一个内部网络内进行,并非随意的节点都可以被嗅探到)
1.4嗅探/窃听如何工作?
1.4.1如何在网络通信中进行偷听?
以太网是建立在"共享"原则上:全部机器在一个局域网络中共享相同的网线.
这意味着所有机器能够"看到"所有通信在相同的线路上.
因此,以太网硬件包含有一个"过滤器"忽略所有不属于它的通讯信息.它是通过忽略所有MAC地址不匹配的帧做到这点的.
一个窃听程序关闭这个过滤器,使以太网硬件进入"混杂模式".因此,Mark能够看见Alice和Bob之间的通讯信息,只要他们处于同个以太网线路上.
1.4.2一个数据包嗅探器的组件是什么?
1)硬件
大多数产品工作于标注网络适配器,虽然有些要求特定的硬件.如果你使用特殊的硬件,你能够分析硬件故障像CRC错误,电位差问题,电缆程序,抓包驱动.
2)抓包驱动
这是最重要的部分.它负责从线路上捕捉网络通信信息,过滤出你需要的通讯信息,然后储存到缓冲区当中.
3)缓冲区
一旦数据帧从网络当中被捕捉到,他们被储存在缓冲区中.有许多抓包模式:抓取直到缓冲区满,或者使用"循环"缓冲区最新的数据会替换最旧的数据.一些产品能够附加使用硬盘作为缓冲区而不是仅仅是基于内存的缓冲区.
4)实时分析
由Network General Sniffer开启先河,这个功能部件在抓取到数据帧时进行少量的分析.这能够在抓包的时候找出网络性能问题和故障.许多开发者开始增加类似的一些功能到他们的产品当中,Network intrusion detection systems这么做了,但他们主要是用于黑客行为而不是故障/性能分析.
5)解码器
如1.5讨论那样,这部分将网络通信信息用说明文本显示进而一个分析员能够找出发生了什么事.
6)数据包编辑/发送
一些产品包含允许修改你自己的网络数据包和发送他们到网络上的功能部件.
1.5与MAC地址相关的一些东西
1.5.1什么是以太网MAC地址?
尽管许多机器可能共享一个单独的以太网网线,他们各自必须有专用的标识号.这并不发生在拨号modem中.因为它假设任何数据你发送给modem是发往电话线的另一端.但是当你通过以太网网线发送数据,你不得不弄清你想要发送数据给哪部机器.当然,在现在很多情况下只有两部机器相互通信,但是你必须记住以太网是以大量计算机共享相同网线为前提设计的.
这是通过将唯一的一个由12个16进制数组成的数字写入每一片以太网硬件来完成的.1.5.4将解释如何发现你自己电脑的以太网MAC地址.
为了更好的理解这个为何如此重要,你可能需要复习一下下面1.5.4节.以太网被设计用以运载不仅仅是TCP/IP的通信信息,而TCP/IP是设计运行在其他线路上(如没有使用以太网拨号线路).例如,许多home用户安装"NetBEUI"用来共享文件和打印机因为它与TCP/IP无关,因此Internet的黑客无法获取他们的硬盘(文件).
以太网上原始数据传送和接收由以太网设备管理.你不能只是在网线上发送为加工的数据,你必须先做一些以太网明白的东西.同样的道理,你不能直接把信扔到邮箱里,你必须先封装好并写上地址和贴上邮票.
下面是一个简单的解释这是如何工作的:
Alice的IP地址是10.0.0.23
Bob的IP地址是:192.168.100.54
为了和Bob通信,Alice需要生成IP包从10.0.0.23-->192.168.100.54
当数据包在Internet当中传输的时候,它将会从一个路由传送到另一个路由.因此,Alice必须先传递这个数据包给第一个路由.每一个在传递路线上的路由会检查目标IP地址(192.168.100.54)然后决定走哪条正确的路径.
在图表中我们将Internet化成"云"的形状.Alice所知道的全部就是局部连接到第一个路由,和Bob最终的IP地址.Alice不知道关于Internet的结构和数据包将会走的路由情况.
Alice必须与路由通信才能发送数据包,她使用以太网来完成这个.一个以太网数据帧如下:
这也就意味着在Alice的机器上的TCP/IP栈可能产生一个数据包100字节长(20字节IP信息,20字节TCP信息,60字节数据).TCP/IP栈发送它给以太网模块,以太网模块在数据包前面加入14字节的目标MAC地址,源MAC地址,设置数据包ethertype域为0x0800表明另一端的TCP/IP栈应该处理此帧.同时它还加入4字节的CRC校验值在数据包末尾(用来判断是否接受到了正确的数据)
然后适配器发送比特流进入网线.
全部在相同网线上的硬件适配器能够看到这个帧,包括路由器的适配器,数据包嗅探器,和其他机器.无论怎样,正确的适配器有一个硬件芯片能够比较帧的"目标MAC"和自己的MAC地址.如果他们不匹配的话,它将会丢弃这个帧.这个是在硬件级别完成的,所以适配器所在的机器完全不会察觉到这个过程.
当路由器的以太网适配器看到这个帧,它从网线上将它接收下并移除开头的14字节和末尾的4字节.它查看0x0800ethertype域后决定将它发送给TCP/IP栈进行处理(这个处理一般是将其直接发送给在通往目标信道上的下一个路由)
在上面的情况中,只有路由器应该看到以太网帧,其他的机器全部应该忽略它.然而窃听者破坏这个规则并且也从网络上拷贝下这个帧.
参考Charles Spurgeon的以太网相关站点:http://wwwhost.ots.utexas.edu/ethernet/ethernet-home.html
1.5.2"MAC"代表什么意思?
MAC代表介质存储控制.
以太网逻辑包含有3个子层,PHY(物理层),MAC,LLC(逻辑链路控制).以太网地址被认为是MAC子层的一部分.物理层向线路负责,MAC向线路上传送的格式化数据负责,LLC向例如线路上数据包转发负责.
1.5.3MAC地址的格式怎么样?
以太网MAC地址是一个48位的数值.这个数值被分为两半,前24位用以识别网卡(Ethernet board)的生产厂商,另24位是一个序列号由生产厂商提供.这保证了没有两块以太网卡拥有相同的MAC地址(除非生产厂商搞糟).重复的MAC地址会导致问题,因此保证唯一性是非常重要的.这个24位数字被称为OUI(Organizationally Unique Identifier有组织性的唯一标识符)
然而,OUI真正只有22位长,当中的2位用于其它用途.一个位表明这个地址是一个"广播/组播"地址,另一个位表明适配器是否被重新分配为"本地管理地址"(网络管理人员重新分配MAC地址用以适应某些本地策略)
例如,你会经常在线路中看到MAC地址03:00:00:00:00:01.第一个字节包含二进制表示的00000011当中的特殊位都被设置了(其余的为0).这是一个特殊的广播数据包发送给所有运行"NetBEUI"协议的机器(这个协议普遍的安装在Windows机器上用以实现不使用TCP/IP作为传送的本地文件共享)
IEEE维护厂家/OUI代码清单:http://standards.ieee.org/regauth/oui/
1.5.4我自己的以太网地址(MAC地址)是什么?
Win9x:运行winipcfg.exe
WinNT:运行ipconfig /all,命令
Linux:运行ifconfig命令
Solaris:使用arp或者netstat -p命令
1.5.5我正在通信的机器的以太网地址是什么?
WinNT和UNIX使用命令arp -a查看
1.5.6我能够更换我的MAC地址吗?
可以.在某些时候这个也许会比较重要.
首先,你可以欺骗(别的机器关于)你的地址.记住MAC地址只是帧数据的一部分.因此,当你发送一个以太帧到线路上时,你可以在这些帧中重写你自己的内容.当然,你需要运行一个程序来完成这一步.
再者,大多数适配器允许你重新配置运行时MAC地址.例如,一些网卡允许你在Windows控制面板里重新配置这个地址.
最后,你可以重新烧录(如EEPROM)网卡地址.你需要一个程序/硬件能够知道网卡使用的具体芯片.这将永久的改变网卡使其使用这个新的地址.
1.6我是否能够在没有使用他们的通信线路的前提下嗅探到两个人的通讯?
换句话说,你是在问这种情况:
1)Alice和Bob一个在纽约一个在德州并且他们在通信
2)你在加利福尼亚,不在他们附近
3)你想要窃听他们的通信
答案当然是"不行",没有一点可能性.你必须能够使用他们进行通信的线路才能够进行窃听.跟电话窃听一样,跟任何地方窃听一样.
关于远程访问通信线路:
假如你真的是一个非常劲的骇客/黑客,能够远程访问那些通信线路.典型例子是:
1)入侵Alice或Bob的电脑并安装你能够远程控制的嗅探软件
2)入侵相关的ISP并安装嗅探软件
3)找到ISP支持嗅探的盒子(Find a box at the ISPs that supports sniffing),像RMON探测和DSS(分布式嗅探系统)
4)贿赂ISP的工作人员,入侵物理设备安装嗅探器等等.
在通信的线路附近:
在某些情况下,像cable-modem,DSL,Ethernet VLANs等等,你可以重定向两个人之间的通讯信息到你自己的机器上.这是由于你没有直接处于通讯的路径上,你可以偶尔改变这个路径使数据经过你的计算机.这似乎很像这个概念你可以稍微的改变流水的流向,但是不能改的很远.
Rootkits和远程管理木马:
另外一个可能性是入侵一个人的机器并安装嗅探程序(如何入侵超过这个文档的范围).在UNIX,嗅探程序是大多数"rootkits"的一部分.在Windows,嗅探是一些远程管理木马的一部分.
理论上,这些程序能够用来嗅探通常的通讯信息,但是他们经常被简单的配置成为黑客嗅探密码和电子邮件.