缓解DDoS攻击的方法与流程

文档序号:20509680发布日期:2020-04-24 18:22阅读:273来源:国知局
缓解DDoS攻击的方法与流程

本发明涉及互联网技术领域,尤其涉及一种缓解ddos攻击的方法。



背景技术:

服务程序通过响应客户端的连接请求来提供服务功能。服务程序部署在服务器、云服务器等网络设施上,能同时响应的最大连接数、数据吞吐量、业务并发量等性能指标受多种因素限制,容易受到ddos攻击。ddos攻击(distributeddenialofserviceattack)意为“分布式拒绝服务攻击”,即,利用大量分布式节点对目标服务发送海量请求,耗尽服务器的性能资源,导致正常合法用户无法获得服务。

现有技术中,应对ddos攻击的防护手段包括如下方案:

1)资源隔离:通过部署高性能的数据和流量处理设备,分析、识别、过滤异常的流量和请求;

2)用户规则:通过限制用户的流量类型、请求频率、数据包特征、业务间隔时间等规则,在满足正常服务的前提下,减少服务资源开销,更好的对抗ddos攻击;

3)大数据智能分析:利用大数据技术,基于对海量数据的分析建模,进而对合法用户进行模型化,并利用这些模型的特征进行过滤,实现对ddos流量的精确清洗;

4)资源对抗:通过硬件资源和带宽资源的堆砌应对ddos流量。

上述现有技术手段通常要求服务提供方支出高昂的硬件成本、部署成本、计算成本、运维成本,对网络基础设施和云平台的技术实力高度依赖。



技术实现要素:

本发明针对上述现有技术的问题,提供一种不需要硬件资源,通过降低或缓解ddos攻击频次的方法。

本发明的第一技术方案为缓解ddos攻击的方法,其特征在于,包括如下步骤:

步骤1:客户端(1)向服务端(2)发送建立连接请求(s101),

步骤2:服务端(2)响应连接请求,生成target,作为客户端(1)计算工作量时的目标值,

步骤3:客户端(1)基于target按照规定的数据格式生成工作量消息(m),将工作量消息(m)作为工作量证明发送给服务端(2),

步骤4:服务端2通过单向散列函数计算工作量消息(m)的散列值(h),通过验证h中包含target判断工作量证明的真实性,

步骤5:对通过验证的连接请求提供服务。

第二技术方案基于第一技术方案,所述数据格式中,包括请求的业务数据、target、patch,其中patch为用于达成计算目标的随机数据,由客户端(1)指定patch的初始值。

第三技术方案基于第二技术方案,步骤3中,所述客户端1还向服务端2发送target在散列值(h)中的位置信息(f),

步骤4中:服务端2验证target在散列值(h)中的位置,判断工作量证明的真实性。

第四技术方案基于第三技术方案,所述单向散列函数包括但不限于md5、sha-1、sha-2系列算法。

第五技术方案基于第一至第四中的任一技术方案,所述target使用不重复的数据,包括使用累加器的累加值、随机数、当前时间。

由于客户端(1)在生成工作量证明时,需要进行适量的耗时计算,对恶意客户端(1)来说,可在基本不消耗服务端计算资源的前提下,提高客户端(1)的计算消耗,增加了连接成本,有效防御和缓解服务端被ddos攻击的问题。

附图说明

图1为第一实施方式中,客户端与服务端建立连接的时序图;

图2为客户端发起连接请求时的流程图;

图3为服务端接收连接请求时的流程图;

图4为第二实施方式中,客户端与服务端建立连接的时序图。

具体实施方式

下面结合附图对本发明的较佳实施例进行详细阐述,参考标号是指本发明中的组件、技术,以便本发明的优点和特征在适合的环境下实现能更易于被理解。下面的描述是对本发明权利要求的具体化,并且与权利要求相关的其它没有明确说明的具体实现也属于权利要求的范围。

本发明通过工作量证明技术,通过增加连接发起方的计算成本,缓解ddos攻击。

工作量证明技术是指,要求客户端1(连接的发起者)在发起连接请求时,需要进行适量的耗时计算,计算结果发送给服务端2。服务端2通过快速计算,验证客户端1提供的工作量的真实性。通过消耗客户端1(连接的发起者)的计算资源,缓解其对服务端2的ddos攻击的频次。

