基于TCP/IP 协议栈划分的DDoS攻击与防御

原理图文介绍

ICMP

ICMP请求需要一些服务器资源来处理每个请求并发送响应。该请求还需要传入消息(echo-r​​equest)和传出响应(echo-r​​eply)的带宽。Ping Flood 攻击旨在压倒目标设备响应大量请求和/或使用虚假流量使网络连接过载的能力。通过让僵尸网络中的许多设备针对具有 ICMP 请求的相同互联网资产或基础设施组件,攻击流量会大幅增加,可能会导致正常网络活动的中断。从历史上看,攻击者经常使用虚假IP 地址进行欺骗以屏蔽发送设备。在现代僵尸网络攻击中,恶意行为者很少发现需要掩饰机器人的 IP,而是依靠大型未受欺骗的机器人网络来饱和目标的容量。

Ping (ICMP) Flood 的 DDoS 形式可以分解为 2 个重复步骤:

攻击者使用多个设备向目标服务器发送许多 ICMP 回显请求数据包。
然后,目标服务器向每个请求设备的 IP 地址发送一个 ICMP 回显回复数据包作为响应。
Ping Flood 的破坏性影响与向目标服务器发出的请求数量成正比。与NTP放大、DNS放大等基于反射的DDoS攻击不同,Ping Flood攻击流量是对称的;目标设备接收的带宽量只是从每个机器人发送的总流量的总和。
主要互相消耗带宽,可能是比较没用的DDOS攻击反正就是你和服务器总得有个人先崩溃

ICMP防御

开启目标机的防火墙自动限流
防御原理
基本上没有业务承载在ICMP协议上,而ICMP flood至今仍旧是DDoS攻击的一大类,因此直接限流即可,将流量限制在较小范围内,超过阈值部分的报文直接丢弃。

SYN Flood攻击

SYN Flood攻击正是利用了TCP三次握手的这种机制。攻击者向服务器发送大量的SYN报文请求,当服务器回应SYN+ACK报文时,不再继续回应ACK报文,导致服务器上建立大量的半连接,直至老化。这样,服务器的资源会被这些半连接耗尽,导致正常的请求无法回应
在这里插入图片描述

图 1

TCP提供可靠的传输层,其中可靠性的保障之一就是确认从另一端收到的数据。但是数据和确认在传输过程中都有丢弃的可能,所以TCP通过在发送时设置一个定时器来解决这个问题。如果定时器到达设置的时间了,还是没有收到某个数据的确认报文,则TCP就会重传这个数据。华为专业AntiDDoS设备正是利用了TCP这种重传的机制,推出“首包丢弃”功能与“TCP源探测”结合的防御方式,以应对超大流量的SYN Flood攻击。当SYN报文蜂拥而至时,专业AntiDDoS设备会将收到的第一个报文记录并直接丢弃,然后等待第二个重传报文。收到重传报文后,再对重传报文进行源探测。
当然SYN Cookie也是专门用来防范SYN Flood攻击的一种手段。它的原理是,在TCP服务器收到TCP SYN包并返回TCP SYN+ACK包时,不分配一个专门的数据区,而是根据这个SYN包计算出一个cookie值。在收到TCP ACK包时,TCP服务器在根据那个cookie值检查这个TCP ACK包的合法性。如果合法,再分配专门的数据区进行处理未来的TCP连接。
本文采用就是cookie认证防御

UDP协议

UDP协议的广泛应用,为黑客们发动UDP Flood攻击提供了平台。UDP Flood属于带宽类攻击,黑客们通过僵尸网络向目标服务器发起大量的UDP报文,这种UDP报文通常为大包,且速率非常快,通常会造成以下危害:
消耗网络带宽资源,严重时造成链路拥塞。大量变源变端口的UDP Flood会导致依靠会话转发的网络设备,性能降低甚至会话耗尽,从而导致网络瘫痪。
最初防火墙对UDP Flood的防御方式就是限流,通过限流将链路中的UDP报文控制在合理的带宽范围之内。

UDP Flood的限流

