发明内容
针对现有技术存在的缺陷,本发明提供一种识别伪装LDNS请求的DDOS攻击的防护方法及装置,可对权威DNS服务器进行有效防护,使其不被DDOS攻击。
本发明采用的技术方案如下:
本发明提供一种识别伪装LDNS请求的DDOS攻击的防护方法,包括以下步骤:
S1,当需要防护某一台授权DNS服务器时,向所述授权DNS服务器的前端或者向所述授权DNS服务器的内部布置防护模块;
S2,所述防护模块存储最新的LDNS白名单列表;其中,所述LDNS白名单列表存储全球正常LDNS的IP地址;
S3,所述防护模块实时获得各个正常LDNS到所述授权DNS服务器的TTL正常参考值,然后存储各个正常LDNS的IP地址与TTL正常参考值的对映关系;其中,所述防护模块实时维护最近设定时间长度内的历史TTL值列表,基于所述历史TTL值列表计算得到所述TTL正常参考值;
S4,在所述授权DNS服务器运行时,当接收到异常数量的LDNS请求包时,则将所接收到的各个LDNS请求包发送到所述防护模块;
所述防护模块解析所接收到的LDNS请求包,获得所述LDNS请求包的源IP地址;其中,所述LDNS请求包的源IP地址即为用于标识发送所述LDNS请求包的LDNS的IP地址;然后判断所述源IP地址是否为所述LDNS白名单列表所存储的IP地址;如果是,则执行S5;
S5,所述防护模块进一步解析所述LDNS请求包,获得所述LDNS请求包所携带的当前TTL值;然后查找S3获得的对映关系,获得与所接收到的LDNS请求包的源IP地址对应的TTL正常参考值;然后判断所述当前TTL值偏离所述TTL正常参考值的偏离度是否在设定范围内,如果在,则执行S6;如果不在,则执行S7;
S6,所述防护模块得出当前接收到的所述LDNS请求包为正常包,将所述LDNS请求包发送给所述授权DNS服务器,由所述授权DNS服务器对所述LDNS请求包进行域名解析;同时,将所述当前TTL值增加到所述历史TTL值列表中,并计算得到新的TTL正常参考值,用该新的TTL正常参考值更新S3存储的对映关系;
S7,所述防护模块得出当前接收到的所述LDNS请求包为攻击包,丢弃所述LDNS请求包。
优选的,S2中,所述防护模块存储最新的LDNS白名单列表,具体为:
定期对全球范围内所有的授权DNS服务器的访问日志进行分析,得到最新的LDNS白名单列表;
然后将所得到的最新的LDNS白名单列表发送给各个授权DNS服务器所配置的防护模块。
优选的,S3中,所述防护模块通过以下方法实时获得各个正常LDNS到所述授权DNS服务器的TTL正常参考值:
所述防护模块实时维护最近设定时间长度内的历史TTL值列表,所述历史TTL值列表由多个表项组成,每一个表项用于存储同一LDNS的IP地址以及按时间顺序排列的历史TTL值的映射关系,其中,所述历史TTL值指:LDNS请求包从LDNS到所述授权DNS服务器所经过的路由条数;
对于每一个LDNS所对应的多个历史TTL值,从所述多个历史TTL值中选取设定数量的历史TTL值,然后计算所选取的各个历史TTL值的波动值,如果波动值小于波动正常值,则得出所选取的设定数量的历史TTL值可作为参考样本的结论,然后再对所选取的设定数量的历史TTL值进行计算,得到TTL正常参考值;如果波动值不小于波动正常值,则得出所选取的设定数量的历史TTL值中存在异常请求包,则重新选择若干个历史TTL值,并重新判断其能否作为参考样本。
优选的,采用均方差或标准差计算方法,计算所选取的各个历史TTL值的波动值。
优选的,所述波动正常值为:0.2~0.6。
优选的,S4中,接收到异常数量的LDNS请求包是指:当在时间长度T1内接收到超过设定阈值的LDNS请求包时,则为接收到异常数量的LDNS请求包。
本发明还提供一种识别伪装LDNS请求的DDOS攻击的防护装置,所述防护装置布置于需要被防护的授权DNS服务器的前端或内部;包括:
LDNS白名单列表维护模块,用于维护最新的LDNS白名单列表;其中,所述LDNS白名单列表存储全球正常LDNS的IP地址;
历史TTL值列表维护模块,用于实时维护最近设定时间长度内的历史TTL值列表;
TTL正常参考值获取模块,用于根据所述历史TTL值列表维护模块所维护的历史TTL值列表,实时获得各个正常LDNS到所述授权DNS服务器的TTL正常参考值;
对映关系配置表,用于存储LDNS白名单列表维护模块所维护的全球正常LDNS的IP地址以及所述TTL正常参考值获取模块所获取的TTL正常参考值的对映关系;
异常情况判断模块,用于判断是否接收到异常数量的LDNS请求包;
第一解析模块,用于当所述异常情况判断模块判断结果为是时,解析所接收到的LDNS请求包,获得所述LDNS请求包的源IP地址;其中,所述LDNS请求包的源IP地址即为用于标识发送所述LDNS请求包的LDNS的IP地址;
第一判断模块,用于判断所述第一解析模块解析得到的源IP地址是否为所述LDNS白名单列表维护模块所维护的IP地址;
第二解析模块,用于当所述第一判断模块判断结果为是时,进一步解析所述LDNS请求包,获得所述LDNS请求包所携带的当前TTL值;
查找模块,用于当所述第一判断模块判断结果为是时,以所述第一解析模块解析到的源IP地址为关键词,查找所述对映关系配置表,获得与所述源IP地址对应的TTL正常参考值;
第二判断模块,用于判断所述第二解析模块解析得到的当前TTL值偏离所述查找模块查找到的TTL正常参考值的偏离度是否在设定范围内;
正常包处理模块,用于当所述第二判断模块判断结果为在时,得出当前接收到的所述LDNS请求包为正常包,将所述LDNS请求包发送给所述授权DNS服务器,由所述授权DNS服务器对所述LDNS请求包进行域名解析;同时,将所述当前TTL值增加到所述历史TTL值列表中,并计算得到新的TTL正常参考值,用该新的TTL正常参考值更新S3存储的对映关系;
攻击包处理模块,用于当所述第二判断模块判断结果为不在时,得出当前接收到的所述LDNS请求包为攻击包,丢弃所述LDNS请求包。
本发明提供的识别伪装LDNS请求的DDOS攻击的防护方法及装置具有以下优点:
不需要依赖于网络运营商是否采取相关的路由控制策略,即可对权威DNS服务器进行有效防护,使其不被DDOS攻击,具有防护效果好、CPU消耗低的优点。
具体实施方式
以下结合附图对本发明进行详细说明:
结合图1,本发明提供一种识别伪装LDNS请求的DDOS攻击的防护方法,包括以下步骤:
S1,当需要防护某一台授权DNS服务器时,向所述授权DNS服务器的前端或者向所述授权DNS服务器的内部布置防护模块;
S2,所述防护模块存储最新的LDNS白名单列表;其中,所述LDNS白名单列表存储全球正常LDNS的IP地址;
本步骤具体可采用以下方法实现:
定期对全球范围内所有的授权DNS服务器的访问日志进行分析,得到最新的LDNS白名单列表;
然后将所得到的最新的LDNS白名单列表发送给各个授权DNS服务器所配置的防护模块,从而能够使各个授权DNS服务器所配置的防护模块存储最新的LDNS白名单列表,维护LDNS白名单列表的时效性,提高本发明防护方法的防效效果。
S3,所述防护模块实时获得各个正常LDNS到所述授权DNS服务器的TTL正常参考值,然后存储各个正常LDNS的IP地址与TTL正常参考值的对映关系;其中,所述防护模块实时维护最近设定时间长度内的历史TTL值列表,基于所述历史TTL值列表计算得到所述TTL正常参考值;
具体的,防护模块通过以下方法实时获得各个正常LDNS到授权DNS服务器的TTL正常参考值:
(1)防护模块实时维护最近设定时间长度内的历史TTL值列表,所述历史TTL值列表由多个表项组成,每一个表项用于存储同一LDNS的IP地址以及按时间顺序排列的历史TTL值的映射关系,其中,所述历史TTL值指:LDNS请求包从LDNS到所述授权DNS服务器所经过的路由条数;
以授权DNS服务器为授权DNS服务器-A为例,如表1所示,即为历史TTL值列表的一种具体示例,在表1中,每一列即为一个表项,T1、T2、T3、T4、T5为按时间先后顺序排列的各个历史时间点。最近设定时间长度的数值根据实际需要灵活设定,例如,可设定为最近100秒内。
表1历史TTL值列表
(2)对于每一个LDNS所对应的多个历史TTL值,从所述多个历史TTL值中选取设定数量的历史TTL值,然后计算所选取的各个历史TTL值的波动值,如果波动值小于设定值,则得出所选取的设定数量的历史TTL值可作为参考样本的结论,然后再对所选取的设定数量的历史TTL值进行计算,得到TTL正常参考值;如果波动值不小于设定值,则得出所选取的设定数量的历史TTL值中存在异常请求包,则重新选择若干个历史TTL值,并重新判断其能否作为参考样本。
例如,对于授权DNS服务器-A,在最近100秒钟内共接收到源IP为x1的LDNS请求包100个,然后,将设定数量设置为20个,则从这100个请求包中选取任意20个请求包;然后,分别计算出这20个请求包的TTL值,共对应得到20个TTL值,;统计这20个TTL值的波动情况,如果波动值小于设定值,则认为所选取的这20个请求包中不包含攻击包,计算得到的20个TTL值可作为参考样本,之后,计算这20个TTL值的平均值,该平均值即为TTL正常参考值;相反,如果波动值大于设定值,则认为所选取的这20个请求包中包含攻击包,计算得到的20个TTL值不可作为参考样本,因此,需要从这100个请求包中重新选取20个请求包,此处,重新选取的20个请求包与原来选取的20个请求包只要并不完全相同即可,可以有部分重合;再重新判断其能否作为参考样本。
通过波动值判断所选取的20个请求包中是否包含攻击包,原理为:
将源IP为x1的LDNS记为LDNS-1;对于从不同时刻发出的各个正常的LDNS-1请求包,其在从LDNS-1到授权DNS服务器A所经过的路由条数应该基本相等,此处基本相等的含义为:在大多数情况下,LDNS请求包从LDNS-1到授权DNS服务器A所经过的路由条数均相等;只有在链路拥堵的情况下,才会智能调整其从LDNS-1到授权DNS服务器A的路径,导致LDNS请求包从LDNS-1到授权DNS服务器A所经过的路由条数发生小的波动情况,例如,在一段时间内,对于各个正常的LDNS请求包,从LDNS-1到授权DNS服务器A所经过的路由条数按时间先后顺序排列,依次为100、100、100、99、101。
而对于攻击包,由于攻击者和其所伪装的LDNS请求包通常不在同一网段,因此,攻击者无法测量被伪装的LDNS到目标授权DNS服务器的TTL值。因此,如果所选取的20个请求包中含有攻击包,则攻击包的TTL值会严重偏离其他正常请求包,进而导致这20个请求包的TTL值的波动值较大,因此,可通过分析TTL值的波动情况,而分析所选取的20个请求包是否含有攻击包。
例如,对于授权DNS服务器A,为方便说明,以选取5个请求包验证其能否作为参考样本为例进行说明:设所选取的5个请求包的TTL值依次为:100、100、99、101、150,然后,计算这5个数的波动值,如采用均方差计算,这5个TTL值的均方差=8.94;而波动正常值为0.2,因此,可以看出,这5个请求包的TTL值均方差远远偏离于波动正常值,由此得出所选取的5个请求包含有攻击包,无法作为参考样本。再例如,所选取的5个请求包的TTL值依次为:100、100、98、101、99,然后,采用均方差计算这5个数的波动值,为0.45,而波动正常值通常设定在0.2-0.6范围内,由此得出所选取的5个请求包不包含有攻击包,可以作为参考样本。
需要强调的是,本发明对计算多个TTL值的波动值的具体方法并不限制,可以为均方差或标准差计算方法。另外,波动正常值根据防护精度情况进行设定,越接近于0,其防护精度越高,但同时将正常包识别为攻击包的可能性也越大,一般情况下,设定值可设定为0.2~0.6。
进一步的,在得出所选取的多个请求包为参考样本后,可计算所选取的多个请求包的TTL平均值作为TTL正常参考值。
S3,每当所述防护模块接收到一个LDNS请求包时,所述防护模块解析所接收到的LDNS请求包,获得所述LDNS请求包的源IP地址;其中,所述LDNS请求包的源IP地址即为用于标识发送所述LDNS请求包的LDNS的IP地址;然后判断所述源IP地址是否为所述LDNS白名单列表所存储的IP地址,如果不是,则认为该LDNS请求包为被伪装的攻击包,丢弃该LDNS请求包;如果是,则执行S4;
S4,在所述授权DNS服务器运行时,当接收到异常数量的LDNS请求包时,则将所接收到的各个LDNS请求包发送到所述防护模块;
其中,接收到异常数量的LDNS请求包是指:当在时间长度T1内接收到超过设定阈值的LDNS请求包时,则为接收到异常数量的LDNS请求包。
例如,可设定1秒钟内接收到的LDNS请求包的阀值为50个;如果1秒钟内接收到1000个LDNS请求包时,则这种情况为DDOS攻击的可能性非常高,因此,需要启动防护模块进行防攻击。
所述防护模块解析所接收到的LDNS请求包,获得所述LDNS请求包的源IP地址;其中,所述LDNS请求包的源IP地址即为用于标识发送所述LDNS请求包的LDNS的IP地址;然后判断所述源IP地址是否为所述LDNS白名单列表所存储的IP地址;如果是,则执行S5;
S5,所述防护模块进一步解析所述LDNS请求包,获得所述LDNS请求包所携带的当前TTL值;然后查找S3获得的对映关系,获得与所接收到的LDNS请求包的源IP地址对应的TTL正常参考值;然后判断所述当前TTL值偏离所述TTL正常参考值的偏离度是否在设定范围内,如果在,则执行S6;如果不在,则执行S7;
例如,如果TTL正常参考值为100,而当前TTL值为150,则偏离度为(150-100)/100=50%,而设定范围通常为10%以内,因此,可得出当前分析的LDNS请求包为攻击包。
S6,所述防护模块得出当前接收到的所述LDNS请求包为正常包,将所述LDNS请求包发送给所述授权DNS服务器,由所述授权DNS服务器对所述LDNS请求包进行域名解析;同时,将所述当前TTL值增加到所述历史TTL值列表中,并计算得到新的TTL正常参考值,用该新的TTL正常参考值更新S3存储的对映关系;
S7,所述防护模块得出当前接收到的所述LDNS请求包为攻击包,丢弃所述LDNS请求包。
如图4所示,本发明还提供一种识别伪装LDNS请求的DDOS攻击的防护装置,如图3所示,防护装置布置在被防护的授权DNS服务器的前端,或者,如图2所示,所述防护装置嵌入在被防护的授权DNS服务器的内部;所述防护装置包括:
LDNS白名单列表维护模块,用于维护最新的LDNS白名单列表;其中,所述LDNS白名单列表存储全球正常LDNS的IP地址;
历史TTL值列表维护模块,用于实时维护最近设定时间长度内的历史TTL值列表;
TTL正常参考值获取模块,用于根据所述历史TTL值列表维护模块所维护的历史TTL值列表,实时获得各个正常LDNS到所述授权DNS服务器的TTL正常参考值;
对映关系配置表,用于存储LDNS白名单列表维护模块所维护的全球正常LDNS的IP地址以及所述TTL正常参考值获取模块所获取的TTL正常参考值的对映关系;
异常情况判断模块,用于判断是否接收到异常数量的LDNS请求包;
第一解析模块,用于当所述异常情况判断模块判断结果为是时,解析所接收到的LDNS请求包,获得所述LDNS请求包的源IP地址;其中,所述LDNS请求包的源IP地址即为用于标识发送所述LDNS请求包的LDNS的IP地址;
第一判断模块,用于判断所述第一解析模块解析得到的源IP地址是否为所述LDNS白名单列表维护模块所维护的IP地址;
第二解析模块,用于当所述第一判断模块判断结果为是时,进一步解析所述LDNS请求包,获得所述LDNS请求包所携带的当前TTL值;
查找模块,用于当所述第一判断模块判断结果为是时,以所述第一解析模块解析到的源IP地址为关键词,查找所述对映关系配置表,获得与所述源IP地址对应的TTL正常参考值;
第二判断模块,用于判断所述第二解析模块解析得到的当前TTL值偏离所述查找模块查找到的TTL正常参考值的偏离度是否在设定范围内;
正常包处理模块,用于当所述第二判断模块判断结果为在时,得出当前接收到的所述LDNS请求包为正常包,将所述LDNS请求包发送给所述授权DNS服务器,由所述授权DNS服务器对所述LDNS请求包进行域名解析;同时,将所述当前TTL值增加到所述历史TTL值列表中,并计算得到新的TTL正常参考值,用该新的TTL正常参考值更新S3存储的对映关系;
攻击包处理模块,用于当所述第二判断模块判断结果为不在时,得出当前接收到的所述LDNS请求包为攻击包,丢弃所述LDNS请求包。
本发明提供的识别伪装LDNS请求的DDOS攻击的防护方法及装置具有以下优点:
(1)不需要依赖于网络运营商是否采取相关的路由控制策略,即可对权威DNS服务器进行有效防护,使其不被DDOS攻击;
(2)具有防护效果好、CPU消耗低的优点。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。