学习日志8.4--DHCP攻击防范
目录
DHCP饿死攻击
DHCP Sever仿冒攻击
DHCP攻击防范
DHCP动态主机配置协议,是给主机提供自动获取IP地址等配置信息的服务。在主机对DHCP服务器发送DHCP Discover请求之后,服务器回复offer,主机再回复request,最后服务器回复ACK确认。但是就是在这四次的交互过程中就容易受到网络的攻击。
在实际网络中针对DHCP的攻击行为主要有:DHCP饿死攻击;DHCP Sever仿冒攻击。
DHCP饿死攻击
DHCP饿死攻击是DOS攻击的一种方式,目的是通过发送大量的DHCP Discover请求,去耗尽DHCP地址池里面的地址,在地址池耗尽的时候,DHCP服务器会采取不回答或者回复0.0.0.0的方式表达地址耗尽,使得DHCP Sever不能给主机提供服务。
在同一个主机向DHCP服务器请求IP地址的时候,在已经获得IP地址,第二次请求的情况下,DHCP服务器向主机回复有同样地址的offer。在服务器第一次给主机分配IP地址时,服务器会记录IP地址和主机的client hardware address(主机的mac地址),意思是记录下这个IP地址分配给哪个MAC地址了,这个记录就叫CHDDR,封装在DHCP数据包里面,在主机向DHCP服务器发送discover的时候,主机的MAC地址会写在CHDDR里面记录在DHCPdiscover发送出去。再主机第二次发送discover请求的时候,DHCP服务器就会知道discover请求里面的CHDDR记录的MAC地址,说我以前给这个主机分配过IP地址,分配的IP地址是192.168.1.1(假设),现在他请求我,我给他回offer分配的IP还是192.168.1.1。同样的主机同样的MAC地址,给DHCP服务器发送DHCPdiscover请求,他收到DHCP分配的IP地址是一样,即offer里的IP地址是一样的;也就是说要实现DHCP的饿死攻击,就必须要修改不通的MAC地址,然后发送DHCPdiscover请求,才能耗尽DHCP地址池里面的地址。
按拓扑结构,完成接口的IP信息配置,用路由器来充当DHCP服务器。
命令:[DHCP-Sever]dhcp enable,在系统视图下开启DHCP服务
命令:[DHCP-Sever]int g0/0/1
命令:[DHCP-Sever-GigabitEthernet0/0/1]dhcp select interface,在接口模式下,开启接口的IP地址池
命令:[DHCP-Sever-GigabitEthernet0/0/1]display ip pool,查看地址池的简要信息
查看地址池的名称,网关、掩码还有数量13
命令:[DHCP-Sever]display ip pool interface GigabitEthernet0/0/0/1 all,查看IP地址池在接口下名字是GigabitEthernet0/0/0/1地址池的信息,在系统视图下查看地址池的信息IP地址的范围是在100.1到100.14,还可以看到IP地址的分配情况
现在测试同一个主机多次发送DHCP请求,在路由器上抓包有四次DHCP交互申请分配IP地址和三次免费ARP询问是否有谁用这个IP地址,没有回复则可以使用。
在offer的回包中分配的IP地址是100.14
在主机上查看是192.168.100.14
开始第二次DHCPdiscover请求第二次回包数据和分配的IP地址还是192.168.100.14
DHCP服务器绑定,DHCPdiscover消息中CHADDR会有主机的MAC地址信息记录的MAC地址信息,就会记录到DHCP服务器中
下次再收到同样的请求时,会根据记录分配同样的IP地址。
DHCP服务器是通过DHCP消息内部的CHADDR来进行记录和绑定IP和MAC地址信息的,不通过数据包以太网Ⅱ的MAC地址进行绑定。这是因为在由许多主机连接的网络中,他并不是直接和DHCP服务器进行连接的,他是与多个中继进行连接,路由转发协议,在跨子网转发的时候,经过路由转发路由交换,其数据包里面的源MAC地址就会发生改变,变成路由器中继的MAC地址,但是记录在DHCP消息中的CHADDR的数据不会改变。
攻击模拟的拓扑结构
如果需要进行DHCP饿死攻击,就必须不断伪造不同的CHADDR地址的DHCPdiscover消息来获取IP地址。
可以利用kali虚拟机进行模拟攻击,利用在kali安装好的软件进行模拟攻击。在攻击之前先除去主机原先申请的IP地址,除去DHCP服务器上的绑定信息,通过关闭和重启地址池的方式来实现。
命令:[DHCP-Sever-GigabitEthernet0/0/1]undo dhcp select interface,关闭接口的地址池
命令:[DHCP-Sever-GigabitEthernet0/0/1]dhcp select interface,打开接口的地址池
命令:[DHCP-Sever-GigabitEthernet0/0/1]display ip pool interface GigabitEthernet0/0/0/1,查看地址池的分配情况,地址池的地址清除完毕
用kali虚拟机进行模拟DHCP饿死攻击看到攻击过程获取到192.168.100.14到192.168.100.2的IP地址
再查看一下DHCP服务器的记录表,可以看到IP地址被占用了,饿死攻击成功
对DHCP服务器的0/0/1口进行数据抓包(抓包在攻击之前,清楚地址池的信息之后就已经开始)我们看数据包,知道是DHCP的四部交互,每一次交互完成,其分配到的IP地址就不一样
第一个discover请求他的网卡地址是82:d0,是攻击机的网卡地址,下面的是CHADDR地址60:f4
第二个discover请求,他的以太网Ⅱ地址还是82:d0,但是他的CHADDR地址变为了fc:5b。再看DHCP服务器里面的记录表
表中192.18.100.14记录的MAC地址是60:f4;192.168.100.13记录的是fc:5b,这和discover中的CHADDR地址是一致的,可以说明,DHCP服务器的地址绑定看的是CHADDR中的MAC地址信息和以太网Ⅱ的地址信息无关。
现在DHCP服务器的地址池里面已经没有地址,下面用主机向DHCP服务器发送请求地址请求后查看主机 IP地址,发现没有配置到地址。DHCP饿死攻击成功。
DHCP Sever仿冒攻击
DHCP饿死攻击的作用,当攻击者耗尽了DHCP服务器地址池中的IP地址之后,攻击者可以将自己变成仿冒的DHCP服务器,向主机发送 IP地址,伪造假的网关地址,伪造假的域名地址,诱骗主机将自己的数据转发到攻击机上。这就是DHCP的Sever仿冒攻击。
用Kali伪造一个DHCPsever,对主机进行模拟攻击
发起攻击后,用主机获去DHCP服务器的IP地址可以看到获取的是再kali模拟攻击里面自己仿冒的DHCP服务器配置的地址。去看他的数据包
就有一个DHCP四部交互的过程,0.0.0.0的广播地址还有192.168.11.100的回包地址,说明是攻击机的回报,然后打开ACK的回包
ACK回包中,给主机配置了IP地址是192.168.11.210,记录了主机的MAC地址是74:ee,是主机自己的MAC地址
配置了DHCP服务器的IP地址192.168.11.100,配置了IP地址的续租时间,配置了掩码,配置了路由器地址192.168.11.100,配置了域名服务器地址DNSserver192.168.11.100,还配置了域名名字huawei.com。都是按照在kali攻击里面部署的去配置,证明服务器仿冒攻击成功。
DHCP攻击防范
DHCP snooping(DHCP流量监听)。在主机向DHCP申请discover消息的时候,会广播消息,在交换机开启了DHCP snooping之后,交换机会对DHCP消息转发到正确的DHCP服务器的接口上,对于连接DHCP服务器的端口需要设置一个信任端口,允许DHCP的流量从这里转发出去,而没有设置信任度端口的DHCP流量就不能转发出去,让DHCP服务器能收到discover请求,能给主机提供服务,让攻击者不能收到DHCP请求,不能截获主机的流量信息。
在攻击之前,先将主机配置成手动获取IP地址,然后清除DHCP服务器地址池的信息
命令:[DHCP-Sever-GigabitEthernet0/0/1]undo dhcp select interface,关闭接口地址池
命令:[DHCP-Sever-GigabitEthernet0/0/1]dhcp select interface,开启接口地址池
命令:[DHCP-Sever-GigabitEthernet0/0/1]display ip pool interface GigabitEthernet0/0/0/
1 all,查看地址池的信息地址池信息为空,地址池清楚完毕。
首先先把DHCP服务器的g0/0/1口的DHCP服务禁用,对交换机的g0/0/3口抓包,然后开启交换机DHCPsnooping的功能
命令:[SW1]dhcp enable,首先开启交换机的DHCP功能
命令:[SW1]dhcp snooping enable,再开启DHCPsnooping功能
命令:[SW1]vlan 1
命令:[SW1-vlan1]dhcp snooping enable,再在vlan下面开启DHCPsnooping功能
命令:[SW1-vlan1]dhcp snooping trusted interface g0/0/2,设置交换机的g0/0/2为信任端口
用主机申请DHCP在DHCP服务器上收到了DHCP的discover请求,但是没有回复,是因为关闭了DHCP服务器的功能
在攻击机上没有收到discover的信息请求,说明只有被DHCPsnooping信任的端口才可以转发DHCP消息。
添加信任端口可以防范DHCP服务器伪造攻击。
把DHCP服务器的DHCP接口服务打开,在让主机重新获取DHCP服务器里面的IP地址成功在DHCP服务器上获取到地址。
DHCP饿死攻击防范。在使用饿死攻击的话需要伪造不同的CHADDR地址的DHCPdiscover消息来获取地址,但是在每次发送消息的时候,数据包中的以太网Ⅱ的MAC地址是不变的。在开启DHCPsnooping(DHCP流量监听)后,收到DHCP discover消息后,会对DHCPdiscover判断,判断以太网Ⅱ的源MAC地址和DHCP报文中的CHADDR是否相同,如果不同就认为是伪造消息。这时开启DHCPcheck功能,对伪造的信息进行丢弃。需要注意的是,DHCPsnooping只能进行监听,丢弃的动作还需要DHCPcheck去执行。
开启接口的DHCPcheck
命令:[SW1]port-group 1,创建一个接口组,组号为1
命令:[SW1-port-group-1]group-member GigabitEthernet 0/0/1 to g0/0/24,定义接口组的成员
命令:[SW1-port-group-1]dhcp snooping check dhcp-chaddr enable,给接口打开DHCPcheck功能
然后用kali模拟饿死攻击这个时候攻击没反应就拿不到地址,查看交换机g0/0/3口的数据
还是有discover请求发出,证明攻击存在,但是应为discover每一个CHADDR地址和以太网Ⅱ的源MAC地址不一样,数据被DHCPcheck舍弃
这是第一个discover攻击请求的信息
这是第二个discover攻击请求的信息
他们的CHADDR地址和以太网Ⅱ的源MAC地址都不一样,不一样的话,就被DHCPsnooping认为是攻击信息,然后被DHCPcheck丢弃discover信息。再回到地址池查看地址的配置情况,确实是没有分配地址。然后再用主机去发DHCPdiscover请求
主机就成功获得地址池里的IP地址。
kali模拟攻击会存在在攻击时可以伪造数据中的以太网Ⅱ的源MAC地址和DHCP报文中的CHADDR地址字段同时变化,去欺骗DHCPsnooping,去实现消耗DHCP服务器里面的IP地址,达到饿死攻击的效果。开始攻击
攻击效果是,每秒钟以上千次的数据发送频率去发送discover请求。
随机打开两个discover请求,可一看到每一次的以太网Ⅱ源MAC地址都会发生变化,而且源MAC地址和CHADDR地址是一致的
再查看地址池的消息,已经被攻击,停止给主机分配地址了,被饿死攻击了。所以说,遇到这种攻击的时候,再采用DHCPsnooping防范就已经不够了。
在开启DHCPsnooping和DHCPcheck,面对这种可以仿造变化地址的攻击方式,以每秒上千次的攻击频率去攻击,交换机需要对每一个数据进行检验判断,需要消耗大量的内存,消耗CPU的资源。
Yersinia DHCP DOS(上一个地址可变的攻击)的攻击防范无法通过CHADDR和DHCPcheck去防御,需要通过端口安全的方式去实现。
Yersinia攻击伪造,会伪造源MAC地址和CHADDR,同时会让交换机学习到大量的MAC地址,可以同过设置接口的允许MAC地址的学习数量,如果学习数量超过可允许范围内,就关闭端口shutdown,禁止数据传输。
给交换机设置端口安全。
命令:[SW1]port-group 1,进入接口组
命令:[SW1-port-group-1]port-security enable,端口安全打开
命令:[SW1-port-group-1]port-security max-mac-num 1,设置端口安全最大允许学习的MAC地址数量为 1设置端口安全的动作方式,第一个是保护,直接丢弃数据;第二个是丢弃数据并报警;第三个是直接关闭接口;
命令:[SW1-port-group-1]port-security protect-action shutdown,选择安全保护动作是关闭接口
用kali模拟攻击可以看到交换机接口学习MAC地址数量过多,接口直接关闭了
交换机直接报出日志,MAC地址的数量超出限制,接口g0/0/3将关闭
然后再重新打开接口g0/0/3,再对DHCP服务器的地址池的信息清理一下,准备重新发起攻击。看能不能抵御住这种攻击。在DHCP服务器的g0/0/1口收到了DHCP的discover消息,然后回复了一个offer,分配给攻击机的地址是19.168.100.14。
在到地址池查看配置信息,是分配给CHADDR地址的IP地址192.168.100.14。
然后再用主机申请IP地址从主机上和DHCP服务器地址池里可以看到,主机成功分配到地址。
这种设置安全端口的方式,不仅可以防止饿死攻击,还可以对主机进行分配IP地址的服务。
相关文章:

