DHCP协议浅析
我们发现在日常组网工作中,如果客户端数量过多,手动分配IP地址会加大网管员的工作量。所以我们会在网络环境里部署一台DHCP服务器,由DHCP完成自动分配IP的工作。DHCP除了可以分配给客户端IP之外还有网关,DNS等信息。
DHCP分配给客户端地址的过程我们通常用4个字母来表示,即DORA。DORA分别代表了DHCP的四个报文。Discovery 报文、offer报文、request报文、ACK报文。所以我们把工作过程也分为4步
1, 在客户端启动的时候,首先会广播discovery报文(在这报文里面保护了客户端的MAC地址)。Discovery报文可以理解为:客户端去发现DHCP server。由于是广播,可以保证DHCP server收到这个报文。
2, DHCP server收到这个报文后他就知道某个客户端要请求一个IP地址,DHCP server就参照Discover报文里面的MAC地址,然后从他配置的DHCP地址池里面分配一个IP地址。然后把这个地址用offer消息告诉客户端。这个报文里面会把discovery里面客户端的MAC包含进去。客户机收到后比较下MAC,发现报文里面的MAC和自己的MAC一样就会认为这个报文是发给他的。
3, 由于DHCP server可能有多个,所以客户端发一个Discovery就很有可能收到多个offer。这时候客户端必须表示我用哪个offer的地址。所以客户端再次发一个request报文,表明我要用这个discovery的报文。
4, 最后DHCP server回一个ACK。做一个确定。
整个过程结束。通过这种方式,我们可以为每一个客户端配置一个IP地址。无须人工配置。
如图所示:

如何在园区网内部署DHCP
我们在一些大规模的园区网内如何去部署DHCP服务器呢?仅仅一台DHCP是否可以工作?
由于规模大、主机数目多,所以通常我们会在网络里划分多个VLAN来隔离广播域提高网络的性能。太大的广播域会造成广播泛洪。那我们注意到在DHCP的DORA的四个报文实际上是用广播来完成的。
如图所示:


