随着网络的普及,我们的生活越来越方便,但是网络安全也成了很多人面临的一个问题。特别是那些有着商业数据的企业电脑,更要注意上网安全常识,不然病毒会对我们造成严重的威胁。 编者按:Sniffer是网络故障的有效检测工具, 但同时也是企业网络的极大威胁, 必要的时候也要抓出Sniffer内鬼。 网卡混杂模式:为Sniffer窃取信息开后门 寻找Sniffer窃取者的致命弱点 ARP检测包找出混杂模式节点软件过滤破获Sniffer窃取者 结论:不同系统采用不同的措施 在局域网中, Sniffer是一个很大的威胁。 恶意用户可以籍此看到一些机密文件和及一些个人的隐私。 Sniffer对安全有如此的威胁, 但它可以方便的在因特网上下免费下栽并安装在PC上。 但是, 目前为止, 还没有很好的方法来检测谁的PC安装了Sniffer软件。 这篇文档将讨论利用ARP包来检测那些在公司和学校局域网内Sniffing的恶意用户。 网卡混杂模式:为Sniffer窃取信息开后门 局域网通常是以太网组成的。 在以太网上用的是IPV4协议, 数据是明文传输的, 除非用了加密软件。 当用户发信息到网络上时, 他只希望网络另一端的用户能接收到。 不幸的是, 以太网的机制给未被授权的用户提供了窃听信息的机会。 我们知道, 在以太网中, 信息会发送到网络中所有的节点, 有些节点会接收这些信息, 同时有些节点会简单的丢弃这些信息。 接收或丢弃信息由网卡来控制。 网卡不会接收所有发到局域网的数据包, 即使它连在以太网上;相反它会过滤掉一些特定的数据包。 在这篇文档里, 我们将称这种过滤为网卡的硬件过滤。 Sniffer会被网卡设置成特定的模式, 这样网卡就可以接收所有到达的数据包了, 而不管它是不是这些包指定的目的地址。 这种网卡的模式称为混杂模式。 Sniffer接收所有的数据包, 而不是发送一些非法包。 所以它不会干扰网络的正常运行, 因此很难检测到这种恶意行为。 虽然如此, 网卡的混杂模式显然是不同于正常模式的。 一个本来应该被过滤的包在这种模式下会被允许到达系统内核。 是不是做出响应取决于系统内核。 寻找Sniffer窃取者的致命弱点 我们把检测混杂模式的方法用一个现实世界的例子来模拟。 假设会议室里正在开会。 一个窃听者用他的一只耳朵靠着会议室的墙壁。 当他正在窃听的时候, 他会屏住呼吸, 静静的听着会议室的所有对话。 但是如果有人在会议里喊他的名字, “MR. **?”窃听者有时候会应声“YES!”这种类比看起来有些荒谬, 但确实是应用在检测网络的SNIFFING上了。 因为SINFFER接收所有的数据包, 包括那些本来不是发给它的, 所以它可能会对那些本来应该被网卡过滤的包错误地做出响应。 所以, 我们对混杂模式的检测建立在以下的基础上:向网络上所有的节点发送ARP请求包, 检查是不是有ARP响应包。 为了解释这个原理, 首先, 我们从网卡的混杂模式和普通模式的区别开始。 所有以太网卡都有6字节的硬件地址。 厂商分配这些地址, 而且每个地址都是唯一的。 从理论上说, 不存在两块硬件地址一样的网卡。 以太网上信息的交流是建立在硬件地址的基础上的。 但是网卡为了接收不同类型的数据包, 可以建立不同的过滤机制。 现对网卡的各种过滤机制说明如下: 单播(UNICAST) 接收所有目标地址和网卡的硬件地址一样的包。 广播(Broadcast) 接收所有的广播包。 广播包的目的地址是FFFFFFFFFFFF。 这种模式是为了能收到那些希望能到达网络所有节点的包。 组播(Multicast) 接收所有预先注册好的特定组的包。 只有那些预先注册的组才会被网卡接收。 所有的组播(All Multicast) 接收所有的组播。 这种模式和上层的协议有关联, 这种模式会接收所有组播位设为1的包。 混杂(Promiscuous) 接收所有的数据包而不管它的目的地址是什么。 上图示意了在正常模式和混杂模式下硬件过滤的操作方式。 通常情况下, 网卡的硬件过滤会设置成单播, 广播和组播1模式。 网卡只接收目的地址和它的硬件地址一样, 广播地址(FF:FF:FF:FF:FF:FF)和组播地址1(01:00:5E:00:00:01)。 ARP检测包找出混杂模式节点 正如前面所陈述的, 网卡设置成普通模式和混杂模式对包的过滤是不同的。 当网卡被设成混杂模式后, 本来被过滤的包会允许到达系统内核。 利用这种机制, 我们建立一种新的机制来检测混杂模式节点:如果构造一个目的地址不是广播地址的ARP包, 把它发送到网络的每个节点, 如果发现有些节点有响应, 那么这些节点工作在混杂模式。 我们简单地看一下正常的ARP请求和响应的操作方式。 首先, 为解析192.168.1.10产生一个ARP请求包。 它的目的地址为广播地址, 使网络上所有的节点能够收到。 理论上, 只有IP地址符合的节点才会响应。 但是, 如果把ARP包的目的地址设成非广播地址呢?比如, 如果把目标地址设成00-00-00-00-00-01?当网卡处于正常模式, 这个包将被认为“TO OTHERHOST”包, 因此将被网卡的硬件过滤拒绝。 但是, 如果网卡处于混杂模式, 那么网卡不会执行过滤操作。 所以包将被允许到达系统内核。 系统内核会认为ARP请求包到达了, 因为它包含了与PC相同的IP地址, 这样, 它应该会对请求包作出响应。 但让人奇怪的是, 内核事实上没有对包做出响应(如下图)。 这令人意的结果说明系统内核存在着其它的过滤机制, 因为事实上包被系统内核过滤了。 我们把这种过滤称之为软件过滤。 进一步说, 对混杂模式的检测可以从对比硬件过滤和软件过滤的区别来达到。 硬件过滤通常会屏蔽一些非法的包。 如果一个包能够通过硬件过滤, 它通常也能通过软件过滤。 我们设想构建被硬件过滤拒绝而同时能够通过软件过滤的包。 通过发送这样的包, 正常模式的网卡不会作出响应, 而混杂模式的网卡会作出响应。 软件过滤破获Sniffer窃取者 软件过滤建立在操作系统内核的基础上, 所以要了解软件过滤必须明白操作系统内核是如何工作的。 LINUX开放源代码, 因此可以获取它的软件过滤机制。 但是微软的WINDOWS源代码是非公开的, 其软件过滤机制只能从实验上去猜测推理。 1)LINUX 在LINUX的以太网模块, 根据地址的不同包可以分为以下几类: BROADCAST PACKETS: FF:FF:FF:FF:FF:FF MULTICAST PACKETS: 除了广播包外, 组标识位置1的包。 TO_US PACKETS: 所有目的地址和网卡硬件地址一样的包。 OTHERHOST PACKETS: 所有目的地址和网卡硬件地址不一样的包。 在这里, 我们假设组标识位置1的包就是MULTICAST PACKETS。 以太网MULTICAST PACKET对应IP网络的地址是01-00-5E-**-**-**, 所以MULTICAST PACKETS应该不能只用组标识位来区别。 但, 实际上这个假设是正确的, 因为01-00-5E-**-**-**是IP网络基础上的, 而网卡的硬件地址可以用在其它的上层协议。 其次, 我们看一下LINUX的ARP模块。 ARP模块会拒绝所有的OTHERHOST PACKETS。 同时, 它会对BROADCAST, MULTICAST, 和TO_US PACKETS作出响应。 下表示意了硬件过滤和软件过滤的响应。 我们给出了六种不同类型地址的包发到网卡后, 硬件过滤和软件过滤是如何操作的。
|
GR BIT |
NORMAL MODE |
PROMISCUOUS MODE |
HW FILTER |
SW FILTER |
RES |
HW FILTER |
SW FILTER |
RES |
TO_US |
OFF |
PASS |
PASS |
Y |
PASS |
PASS |
Y |
OTHERHOST |
REJECT |
- |
N |
PASS |
REJECT |
N |
BROADCAST |
ON |
PASS |
PASS |
Y |
PASS |
PASS |
Y |
MULTICAST (IN THE LIST) |
PASS |
PASS |
Y |
PASS |
PASS |
Y |
MULTICAST (NOT IN THE LIST) |
REJECT |
- |
N |
PASS |
PASS |
Y |
GROUP |
REJECT |
- |
N |
PASS |
PASS |
Y |
TO_US PACKETS: 当网卡处正常模式, 所有TO_US PACKETS能通过硬件过滤, 也能通过软件过滤, 所以ARP模块将对这种包做出响应而不管网卡是否处于混杂模式。 OTHERHOST PACKETS: 当网卡处于正常模式, 将拒绝OTHERHOST PACKETS。 即使当网卡处于混杂模式, 软件过滤也将拒绝这种类型的包。 所以对ARP REQUESTS将不会做出响应。 BROADCAST PACKET: 在正常模式, BROADCAST PACKETS将通过硬件过滤和软件过滤。 所以无论网卡处于什么模式都会有响应包。 MULTICAST PACKETS: 在正常模式, 未在预先注册过的组列表中的地址的包将被拒绝。 但是, 如果网卡处在混杂模式, 这种类型的包将会通过硬件过滤, 而且, 因为软件过滤也不会拒绝这种类型的包, 所以将会产生一个响应。 在这种情况下, 网卡处于不同的模式会有不同的结果产生。 GROUP BIT PACKETS: 不是BROADCAST或MULTICAST包, 但其组标识位置1。 在正常模式下, 会拒绝这种包, 而在混杂模式下, 这种包将会通过。 而且因为这种包会被软件过滤认为是组播包, 所以这种包能通过软件过滤。 组标识位置1的包能够用来检测混杂模式。 2)WINDOWS WINDOWS非源代码开放的操作系统, 我们不能通过查看它的源码来分析它的软件过滤。 相反, 我们只能通过实验的方式来测试它的软件过滤。 以下7种地址会被WINDOWS利用: FF-FF-FF-FF-FF-FF BROADCAST ADDRESS: 所有接点将会收到这种类型的包, 并作出响应。 正常的ARP请求包用的就是这种地址。 FF-FF-FF-FF-FF-FE FAKE BROADCAST ADDRESS: 这是最后一位置0假冒的广播地址。 用来检测软件过滤是否会检查所有的地址位, 进而是否会对这种包作出响应。 FF-FF-00-00-00-00 FAKE BROADCAST 16 BITS: 这是只有前16位置1的假冒的广播地址。 它可能会被认为是广播地址, 而且在过滤机制只检查前16位的情况下会得到响应。 FF-00-00-00-00-00 FAKE BROADCAST 16 BITS: 这是只有前8位置1的假冒的广播地址。 它可能会被认为是广播地址, 而且在过滤机制只检查前8位的情况下会得到响应。 01-00-00-00-00-00 GROUP BIT ADDRESS: 组标识位置1的地址, 用来检查是否会被认为是组播地址。 01-00-5E-00-00-00 MULTICAST ADDRESS 0 MULTICAST ADDRESS 0通常是未被使用的。 所以我们把这种类型的地址当作未在注册过的组列表中的地址。 硬件过滤会拒绝这种种包。 但是, 软件过滤会把这种包误认为是组播包, 因为它不检查所有的位。 所以, 当网卡处在混杂模式时, 系统内核会对这种包做出响应。 01-00-5E-00-00-01 MULTICAST ADDRESS 1 MULTICAST ADDRESS 1代表了局域网某一子网的所有HOSTS。 换名话说, 硬件过滤在默认情况下将通过这种类型的包。 但是存在这样的可能:如果网卡不支持组播模式, 那么它将不会对这种包作出响应。 所以这种包可以用来检测主机是否支持组播地址。 结论:不同系统采用不同的措施
HW ADDR |
WINDOWS 9x/ME |
WINDOWS 2K/NT4 |
LINUX2.2/2.4 |
NORMAL |
PROMIS |
NORMAL |
PROMIS |
NORMAL |
PROMIS |
FF:FF:FF:FF:FF:FF |
RES |
RES |
RES |
RES |
RES |
RES |
FF:FF:FF:FF:FF:FE |
- |
RES |
- |
RES |
- |
RES |
FF:FF:00:00:00:00 |
- |
RES |
- |
RES |
- |
RES |
FF:00:00:00:00:00 |
- |
RES |
- |
- |
- |
RES |
01:00:00:00:00:00 |
- |
- |
- |
- |
- |
RES |
01:00:5E:00:00:00 |
- |
- |
- |
- |
- |
RES |
01:00:5E:00:00:01 |
RES |
RES |
RES |
RES |
RES |
RES |
对7种地址的实验结果列在下面的表上。 这些实验结果分别是在WINDOWS 95, 98, ME, 2000和LINUX下得出的。 正如我们前面所述的, 网卡处于正常模式时, 所有的系统内核都会对BROADCAST ADDRESS和MULTICAST ADDRESS 1做出响应。 但是, 当网卡处于混杂模式时, 根据操作系统的不同, 结果也会不同。 WINDOWS 95, 98和ME将会对FAKE BROADCAST 31, 16, 和8BITS做出响应。 所以, 我们可以认为WINDOWS 9x的软件过滤至多只检查前8位来判别是否是广播地址。 在WINDOWS 2000下, 它会对FAKE BROADCAST 31和16BITS作出响应。 所以我们可以认为WINDOWS 2000的软件过滤至多只检查前16位来判别是否是广播地址。 在LINUX下, 会对这七种地址的包都做出响应。 换句话说, 当网卡处于混杂模式时, LINUX会对这七种包做出响应。 以下的结果说明我们可以根据ARP包来判别是否有处于混杂模式的节点, 而不管操作系统是WINDOWS或LINUX。 从而, 可以通过这样一种简单的方法用来在局域网中的检测。 以下是检测过程: 1) 我们试图对装载IP协议的机器进行是否处在混杂模式的检测。 我们构建这样一个ARP包:
Ethernet address of destination |
FF:FF:FF:FF:FF:FE |
Ethernet address of sender |
<Own NIC’s Device address> |
Protocol type (ARP=0806) |
0806 |
Hardware address space (Ethernet=01) |
0001 |
Protocol address space (IPv4=0800) |
0800 |
Byte length of Hardware address |
06 |
Byte length of protocol address |
04 |
Opcode (ARP request=01,ARP reply=02) |
0001 |
Hardware address of sender of this packet |
<Own NIC’s Device address> |
Protocol address of sender of this packet |
<Own NIC’s IP address> |
Hardware address of target of this packet |
00:00:00:00:00:00 |
Protocol address of target of this packet |
<IP Address>(address want to be checked) |
2) 在我们构建完这种包后, 我们把它发送到局域网上 3) 在正常情况下, 这个包将会被硬件过滤拒绝。 但是, 如果这台机器处在混杂模式, 它将会对这个包做出响应。 如果我们接收到响应, 那么这台机器处在混杂模式。 为了检测混杂模式, 我们可利用在7提到的技术对局域网上所有的机器按序进行。 如果有些机器不能收到ARP包, 那么将不能利用这种方法。
上面是电脑上网安全的一些基础常识,学习了安全知识,几乎可以让你免费电脑中毒的烦扰。
|
关键词: Sniffer窃企业机密 ARP检测抓内鬼