经常看到有人在谈ARP问题,自己因为要编写防火墙规则,也重新研读过TCP/IP协议相关内容。感觉一些很重要的东西被大家忽略了,或者提得比较少,而这些都很容易成为安全部署的漏洞。今天尝试整理自己的思路,谈谈对ARP***的认识。
澄清一个观点。
大家常说,ARP***的存在是因为ARP协议有漏洞或者缺陷。我不能苟同这样的结论。ARP的应答包可以被动更新ARP缓存,而且缺少身份验证机制,这并非是一个疏忽,而是网络通信便利的很好设计。其实,什么样才是没有漏洞的呢?TCP面向连接容易被***,UDP非面向连接更给网络防护带来麻烦,ARP被动更新缓存是问题,主动更新也照样是问题。排除不良用心者因素之外,如果还有自身的问题,那么归结为缺陷或漏洞,或者会比较客观一些。
ARP请求方式的***。
一种方法是:直接以请求包的方式,携带伪装的源IP和源Mac,发送广播或者单播请求,相关主机会更新自己的ARP缓存,这样就能顺利达成ARP欺骗和***的目的。
另一种方法是拒绝服务:虽然是“正常”的ARP请求方式,如果在某个时间段内频繁发起请求,无论向网关也好,向某主机也好,全网段广播也好,由于ARP请求会带来响应,这样被***者会疲于响应、处理请求包,即便ARP缓存不发生更新,也会因为频繁处理响应而带来瘫痪。
这两种方法都是相对正常的工作方式,所以也增加了网络防护的难度。
第一种方式,可以通过交换机端口绑定IP和Mac过滤的方式,或者通过每台主机配置防火墙拦截欺骗ARP数据出站,或者双绑定等等方法,得到较好的防护效果。
第二种***方式,最好借助于状态检测,可以记录响应某IP第一个入站的ARP请求包的时间,然后在2分钟内或者更短的时间内来自该IP发起的请求包和应答包都一律直接过滤掉;当然,这个状态表也应当设置一个超时范围,过期则清除状态记录。可以在交换机端口设置状态检测,也可以在主机防火墙设置这种状态检测机制。目前还没有看到有这类防火墙的介绍,不过希望能有人往这方面考虑,改进防火墙产品的设计。
ARP应答方式的***。
这方面的***是目前最常见的,介绍也比较多,不赘述了。绑定,或者状态检测机制过滤掉主动发起的ARP应答包,都是可行的办法。
关于绑定的思考。
一般多关注网关欺骗对通信带来的影响,会建议主机绑定网关,而网关绑定所在网段内的主机。其实,对于DNS Server和DHCP Server,一样需要绑定。假想一下,如果本机的DNS Server的IP和Mac映射关系被破坏的话,本机发起的DNS请求会被发送到正确的地方吗?至于DHCP,我们知道,ARP缓存在机子重启动的时候会清空,然后重新根据通信的需求建立自己的ARP缓存表。开机的时候,主机一般也会与DHCP Server以及网段内所有主机确认一下自己的IP信息。这样,在某个时间段范围内,以一定的频率向全网段不断发送伪装的DHCP Server ARP应答包,那些刚刚开始接入状态的主机获取IP的过程会不会被破坏呢?
还是把重要的服务器的IP和Mac映射关系在每一台主机上都绑定为妥。
还是把重要的服务器的IP和Mac映射关系在每一台主机上都绑定为妥。
09.05.24
转载于:https://blog.51cto.com/tansuozhe/160330