/*destination均为255.255.255.255表示是广播

那我们该如何部署DHCP服务器。
 第一种做法:
只部署一个DHCP服务器。如果我把DHCP放到任何一个VLAN,其他VLAN的客户机可能无法获得IP地址,因为VLAN间是隔离广播的。
 第二种做法:
那我们每个VLAN部署一个DHCP服务器可不可以呢?很多园区网里可能多达100多个VLAN。那需要部署100多台DHCP服务器。从硬件投资和管理角度考虑都不能采用这种方法。
很显然二种做法都不适用。
解决方案:DHCP relay agent.
DHCP relay agent,顾名思义就是帮你去中继DHCP报文。这里我们通过一个例子来分析如何在园区网里部署DHCP环境。
DHCP服务器的配置
DHCP服务器要根据不同VLAN的地址段划分出地址池。例如有2个VLAN:vlan 10网段 10.10.10.X/24 VLAN20网段 10.10.20.x/24.那在DHCP服务器哪里需要建立二个地址。
一个10网段,一个20网段。分配对应的网关和DNS。
例如: pool1:10.10.10.1-10.10.10.253 网关10.10.10.254 DNS:10.10.1.1,10.10.1.2.
pool2:10.10.20.1-10.10.20.253 网关10.10.20.254 DNS:10.10.1.1,10.10.1.2.
Relay agent的配置
Relay agent一般拥有多个IP地址,通常作为主机的网关存在。在这个例子中我们给relay agent配置了二个IP。
 配置IP地址10.10.10.254作为VLAN 10的网关。
 配置IP与其他网段互联。10.10.1.254互联DHCP服务器。

Relay agent 是依靠ip helper-address这个特性来做relay的。由于不同VLAN无法传递广播,Ip helper-address就是在我的网络里帮助转发广播用的。故Ip helper-address 又叫广播转发。Ip helper-address后面通常跟一个IP地址。如果在某台设备上配置了ip helper-address.这个设备会把广播转发到这个IP地址上。不同厂商的交换机默认转发广播报文不同。这里举例为CISCO的交换机。Ip helper-address默认转发TFTP 、DNS 5、NTP 、 NETBIOS NAME SERVER 、NETBIOS DATAGRAM SERVER 、 DHCP 、TACACS 这几种的广播。所以ip helper-address并不单单是为DHCP设计的,可以为很多协议服务。

如图所示:

过程解析
主机是照常发广播discovery报文。图中的三层交换机收到了这个广播报文。DHCP服务器地址为10.10.1.1所以我们在三层交换机上配置了ip helper-address 10.10.1.1。让DHCP广播转发到10.10.1.1。
三层交换机分析这个报文,发现是一个DHCP报文。Ip helper-address默认会转发DHCP报文。这时候这个交换机就把这个报文通过单播的方式转发给10.10.1.1即DHCP服务器。但转发之前三层交换机会修改Discovery报文,在原有的报文里面加入一个relay agent字段。在relay agent 这个字段会把收到DHCP广播那个接口的IP地址放在里面。此例中relay agent字段包含的IP为10.10.10.254。
为什么要添加relay agent字段呢?如果不添加会怎样呢?Relay agent发现是DHCP报文就转发给DHCP server。原始的DHCP报文可能来自不同VLAN。 DHCP relay agent不单单要转发DHCP报文,还要能够识别VLAN的网段。DHCP报文中的relay agent字段就是用来标示VLAN网段的。如上面例子所示。DHCP server收到了一个就会根据relay agent来分配相应的IP地址。而且在DHCP server分配完IP后,发offer给DHCP relay agent,也必须要让DHCP relay agent知道,这个offer是给哪个网段的主机的。
如上例所示。DHCP server 发现relay agent地址为10.10.10.254.和先前我们为DHCP配置的地址池pool1 :10.10.10.1-10.10.10.253.相对应。DHCP server就会从pool1个地址池分配一个地址给客户端。
如图所示:

DHCP攻击
前面介绍了DHCP的基本原理和DHCP在园区网里的应用。DHCP给予了我们很多的便利之处,但与此同时DHCP还可能会带来一些攻击。下面我们来分析下黑客是如何利用DHCP进行攻击的。
攻击简介
如图所示:

1) 首先黑客会发大量的DHCP请求到server。这些大量的discovery报文每个报文都包含了不同的虚假MAC。Server收到这些报文后根据正常的DHCP工作机制就会向虚假的MAC分配IP,DHCP的池内的地址可能被瞬间耗光。
2) 正常的客户端开始去请求IP,但是正常的DHCP服务器已经没有办法在给他分配IP了,因为地址池已经耗光了。
3) 黑客站了出来,为这个客户端分配了一个IP,并且包含了虚假的网关地址和DNS。
这个客户端拿到了错误的网关,导致所有去往外网的报文都发给了这个虚假的网关。这个虚假网关就可以扑捉了所有去外网的报文。客户端在去作域名解析的时候也是用错误的DNS,可能某个银行网站的域名解析出来的就是事先布置好的钓鱼网站。后果不堪设想。
如何防止
大部分交换机都提供DHCP snooping这个特性来防止DHCP攻击
1) DHCP snooping提供的第一个特性就是限速。可以把DHCP报文的速率限制在某个范围内。例如每秒不超过10个包。这样可以有效的避免DHCP地址池耗尽。
2) DHCP snooping会把交换机的接口分为trust(信任)和untrust(非信任)。信任和非信任其实就是这个接口是否是网管员可以信任的连接DHCP server。对于trust(信任)的不做任何检查。对于untrust(不信任)的,如果收到offer ack 这些正常是由server发的报文交换机就会丢弃掉这些报文。这样可以有效的防止虚假DHCP服务器。
如图所示

3) 除此之外还会对来自untrust接口收到 DHCP其他报文会进行深度检测,例如discovery。如果从一个untrust接口收到一个DHCP discovery报文,交换机会检测discovery报文内的MAC地址和二层数据帧中的源MAC是否一致,如果不一致就会认为这个是攻击(可能虚假出大量的MAC去发discovery).

文章如转载,请注明转载自:http://www.5iadmin.com/post/914.html