防火墙上针对UDP Flood的限流有三种:
基于目的IP地址的限流:即以某个IP地址作为统计对象,对到达这个IP地址的UDP流量进行统计并限流,超过部分丢弃。
基于目的安全区域的限流:即以某个安全区域作为统计对象,对到达这个安全区域的UDP流量进行统计并限流,超过部分丢弃。
基于会话的限流:即对每条UDP会话上的报文速率进行统计,如果会话上的UDP报文速率达到了告警阈值,这条会话就会被锁定,后续命中这条会话的UDP报文都被丢弃。当这条会话连续3秒或者3秒以上没有流量时,防火墙会解锁此会话,后续命中此会话的报文可以继续通过。
限流虽然可以有效缓解链路带宽的压力,但是这种方式简单粗暴,容易对正常业务造成误判。为了解决这个问题,防火墙又进一步推出了针对UDP Flood的指纹学习功能。

在这里插入图片描述

图 2

指纹学习是通过分析客户端向服务器发送的UDP报文载荷是否有大量的一致内容,来判定这个UDP报文是否异常。防火墙对到达指定目的地的UDP报文进行统计,当UDP报文达到告警阈值时,开始对UDP报文的指纹进行学习。如果相同的特征频繁出现,就会被学习成指纹,后续命中指纹的报文判定这是攻击报文,作为攻击特征进行过滤。

DNS Query Flood

DNS Query Flood 实际上是UDP Flood 攻击的一种变形,由于DNS服务在互联网中具有不可替代的作用,一旦DNS服务器瘫痪,影响很大。
DNS Query Flood攻击采用的方法是向被攻击的服务器发送海量的域名解析请求。通常,请求解析的域名是随机生成的,大部分根本不存在,并且通过伪造端口和客户端IP,法制查询请求被ACL过滤。被攻击的DNS服务器在接收到域名解析后,首先会在服务器上查找是否有对应缓存,由于域名是随机生成的,几乎不可能有相应的缓存信息,当没有缓存信息,且该域名无法有该DNS服务器进行解析时,DNS服务器会向器上层DNS服务递归查询域名信息,直到全球互联网的13台根DNS服务器。大量不存在的域名解析请求给服务器带来很大的负载,当解析请求超过一定量时,就会造成DNS服务器域名解析超时,这就便达成了攻击的目的。
在这里插入图片描述

图 3

DNS防御

DNS重定向的方式去判断客户端的真实性,当客户端发送DNS请求的时候,会向客户端发送DNS重定向,表示若客户端想要去查询它的目的DNS,那么它就应该先去查询另外由FW指定的域名,于是若防火墙接收到这个额外的DNS请求就表示这个客户端时真实存在的。

那么针对第一种方式,很有可能客户端无法支持TCP的DNS请求而导致错误的防范,第二种相对于第一种具有比较好的容错率。

Https Flood

攻击原理:此攻击类型主要攻击目标是使用https协议的Web服务器上的访问服务,当发生攻击时攻击者向被攻击服务器大量高频的发送请求服务,使服务器忙于向攻击者提供https响应资源从而导致不能想正常的合法用户提供请求响应服务
在这里插入图片描述

图 4

防火墙针对HTTP Flood攻击防御方式:

HTTP Flood源认证
基本模式(META刷新)
增强模式(验证码认证)
302重定向模式

http slow post慢速攻击

攻击原理:在post提交方式中,允许在http的头中声明content-length,也就是指定http消息实体的传输长度。当web服务器接收到请求头部中含有content-length字段时,服务器会将该字段的值作为http body的长度,持续接收数据并达到content-length值时对实体的数据内容进行处理。slow post会传送包括整个header的http请求,在提交了头以后,将后面的body部分卡住不发送,这时候服务器在接受了post长度以后,在处理数据之前会等待客户端发送post的内容,攻击者保持连接并且以10s-100s一个字节的速度去发送,就达到了消耗资源的效果,因此不断增加这样的连接会使得服务器的资源被消耗
原理图:
在这里插入图片描述

图 5

主要设计实现过程验证与分析

实现网络层DDoS攻击:Ping Flood攻击;

攻击机 kali 2022 ip(192.168.1.87)
靶机 win7 ip(192.168.1.88)
在这里插入图片描述

图 6
在这里插入图片描述

图 7

本次实验数据包发送速度并不是很迅速一秒几十个吧
在这里插入图片描述

图 8
通过折线图可以直观体现出来就是一直ping而已以前可能很厉害,现在估计不行了
数据包过大消耗系统资源而已,什么死亡之ping,感觉不够格

