本文转载于 SegmentFault 社区

作者:吴小风


前言

在看这篇文章之前,请大家先看下交换机的工作原理,不知大家有没有想过数据链路层中头部协议数据帧的目的MAC地址是如何获取的呢?这就是今天的主角ARP协议,通过广播来获取IP地址对应的MAC地址。

问:广播有很多种,交换机可以广播,ARP协议可以广播,IP地址可以广播等等,有啥区别吗?

答:交换机广播和ARP协议广播比较容易混淆,因为都是交换机上发生的事情,下面我们来看下这部分,IP地址广播请看路由部分博客


交换机广播

上图会在下面阐述ARP原理和攻击的时候同样用到 ,结合上图我们来看下交换机广播的场合:

现做出如下假设:三个小圆圈表示局域网内的三台网络设备,IP地址分别为10.0.0.1、10.0.0.2、10.0.0.3;MAC地址分别为AA、BB、CC(简写,实际MAC长度为6个字节)。长方形表示AA设备向CC设备通信时准备发送的数据帧。

设备AA将数据发送到交换机1;

交换机解析数据帧,获取目标MAC,查询MAC地址表,但是MAC地址表中没有查到设备CC的MAC地址和交换机接口的关系,这个时候交换机为了知道谁的MAC是CC,则需要广播,即交换机向每个端口都发送一份数据帧;

MAC地址不是CC的设备会忽略收到的数据帧,而MAC为CC的设备会接受数据帧,进行下一步处理。

总结:交换机只在MAC地址表没有目标MAC的时候才会广播。

问:一开始长方形中的CC设备的MAC地址是怎么知道的呢?

答:这就是接下来要讲的ARP协议的工作


ARP协议

还是以上图交换机的原理图为例,来分析下ARP协议的原理,现在做出假设长方形中的CC设备MAC地址AA设备一开始不知道,来分析下获取CC设备MAC地址的流程:

  1. 数据帧中一开始因为不知道CC设备的MAC地址,这个时候需要将目标MAC地址填充为FF-FF-FF-FF-FF-FF

  2. 假设工作在局域网,交换机解析数据帧,获取到目标MAC地址为FF-FF-FF-FF-FF-FF,交换机会自动广播,将数据帧发送给局域网内的每台设备

  3. 局域网内的所有设备解析数据帧,获取到MAC地址为FF-FF-FF-FF-FF-FF,即便不是自己的MAC地址所有设备也会解析数据帧。目标IP是自己的设备,则会封装数据帧返回给发送者,并告知发送方自己的MAC地址;如果目标IP不是自己,则相应的设备会丢弃数据帧

  4. 收到CC设备的MAC后,AA设备会缓存到ARP缓存表。原因是为了避免下次发送数据给CC设备的时候,还要再次使用ARP协议去获取MAC地址

总结ARP协议原理:

  1. 发送ARP广播请求,请求内容为我是xxx,我的MAC是xxx,IP是xxx的MAC是多少?

  2. 接受ARP单播应答

问:ARP缓存表怎么看?

答:arp /help可以查看ARP相关的信息,arp /a可以查看本台计算机的arp表数据

如下图所示:


ARP攻击

还是以上图交换机的原理图为例,来分析下ARP协议的攻击,现在假设长方形中的CC设备的MAC地址AA设备一开始不知道,并假设BB为攻击设备:

  1. 数据帧中因为不知道CC设备的MAC地址,这个时候需要将目标MAC地址填充为FF-FF-FF-FF-FF-FF

  2. 假设工作在局域网,交换机解析数据帧,获取到目标MAC地址为FF-FF-FF-FF-FF-FF,交换机会自动广播,将数据发送给局域网内的每台设备

  3. 局域网内的所有设备解析数据帧,获取到MAC地址为FF-FF-FF-FF-FF-FF,即便不是自己的MAC地址所有设备也会解析数据帧。目标IP是自己的设备,则会封装数据帧返回给发送者,并告知发送方自己的MAC地址;如果目标IP不是自己,则相应的设备会丢弃数据帧。但是这个时候BB为攻击设备,即便数据帧中目标IP不是自己,它会伪造自己的MAC地址,然后冒充CC设备做出ARP响应

  4. AA设备这时候会收到2个ARP响应信息,如果CC设备的ARP响应先到AA设备,BB设备后伪造的ARP响应会覆盖CC设备的ARP响应。那么此时AA设备将无法与CC设备通信,因为AA设备的ARP表中与CC设备IP对应关系的MAC是BB设备的MAC,IP与MAC不匹配是无法通信的。

