前文我们了解了IP安全相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16652367.html;今天我们来聊一聊ARP安全相关话题;

  什么是ARP?

  ARP是Address Resolution Protocol的首字母缩写,翻译成中文就是地址解析协议;它主要是将ip地址解析成对应设备的mac地址;我们知道以太网设备之间通信都是需要二层mac地址的封装;那么我们平常配置的ip地址给设备,它是怎么和对端通信的呢?首先本端要发送ARP请求通信目标mac地址(如果本地ARP缓存表里没有对应条目的情况下,如果有就直接封装本端mac和ip地址为源mac和源ip,把对端的mac和ip封装成目标mac和目标ip);只有对端回复了arp请求以后,本端就会将arp回复报文中的源mac当作对应通信目标的mac,并将对应信息存入arp缓存表中,以备后续再次通信使用;简单讲ARP就是根据IP地址获取mac地址的TCP/IP协议;ARP协议有一个特点,就是同一局域网中的设备,只要收到一个arp回复包,局域网里的所有设备都会将对应回复包的源mac和对应源ip写入对应的arp缓存表里;这样一来非法主机在局域网里恶意发送伪造的arp应答报文,就会对应网络造成影响;

  ARP工作环境

  提示:arp主要工作在主机与主机之间,或者主机和网关之间,通常都是在同一vlan下,不会垮网段;

  ARP主要攻击方式和危害

  1、仿冒网关:所谓仿冒网关就是以网关的口吻欺骗其他主机;告诉其他主机自己就是网关;让其他主机误以为攻击者就是网关;

  提示:如上图所示,主机A向主机B发送arp回复报文说,网关的mac地址为222,主机B收到此报文后,会将原来在自己的arp缓存表里的对应条目的mac地址给覆盖掉,这样一来带来的后果是,主机B和正常的网关通信就中断了;主机B和网关的通信会统统发送给主机A;

  2、欺骗网关:所谓欺骗网关就是冒充合法主机的口吻向网关发送非法arp回复报文;让网关误以为攻击者就是真正的合法主机;

  提示:如上图所示,主机A向网关发送,主机B的mac为555,网关收到此报文后,会将主机的arp缓存表更新为对应收到的arp应答报文里的mac;这样一来网关和真正合法主机的通信就会中断;

  3、欺骗主机:所谓欺骗主机就是冒充合法主机向另一主机发送非法的arp应答报文,让另一主机误以为攻击者就是通信的对端;

  提示:如上图所示,主机A欺骗主机C,说主机B的MAC为555,主机C收到此报文后,会更新自己的arp缓存表,将正常主机B的mac地址给覆盖掉;这样一来主机C就不能正常和真正的主机B通信;

  中间人攻击

  提示:所谓中间人攻击就是仿冒网关、欺骗网关的结合;对于网关来说,攻击者就是合法的主机(欺骗网关);对于合法主机来说,攻击者就是网关(仿冒网关);正常主机B和网关的通信会先发送给攻击者,然后被攻击者捕获,然后再由攻击者再次封装将对应请求发送给网关;网关回包也是先将包回复给攻击者,被攻击者捕获以后再封装发送给合法主机;对于合法主机来说它是没有任何感知的;上图是主机A和主机B都被非法主机双向欺骗;

  ARP MISS

  所谓ARP miss就是指网络中用户向设备发送目标ip不能正常解析的ip报文(即路由表中存在对应IP报文的目标ip地址路由表项,但没有对应路由下一跳的arp表项);这种触发arp miss消息的ip报文我们就成为arp miss报文,即arp miss报文会被上传到cpu处理;设备根据arp miss消息生成和下发临时arp表项并向目标的网络发送arp请求报文,这样就增加了设备cpu的负担,同时消耗目标网络的带宽资源;

  提示:如上图所示,攻击者发送不能正常解析的ip报文给交换机(如在局域网里不存在的ip),交换机收到以后,不能正常获取到mac地址,此时就会触发ARP MISS消息,同时会向目标网络发送arp请求消息;交换机收到不能正常解析的ip报文触发arp miss消息加剧设备cpu的负担,同时向目标网络发送arp请求,占用目标网络的网络带宽;虽然少量的arp请求不能对网络造成什么影响,如果有人恶意发送大量的不能解析的ip报文,就会对设备cpu和目标网络的带宽造成极大的影响;

  ARP攻击防御措施

  1、ARP防网关冲突:该技术的应用场景主要是防止有人恶意冒充网关;主要工作原理是我们在交换机上开启了这项功能以后,如果ARP报文的源ip地址与报文入接口对应的VLANIF接口IP地址相同;或者ARP报文的源IP地址是入接口的虚拟IP地址,但ARP报文的源MAC地址不是VRRP的虚拟MAC;即上述两种情况都是攻击者在冒充网关的ip地址进行攻击;交换机收到此类报文就会认为该ARP报文和网关地址冲突,交换机将生成ARP防攻击表项,并在后续的一段时间内丢弃该接口收到的同VLAN以及同源MAC地址的ARP报文,这样就可以防止与网关地址冲突的ARP报文在VLAN内广播;

  提示:我们只需要在交换机的全局模式下开启对应功能即可;

  查看ARP防止攻击表项

  2、网关开启主动发送免费arp:其实这是利用网关发送免费arp来覆盖攻击者的arp报文;

  提示:默认开启发送免费arp报文功能后,间隔是60秒发送一次;我们可以使用interval 来指定间隔多久发送一次,最小间隔为1秒一次;

  抓包查看网关是否在发送免费arp呢?

  提示:可以看到现在pc上抓包,网关会每个两秒发送一次免费arp,广播给同一广播域的其他主机,网关的mac信息;这在一定程度上可以缓解攻击者的攻击;但是如果攻击者发送伪造的arp报文如果比网关发送的免费arp报文快,则攻击者的报文会覆盖网关自身发送的免费arp广播;一般使用该技术是结合上面的防网关冲突使用;

  3、ARP报文速率

    3.1、限制任意源MAC的ARP报文

    3.2、限制特定源MAC的ARP报文

    3.3、限制特定源IP的ARP报文

  4、ARP Miss消息限速

    4.1、限制任意源IP的ARP MISS消息

    4.2、限制特定源IP的ARP MISS消息

  查看当前ARP限速配置

  查看arp miss限速配置

  查看arp处理的报文统计数据

  5、DAI(Dynamic ARP Inspection,动态ARP检测)可防止中间人攻击;该技术建立在dhcp snooping的绑定表的基础之上;当设备收到ARP报文时,将此ARP报文对应的源ip、源mac、vlan以及接口信息和绑定表的信息进行比较,如果信息匹配,说明发送该ARP报文的用户是合法用户,允许此用户的arp报文通过,否则就认为是攻击,丢弃对应arp报文;

  DAI配置流程

  1、全局开启dhcp snooping功能;

  2、在某个VLAN内开启dhcp snooping功能;

  3、配置信任接口;

  4、在接入设备的接口开启ARP动态监测功能即可;

  实验,如下拓扑配置DAI监测

  sw1的基础配置