防御win 7 开启防火墙
在这里插入图片描述

图 9
开启防火墙基本就禁止了ping 不通

实现传输层DDoS攻击:TCP Flood攻击、UDP Flood攻击;

TCP Flood攻击

攻击机kali 2022 ip(192.168.1.87)
靶机Ubuntu IP(192.168.1.177)
验证主机win10(192.168.1.106)
使用工具 netwox
在这里插入图片描述

图 10

在Ubuntu上查看连接
在这里插入图片描述

图 11
修改Ubuntu的tcp_syncookies值为0
在这里插入图片描述

图 12

攻击开始
在这里插入图片描述

图 13
主机连接失败
在这里插入图片描述

图 14

查看一下,当然内容太长没截完
在这里插入图片描述

图 15

抓包看一下
在这里插入图片描述

图 16

在这里插入图片描述

图 17

防御措施采用cookie 认证设置它为1就可以了
在这里插入图片描述

图 18

下图为kali 与win10 验证使用Telnet连接就可以连接了
在这里插入图片描述

图 19

Udp flood 攻击

攻击机kali 2022 ip(192.168.1.87)
靶机Ubuntu IP(192.168.1.177)
使用工具 hping3
在这里插入图片描述

图 20

Kali进行攻击
在这里插入图片描述

图 21
结果如下图
在这里插入图片描述

图 22
攻击升级
进行随机ip地址对于目标地址的攻击
在这里插入图片描述

图 23

查看靶机状态
在这里插入图片描述

图 24
在这里插入图片描述

图 25

抓包试试看
在这里插入图片描述

图 26

在这里插入图片描述
图 27

实现应用层DDoS攻击:

DNS Query Flood攻击

攻击机kali 2022(ip 192.168.1.87)
服务器 window 2003 server (192.168.1.86)
客户机 win7 (192.168.1.88)
按照理论应该dns服务器接dns服务器这样套接服务器在进行dns查询不过由于没有更多的服务器搭建不好dns只能使用一个服务器进行洪水攻击,模拟很多IP在这里插入图片描述
查询dns使得客户机无法访问

图 28

在这里插入图片描述

图 29
在这里插入图片描述

图 30

同理 win7 通过域名服务也可访问,由于浏览器版本兼容问题导致有些偏差
在这里插入图片描述

图 31

开始实行攻击
在这里插入图片描述

图 32

在这里插入图片描述

图 33
在这里插入图片描述

图 34

绘制为折线图
在这里插入图片描述

图 35

可以见到短短几秒钟攻击次数为50000多次
防御可是使用dns 防火墙比如onedns
HTTP Flood攻击
说来这个攻击也是巧合正愁没有攻击的网站,但是呢由于python课程要求,我找了个可视化数据系统,在自己电脑跑了一下发现他是http GET请求的系统
在这里插入图片描述

图 36
系统操作就是通过请求完成页面转换,页面如下
在这里插入图片描述

图 37
那好,我们进行攻击试试
运行程序
在这里插入图片描述

图 38
攻击之后所有页面都不显示
在这里插入图片描述

图 39
抓包看看
在这里插入图片描述

图 40
在这里插入图片描述

图 41
后来停下攻击系统就可以用了
在这里插入图片描述

图 42

low and slow攻击

攻击机 kali 2022 192.168.1.87
靶机 centos7 192.168.1.86/Ubuntu 192.168.1.177
客户机 win7 192.168.1.88
工具 slowhttptest
本次实验使用攻击原理请看前面的攻击原理图
使用win7访问服务器
在这里插入图片描述

图 43

Kali2022开始攻击
在这里插入图片描述

图 44

开始攻击结果显示服务器可以访问
在这里插入图片描述

图 45

随后显示服务器不行了
在这里插入图片描述

图 46
客户机再次连接服务器发现失败
在这里插入图片描述

图 47
抓包看一下
在这里插入图片描述

图 48
绘制图表

在这里插入图片描述

图 49
攻击成功了。
防御,由于系统不一样采用Ubuntu系统
首先看一下win7访问Ubuntu
在这里插入图片描述

图 50
开始攻击
在这里插入图片描述

图 51
导致win7连接不上
在这里插入图片描述

