分布式拒绝服务攻击是如何实现拒绝服务的_分布式拒绝服务攻击原理是什么

分布式拒绝服务攻击是如何实现拒绝服务的_分布式拒绝服务攻击原理是什么摘要:拒绝服务(DoS)攻击是指攻击者通过某种手段,有意地造成计算机或网络不能正常运转从而不能向合法用户提供所需要的服务或者使得服务质量降低。分布式拒绝服务(DDoS)攻击则是指处于不同位置的多个攻击者同时向一个或数个目标发起攻击,或者一个或多个攻击者控制了位于不同位置的多台机器(称为傀儡机)并利用这些机器对受害者同时实施攻击。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

摘要:拒绝服务(DoS)攻击是指攻击者通过某种手段,有意地造成计算机或网络不能正常运转从而不能向合法用户提供所需要的服务或者使得服务质量降低。分布式拒绝服务(DDoS)攻击则是指处于不同位置的多个攻击者同时向一个或数个目标发起攻击,或者一个或多个攻击者控制了位于不同位置的多台机器(称为傀儡机)并利用这些机器对受害者同时实施攻击。

一、关于分布式拒绝服务攻击技术的现状

SYNFlood是当前最流行的DoS (拒绝服务攻击)与DDoS(Distributed Denial Of Service 分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,使被攻击方资源耗尽(CPU满负荷或内存不足)的攻击方式。

二、分布式拒绝服务攻击原理

SYN Flood攻击的过程在TCP协议中被称为三次握手(Three-wayHandshake),而SYN Flood拒绝服务

攻击就是通过三次握手而实现的。

(1) 攻击者向被攻击服务器发送一个包含SYN标志的TCP报文,

SYN(Synchronize)即同步报文。同步报文会指明客户端使用的端口以及TCP连接的初始序号。这时同被攻击服务器建立了第一次握手。

(2) 受害服务器在收到攻击者的SYN报文后,将返回一个SYN+ACK的报文,表示攻击者的请求被接受,同时TCP序号被加一,ACK(Acknowledgment)即确认,这样就同被攻击服务器建立了第二次握手。

(3) 攻击者也返回一个确认报文ACK给受害服务器,同样TCP序列号被加一,到此一个TCP连接完成,三次握手完成。

具体原理是:TCP连接的三次握手中,假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(第三次握手无法完成),这种情况下服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接。这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒~2分钟);一个用户出现异常导致服务器的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟这种情况(伪造IP地址),服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源。即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。实际上如果服务器的TCP/IP栈不够强大,最后的结果往往是堆栈溢出崩溃—— 即使服务器端的系统足够强大,服务器端也将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求(毕竟客户端的正常请求比率非常之小),此时从正常客户的角度看来,服务器失去响应,这种情况就称作:服务器端受到了SYN Flood攻击(SYN洪水攻击)。

SYN COOKIE防火墙是SYN cookie的一个扩展,SYN cookie是建立在TCP堆栈上的,他为linux操作系统提供保护。SYN cookie防火墙是linux的 一大特色,你可以使用一个防火墙来保护你的网络以避免遭受SYN洪水攻击。

下面是SYN cookie防火墙的原理:

client firewall server

—— ———- ——

1. SYN———– – – – – – – – — ->

2.<————SYN-ACK(cookie)

3. ACK———– – – – – – – – — ->

4. – – – – – –SYN—————>

5. <- – – – – – – – ————-SYN-ACK

6. – – – – – –ACK—————>

7. ———–> relay the——->

<———– connection<——-

1:一个SYN包从C发送到S

2:防火墙在这里扮演了S的角色来回应一个带SYN cookie的SYN-ACK包给C

3:C发送ACK包,接着防火墙和C的连接就建立了。

4:防火墙这个时候扮演C的角色发送一个SYN给S

5:S返回一个SYN给C

6:防火墙扮演C发送一个ACK确认包给S,这个时候防火墙和S的连接也就建立了

7:防火墙转发C和S间的数据

如果系统遭受SYN Flood,那么第三步就不会有,而且无论在防火墙还是S都不会收到相应在第一步的SYN包,所以我们就击退了这次SYN洪水攻击。

三、被SYNFlood攻击时的现象

1、 被攻击主机上有大量等待的TCP连接

2、 网络中充斥着大量的无用的数据包,源地址为假

3、 制造高流量无用数据,造成网络拥塞,使受害主机无法正常和外界通讯

4、 利用受害主机提供的服务或传输协议上的缺陷,反复高速的发出特定的服务请求,使受害主机无法及时处理所有正常请求

5、 严重时会造成系统死机