学习日志8.4--DHCP攻击防范
目录 DHCP饿死攻击 DHCP Sever仿冒攻击 DHCP攻击防范 DHCP动态主机配置协议,是给主机提供自动获取IP地址等配置信息的服务。在主机对DHCP服务器发送DHCP Discover请求之后,服务器回复offer,主机再回复request,最后服务器回复AC…...

解决多个Jenkins Master实例共享Jenkins_home目录的问题(加锁解锁机制)
在Jenkins的持续集成和持续部署(CI/CD)环境中,JENKINS_HOME目录扮演着至关重要的角色。它存储了Jenkins的配置、插件、作业历史记录等核心数据。然而,在某些场景下,我们可能面临多个Jenkins master实例需要共享同一个J…...

postgresql array 反向截取
postgresql array 反向截取 array_to_string((string_to_array(REPLACE(delcell.小区网管名称,‘‘,’-‘),’-‘))[:array_length(string_to_array(REPLACE(delcell.小区网管名称,’’,‘-’),‘-’),1)-1],‘-’) as 基站名称 在PostgreSQL中,如果你想要对数组进…...

最新口型同步技术EchoMimic部署
EchoMimic是由蚂蚁集团推出的一个 AI 驱动的口型同步技术项目,能够通过人像面部特征和音频来帮助人物“对口型”,生成逼真的动态肖像视频。 EchoMimic的技术亮点在于其创新的动画生成方法,它不仅能够通过音频和面部关键点单独驱动图像动画&a…...

