关于嗅探与 ARP欺骗的原理,网络上有很多很好的帖子和文章,但大部分都忽略了数据在网络中的转发过程。实际上用嗅探和ARP欺骗来做标题有点忽悠的成分,因为嗅探本身就包含了主动嗅探和被动嗅探,而ARP欺骗又是一个单独的技术,欺骗的目的只是让数据经过本机,即:主动嗅探=ARP欺骗+抓包。在了解嗅探和ARP欺骗原理之前,我们必须对数据包在各种(交换网络、共享网络等)网络环境中的传输过程,笔者在这边也只针对交换网络和共享网络进行探讨。

  若未加说明,文章中的三层指的是网络层,二层指的是数据链路层。

  一.数据在网络中的转发过程:

  1.数据在交换网络中的传输过程如下图(PC1发包给PC2)

  注:此图是以公网网络为基础,如果PC为内网或者加入私有网络则在出口要考虑NAT等情况

  a)PC1发现目标IP110.1.1.2(网络号110.1.1.0)与本机不在同网段(掩码为24位,所以本机网络号为1.1.1.0),因此PC1会将数据包丢给网关,为了数据报文能够到达网关,PC1封装的报文里头会以网关的MAC作为目的MAC(网络数据传输,原目的IP不变,原目的MAC通过三层网络时会不断改变)。

  b)数据报文到达二层交换机(这里只涉及二层交换,如果是三层交换机并设置了端口IP,则会有所不同)后,由于二层交换机拆解数据报文时只拆解到二层(只拆解到原目的MAC),根本看不懂IP,所以会查找MAC-接口映射表(所谓的建立虚拟链路),发现网关MAC对应的是E5口,则将数据包从E5口丢出去。

  c)路由器R1收到数据报文后查看原目的IP(路由器属于三层设备,拆解数据包到IP层),查看数据包的目的IP为110.1.1.1,进而查找路由表,发现数据要到达目的网络,数据包必须往下一跳218.1.1.2发送,因此路由器对数据包进行重封装,查看ARP表,原、目的IP保持不变,将原MAC修改成R1出接口(连接到R2的那个端口)的MAC地址,目的MAC改成R2的进接口(R2接R1的接口MAC地址),接下来和二层传输一样,将数据包丢给R2。

  d)R2收到数据包后与R1做的操作一样,直到数据报文到达目标。根据之前的步骤可以推出数据报文到达目标后,原IP、目的IP不变,原MAC为R2接PC2的接口MAC、目的MAC为PC2的MAC。PC2发现数据报文的目的IP和目的MAC与本机相符(非攻击者),从而拆解数据包,获得数据报文内容。回复报文的时候和之前的传输一样。

  二.数据在共享网络中的传输图(PC1发包给PC2)

  数据报文在共享网络中的传输和交换网络唯一的不同在于第二个步骤,交换网络中交换机会根据MAC-端口对应表进行传输,也就是说除了网关(以图为例),其他同交换机下的PC机无法收到数据报文(没出现攻击的情况下)。而在共享网络中,由于HUB属于一层设备,对于到达本身的数据报文,HUB会对报文进行广播(除了收到报文的那个接口),因此接在同HUB的所有PC都能收到该报文。注:通常情况下,网卡都是工作在非混杂模式,也就是说即使收到数据报文,网卡会判断目的MAC是否和自己的一样,不一样的话代表数据包不是给自己的,因此会丢弃,只接收那些目的MAC和自己一样的数据报文。在嗅探时必须开启混杂模式,在该模式下,网卡不对数据报文进行判断,一锅端!二.ARP欺骗:1.欺骗过程及原理从上面的数据报文传输过程可以知道二层传输是通过MAC进行传输的,在传输过程中PC需要查询ARP表。因此攻击者只要可以改变目标的ARP表就能实现攻击,从而将数据牵引到自己的机器上,如图

  a)在正常情况下,PC1通过本地ARP表知道网关1.1.1.2的MAC地址为1.1.1.10260.8c01.1111,所以PC1封装包的时候会将目的MAC设置成路由器的MAC地址。交换机通过MAC-端口对应表能够正常的将数据报文从E1口转发给路由器,实现数据传输。

  b)黑客对PC2有完全的控制权,通过不断发送(假冒的)ARP报文告诉PC1,自己才是1.1.1.1对应的MAC是0260.8c01.1113。

  c)PC1收到黑客发的ARP报文后,刷新自己的ARP表,将1.1.1.1的MAC误认为是0260.8c01.1113。

  d)PC1将要访问外网数据报文的目的MAC设置成0260.8c01.1113(PC2的MAC,目测PC1被自己的ARP表给骗了)。

  e)交换机通过拆解包发现目的MAC对应的端口为E4(PC2的那个接口,连锁反应了!),就将数据报文从E4口丢出。

  f)PC2成功得到PC1发往外网的请求报文。偷看后重新封包,原IP、目的IP不改变,将原MAC改成PC2的MAC,目的MAC改成网关的(数据包恢复正常,看起来和没攻击时PC1发出的报文完全一样),PC2修改完后将数据包丢给交换机,从而欺骗实现,当然对于该包的回应报文,由于路由器ARP表没被污染,所以能够正常的将返回报文直接丢给PC1。

  2.如何选择欺骗方向 在欺骗过程中,选择正确的欺骗方向也是很重要的,通过阅读我们可以看到上面的欺骗方向是PC1网关。那么我们如何确定正确的欺骗方向呢?

  a) 员工工作网络,我们知道正常请求报文里面含有大量的敏感信息,如网站管理后台账户密码等。而请求包的走向是员工PC网关,如果黑客控制的电脑与员工内部同一网段,那么正常情况下黑客会欺骗员工的PC机自己是网关,从而截获请求报文

  b)服务器网络,而在机房(服务器网络)中,管理员一般会在外部进行访问,即请求报文是由网关转发给服务器,也就是说请求报文的走向是网关服务器,如果黑客控制的是机房里的一台服务器,为了截获到请求报文中的服务器登录密码等敏感信息,攻击者一般会对网关发起欺骗,告诉网关自己是某台或者某些服务器。

  c) 实际上不管在员工网络或者机房内部网络,黑客比较习惯与进行双向欺骗,一方面告诉网关自己是某些终端,另一方面告诉同网段的其他终端自己是网关,但是该方法会产生大量的垃圾信息,因为在回应报文中基本上不会携带敏感的信息。

  3. ARP欺骗的瓶颈为了得到更多的敏感信息,很多人会使用双向+批量的欺骗方式,一方面告诉网关自己的MAC对应的IP是网段内所有的IP(这样无论数据报文是给哪台机子的,只要是发送给同网段机器网关都会转发给攻击者);另一方面欺骗所有同网段终端自己是网关(实际上欺骗同网段所有的终端比较容易,直接将ARP包的目的mac设置成FFFFFFFFF就行了),从而所有终端发出的报文都会经过攻击者的机器。但是如果这样子做,攻击者控制的机器直接承载了整个网段的数据流量,要对整个网段的数据进行处理,重封装、再转发,这在服务器的性能和配置上要求可不是一般的苛刻,所以选择好欺骗对象和方向显得非常重要。

  三.嗅探和ARP欺骗的区别

  a) 嗅探一般存在于共享网络中,在共享网络中一般使用HUB作为接入层,经过HUB的数据报文不管长得什么样,因为HUB工作在第一层,看不懂二层以上的报文是啥样子的,所以一律以广播处理,在同一网段的计算机只要将网卡设置成混杂模式即可。

  b) 嗅探在交换网络中不适用,因为交换机是通过MAC-端口对应表来转发数据报文的,所以在交换网络中如果只将网卡设置成混杂模式,而不进行ARP欺骗,其结果只能接受到网络中的广播包。

  c) 共享网络中适用ARP欺骗,那是多此一举,适用ARP欺骗的方式会对影响网络流量,对网络造成很大的影响,另外适用ARP欺骗会产生大量的ARP报文,很容易被发现。而嗅探对整个网络几乎没有影响,因为嗅探只是做监听,而不会产生多余的数据报文。

  四.加密是否安全

  很多人说使用HTTPS或者VPN等手段就可以防止嗅探或者ARP欺骗,这是不全面的。具体要看什么网络及什么技术。下面笔者针对HTTPS和VPN在共享、交换网络中进行探讨。

  1. 共享网络+嗅探

  a) 在共享网络使用HTTPS确实可以很好的解决数据被窃取的问题(当然个人证书泄露除外),由于监听的机器没有证书也就无法进行解密。

  b) 在共享网络中使用VPN技术不一定能够防止,部分VPN技术只是在原有的数据报文多加一个IP报头,对于数据内容本身未做加密,攻击者使用监听技术获取该类数据还是能正常获取报文的内容的

  2. 交换网络+ARP嗅探从原理上讲,该类型的攻击属于中间人攻击,可以伪造任何证书,因此对于HTTPS等来说,攻击者只要偷梁换柱,伪造证书就可以成功获得数据的明文信息。但对于部分使用秘钥不通过公网传输的协议(例如使用publikey验证的SSH,KEY不通过网络传输)就无法截取明文信息,也无法伪造。

  3. 共享网络+ARP欺骗该类型攻击和第2中攻击没啥两样,就不做详细讨论了五.如何防止ARP欺骗及嗅探。实际上网上已经有很多种解决 方案了,但在这边还是小提一下简单的防止方式。第四点也有提到了一部分。在交换网络中一般使用双向绑定就可以解决ARP欺骗的问题了,有些牛人说可以直接伪造MAC欺骗交换机,这也是一种绕过方法,但实际上这种方法可行性不高,虽然有时候确实能够截获到数据报文,但会时交换机的MAC-端口对应表产生混乱,另外报文若发给你就不会发给目标服务器,会产生拒绝服务攻击。在共享网络中使用双向绑定理论上是没效果的,因为只要经过HUB的数据都会进行广播,即使绑定,所有终端也会收到数据报文。Hub不像二层交换,有MAC-端口对应表。当然对于嗅探和ARP攻击的原理、利用和防御不止文中提到的这些,文章只是笔者的一点心得体会,仅供参考。说这么多,实际上要进行ARP攻击的话,一个cain、一个sniffer、一个ettercap就可以完全搞定了。

