写在开篇:最近在测试DAI相关的内容,公司文档一如既往的简陋,新人看完保准一脸懵逼,搜了很多文章,个人觉得下面的这篇是写的最详细,最完整,也最容易理解,很值得学习,点赞。原文链接在文末,防止丢失,特转载一份留存待日后翻阅 一、ARP协议原理 1.协议概述
- Address Resolution Protocol
- 在以太网环境中,节点之间互相通信,需知晓对方的MAC地址
- 在现实环境中,一般采用IP地址标示通信的对象,而ARP的功能就是将IP“解析”到对应的MAC地址。
- 基于广播,不可靠
- ARP响应报文无需请求即可直接发送,这给攻击者留下巨大漏洞
- 没有确认机制,任何人都可以发起arp请求或response
- IPv6中通过特定的机制规避掉ARP以及其漏洞
文章图片
2.欺骗过程ARP Request
文章图片
PC1要欺骗PC2,通过造包工具,如anysend等,发出一个ARP request广播,这个ARP数据帧的以太网头部中,源MAC为PC1的MAC,目的MAC为全F,关键内容在于ARP协议报文(ARP body),也就是这个数据帧的以太网帧头后的内容,这才是ARP的真正内容,里头包含的主要元素有:发送者mac、发送者IP、接收者MAC及接收者IP。PC1发出的这个ARP数据帧中,sender MAC为自己的MAC地址,但是SenderIP为网关IP即192.168.0.254,此刻,PC2收到这个arp消息后,将更新自己的arp表项,如下: 如此一来,PC2发送数据到自己的网关0.254时,由于网关的MAC已经被欺骗成了PC1的MAC,因此数据都被转发给了PC1,那么PC2就断网了。如果PC1再机灵点,将PC2发过来的数据再转给真实的网关,同时在本地运行一个报文分析工具窥探PC2发过来的数据,那么就可以在PC2不断网的情况下,神不知鬼不觉的窥探PC2的上网流量,这就是the man in the middle,中间人攻击。 3.欺骗过程ARP Response
文章图片
由于ARP的response并不需要arp request为先决条件即可直接发送,因此攻击者可以构造arp reply消息,并发送给被攻击对象,从而刷新被攻击者的arp表,同样能达到arp欺骗的目的。 4.理解invalid arp表项 什么是invalid arp表项: ARP表中的MAC地址为全零(Windows主机)或“No completed”(网络设备)
文章图片
产生的原因:发送ARP Request后,为接收ARP Reply做准备 大量存在的原因:同网段扫描(主机)、跨网段扫描(网络设备) 5.Gratuitous ARP Gratuitous ARP,免费ARP是一种特殊的ARP Request/response报文,即Sender IP与Target IP一致(一般用于IP冲突检测) 我们看下面的例子:
文章图片
PC2是新接入的主机,配置了192.168.0.1的地址,完成地址配置后,PC2向网络中发送一个Gratuitous ARP,以防内网中有人使用相同的IP地址,这个Gratuitous ARP的senderIP和target IP都是自身,senderMAC是自己的MAC。 那么当PC1收到这个Gratuitous ARP后,由于senderIP和自己冲突了,于是在本地弹出一个气泡(如果是windows系统),同时回复一个Gratuitous ARP response以告知对端出现了IP地址重复。
文章图片
对端收到这个Gratuitous ARP消息后,知道内网中已经存在这个IP地址的使用者了,于是告警。 Gratuitous ARP的另外一个作用是,某些厂家用于防止ARP欺骗。例如在某些路由器上,配置了基于Gratuitous ARP的防arp欺骗解决方案,则该路由器(的接口)将以一定的时间间隔发送Gratuitous ARP,目的就是刷新底下PC的arp表,以保持网关IP对应的MAC始终是正确的,当然,这种防arp的解决方案挺土鳖的。6.如何判断内网中是否存在arp欺骗 现在市面上其实已经有许多arp防火墙可以识别到,当然有一些简单的方法,例如arp –a看MAC是否正确。或者抓包等。 7.Arp欺骗的解决方案 解决方案1:手工绑定IP+MAC 例如在PC上,用arp –s 静态绑定网关IP及网关的MAC,以防止arp欺骗,或者在关键节点的网络设备上,使用命令arp进行绑定。 显然这种方式扩展性太差。 解决方案2:免费arp 这个前面已经说过了解决方案3:DAI 其他,其实防ARP欺骗的解决方案业内还是有许多的,每个厂家都有自己的方法。 三、DAI工作机制 1.机制概述
文章图片
部署DAI前,内网如果出现ARP欺骗行为,例如PC发送非法的ARP报文,对于交换机而言,是无法检测并作出防御动作的。 部署DAI后,我们可以定义交换机接口的信任状态:trusted,或untrusted,对于信任端口,将不对收到的ARP报文做检测,直接放行。而对于untrusted接口,ARP报文在收到后回进行检查,只有合法的ARP报文才会被放行,如果出现非法的ARP报文,则会被log,同时丢弃。
文章图片
文章图片
DAI依赖DHCP snooping技术,在一个用户动态获取IP地址的网络环境中,我们通过部署DHCP snooping一来可以起到防御DHCP欺骗的效果,另一方面,会在交换机上得到DHCP snooping binding database,这个数据库是DHCP Snooping侦听DHCP交互过程后的信息记录,里头包含客户端的IP、MAC、所属VLAN等等相关信息,而这些信息,恰恰可以作为ARP合法性校验的依据。 DAI部署于交换机上,用于确保合法的ARP request或response被放行而非法的ARP消息被丢弃。交换机部署DAI后的主要动作如下:
- 在DAI untrust接口上(注意与DHCP snooping的untrust接口区分开)阻拦一切ARP requests或response消息并作校验
- 在更新自己ARP表或将收到的ARP消息转发出去之前先进行合法性校验,主要看ARP报文中的IP及MAC对应关系是否合法
- 丢弃非法的ARP报文,交换机会在丢弃非法的ARP后进行log
文章图片
一般来说,我们认为攻击行为多来自于终端的PC,可能是中毒或者黑客行为等。所以我们常会将连接终端PC的接口配置为DAI untrust接口,而交换机之间的接口配置为trust接口。 看上图,我们假设交换机A和B都运行DAI,而PC1及PC2都通过DHCP服务器获取地址,那么这时候对于PC1而言,只有在交换机A上的DHCP snooping database中才有其IP+MAC的绑定,交换机B则没有。因此如果A和B之间的接口为DAI 的untust,则来自PC1的ARP报文,将被交换机B丢弃,因为它认为这些报文是非法的,如此一来,PC1和2的通信就出问题了。所以建议A和B之间的接口设置为DAI的trust。 但是,并非所有的交换机互联接口设置为DAI的trust都会没有问题,在特定的环境下,这会留下一个安全隐患。例如,仍然是上面的图,假设A交换机不支持DAI,如果B的3/3口配置为trust,那么PC1就可以大摇大摆的去对B和PC2进行ARP欺骗了,即使B运行了DAI。所以DAI仅仅是保证运行DAI的交换机本身所连接的终端PC不能进行非法的ARP动作。像刚才所述的情况,可以考虑将交换机B的3/3口配置为untrust接口,再通过在B上手工配置ARP ACLs的方式来创建安全表项。当然,你可以将这两台交换机进行三层隔离,例如,加个路由器神马的。 3.ARP报文的rate limit 对于DAI而言,是需要损耗交换机CPU资源的,如果开启了DAI,就有可能会成为拒绝服务攻击的对象。所以我们对于运行了DAI的交换机接口,有ARP报文的限制。默认DAI untrust接口的rate limit是15个P/S也就是15pps,trust接口则完全没有限制。可以通过ip arp inspection limit这条接口级的命令来修改。 当接口收到的ARP报文超出这个阀值,接口将进入err-disable。可以使用shutdown no shutdown的方式手工重新恢复这个接口。或者,使用全局命令the errdisable recovery来让接口在一定的时间间隔后自动恢复。 4.ARP ACL及DHCP snooping database条目的相对优先级 ARP ACL的优先级高于DHCP snooping database条目。在你使用全局命令ip arp inspection filter指定了ARP ACL后,如果ARP报文被ARP ACL deny掉了,那么这些报文就被直接丢弃,即使在DHCP snooping database中有合法的表项匹配这些ARP报文。 四、DAI的配置方针
- DAI是ingress安全特性,不会做egress的安全校验
- DAI的工作需依赖DHCP snooping
- 如果DHCP snooping被关闭或者,这是一个无DHCP 的网络环境,例如纯静态IP地址的环境,使用ARP ACLs来放行或丢弃ARP报文
- DAI在access接口, trunk 接口, EtherChannel 接口, 及 private VLAN 接口上都支持
- acl-match matchlog—Logs packets based on the DAI ACL configuration. If you specify the
- matchlog keyword in this command and the log keyword in the permit or deny ARP access-list
- configuration command, ARP packets permitted or denied by the ACL are logged.
- acl-match none —Does not log packets that match ACLs.
- dhcp-bindings all —Logs all packets that match DHCP bindings.
- dhcp-bindings none —Does not log packets that match DHCP bindings.
- dhcp-bindings permit —Logs DHCP-binding permitted packets.
文章图片
基本配置如下:
文章图片
文章图片
文章图片
基本配置完成后,来看一下:
文章图片
接下去在SW1上开启DAI:
文章图片
为了使得PC2发出的ARP消息能够被放行,我们首先使用手工配置DHCP snooping bingding表项的方法:
文章图片
另一个方法,是用ARP ACL:
文章图片
再来做一个测试,就是PC1私自修改IP地址:
文章图片
由于DAI开启后,下联的PC如果段时间发送大量的无效ARP,可能会导致交换机性能大量损耗,也就是DoS攻击。那么建议在接口上限定ARP消息门限。
文章图片
红茶三杯 网络工程 | 项目管理 | IT服务管理 | CCIE培训 学习 沉淀 成长 分享 微博:http://weibo.com/vinsoney 博客:http://blog.sina.com.cn/vinsoney 站点:http://ccietea.com