HCNP Routing&Switching之DHCP安全

  前文我们了解了MAC地址防漂移技术,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16632239.html;今天我们来了解下DHCP安全相关话题;

  回顾DHCP工作流程

  DHCP的主要作用是主要作用是动态分配TCP/IP信息(ip地址,子网掩码,网关,DNS等等);其工作过程是客户端发送DHCP discover类型的包,来寻找DHCP服务器,通常以广播的形式发送;如果局域网有DHCP服务,当服务收到Discover类型的包,就会发送DHCP offer包,向客户端提供TCP/IP配置信息(当然是服务器还有TCP/IP信息可分配的情况下);客户端收到服务器发送到offer,正常情况下会回复DHCP Request包来向服务器请求使用对应的TCP/IP配置信息,这个信息也是广播的方式发送,主要目的是告诉服务器我要使用的TCP/IP信息,同时也告诉其他DHCP服务器,本端已经有服务器提供地址(如果有多个DHCP的提供offer的场景下);当服务器收到客户端的Request信息以后,然后单播给客户端确认;表示服务端已经知晓对应ip地址已经分配给某某客户端;

  DHCP面临的安全威胁

  通过上述DHCP工作过程的描述,我们知道只要DHCP服务器收到客户端发送的Discover包,如果自己有地址的情况下,它就会发送offer;那么问题来了,如果有恶意用户伪造大量的discover包发送,那么服务器就会把大量的地址发送出;然而客户端那么又没有第三个request包来请求对应的ip地址信息;如果此时有正常客户端来请求拿地址,服务器又没有地址(因为大量的地址都被发送出去,地址池里没有空闲的地址);此时服务器该怎么办?很显然这是DHCP在设计之初没有考虑到的安全因素;

  DHCP攻击类型

  通常DHCP攻击有两种,一种是DHCP饿死攻击(DHCP Starvation),所谓DHCP饿死攻击,是指攻击者发送大量的不完整DHCP请求,把DHCP服务器内的可用ip地址快速消耗殆尽;另外一种就是DHCP欺骗攻击(DHCP Spoof);所谓DHCP欺骗是指攻击者私自搭建DHCP服务器,来影响客户端的ip获取情况(这是利用DHCP客户端的特性,谁的offer先到就用谁的);

  DHCP欺骗攻击示意图

  提示:客户端发送Discover包,如果局域网里有多个DHCP服务器,那么真正的DHCP服务器和伪造的DHCP服务器都会收到该报文,因为这个包是广播发送;

  提示:当真正的DHCP服务器和伪造的DHCP服务器收到Discover包以后,对应都会给客户端发送offer包,此时就需要看谁先被客户端收到;如果伪造的DHCP服务器发送到offer包被客户端收到,那么客户端拿到的ip地址就是攻击者希望拿到的信息(这里面可以伪造网关地址,dns的地址等等);从而实现后续客户端发送数据被攻击者捕获利用;

  提示:如上图拓扑,真正的DHCP服务器被放置在核心层或汇聚层;攻击者在接入层伪造了一台DHCP服务器;如果客户端发送广播请求ip地址,很显然攻击者伪造的DHCP服务器会先拿到discover包,从而也会更快提供offer;这样一来,对于客户端来说,它拿到的地址始终是不安全的;

  DHCP饿死攻击现象

  提示:以上是用windwos server 2012搭建的DHCP服务器统计的数据,正常情况下发现数和提供数都不会很多;地址池里使用的数量和可用数量也不会完全用尽;

  用kali攻击DHCP服务器

  提示:yersinia是一款非常强大的拒绝服务(Denial-Of-Service,简称Dos)攻击工具,它支持生成树协议(STP),VLAN中继协议(VTP),动态中继协议(DTP),IEEE 802.1Q,IEEE 802.1X,思科发现协议(CDP),动态主机配置协议(DHCP)等;上述实验我们利用yersinia工具,模拟DHCP客户端发送discover包,向dhcp服务器请求ip地址;攻击原理就是通过yersinia 伪造大量的mac地址,来封装discover包,然后广播出去;

  命令行使用yersinia攻击DHCP服务器

  提示:yersinia针对DHCP协议支持4种攻击方式,第一种是发送原始数据包(非dos方式发送);第二种是dos方式发送Discover包;第三种是伪装创建DHCP服务器;第四种就是dos方式发送release包;第三种和第四种攻击建议在图形界面使用;

  提示:可以看到,当kali攻击DHCP服务器时,瞬间DHCP的地址池会被消耗殆尽;这里说下上面的发现数和提供数,发现数是指服务器收到的discover包,提供数是服务器发送的offer包;如果服务器的统计数据中发现数非常大,说明我们服务器被攻击了;

  DHCP Snooping

  DHCP Snooping是防范DHCP攻击和欺骗的一种应对技术,主要作用保证DHCP客户端从合法的DHCP服务器获取ip地址,并记录DHCP客户端ip地址与MAC地址等参数的对应关系,防止网络上针对DHCP攻击;DHCP嗅探技术主要有如下3点功能

  1、截获DHCP报文并进行分析处理;

  2、建立和维护一个DHCP Snooping绑定表(该表主要记录MAC、IP、租期、VLAN、接口的对应关系);

  3、对DHCP报文进行过滤和限速;

  提示:DHCP Snooping技术,通过对某个接口的DHCP请求包进行限速,以及限制接口最大用户数量,可以有效防止DHCP饿死攻击;利用DHCP Snooping的接口类型,设置真正服务器连接的接口为信任接口,其他为非信任接口,可以防止DHCP欺骗攻击;

  DHCP Snooping端口类型

  提示:DHCP Snooping端口类型有两种,一种是信任端口(Trusted),一种是非信任(Untrusted);默认开启DHCP Snooping的接口或VLAN以后,对应接口或VLAN所有接口都为非信任端口;非信任端口会丢弃收到的DHCP应答报文;只有手动设置某个端口为信任端口后,对应接口才能正常转发收到的DHCP应答报文,转发DHCP请求;

  提示:如上图所示,我们在交换机的VLAN1里开启DHCP Snooping功能以后,然后把连接真正DHCP的接口设置为信任接口;当客户端发送Discover包时,伪造的DHCP和真正的DHCP服务器都能正常收到Discover包;但是伪造的DHCP服务器提供的offer包会被交换机丢弃,因为连接伪造DHCP服务器的接口是非信任接口;真正的DHCP服务器回复offer包是能正常的被转发给对应pc,因为连接真正DHCP服务器的接口是信任接口;

  提示:如上图所示,DHCP服务器回复的offer,ACK,NAK这些包只有在信任接口收到才能正常转发,非信任接口收到offer,ack,nak这些包是直接丢弃的;所以这样就保证了正常DHCP服务器不被欺骗,从而也保证了客户端拿到的地址是真正DHCP服务器给的地址;

  DHCP Snooping绑定表

  DHCP Snooping绑定表是收到DHCP ACK报文后,会从该报文中提取关键信息构成;该表主要有MAC地址,IP地址,VLAN信息,和接口的绑定关系;该表有一个特性,只有收到的报文的信息和绑定表中的内容一致才能被转发,否则直接丢弃;

  DHCP Snooping配置

  环境拓扑

  sw2的配置