sys
sys sw1
vlan 2
int g0/0/1
p l a
p d v 2
int g0/0/2
p l a
p d v 2
int g0/0/3
p l a
p d v 2

  dhcp-server的基础配置

sys
sys dhcp-server
dhcp en
vlan 2
int g0/0/1
p l a
p d v 2
int vlanif 2
ip add 172.16.20.254 24
dhcp se int

  验证DHCP服务器地址池

  提示:可以看到有两个地址被使用,说明dhcp服务器正常工作;

  1、在sw1上开启全局开启dhcp snooping功能

  提示:全局开启dhcp snooping功能,需要现在全局开启dhcp功能;

  2、在vlan2内开启dhcp snooping功能

  3、配置dhcp snooping 信任接口

  查看绑定表

  提示:如果我们是后面才开启的dhcp snooping功能,需要让pc重新拿地址,对应绑定表就会形成;

  4、在接口开启arp动态检测功能

  验证配置结果

  查看arp检测到arp报文丢弃计数

  提示:我这里是没有模拟攻击,如果有攻击,这对应统计数量就会有;

最新文章

  1. gif jpg bmp png的区别
  2. 用JS写了一个打字游戏,反正我是通不了关
  3. java工程笔记
  4. Maven管理
  5. 设计模式学习之中介者模式(Mediator,行为型模式)(18)
  6. centos7 安装中文编码
  7. spark在eclipse上配置
  8. 给postfix设置黑名单
  9. Android GridView 添加 网格线解决办法
  10. Jquery ajax使用json形式通信
  11. MFC/VC++ 响应回车键的实现
  12. enum类型被intent所携带时需要注意的地方
  13. 【JS学习笔记】函数传参
  14. Document类型知识大全
  15. Codeception 实战
  16. 【Spark调优】:尽量避免使用shuffle类算子
  17. Python 标准输出 sys.stdout 重定向(转)
  18. Sublime Text 安装插件时出现There are no packages available for installation解决步骤
  19. css 兼容性问题,整理
  20. python解释器介绍以及Pycharm的破解

热门文章

  1. halcon简易标定代码
  2. JSON: JavaScript Object Notation
  3. Thread类的常用方法_获取线程名称的方法和设置线程名称的方法
  4. ApiDay001 __02 Java_StringBuilder
  5. 日志审计与分析实验三(rsyslog服务器端和客户端配置)(Linux日志收集)
  6. idea插件和springboot镜像
  7. iframe 标签
  8. 【水】关于 __attribute__
  9. 使用Python3.7+Tornado5.1配合七牛云存储api来异步切分上传文件
  10. 协程 && 异步例子