局域网协议DHCP应用及安全防护
出处:www.5iadmin.com
DHCP协议浅析 DHCP分配给客户端地址的过程我们通常用4个字母来表示,即DORA。DORA分别代表了DHCP的四个报文。Discovery 报文、offer报文、requ est报文、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。做一个确定。 如图所示: 如何在园区网内部署DHCP
那我们该如何部署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攻击 1) 首先黑客会发大量的DHCP请求到server。这些大量的discovery报文每个报文都包含了不同的虚假MAC。Server收到这些报文后根据正常的DHCP工作机制就会向虚假的MAC分配IP,DHCP的池内的地址可能被瞬间耗光。 3) 除此之外还会对来自untrust接口收到 DHCP其他报文会进行深度检测,例如discovery。如果从一个untrust接口收到一个DHCP discovery报文,交换机会检测discovery报文内的MAC地址和二层数据帧中的源MAC是否一致,如果不一致就会认为这个是攻击(可能虚假出大量的MAC去发discovery). |
|