嗅探(被动嗅探)与ARP欺骗(主动嗅探)详解相关推荐

  1. 交换机网络嗅探方法之用ARP欺骗辅助嗅探

    来源:本站转载 作者:佚名 时间:2013-09-09TAG: 我要投稿 嗅探在集线器盛行的年代可简单实现 你什么事情都不用干,集线器自动会把别人的数据包往你机器上发.但是那个年代已经过去了,现在交换 ...

  2. ARP欺骗与嗅探入侵揭密--上篇(转)

        假如网吧频繁发生邮箱帐户.游戏帐户被盗的情况,那么网吧的声誉势必受到影响,作为网管也免不了被到老板责问一番.然而令人觉得郁闷的是,明明已经在防毒防木马方面作了很多工作,为何还会发生此类的事情呢 ...

  3. 如何用ARP欺骗来嗅探主机流量

    如何用ARP欺骗来嗅探主机流量 发现这个是第四节的,囧,改改名字~ ARP攻击,其实原理非常简单. 根据局域网内地址寻址的弱点,我们伪造一个错误地址映射的ARP包,就可以诱导被攻击者将数据包先发送给攻 ...

  4. FTP协议主动(Port)模式和被动(Passive)两种模式详解

    FTP协议主动(Port)模式和被动(Passive)两种模式详解 FTP(File Transfer Protocol)是文件传输协议的简称. 正如其名所示: FTP的主要作用,就是让用户连接上一个 ...

  5. linux下的arp刷新命令详解,linux arp 命令常用参数详解

    linux arp 命令常用参数详解 linux arp 命令常用参数详解 显示和修改地址解析协议(ARP)使用的"IP 到物理"地址转换表. ARP -s inet_addr e ...

  6. arp 项删除失败: 请求的操作需要提升。_ccna必懂篇-arp协议工作原理详解。

    本次呢,要说的是arp协议,那么什么是arp协议呢?有什么作用呢? 什么是arp ARP(Address Resolution Protocol)地址解析协议,地址解析协议由互联网工程任务组(IETF ...

  7. ARP与RARP协议详解 (三)

    (参考文献)TCP/IP详解,卷1:协议 当一台主机把以太网数据帧发送到位于同一个局域网上的另一台主机时,是根据48bit的以太网地址来确定目的接口的.设备驱动程序重来不检查IP数据报中的目的地址.A ...

  8. FTP服务器主动被动模式详解

    简单地说,支持FTP协议的服务器就是FTP服务器. 与大多数Internet服务一样,FTP也是一个C/S模式系统.用户通过一个支持FTP协议的客户机程序,连接到在远程主机上的FTP服务器程序.用户通 ...

  9. #获得请求来源ip_以太网数据包TCP、IP、ICMP、UDP、ARP协议头结构详解

    以太网首部 目地MAC地址(8字节) 源MAC地址(8字节) 类型(2字节) 1.IP头的结构 版本(4位) 头长度(4位) 服务类型(8位) 封包总长度(16位) 封包标识(16位) 标志(3位) ...

最新文章

  1. 基于MAP-MRF的视差估计
  2. linux 安装mysql
  3. 理解交通行业规律 用持续做“重”来重新定义共享出行
  4. Oracle 拼音码函数
  5. python实现蒙特卡洛算法_用Python实现基于蒙特卡洛算法小实验
  6. 排序规则在拼音处理中的应用.sql
  7. 520礼包 | 情感分析算法从原理到PaddlePaddle实战全解
  8. 随机变量统计独立性的相关证明
  9. python json操作_Python读取JSON数据操作实例解析
  10. N1烧USB供电跳线修复方法
  11. delphi 之 override overload
  12. jsp免费虚拟空间 jhost邀请码
  13. 联想G40-70旧物改造小总结——替换固态硬盘电池光驱啥的
  14. Google Hacking使用详解
  15. 魔方复原(BFS+剪枝)
  16. visio调出对齐与粘附快捷键
  17. Harris响应的一点认识
  18. 东田纳西州立大学计算机排名,东田纳西州立大学的计算机专业如何?
  19. 一款值得使用的会议室预约软件【叮当会议小程序】
  20. 为云而生、多快好省,这就是星星海的style!

热门文章

  1. SpringBoot高级-消息-JMSAMQP简介
  2. Oracle之数据库设计概述
  3. OAuth2(二)——实现
  4. IDEA同时使用maven和gradle
  5. Java 函数式编程入门
  6. ngnix的upstream模块配置详解
  7. 你知道我们平时在CSS中写的%都是相对于谁吗?
  8. 2017年12月英语四级翻译预测
  9. 关于0基础磁盘管理(gpt UEFI...)最好的一篇文章(来自gentoo linux)
  10. 如何成为有思想、创新的程序员