程序设计基础(c语言)_补充_1
1、编程应用双层循环输出九九乘法表 #include <stdio.h> #include <stdlib.h> int main() {int i,j;for(i1;i<9;i){for(j1;j<i;j)if(ji)printf("%d*%d%d",j,i,j*i);elseprintf("%d*%d%-2d ",j,i,j*i);printf("\n");}return 0…...

8.4 day bug
bug1 忘记给css变量加var 复制代码到通义千问,解决 bug2 这不是我的bug,是freecodecamp的bug 题目中“ 将 --building-color2 变量的颜色更改为 #000” “ 应改为” 将 #000 变量的颜色更改为 --building-color2 “ bug3 又忘记加var(–xxx) 还去问…...

【Material-UI】Autocomplete中的禁用选项:Disabled options
文章目录 一、简介二、基本用法三、进阶用法1. 动态禁用2. 提示禁用原因3. 复杂的禁用条件 四、最佳实践1. 一致性2. 提供反馈3. 优化性能 五、总结 Material-UI的Autocomplete组件提供了丰富的功能,包括禁用特定选项的能力。这一特性对于限制用户选择、提供更好的用…...

Pytest测试报告生成专题
在 pytest 中,你可以使用多个选项生成不同格式的测试报告。以下是几种常用的生成测试报告的方法: 1. 生成简单的测试结果文件 你可以使用 pytest 的 --junitxml 选项生成一个 XML 格式的测试报告,这个报告可以与 CI/CD 工具集成。 pytest --junitxml=report.xml这将在当前…...