根据攻击对目标造成的破坏程度,攻击影响自低向高可以分为:无效(None)、服务降低(Degrade)、可自恢复的服务破坏(Self-recoverable)、可人工恢复的服务破坏(Manu-recoverable)以及不可恢复的服务破坏(Non-recoverable)。

如果目标系统在拒绝服务攻击发生时,仍然可以提供正常服务,则该攻击是无效的攻击。如果攻击能力不足以导致目标完全拒绝服务,但造成了目标的服务能力降低,这种效果称之为服务降低。而当攻击能力达到一定程度时,攻击就可以使目标完全丧失服务能力,称之为服务破坏。服务破坏又可以分为可恢复的服务破坏和不可恢复的服务破坏,网络拒绝服务攻击所造成的服务破坏通常都是可恢复的。一般来说,风暴型的DDoS攻击所导致的服务破坏都是可以自恢复的,当攻击数据流消失时,目标就可以恢复正常工作状态。而某些利用系统漏洞的攻击可以导致目标主机崩溃、重启,这时就需要对系统进行人工恢复;还有一些攻击利用目标系统的漏洞对目标的文件系统进行破坏,导致系统的关键数据丢失,往往会导致不可恢复的服务破坏,即使系统重新提供服务,仍然无法恢复到破坏之前的服务状态。

 

四、解决方法

从防御角度来说,有几种简单的解决方法:

第一种是缩短SYN Timeout时间

由于SYN Flood攻击的效果取决于服务器上保持的SYN半连接数,这个值=SYN攻击的频度x SYN Timeout,所以通过缩短从接收到SYN报文到确定这个报文无效并丢弃该连接的时间,例如设置为20秒以下(过低的SYN Timeout设置可能会影响客户的正常访问),可以成倍的降低服务器的负荷。

第二种方法是设置SYN Cookie

就是给每一个请求连接的IP地址分配一个Cookie,如果短时间内连续受到某个IP的重复SYN报文,就认定是受到了攻击,以后从这个IP地址来的包会被丢弃。 可是上述的两种方法只能对付比较原始的SYN Flood攻击,缩短SYN Timeout时间仅在对方攻击频度不高的情况下生效,SYN Cookie更依赖于对方使用真实的IP地址,如果攻击者以数万/秒的速度发送SYN报文,同时利用随机改写IP报文中的源地址,以上的方法将毫无用武之地。例如SOCK RAW返回的套接字通过适当的设置可以自己完全控制IP头的内容从而实现IP欺骗。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/226591.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • app唤起小程序_微信小程序支付轮训

    app唤起小程序_微信小程序支付轮训在同一开放平台账号下的移动应用及小程序无需关联即可完成跳转,非同一开放平台账号下的小程序需与移动应用(APP)成功关联后才支持跳转。可在“管理中心-移动应用-应用详情-关联小程序信息”,为通过审核的

    2022年8月2日
    9
  • java 高效列转行,java 列转行「建议收藏」

    java 高效列转行,java 列转行「建议收藏」一个员工在多个部门内,一个部门有多个员工List———–>Map>1.部门类publicclassDept{publicDept(Stringid){this.id=id;}privateStringid;//省略get,set方法}2.员工类publicclassUser{publicUser(Stringid)…

    2022年6月25日
    28
  • 差分数组模板

    差分数组模板参考于labuladong:论那些小而美的算法技巧:差分数组一、什么时候使用差分数组呢?相信很多人都遇到过这类题:给定一个原数组长度为n,查询次数m,每次查询给定一个区间[l,r]和一个整数k,使得原数组介于[l,r]之间的元素同时增(或减)k输出最终的数组num[8,2,6,3,1]m=2131023注:第一次查询num=83741第二次查询num=1161041最终num=1

    2022年6月7日
    35
  • betterIntellij 最新激活码【在线破解激活】[通俗易懂]

    betterIntellij 最新激活码【在线破解激活】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
    102
  • java二维数组三种初始化方法(实例)[通俗易懂]

    java二维数组三种初始化方法(实例)[通俗易懂]初始化方法:1、使用大括号直接赋值,适合已经确定知道数组元素的情况2、给定二维数组的大小3、数组第二维的长度可变化,未改变代码举例如下:publicclassNewArray{publicstaticvoidmain(String[]args){//第一种://int[][]arr1=newint[][]…

    2022年5月24日
    44
  • google gis_系统数据交互图

    google gis_系统数据交互图转载自http://www.cnblogs.com/yinxiangpei/articles/2574502.html,仅用作资料保存 在地理行业中,项目前期规划都会涉及遥感图像,更高级一点的是建立研究区的三维模型。在实践中,笔者对这一些常见的疑问进行了总结,包括如下几个方面。   1、 如何把ArcGIS的数据导入到GoogleEarth中;   2、 如何把Googl

    2025年11月23日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号