sys
sys DHCP
dhcp en
int vlanif 1
ip add 192.168.100.254 24
dhcp se int
View Code

  提示:上述主要配置dhcp服务器,利用接口地址池分配ip地址;

  验证DHCP地址池信息

  提示:可以看到vlanif 1接口地址池有253个地址,使用了一个;

  R1的配置

sys
sys R1
dhcp en
int g0/0/0
ip add 172.16.100.254 24
dhcp se int 
View Code

  提示:这里使用172.16网段来模拟攻击者提供的ip地址信息;

  验证地址池信息

  提示:可以看到现在地址池里总共有253个地址,空闲253地址,没有使用的地址;

  把pc1设置为dhcp,看看是否能够拿到真正的DHCP提供的地址呢?

  提示:可以看到现在pc1拿到了伪装的dhcp服务器分配ip地址;

  查看抓包过程

  提示:可以看到pc发送discover包,对应R1最先发送offer被pc1拿到,所以真正的DHCP服务器再发offer对应pc1就不会在拿了;

  pc2拿地址

  提示:可以看到pc2也拿到了172的地址,都是拿到了欺骗着伪装的DHCP服务器;

  在sw1上开DHCP Snooping功能

  提示:开启dhcp snooping首先要在全局开启dhcp功能,然后再全局开启dhcp snooping 功能,然后在某个vlan或某个接口开启dhcp snooping功能;

  验证:查看vlan1是否开启了dhcp snooping功能?

  提示:默认开启dhcp snooping功能以后,默认最大用户为1024,其他检查中继,客户端地址和request、速率都是关闭的;

  配置信任接口

  提示:默认开启了DHCP snooping功能以后,对应接口或vlan下的接口都是非信任接口,所以我们只需要把那些接口设置为信任接口即可;

  现在pc1拿ip地址,看看是否还会从R1拿呢?

  提示:可以看到现在pc1只能从真正DHCP服务器上拿地址,因为只有真正dhcp服务器所在接口是被我们信任的,只有从对应接口收到offer才能被交换机转发,其他接口收到offer,直接会被丢弃的;

  pc2拿地址

  提示:可以看到pc2也是和pc1只能从真正的DHCP服务器拿到地址,对应欺骗者所在接口抓包,直接抓不到discover包(这应该是模拟器bug,正常应该抓到discover包); 通过上述配置信任端口成功防御了DHCP欺骗攻击;

  查看绑定表

  提示:可以看到pc1和pc2的ip地址,mac地址,以及vlan号和接口都做了一一对应;

  查看dhcp snooping配置信息

  提示:这个命令主要方便我们查看哪些接口或vlan开启dhcp snooping 那些接口配置的是信任接口;

  在接口开启速率检查

  在接口开启速率限制

  在接口限制最大用户数

  在接口下开启dhcp snooping功能

  提示:在某个接口下配置限速,需要在接口下开启dhcp snooping功能;

  验证g0/0/3是否开启了速率和最大用户的限制?

  用kali攻击dhcp服务器,看看是否有效?

 

  提示:可以看到我们限制了最大用户数,对应kali攻击还是有效的;但对应dhcp丢包数据是正常的;

  在接口限制mac学习数量,看看是否能够防止kali的攻击呢?

  提示:可以看到我们现在了mac地址学习的数量以后,dhcp服务器过期地址就是我配置的限制接口最大用户数量5个,对应dhcp服务器的地址就不会被kali全部给拿走变为过期地址;有效防御了kali的攻击;

  开启dhcp客户端地址检查

  提示:开启客户端mac地址检查是指,检测DHCP Request报文帧头源MAC地址与CHADDR字段是否相同的功能,相同则转发,不相同则丢弃;

  开启dhcp客户端地址检查告警以及触发告警阀值

  开启检查dhcp-request

  提示:check-request是对DHCP报文进行绑定表匹配检查的功能。只有匹配成功的报文设备才将其转发,否则将丢弃。这将能有效的防止非法用户通过发送伪造的DHCP报文冒充合法用户续租或释放IP地址。

  开启检查dhcp-request告警和阀值配置

  开启 dhcp-giaddr检查

  提示:为了保证设备在生成DHCP Snooping绑定表时能够获取到用户MAC等参数,DHCP Snooping功能需应用于二层网络中的接入设备或第一个DHCP Relay上。故DHCP Snooping设备接收到的DHCP报文中GIADDR字段必然为零,若不为零则该报文为非法报文,设备需丢弃此类报文。

  开启 dhcp-giaddr检查告警和阀值设置

  开启限速告警和阀值配置

  提示:默认开启限速告警以后,对应告警阀值为100;

  配置用户下线清空对应用户mac表项

  提示:用户下线后,若设备上该用户对应的动态MAC表项没有达到老化时间,则设备在接收到来自网络侧以该用户IP地址为目的地址的报文时,将继续根据动态MAC表项处理此报文。在执行命令dhcp snooping user-offline remove mac-address之后,当DHCP Snooping表项清除时将移除对应的用户MAC表项;

posted @ 2022-09-01 11:50  Linux-1874  阅读(723)  评论(0编辑  收藏  举报