QT 笔记
HTTPS SSL配置 下载配置 子父对象 QTimer *timer new QTimer; // QTimer inherits QObject timer->inherits("QTimer"); // returns true timer->inherits("QObject"); // returns true timer->inherits("QAbst…...

【redis 第七篇章】动态字符串
一、概述 string 类型底层实现的简单动态字符串 sds,是可以修改的字符串。它采用预分配冗余空间的方式来减少内存的频繁分配。 二、SDS动态字符串 动态字符串 是以 \0 为分隔符。最大容量 是 redis 主动分配的一块内存空间,实际存储内容 是具体的存的数…...

rk3588 部署yolov8.rknn
本文从步骤来记录在rk3588芯片上部署yolov8模型 主机:windows10 VMware Workstation 16 Pro 硬件:RK3588 EVB板 模型: RK3588.rknn 软件开发环境: c cmake step1: 主机上执行: 将rknn_model_zoo 工程文件下载…...

【正点原子i.MX93开发板试用连载体验】中文提示词的训练
本文首发于电子发烧友论坛:【正点原子i.MX93开发板试用连载体验】基于深度学习的语音本地控制 - 正点原子学习小组 - 电子技术论坛 - 广受欢迎的专业电子论坛! 好久没有更新了,今天再来更新一下。 我们用前面提到的录音工具录制了自己的中文语音&#…...