问:如果上述流程中BB设备的ARP响应的信息先到AA设备,那么AA就可以与CC设备通信了吗?

答:BB设备可以连续构造ARP响应,只要AA设备再次发送ARP数据帧,BB设备也是可以攻击AA设备通信的

问:AA虽然无法与CC设备通信,但CC设备可以与AA正常通信吗?

答:可以的,因为CC设备没有遭到攻击,CC设备ARP表里存储的IP和MAC地址的关系是正确的

问:ARP攻击是必须通过单播响应才能出发吗?

答:广播也可以触发ARP攻击,而且范围更广。如果BB设备一直发送ARP广播,冒充自己是网关(即构造自己是网关的ARP响应),那么局域网内的所有设备(除了攻击者)的ARP表里网关的IP地址和MAC地址关系都将不正确,造成的影响是断网。


ARP欺骗

这次以ARP攻击的例子为前提,来分析下ARP协议的欺骗,我们对上述流程中第三步做如下改变:

  1. 局域网内的所有设备解析数据帧,获取到MAC地址为FF-FF-FF-FF-FF-FF,即便不是自己的MAC地址所有设备也会解析数据帧。目标IP是自己的设备,则会封装数据帧返回给发送者,并告知发送方自己的MAC地址;如果目标IP不是自己,则相应的设备会丢弃数据帧。但是这个时候BB为攻击设备,即便数据帧中目标IP不是自己,BB却还是用自己网卡真实的MAC地址,做出ARP响应。

  2. 然后BB在与CC正常通信,这个时候BB起到中间转发的作用,但是AA能与CC正常通信。BB设备可以实现监听、窃取、篡改、控制流量等目的,但不中断AA设备和CC设备通信。

问:啥时候是ARP攻击,啥时候是ARP欺骗?

答:攻击者提供虚假报文的MAC就是ARP攻击,攻击者提供自己真实的MAC就是ARP欺骗


ARP防御

  1. 静态ARP绑定

    ARP表的静态数据优先级高于动态数据,因此我们直接在ARP表内绑定IP和MAC的关系不会被动态ARP响应覆盖。还是以上图交换机的原理图为例,比如AA设备手动绑定网关的IP地址和MAC地址,那么AA设备即便遭到ARP攻击,也不会出现断网的情况。虽然会收到冒充自己是网关的ARP攻击响应,但是会置之不理。同样AA设备和CC设备互相通信,双方互相绑定了AA和CC设备的IP和MAC地址,这时候BB设备即使想进行ARP欺骗,也无法实现。

    问:静态ARP绑定怎么感觉有点不方便呢?

    答:为了防止遭到ARP攻击,需要收集所有要进行通信的设备IP和MAC,然后添加到自己的ARP表里面,更要命的是ARP表是存放在内存中,机器重启后需要重新输入所有设备的IP和MAC地址关系,相当麻烦。

  2. 硬件级ARP防御

    上述静态ARP绑定的方式工作量太大,要想从根本上解决ARP攻击,还需要从交换机上下手。交换机原本工作在二层,只能识别数据帧,但是为了解决dhcp攻击和ARP攻击等,企业级交换机增加了解析其它上层协议的功能【当然相应的价格就贵了】。解决ARP攻击的方案是在交换机上绑定每个端口的IP(配合DHCP服务器)和MAC地址的关系。

  • 第一次BB设备与交换机通信,交换机记录下BB设备的端口IP和MAC地址关系;

  • 当BB设备攻击,冒充自己是CC的时候,假如想进行攻击,就需要伪造自己的MAC,那么交换机检测到MAC与原来的记录不一样就会进行拦截。假如想进行欺骗,势必需要冒充CC的IP才行,这时候交换机检测到IP与原来记录的IP不一样同样会把攻击拦截了。


- END -