图 52
看一下连接数
在这里插入图片描述

图 53

抓包看看攻击次数
在这里插入图片描述

图 54

也还可以一秒一千
在这里插入图片描述

图 55

那好我们进行防御

设置一个ip最大连接数20攻击后查看确实是20
在这里插入图片描述

图 56
在这里插入图片描述

图 57
虽然攻击成功但并没有影响
win7照常访问

在这里插入图片描述

图 58

防御成功

总结

到此实验结束,总结一下,确实有些没做,其实感觉没啥好些的,搭配防火墙就可以了,由于防火墙软件,都是类似公司运行,还有几乎是云服务器没办法条件不允许啊,比如防御应用层的ddos攻击可以搭配WAF (web应用防火墙)几乎都可以搞定有些防火墙需要付费,这些测试不了,原理大致差不多。
ICMP洪水攻击,这个攻击可能需要很久时间,也不一定有用毕竟现在设备也挺好的,死亡之ping我也试过,就一直ping把数据包大一点效果并不明显,所以不太好说效果。后来查资料知道,这个以前比较流行,后来打补丁,给补好了,Windows里面有个栈,把他扩大了,或者设置了限制数据包长度。问题也不大防火墙可以过滤掉,现在不常用了。Tcp的synflood攻击以前做过,所以操作起来问题不大,udp也是同样的道理,工具齐全事倍功半,最让我印象深刻就是应用层的ddos攻击,每一个实验都不简单,首先dns查询攻击,原理也清楚,轮番查询服务器,造成堵塞,可是服务器不够,dns服务器还得有上一级域名解析,当然这种攻击解析越多越好,条件有限,机子不够,做出来的效果虽然一样,但也不一定百分百成功,需要等待一会,清除自己dns缓存,浏览器缓存等才可以做出访问不了域名情况。还有就是搭建IIS web 服务器出现自己无权限访问页面,那么就需要在点击网站属性在权限里,添加用户,简单点就是用户写everyone,这样就可以了。
对于http flood攻击,其实这个攻击,说实话类似于cc攻击,非常相似
,就是请求不一样,本质上差不多,做这个实验,说实话还是在实际网站测试比较好,毕竟有服务器在那里,请求处理都有自己模拟可能差点意思,不过也是机缘巧合,遇到一个网站,正好可以测试,还是在自己本地运行,不会干扰正常生产环境,毕竟DDOS攻击打偏了可能导致区域断网,那就是罪过了,还有就是slow http flood 攻击,这个是最有意思一个了,主要是那个软件提供的攻击比较多,这个软件测试是服务器的,看了很多文献,知道就是不同的服务器是不一样的,对应的防御方法也不同,比如Apache服务器可以添加模块进行防御,Nginx:
关闭慢速连接:可以关闭正在写入数据的连接 IIS1.设定请求筛选属性: 用来限制HTTP请求的URL及query string长度,总之不同的服务器框架不同效果也不太相同。
此次大作业,付出很多,看了不知道多少博客,在GitHub上找了太多工具,测试很多遍,做的也比较细致,也走了许多弯路,有时候一个实验要做好几遍才可以,把这份作业完成,尽管不是太完美,也有许多改进的地方,但是也算是的一份心血。

感谢

特别感谢下面这些博文为我提供知识理解
https://blog.csdn.net/qq_52269550/article/details/117306512
https://blog.csdn.net/u014023993/article/details/86689690
https://blog.csdn.net/ZY_Eliza/article/details/122167581
https://www.jianshu.com/p/031705b22260
http://blog.nsfocus.net/cc-attack-defense/
https://blog.qualys.com/vulnerabilities-threat-research/2011/09/19/testing-web-servers-for-slow-http-attacks
https://blog.csdn.net/stpice/article/details/81872590
https://blog.csdn.net/weixin_57567655/article/details/122847049
http://html.rhhz.net/buptjournal/html/2017s117.htm#outline_anchor_12
https://blog.csdn.net/axxxwo/article/details/120238887?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-3-120238887-blog-79581349.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-3-120238887-blog-79581349.pc_relevant_default&utm_relevant_index=6

特别提醒

不可用于生产环境测试,本文仅用于学习交流,希望各位同学做一个遵纪守法,爱国爱家的好人

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亦在春风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值