WordPress资源下载类主题 CeoMax-Pro_v7.6绕授权开心版
CeoMax-Pro强大的功能 在不久的将来Ta能实现你一切幻想!我们也在为此而不断努力。适用于资源站、下载站、交易站、素材站、源码站、课程站、cms等等等等,Ta 为追求极致的你而生。多风格多样式多类型多行业多功能 源码下载:ceomax-pro7.6.zip…...

使用GCC编译Notepad++的插件
Notepad的本体1是支持使用MSVC和GCC编译的2,但是Notepad插件的官方文档3里却只给出了MSVC的编译指南4。 网上也没有找到相关的讨论,所以我尝试在 Windows 上使用 MinGW,基于 GCC-8.1.0 的 posix-sjlj 线程版本5,研究一下怎么编译…...

技术周总结 2024.07.29 ~ 08.04周日(MyBatis, 极限编程)
文章目录 一、08.01 周四1.1)mybatis的 xml文件中的 ${var} 和 #{var}的区别? 二、08.03 周六2.1)极限编程核心价值观核心实践实施极限编程的好处极限编程的挑战适用场景 三、08.04 周日3.1)《计算机信息系统安全保护等级划分准则…...

C语言调试宏全面总结(六大板块)
C语言调试宏进阶篇:实用指南与案例解析C语言调试宏高级技巧与最佳实践C语言调试宏的深度探索与性能考量C语言调试宏在嵌入式系统中的应用与挑战C语言调试宏在多线程环境中的应用与策略C语言调试宏在并发编程中的高级应用 C语言调试宏进阶篇:实用指南与案…...

unity万向锁代数法解释
unity的矩阵旋转乘法顺序是yxz 旋转x的90度的矩阵: 1 0 0 0 0 -1 0 1 0旋转y和z的矩阵假设角度为y和z,矩阵略不写了 按顺序乘完yxz之后结果是 cos(y-z) sin(y-z) 0 0 0 -1 -sin(y-z) cos(y-z) 0这个结果和Rx(pi/2) *Rz(某个角度)的结果是一个形式,Rx和…...

stm32入门学习10-I2C和陀螺仪模块
(一)I2C通信 (1)通信方式 I2C是一种同步半双工的通信方式,同步指的是通信双方时钟为一个时钟,半双工指的是在同一时间只能进行接收数据或发送数据,其有一条时钟线(SCL)…...

GDB常用指令
GDB调试:GDB调试的是可执行文件,在gcc编译时加入-g参数,告诉gcc在编译时加入调试信息,这样gdb才能调试这个被编译的文件。此外还会加上-Wall参数尽量显示所有警告信息。 GDB命令格式: 1、start:程序在第一…...