局域网arp攻击_网络安全基础之ARP攻击和防御相关推荐

  1. java arp 攻击_网络安全基础之ARP攻击和防御

    前言 在看这篇文章之前,请大家先看下交换机的工作原理,不知大家有没有想过数据链路层中头部协议数据帧的目的MAC地址是如何获取的呢?这就是今天的主角ARP协议,通过广播来获取IP地址对应的MAC地址. ...

  2. 局域网arp攻击_网络安全工程师教Kali Linux:ARP欺骗概述

    课前声明: 本分享仅做学习交流,请自觉遵守法律法规! 搜索:Kali与编程,学习更多网络攻防干货! 本节课中你将了解到: ARP欺骗的用处 什么是ARP 演示如何通信 ARP欺骗原理 一.ARP欺骗的 ...

  3. 哈希扩展长度攻击_哈希长度扩展攻击

    哈希扩展长度攻击 在这篇文章中,我将尽力避免夏季的低迷,而将重点放在比抱怨天气更有趣的事情上-哈希长度扩展攻击. 散列长度扩展攻击并不复杂也不复杂,说实话,这只是关于如何使用散列函数. 正如我以前的一 ...

  4. python ddos攻击_使用Torshammer执行DDoS攻击

    用的方法很少,声称DDoS或任何类型的网络丢失都是成功的.让我们看一下执行DDoS攻击的方法之一.这种攻击非常强大,并且需要您应该知道如何在Kali Linux操作系统上操作命令的唯一技能. 首先,如 ...

  5. arp miss攻击_详述网络中ARP安全的综合功能

    针对以上攻击,ARP安全提供如下措施保证网络设备的安全性: 针对第一种攻击,可配置ARP防网关冲突,防止攻击者冒充网关窃听用户主机信息. 针对第二种攻击,可配置ARP Miss消息限速,减小CPU的负 ...

  6. xss跨站脚本攻击_网络安全xss跨站脚本攻击原理

    以下在未经授权的网站操作均为违法行为 XSS跨站脚本攻击 xss的危害 网络钓鱼,盗取各类账号密码 我们先来看一下下面的案例:先来记住一下下面中的表 我们来做一个转发 上面页面显示已经登录,但是突然页 ...

  7. python dos攻击_利用SMB漏洞DoS攻击任何Windows系统

    原标题:利用SMB漏洞DoS攻击任何Windows系统 近日微软报出SMB V1存在漏洞,安全研究员并将此漏洞称作 " SMBLoris ",解释其能够发动拒绝服务(Dos)攻击, ...

  8. cdn转发防攻击_一个既可以加速又可以防御的CDN产品

    随着大流量平台的流行,CDN不再是少数网站的专享产品,而逐渐成为中小网站的普遍选择,市面上的CDN产品的也越来越多,我们该如何选择呢?云漫网络将为你提供一点建议. 面对DDoS攻击,我们无非是是想一个 ...

  9. python调用msfconsole全自动永恒之蓝攻击_永恒之蓝漏洞攻击完整步骤

    需要设备: kali攻击机 windows2003/windows2008被攻击机 ip:192.168.15.129 1.进行端口扫描 nmap -Pn -sV -T4 ip地址 明白445端口和3 ...

最新文章

  1. IT界顶级大咖讲解如何获得月薪5万以上的秘诀干货!
  2. 怎样用Beyond Compare比较两个txt文件
  3. arthas 排查内存溢出_【spark-tips】spark2.4.0触发的executor内存溢出排查
  4. 牛客华为机试第2题python
  5. 浅谈Redis和Hbase
  6. python导入csv文件是如何预览后10行-使用python中的csv reader只读取前N行csv文件
  7. Linux课程第十二天学习笔记
  8. Windows Phone开发(29):隔离存储C 转:http://blog.csdn.net/tcjiaan/article/details/7447469...
  9. 容器编排技术 -- Kubernetes 声明网络策略
  10. 一次900万+数据量的 SQL 查询优化分析【上百倍性能优化】
  11. Linux 内核的同步机制,第 2 部分(来自IBM)
  12. Android实现QQ登录
  13. meterpreter下抓取windows系统明文密码实验
  14. Java 进阶 hello world! - 中级程序员之路
  15. 阿里巴巴校园招聘在线面试之附加题
  16. 数据结构实验:城市交通咨询模拟系统
  17. 语言哲学宣言2018
  18. 【Java】求最大公约数
  19. Vue如何使用video标签实现视频播放
  20. 机器学习——监督学习(一)

热门文章

  1. java等待_Java学习:等待唤醒机制
  2. mysql ondelete_MySQL on delete cascade语句
  3. 【渝粤教育】电大中专幼儿园组织与管理 (10)作业 题库
  4. php 有 stringbuffer,String、StringBuffer、StringBulider三者介绍
  5. FPGA(2)--例化语句--1位全加器
  6. taro 重新加载小程序_Taro开发微信小程序的初体验
  7. 7.9 规划Varnish缓存
  8. pythone函数基础(11)读,写,修改EXCEL
  9. Ubuntu18.04 安装搜狗输入法后无法启动的问题
  10. 并发编程---线程queue---进程池线程池---异部调用(回调机制)