以下对本发明的第一实施方式进行说明。

图1为客户端与服务端建立连接的时序图。

客户端1向服务端2发送建立连接请求(s101)。

服务端2响应连接请求,生成target(s102)。target是客户端1计算工作量时的目标值。

服务端2将生成的target值发送至客户端1(s103)。

客户端1基于target通过耗时计算,生成工作量证明消息m(s104)。工作量证明消息中包含需要服务端响应的业务数据data。

客户端1将工作量证明的相关信息(m,f)发送至服务端2(s105)。m为工作量证明消息,f为用于验证工作量证明真实性的数据。关于m,f以下结合实施例详细说明。

服务端2验证工作量证明(s106)。通过验证的,提供相应的服务;未通过验证的,判断为恶意攻击行为拒绝提供服务。

服务端2将验证结果发送至客户端1(s107)。

以下对客户端生成工作量证明进行说明。

在本实施方式中,工作量证明的生成采用单向散列函数(hash函数)。单向散列函数(hash函数)的特殊性质:给定m可快速计算得到h=h(m);但知道h,无法通过逆向计算m=h-1(h)得到m;给定m,想找到另一消息m’,并满足h(m)=h(m’)在计算上也是不可行的。

表1为工作量消息m的数据格式;表2为各字段的说明。

客户端1生成的工作量证明消息m中包含data(数据载荷)、target(目标值)、patch(补丁值)。

表1

表2

客户端1计算工作量证明消息(以下简称消息)m的过程如下:

1)生成需要服务端2响应的业务请求数据data。

2)生成消息m,m中包含data(数据载荷)、target(目标值)、patch(补丁值),初始时,客户端1指定patch的初始值;消息m的数据格式如表1所示。

3)计算消息m的散列值h=hash(m),此处使用的单向散列函数包括但不限于md5、sha-1、sha-2系列算法等;

4)在散列值h中查找m.target内容;如果h中不包含m.target,改变m.patch的值(变化方法包括但不限于:增加、减小、随机值),返回步骤3)重新计算计算消息m的散列值h,直至h中出现m.target内容;

5)确定m.target内容在散列值h中的位置f。对于长度为l的散列值,出现m.target内容的位置f为0≤f≤l-m.len2。表3为出现m.target内容位置说明。

表3

6)将m、f发送给服务端,完成工作量证明消息的发送。

服务端2只要对其进行验证即可判断工作量证明的真实性。

服务端2验证工作量证明的过程如下:

1)服务端2已知m.target的长度与期望值t(t由服务端指定,或由服务端指定生成规则);

2)接收客户端1(连接发起者)提供的m、f;

3)判断是否f>l-m.len2,如果f>l-m.len2,判断不是正确的工作量证明,验证失败;

4)判断m的内部数据结构是否正确,如果不正确,同样验证失败;

5))判断是否如果同样验证失败;

6)计算消息m的散列值h=hash(m);

7)在h中的f位置,验证m.target内容,如果不一致,验证失败;

8)验证通过。

客户端1中,为使散列值h中包含m.target,需要不断改变m.patch的值(试凑),重复进行消息m的散列值h。虽然hash运算本身占用的计算资源并不多,但为了达到“h中出现完整的m.target”这一目标,需要反复尝试变化m.patch后计算hash,消耗了客户端巨量的计算资源。要匹配的target数据的长度越长,消耗的计算资源越多。与客户端1相比,由于服务端2在验证工作量证明的过程中只需计算一次hash,占用的计算资源几乎可以不用考虑。利用这种不对称性,既达到了缓解ddos攻击的目的,又不增加服务端的计算负担,降低了对硬件资源的要求。

图2为客户端发起连接请求时的流程图。

步骤s301:向服务端2发送建立连接请求。

步骤s302:接收服务端2生成的target(目标值)。

本实施方式中,服务端2使用当前时间生成target,这样客户端1每次发送建立连接请求以后都会收到不同的target值。