Nginx 高级 扩容与高效
Nginx高级 第一部分:扩容 通过扩容提升整体吞吐量 1.单机垂直扩容:硬件资源增加 云服务资源增加 整机:IBM、浪潮、DELL、HP等 CPU/主板:更新到主流 网卡:10G/40G网卡 磁盘:SAS(SCSI) HDD(机械…...

pythonflaskMYSQL自驾游搜索系统32127-计算机毕业设计项目选题推荐(附源码)
目 录 摘要 1 绪论 1.1研究背景 1.2爬虫技术 1.3flask框架介绍 2 1.4论文结构与章节安排 3 2 自驾游搜索系统分析 4 2.1 可行性分析 4 2.2 系统流程分析 4 2.2.1数据增加流程 5 2.3.2数据修改流程 5 2.3.3数据删除流程 5 2.3 系统功能分析 5 2.3.1 功能性分析 6 2.3.2 非功…...

C++ vector的基本使用(待补全)
std::vector 是C标准模板库(STL)中的一个非常重要的容器类,它提供了一种动态数组的功能。能够存储相同类型的元素序列,并且可以自动管理存储空间的大小,以适应序列大小变化,处理元素集合的时候很灵活 1. vector的定义 构造函数声…...

Java 属性拷贝 三种实现方式
第一种 List<OrederPayCustomer> orederPayCustomerList this.list(queryWrapper); List<CustomerResp>customerRespListnew ArrayList<>();for (OrederPayCustomer orederPayCustomer : orederPayCustomerList) {CustomerResp customerResp new Custome…...

Java-变量,运算符,输入与输出
目录 一,语法基础 1.基本Java程序 2.语法基础 2.1 变量 2.2 常量限制(fiinal)类比C中的const 2.3 类型转化 2.4 运算符 2.5 表达式 2.5 输入与输出 2.5.1 输入 2.5.2 输出 一,语法基础 1.基本Java程序 public class Main{public static void…...

五、一个quad同时支持pcie和sfp两种高速接口的ref时钟配置
项目描述 上位机将截图数据通过 XDMA 写入到 FPGA 侧的 DDR 内存区域 1 中通过 axi_lite 接口给 axi_read_start 信号,通知 AXI_read 模块启动读取数据,然后通过 GTP TX 模块发送出去。经过光纤回环,GTP RX 端接收到数据,送给 AX…...

AI辅助教育:九章大模型的数学辅导功能解析
1.简介 九章大模型是学而思为学习研发的模型,该模型对于数学做了很多专门的训练,在题目推荐方面做得比较好。 同时,这个模型也能支持上传图片,对图片内容进行分析,然后针对内容进行校对,推荐相识题目。 支…...

力扣刷题之3128.直角三角形
题干描述 给你一个二维 boolean 矩阵 grid 。 请你返回使用 grid 中的 3 个元素可以构建的 直角三角形 数目,且满足 3 个元素值 都 为 1 。 注意: 如果 grid 中 3 个元素满足:一个元素与另一个元素在 同一行,同时与第三个元素…...

OD C卷 - 机场航班调度
机场航班调度(100) 航班组成:前两个大写字母代表航空公司缩写,后面4个数字代表航班信息;对输入的航班排序 首先按照航空公司缩写升序排序;同一航空公司的按照航班信息升序排序; 输入描述&…...

uni-app中使用支付宝扫码插件并且在真机调试时使用(详细教程)
前言:uni-app自带的扫码api 识别不灵敏,每次都得扫很长时间且不断调整才能扫出来码,所以决定使用支付宝扫码插件,官方插件地址:https://ext.dcloud.net.cn/plugin?id2636#detail 使用步骤: 1、下载插件到项目中 2、…...

每日学术速递8.5—1
1.SV4D: Dynamic 3D Content Generation with Multi-Frame and Multi-View Consistency 标题: SV4D:具有多帧和多视图一致性的动态 3D 内容生成 作者:Yiming Xie, Chun-Han Yao, Vikram Voleti, Huaizu Jiang, Varun Jampani 文章链接&…...