作为变形例,服务端2也可以使用客户端向服务端2发起连接次数的累加值作为target值。或服务端2在客户端1每次进行连接时,均生成一个随机数,使用此随机数作为target值。

步骤s303:生成需要服务响应的业务请求数据data。

步骤s304:生成消息m。

步骤s305:计算消息m的散列值h=hash(m)。

步骤s306:在散列值h中查找m.target的内容。

步骤s307:在散列值h中查找m.target的内容。如果h中不包含m.target,进入步骤s308。否则,进入步骤s309。

步骤s308:改变m.patch的值(如:增加、减小、使用随机值)后,返回步骤s305,重新计算h,直到h中出现m.target的内容。

步骤s309:计算散列值h的长度l,以及散列值h中出现m.target内容的位置为f。

步骤s310:将m、f值发送给服务端2。

服务端2收到客户端1发送的m、f值以后,对客户端1生成的工作量证明进行验证。

图3为服务端接收连接请求时的流程图。

步骤s401:服务端2接收客户端1发送的m、f。

步骤s402:判断f值是否大于l-m.len2,如果大于l-m.len2,进入步骤s409:验证失败;否则,进入步骤s403。

步骤s403:判断m的数据结构是否正确,如果m的数据结构不正确,进入步骤s409:验证失败;否则,进入步骤s404。

步骤s403:判断是否如果进入步骤s409:验证失败;否则,进入步骤s405。

步骤s405:计算消息m的散列值h=hash(m)。

步骤s406:计算散列值h中出现m.target内容的位置f,取得m.target的内容。

步骤s407:将m.target的内容与服务端2生成的m.target进行对比,如果不一致,进入步骤s409:验证失败,拒绝提供服务;否则,进入步骤s408:验证通过。验证通过后进入步骤s410,服务端2根据业务数据data,提供相应的服务,并将验证结果发送给客户端1。

以上对第一实施方式进行了说明,其效果如下:

1)通过设置生成和验证工作量证明机制,对恶意客户端来说,显著增加了连接成本,减少了恶意攻击的数量,缓解了服务端被ddos攻击的问题,尤其适用于在请求频次低、对响应性能不敏感的应用场景下缓解ddos攻击。

2)服务端识别ddos流量所需的计算成本非常小,不会过多增加服务器的负担。

3)可动态调节生成工作量证明所消耗的计算时间。

4)对业务性能不会造成影响。

以下对第二实施方式进行说明。

第二实施方式与第一实施方式的不同点在于,客户端1和服务端2事先约定target的生成规则,客户端1提交基于这个规则动态生成的target值的工作量证明消息m。以下重点对不同部分进行说明,相同部分做简单说明或省略。

作为生成规则,如,客户端1使用本地时间生成target,服务端设置一个窗口,合理误差区间内的客户端时间生成的target被视为有效。当遭遇消息重放攻击时,通过比较m.target和服务端时间,可以识别出较早的重放消息,从而缓解攻击流量。

图4为第二实施方式中客户端与服务端建立连接的时序图。

客户端1使用本地时间作为target生成(s201)。为验证target,服务端2设置一个窗口,判定时合理误差区间内的客户端1时间生成的target被视为有效。

客户端1采用与第一实施方式同样的方法生成工作量证明消息m,f(s202)。

客户端1将工作量证明消息m,f发送至服务端2,向服务端2发起建立连接请求(s203)。

服务端2使用本地时间生成target(s204)。

服务端2使用本地时间生成target,如果客户端1生成的target在窗口内,判断target有效,反之,判断为无效。当遭遇消息重放攻击时,通过比较m.targethe服务时间,可以较早识别出重放消息,从而缓解攻击流量。判断为有效时,验证通过,提供相应的服务,否则拒绝连接。

服务端2将验证结果发送给客户端1(s205)。

第二实施方式除具有第一实施方式的效果外,由于使用本地时间作为target(目标值)3)能有效阻住消息重放攻击。

在上述第一实施方式中,完成整个流程需要2次通讯,且服务端需保存每个待验证的会话的target值。与此相比,第二实施方式中,在客户端1和服务端2建立请求连接后只要进行1次通讯即可,响应速度和吞吐量等性能指标更优。

应该注意的是,上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1