著录项信息
专利名称 | DNS系统以及DNS攻击的防御方法和防御装置 |
申请号 | CN201410136693.7 | 申请日期 | 2014-04-04 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2014-07-30 | 公开/公告号 | CN103957195A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | H04L29/06 | IPC分类号 | H;0;4;L;2;9;/;0;6查看分类表>
|
申请人 | 上海聚流软件科技有限公司 | 申请人地址 | 北京市西城区新街口外大街28号D座112室(德胜园区)
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 北京奇虎科技有限公司,奇智软件(北京)有限公司,上海聚流软件科技有限公司 | 当前权利人 | 北京奇虎科技有限公司,奇智软件(北京)有限公司,上海聚流软件科技有限公司 |
发明人 | 周鸿祎;濮灿;谭晓生 |
代理机构 | 北京智汇东方知识产权代理事务所(普通合伙) | 代理人 | 康正德;薛峰 |
摘要
本发明提供了一种DNS系统以及DNS攻击的防御方法和防御装置。其中该防御方法包括:获取DNS查询请求以及DNS查询请求的请求源的IP地址;按照IP地址在访问记录数据库中查询得出请求源在的请求记录信息;判断请求记录信息中预定周期内的请求次数是否超出了预设阈值;若是,判定请求源进行DNS攻击,并进行防御。由于对每个请求源的IP地址进行判断,不会影响其他请求源的正常访问,实现了精确的攻击防御。
1.一种DNS攻击的防御方法,包括:
获取DNS查询请求以及所述DNS查询请求的请求源的IP地址;
分别判断所述DNS查询请求的数据包数据格式是否符合预定协议,以及所述DNS查询请求的目的端口是否为预定端口;
若均为是,按照所述IP地址在访问记录数据库中查询得出所述请求源的请求记录信息,若任一项判断结果为否,透传所述数据包;
判断所述请求记录信息中预定周期内的请求次数是否超出了预设阈值;
若是,判定所述请求源进行DNS攻击,并进行防御,其中,按照所述IP地址在访问记录数据库中查询得出所述请求源在预定周期内的请求记录信息采用高速缓存二级索引表,并且包括:
按照所述IP地址中前三段的数值,在所述访问记录数据库的第一索引表中查找对应的存储指针,其中所述第一索引表中存储有多个IP地址段分别对应的第二索引表的存储指针;
按照所述IP地址中前三段的数值对应的存储指针读取对应的第二索引表,所述第二索引表中存储有一个IP地址段中多个IP地址的请求记录信息;
按照所述IP地址的第四段的数值,在所述IP地址中前三段的数值对应的所述第二索引表中查找所述IP地址对应的请求记录信息。
2.根据权利要求1所述的方法,其中,获取DNS查询请求包括:
在操作系统的防火墙框架内注册钩子函数;
利用所述钩子函数捕捉所述DNS查询请求。
3.根据权利要求1所述的方法,其中,
在所述第一索引表中,索引值为IP地址的前三段数值的哈希值,索引项为所述IP地址段对应的第二索引表的存储指针,
在所述访问记录数据库的第一索引表中查找对应的存储指针包括:
计算所述IP地址中的前三段的数值的哈希值;
将所述哈希值作为索引值在所述第一索引表中查找对应的存储指针。
4.根据权利要求2所述的方法,其中,按照所述IP地址中前三段的数值,在所述访问记录数据库的第一索引表中查找对应的存储指针之后还包括:
判断所述存储指针是否为空;
若是,为所述IP地址所在的IP地址段分配存储空间,并在所述存储空间内建立包含多个结构体的数组作为第二索引表,并保存所述存储空间的存储指针;
若否,执行按照所述存储指针读取对应的第二索引表的步骤。
5.根据权利要求1所述的方法,其中,按照所述IP地址的第四段的数值,在所述IP地址中前三段的数值对应的所述第二索引表中查找所述IP地址对应的请求记录信息之后还包括:
判断所述第二索引表中是否包含所述IP地址对应的请求记录信息;
若否,在所述第二索引表中分配所述IP地址的存储空间,并将所述DNS查询请求的信息保存为请求记录信息;
若是,在所述IP地址对应的请求记录信息中添加所述DNS查询请求的信息,以对所述请求记录信息进行更新。
6.根据权利要求5所述的方法,其中在判断所述第二索引表中是否包含所述IP地址对应的请求记录信息之后还包括:
扫描所述第二索引表中的请求记录信息,并删除预订时间内持续未更新的请求记录信息。
7.根据权利要求1至6中任一项所述的方法,其中,在判定所述请求源进行DNS攻击之后还包括:
向所述请求源的客户端返回DNS请求异常的信息,以便所述客户端进行提示或处理。
8.一种DNS攻击的防御装置,包括:
请求获取模块,用于获取DNS查询请求以及所述DNS查询请求的请求源的IP地址;
DNS查询请求包判断模块,用于分别判断所述DNS查询请求的数据包数据格式是否符合预定协议,以及所述DNS查询请求的目的端口是否为预定端口;
请求记录信息查询模块,用于如果所述DNS查询请求包判断模块的判断结果均为是,按照所述IP地址在访问记录数据库中查询得出所述请求源的请求记录信息,若任一项判断结果为否,透传所述数据包;
攻击判断模块,用于判断所述请求记录信息记录中在预定周期内的请求次数是否超出了预设阈值;
防御模块,用于在所述攻击判断模块的判断结果为是的情况下,判定所述请求源进行DNS攻击,并进行防御,其中所述请求记录信息查询模块采用高速缓存二级索引表,并且包括:
第一索引表查询子模块,用于按照所述IP地址中前三段的数值在所述访问记录数据库的第一索引表中查找对应的存储指针,其中所述第一索引表中存储有多个IP地址段分别对应的第二索引表的存储指针;
第二索引表查询子模块,用于按照所述IP地址中前三段的数值对应的存储指针读取对应的第二索引表,并按照所述IP地址的第四段的数值在所述IP地址中前三段的数值对应的所述第二索引表中查找所述IP地址对应的请求记录信息,所述第二索引表中存储有一个IP地址段中多个IP地址的请求记录信息。
9.根据权利要求8所述的装置,还包括:
函数注册模块,用于在操作系统的防火墙框架内注册钩子函数;
所述请求获取模块还被配置为:利用所述钩子函数捕捉所述DNS查询请求。
10.根据权利要求8所述的装置,还包括:
第一索引表更新模块,用于判断所述第一索引表查询子模块查询出的存储指针是否为空;若是,为所述IP地址所在的IP地址段分配存储空间,并在所述存储空间内建立包含多个结构体的数组作为第二索引表,并保存所述存储空间的存储指针。
11.根据权利要求8所述的装置,还包括:
第二索引表更新模块,用于判断所述第二索引表中是否包含所述IP地址对应的请求记录信息;若否,在所述第二索引表中分配所述IP地址的存储空间,并将所述DNS查询请求的信息保存为请求记录信息;若是,在所述IP地址对应的请求记录信息中添加所述DNS查询请求的信息,以对所述请求记录信息进行更新。
12.根据权利要求11所述的装置,还包括:
资源回收模块,用于扫描所述第二索引表中的请求记录信息,并删除预订时间内持续未更新的请求记录信息。
13.根据权利要求8至12中任一项所述的装置,还包括:
攻击提示模块,用于向所述请求源的客户端返回DNS请求异常的信息,以便所述客户端进行提示或处理。
14.一种DNS系统,包括:
至少一台DNS安全服务器,用于根据用户请求进行域名解析,DNS安全服务器中设置有根据权利要求8至13中任一项所述的DNS攻击的防御装置。
15.根据权利要求14所述的DNS系统,还包括:
用户客户端,配置为接收所述DNS攻击的防御装置下发的DNS请求异常的信息,并在安全建议显示区域输出提示信息和/或将DNS服务器地址修改为预设的安全地址。
DNS系统以及DNS攻击的防御方法和防御装置\n技术领域\n[0001] 本发明涉及计算机安全技术领域,特别是涉及DNS系统以及DNS攻击的防御方法和防御装置。\n背景技术\n[0002] 域名系统(Domain Name System,简称DNS)是因特网(Internet)的一项核心服务,有着极其重要的地位,其作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。\n[0003] 域名系统作为一个基础性的互联网协议,相对于目前防范措施比较完善的各种WEB服务,基于DNS的防范依然很弱,易被黑客利用攻击。DNS攻击时一种新型的拒绝服务攻击(Denial of Service,简称Dos攻击)。\n[0004] DNS自身的特性决定了它可以被利用作为“攻击放大器”进行分布式拒绝服务攻击。一是DNS协议自身的弱点导致查询请求报文和查询应答报文均可被伪造,网络攻击者可以通过虚假的源地址伪造成被攻击主机向DNS服务器发送DNS查询请求,同时还可以隐藏攻击者的身份;二是DNS服务器对DNS查询请求时“有求必应”,并且无法判断一个DNS查询请求是否为恶意攻击;三是DNS服务器解析域名时,应答报文比查询报文要大,可以实现放大攻击的效果。\n[0005] 例如,在早期针对DNS服务器的攻击行为中,攻击者能够向DNS服务器发出60个字节的查询信息,收到512个字节的回应信息,使通讯量放大8.5倍。随着对DNS协议的深入研究,攻击者发现利用具有递归查询功能的DNS服务器可以把DNS回应数据放大到66倍。如果数以万计的计算机,伪装成被攻击主机同时向DNS服务器连续发送大量的DNS请求数据包,由DNS服务器返回的应答数据量成倍放大,甚至能够超过每秒钟100GB,这对被攻击主机来说是致命的攻击行为。\n[0006] DNS攻击的一个明显特征是伪造成被攻击者的IP发送大量的请求数据包,迫使其回应,达到放大效果。\n[0007] 现有技术中针对DNS攻击采取的方法是利用防火墙限制IP地址的请求量,例如控制某IP段内通过的DNS请求包限制在300个以内每秒,大于这个的请求认为可能是攻击,直接丢弃。采取这样的限制措施,需要对IP地址段设置对应的限制阈值。但是通常DNS服务器的服务的是全球的所有IP。特别是授权DNS服务器的服务对象是全球的本地递归服务器。这些本地递归服务器IP不可能预先知道。因此无法把全球所有的IP逐一进行配置。\n[0008] 当然也可以将IP段设置成较大的地址段进行限制,也就是限制该段的请求总量,这样会造成大量的误拦,无法做到精确对DNS攻击进行防御。\n[0009] 现有技术中的另一种防御方法为:存在发生攻击时,查找攻击源的IP地址,再将该IP地址的限速策略设置到防火墙配置,这种方式的实时性差,无法实现实时防御。\n发明内容\n[0010] 鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的DNS系统、DNS攻击的防御装置和相应的DNS攻击的防御方法。\n[0011] 本发明一个进一步的目的是要使得精确对DNS攻击进行防御。\n[0012] 本发明另一个进一步的目的是要提高防御DNS攻击的实时性,不降低服务的性能和效率。\n[0013] 依据本发明的一个方面,提供了一种DNS攻击的防御方法。该防御方法包括:获取DNS查询请求以及DNS查询请求的请求源的IP地址;按照IP地址在访问记录数据库中查询得出请求源的请求记录信息;判断请求记录信息中在预定周期内的请求次数是否超出了预设阈值;若是,判定请求源进行DNS攻击,并进行防御。\n[0014] 可选地,获取DNS查询请求包括:在操作系统的防火墙框架内注册钩子函数;利用钩子函数捕捉DNS查询请求。\n[0015] 可选地,在获取DNS查询请求之后还包括:分别判断DNS查询请求的数据包数据格式是否符合预定协议,以及DNS查询请求的目的端口是否为预定端口;若均为是,执行查询请求记录信息的步骤。\n[0016] 可选地,按照IP地址在访问记录数据库中查询得出请求源在预定周期内的请求记录信息包括:按照IP地址中前三段的数值,在访问记录数据库的第一索引表中查找对应的存储指针,其中第一索引表中存储有多个IP地址段分别对应的第二索引表的存储指针;按照IP地址中前三段的数值对应的存储指针读取对应的第二索引表,第二索引表中存储有一个IP地址段中多个IP地址的请求记录信息;按照IP地址的第四段的数值,在IP地址中前三段的数值对应的第二索引表中查找IP地址对应的请求记录信息。\n[0017] 可选地,在第一索引表中,索引值为IP地址的前三段数值的哈希值,索引项为IP地址段对应的第二索引表的存储指针,在访问记录数据库的第一索引表中查找对应的存储指针包括:计算IP地址中的前三段的数值的哈希值;将哈希值作为索引值在第一索引表中查找对应的存储指针。\n[0018] 可选地,按照IP地址中前三段的数值,在访问记录数据库的第一索引表中查找对应的存储指针之后还包括:判断存储指针是否为空;若是,为IP地址所在的IP地址段分配存储空间,并在存储空间内建立包含多个结构体的数组作为第二索引表,并保存存储空间的存储指针;若否,执行按照存储指针读取对应的第二索引表的步骤。\n[0019] 可选地,按照IP地址的第四段的数值,在IP地址中前三段的数值对应的第二索引表中查找IP地址对应的请求记录信息之后还包括:判断第二索引表中是否包含IP地址对应的请求记录信息;若否,在第二索引表中分配IP地址的存储空间,并将DNS查询请求的信息保存为请求记录信息;若是,在IP地址对应的请求记录信息中添加DNS查询请求的信息,以对请求记录信息进行更新。\n[0020] 可选地,在判断第二索引表中是否包含IP地址对应的请求记录信息之后还包括:\n扫描第二索引表中的请求记录信息,并删除预订时间内持续未更新的请求记录信息。\n[0021] 可选地,在判定请求源进行DNS攻击之后还包括:向所述请求源的客户端返回DNS请求异常的信息,以便所述客户端进行提示或处理。。\n[0022] 根据本发明的另一个方面,还提供了一种DNS攻击的防御装置,包括:请求获取模块,用于获取DNS查询请求以及DNS查询请求的请求源的IP地址;请求记录信息查询模块,用于按照IP地址在访问记录数据库中查询得出请求源的请求记录信息;攻击判断模块,用于判断请求记录信息记录中在预定周期内的请求次数是否超出了预设阈值;防御模块,用于在攻击判断模块的判断结果为是的情况下,拦截DNS查询请求。\n[0023] 可选地,上述防御装置还包括:函数注册模块,用于在操作系统的防火墙框架内注册钩子函数;请求获取模块还被配置为:利用钩子函数捕捉DNS查询请求。\n[0024] 可选地,上述防御装置还包括:DNS查询请求包判断模块,用于分别判断DNS查询请求的数据包数据格式是否符合预定协议,以及DNS查询请求的目的端口是否为预定端口;请求记录信息查询模块还被配置为:如果DNS查询请求包判断模块的判断结果均为是,执行查询请求记录信息的步骤。\n[0025] 可选地,请求记录信息查询模块包括:第一索引表查询子模块,用于按照IP地址中前三段的数值在访问记录数据库的第一索引表中查找对应的存储指针,其中第一索引表中存储有多个IP地址段分别对应的第二索引表的存储指针;第二索引表查询子模块,用于按照IP地址中前三段的数值对应的存储指针读取对应的第二索引表,并按照IP地址的第四段的数值在IP地址中前三段的数值对应的第二索引表中查找IP地址对应的请求记录信息,第二索引表中存储有一个IP地址段中多个IP地址的请求记录信息。\n[0026] 可选地,上述防御装置还包括:第一索引表更新模块,用于判断第一索引表查询子模块查询出的存储指针是否为空;若是,为IP地址所在的IP地址段分配存储空间,并在存储空间内建立包含多个结构体的数组作为第二索引表,并保存存储空间的存储指针。\n[0027] 可选地,上述防御装置还包括:第二索引表更新模块,用于判断第二索引表中是否包含IP地址对应的请求记录信息;若否,在第二索引表中分配IP地址的存储空间,并将DNS查询请求的信息保存为请求记录信息;若是,在IP地址对应的请求记录信息中添加DNS查询请求的信息,以对请求记录信息进行更新。\n[0028] 可选地,上述防御装置还包括:资源回收模块,用于扫描第二索引表中的请求记录信息,并删除预订时间内持续未更新的请求记录信息。\n[0029] 可选地,上述防御装置还包括:攻击提示模块,用于向请求源的客户端返回DNS请求异常的信息,以便客户端进行提示或处理。。\n[0030] 根据本发明的另一个方面,还提供了一种DNS系统。该DNS系统包括:至少一台DNS安全服务器,用于根据用户请求进行域名解析,DNS安全服务器中设置有根据上述的任一种DNS攻击的防御装置。。\n[0031] 可选地,上述DNS系统还包括:用户客户端,配置为接收DNS攻击的防御装置下发的DNS请求异常的信息,并在安全建议显示区域输出提示信息和/或将DNS服务器地址修改为预设的安全地址。\n[0032] 本发明的DNS攻击的防御方法在接收到DNS查询请求后,实时在访问记录数据库中查找对应的请求记录信息,对该请求源的预定周期内的访问次数进行判断,对于超出访问次数的请求源进行访问限制。由于对每个请求源的IP地址进行判断,不会影响其他请求源的正常访问,实现了精确的攻击防御。\n[0033] 进一步地,本发明优化了IP地址对应请求记录信息的查询方法,采用两级索引表的查询方式,实时性好,不影响服务器正常工作的性能和效率。\n[0034] 上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。\n[0035] 根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。\n附图说明\n[0036] 通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:\n[0037] 图1是根据本发明一个实施例的DNS攻击的防御装置的示意框图;\n[0038] 图2是根据本发明一个实施例的DNS攻击的防御方法的示意图;\n[0039] 图3是根据本发明一个实施例的DNS攻击的防御方法中二级索引结构的示意图;\n[0040] 图4是根据本发明一个实施例的DNS攻击的防御方法的一种流程图;以及[0041] 图5是根据本发明一个实施例的DNS系统的系统架构图。\n具体实施方式\n[0042] 在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。\n各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。\n[0043] 图1是根据本发明一个实施例的DNS攻击的防御装置的示意框图。该DNS攻击的防御装置100一般性地可包括:请求获取模块110、请求记录信息查询模块120、攻击判断模块\n130、防御模块140。在本发明的一些可选实施例中,根据DNS攻击的防御装置100的功能需求和进一步优化,可选择性地配置有:第一索引表更新模块151、第二索引表更新模块152、资源回收模块170、DNS查询请求包判断模块180、函数注册模块190、攻击提示模块160,其中请求记录信息查询模块120可以包括:第一索引表查询子模块121和第二索引表查询子模块\n122。\n[0044] 在以上模块中,请求获取模块110用于获取DNS查询请求以及DNS查询请求的请求源的IP地址;请求记录信息查询模块120,用于按照IP地址在访问记录数据库中查询得出请求源在预定周期内的请求记录信息;攻击判断模块130,用于判断请求记录信息记录中的请求次数是否超出了预设阈值;防御模块140,用于在攻击判断模块130的判断结果为是的情况下,判定请求源进行DNS攻击,并进行防御。\n[0045] IP是英文Internet Protocol(网络之间互连的协议)的缩写,是为计算机网络相互连接进行通信而设计的协议。IP地址是为了使连入Internet的计算机在通信时能够相互识别,Internet中的每一台主机都分配有一个唯一的32位地址,该地址称为IP地址。本实施例中的IP地址默认为IPV4地址。IP段是指一组连续的IP地址,为了简化配置和策略的实现,通常会将一组连续的IP地址组成一个IP段。\n[0046] 本实施例中的DNS攻击的防御装置100根据DNS查询请求源的IP地址利用高速缓存查找算法在访问记录数据库中查找对应的请求记录信息,对该请求源的预定周期内的访问次数进行判断,以确定请求源是否进行DNS攻击。对超出访问次数的请求源进行访问限制,例如拦截超出访问次数的请求源发出的DNS查询请求,或者结合黑白名单,将请求源判为恶意请求源,归入到服务器端的数据库中,对该请求源进行处理。本实施例的防御装置可以精确限制每秒钟为每个IP请求的DNS服务次数,并且不会根据请求端IP的数量增加,性能下降,有效防范DNS攻击。\n[0047] 其中,防御模块140结合黑白名单对请求源进行处理时,合法的具有动态主机配置协议(Dynamic Host Configuration Protocol,简称DHCP)功能的网络连接设备的DNS IP地址发送给具有DHCP功能的网络连接设备,具有DHCP功能的网络连接设备将自身的DNS IP地址修改为合法的DNS IP地址。该预先设置的合法的DNS IP地址白名单列表可以预先存储在客户端数据库中,也可以从网站的服务器(例如:云安全服务器)上下载;如果匹配成功,则说明客户端的DNS IP地址是恶意的,则将恶意DNS IP地址修改为合法的DNS IP地址,例如:通过修改注册表键值,令其指向合法的DNS IP地址,从而达到修改注册表中键值的目的;如果匹配不成功,则放行该DNS IP地址,说明可以访问与之对应的网站。从而结合预先存储在客户端数据库,对超出访问次数的请求源进行访问限制。\n[0048] 本实施例中可以使用函数注册模块190在操作系统的防火墙框架内注册钩子函数,以便请求获取模块110利用钩子函数捕捉DNS查询请求。其中钩子函数(Hook Function)是一种处理或过滤时间的回调函数,当每次发生预定事件时,钩子函数就可以捕捉系统中所有进程将发生的事件消息,它的作用是将消息在抵达窗口程序之前先钩到一个地方以预先处理。\n[0049] 钩子函数获取所有的查询数据包后,需要判断哪些数据包是需要进行处理的数据包,只将需要数据包交由请求获取模块110处理,不需要处理的数据包可以直接透明传输交由后续模块处理。本实施例中的DNS攻击的防御装置可以通过DNS查询请求包判断模块180分别判断DNS查询请求的数据包数据格式是否符合预定协议,以及DNS查询请求的目的端口是否为预定端口;如果DNS查询请求包判断模块180的判断结果均为是,请求记录信息查询模块120执行查询请求记录信息的步骤,如果有任一项判断结果为否,可直接透传数据包,不影响其他数据的传输。\n[0050] 请求记录信息查询模块120可以利用第一索引表查询子模块121和第二索引表查询子模块122进行二级索引查询,具体地,第一索引表查询子模块121按照IP地址中前三段的数值在访问记录数据库的第一索引表中查找对应的存储指针。第二索引表查询子模块\n122,按照IP地址中前三段的数值对应的存储指针读取对应的第二索引表,并按照IP地址的第四段的数值在IP地址中前三段的数值对应的第二索引表中查找IP地址对应的请求记录信息。其中第一索引表中存储有多个IP地址段分别对应的第二索引表的存储指针,第二索引表中存储有一个IP地址段中多个IP地址的请求记录信息。\n[0051] 进一步地,在第一索引表中,索引值为IP地址的前三段数值的哈希值,索引项为IP地址段对应的第二索引表的存储指针,在访问记录数据库的第一索引表中查找对应的存储指针包括:计算IP地址中的前三段的数值的哈希值;将哈希值作为索引值在第一索引表中查找对应的存储指针。\n[0052] 在进行查询后,还需要将本次的访问信息添加至访问记录数据库中的对应位置,进行访问记录信息的更新。另外,查询中还可能出现查询结果为空的情况,因此本发明的实施例中,第一索引表更新模块151判断第一索引表查询子模块121查询出的存储指针是否为空;若是,为IP地址所在的IP地址段分配存储空间,并在存储空间内建立包含多个结构体的数组作为第二索引表,并保存存储空间的存储指针。从而在出现有访问记录数据库之前未记录的IP地址段中IP地址进行DNS查询时,在访问记录数据库的第一索引表中建立该IP地址段的索引项。\n[0053] 第二索引表更新模块152用于判断第二索引表中是否包含IP地址对应的请求记录信息;若否,在第二索引表中分配IP地址的存储空间,并将DNS查询请求的信息保存为请求记录信息;若是,在IP地址对应的请求记录信息中添加DNS查询请求的信息,以对请求记录信息进行更新。利用第二索引表更新模块152可以在第二索引表中更新IP地址的请求记录,并在第二索引表中不存在请求源的IP地址的情况下,新建该IP地址的索引项。\n[0054] 为了节省存储资源,本实施例中还可以利用资源回收模块170,用于扫描第二索引表中的请求记录信息,并删除预订时间内持续未更新的请求记录信息,例如一小时内没有查询请求的IP地址的索引项可以被删除,已释放更多空间。\n[0055] 在确定出攻击后,本实施例的DNS攻击的防御装置还可以向安装有相应客户端的请求源返回DNS请求异常的信息,以便客户端进行提示或处理,例如在安全建议显示区域输出提示信息向用户提示,或者将DNS服务器地址修改为预设的安全地址。\n[0056] 利用攻击提示模块160向用户的客户端报告DNS攻击后,客户端在安全建议显示区域输出请求源的攻击检测结果。显示的方式可以是在类似于安全卫士之类的互联网软件显示界面中的安全隐患部分输出,类似地,还可以通过弹出气泡、对话框等方式显示。通过与客户端的安全联动,进一步提高安全性。\n[0057] 本发明实施例中DNS攻击的防御装置可以针对Linux服务器,借助于Linux自带防火墙框架Netfilter,注册钩子函数。其中,函数注册模块190可以使用Netfilter HOOK函数注册模块,用于将钩子函数注册到Linux内核。这样所有网络协议数据包都会通过注册的钩子处理函数以进行处理。\n[0058] DNS查询请求包判断模块180的判断段条件可以是数据包是UDP包,并且目的端口是53,这是因为DNS协议运行在UDP(User Datagram Protocol,用户数据报协议),使用端口号53。在传输层TCP提供端到端可靠的服务,在UDP端提供尽力交付的服务。其控制端口作用于UDP端口53。\n[0059] 请求记录信息查询模块120的查找算法可以为:当获取到DNS请求包时,将源IP地址的前三段作为哈希表的哈希值。如果该哈希值对应的节点内容为空,则分配一个数组,包含256个结构体。数组中对应的每个结构体一一对应这源IP地址第四段的访问信息。访问信息可以包含有一秒内的访问次数和具体的访问时间。具体的算法在以下实施例中的DNS攻击的防御方法详细介绍。\n[0060] 攻击判断模块130判断请求源IP是否超出了系统设置的限速阈值。判断条件为,如果一秒内访问的次数超过了阈值则将该数据包丢弃,否则向上层协议透明传输该请求,以进行正常处理。\n[0061] 资源回收模块170,定时扫描第二索引表中的请求记录信息,并删除预订时间内持续未更新的请求记录信息。\n[0062] 本发明实施例还提供了一种DNS攻击的防御方法,该DNS攻击的防御法可以由以上实施例介绍的任意一种DNS攻击的装置来执行,以提高实现精准的攻击防御。图2是根据本发明一个实施例的DNS攻击的防御方法的示意图,如图所示,该实现了精确的攻击防御方法包括以下步骤:\n[0063] 步骤S202,获取DNS查询请求以及DNS查询请求的请求源的IP地址;\n[0064] 步骤S204,按照IP地址在访问记录数据库中查询得出请求源的请求记录信息;\n[0065] 步骤S206,判断请求记录信息中在预定周期内的请求次数是否超出了预设阈值;\n[0066] 步骤S208,若是,判定请求源进行DNS攻击,并进行防御。\n[0067] 其中,步骤S202可以包括:在操作系统的防火墙框架内注册钩子函数;利用钩子函数捕捉DNS查询请求。\n[0068] 步骤S202获取DNS查询请求之后还可以包括:分别判断DNS查询请求的数据包数据格式是否符合预定协议,以及DNS查询请求的目的端口是否为预定端口;若均为是,执行查询请求记录信息的步骤。其中判断依据可以为数据包是UDP包,并且目的端口是53,若不满足该条,直接透传数据包,不影响其他数据包的正常传输。\n[0069] 判断依据可以根据RFC(Request For Comments,征求修正意见书)规定的DNS格式进行判断,例如使用以下的RFC文档的内容进行DNS查询请求数据包的判断:1034域名,概念和功能;1035域名,实现和规范;1123Internet主机要求,应用和支持;1886,支持IP版本6的DNS扩展名;1995,DNS中的增量区域传输;1996提示通知区域更改的机制(DNS NOTIFY);\n2136,域名系统中的动态更新(DNS UPDATE);2181,对DNS规范的说明;2308,DNS查询的负缓存(DNS NCACHE);2535,域名系统安全扩展(DNSSEC);2671DNS的扩展机制(EDNS0);2782,指定服务位置的DNS RR(DNS SRV)。\n[0070] 步骤S204无法使用全IP地址映射索引表。原因为索引表的内存消耗过大:针对所用的所有IP地址,索引表将拥有4G表项,每个索引表项存储4字节的指向对应信息结构体指针,那么整个内存资源消耗过大,几乎无法实现。因此步骤S204采用高速缓存采用二级索引表,二级索引表由两级索引组成。其中第一索引表中存储有多个IP地址段分别对应的第二索引表的存储指针。第二索引表中存储有一个IP地址段中多个IP地址的请求记录信息。例如,IP地址前三段作为一级索引,第四段作为二级索引。\n[0071] 步骤S204的一种流程为:按照IP地址中前三段的数值,在访问记录数据库的第一索引表中查找对应的存储指针,按照IP地址中前三段的数值对应的存储指针读取对应的第二索引表,然后按照IP地址的第四段的数值,在IP地址中前三段的数值对应的第二索引表中查找IP地址对应的请求记录信息。\n[0072] 在第一索引表中索引值可以为IP地址的前三段数值的哈希值,索引项为IP地址段对应的第二索引表的存储指针,则以上在访问记录数据库的第一索引表中查找对应的存储指针包括:计算IP地址中的前三段的数值的哈希值;将哈希值作为索引值在第一索引表中查找对应的存储指针。\n[0073] 第一索引表中查询出的存储指针如果为空的情况下,需要为请求源对应的地址段建立对应的第二索引表并存储其指针,具体流程可以为:IP地址所在的IP地址段分配存储空间,并在存储空间内建立包含多个结构体的数组作为第二索引表,并保存存储空间的存储指针;如果存储指针不为空,则对应的第二索引表已建立,直接执行按照存储指针读取对应的第二索引表的步骤。\n[0074] 另外第二索引表中也存在没有IP地址对应的请求记录的情况,此时需要判断第二索引表中是否包含IP地址对应的请求记录信息;若否,在第二索引表中分配IP地址的存储空间,并将DNS查询请求的信息保存为请求记录信息;若是,在IP地址对应的请求记录信息中添加DNS查询请求的信息,以对请求记录信息进行更新。\n[0075] 为节省存储空间,还可以定期扫描第二索引表中的请求记录信息,并删除预订时间内持续未更新的请求记录信息。\n[0076] 一级索引最大值是0XFFFFFF,即索引范围是0X00到0XFFFFFF,步长固定,索引项存储指针。第二段索引最大值是0XFF,即索引范围是0X00到0XFF,步长固定,索引项存储本计数周期开始的时间和本周期访问次数。为了节省内存,一级索引存储指针预先分配,二级索引动态分配,即只有该项对应的IP地址访问才分配内存。\n[0077] 图3是根据本发明一个实施例的DNS攻击的防御方法中二级索引结构的示意图,当有IP地址访问时,直接根据IP地址前段定位到一级索引项;如果索引项的存储指针为空,分配二级索引项的存储空间。根据IP地址第四段,定位二级索引项,并将计数周期开始时间,设置为当前时间,本周期访问次数设为1。\n[0078] 如果索引项指针不为空,根据IP地址第四段数值定位二级索引项。根据计数周期开始时间,判断本周期的请求次数是否超出限值,如果计数周期超出限值,设置为当前时间,本周起访问次数设为1,该数据包放行;如果计数周期没有超出,本周期访问次数加1。从而根据本周期访问次数判断,该IP地址访问次数是否超速,如果本周期访问次数大于最大限制次数认为超速,该数据包直接丢弃,否则放行。一般而言,预定周期可以设置为一秒,若一秒内的请求次数超过限值,则自动进行屏蔽,也就是忽略了超过限值的DNS查询请求。\n[0079] 在步骤S208之后,还可以向请求源的客户端返回DNS请求异常的信息,以便客户端进行提示或处理。客户端可以在安全建议显示区域输出请求源的攻击检测结果,显示的方式是在类似于安全卫士之类的互联网软件显示界面中的安全隐患部分输出,类似地,还可以通过弹出气泡、对话框等方式显示。\n[0080] 图4是根据本发明一个实施例的DNS攻击的防御方法的一种流程图,服务器的网卡接收到数据流量,首先判断数据包是否为UDP数据包以及目的端口是否为53,若均为是,确定数据包为DNS数据包后,进行请求源IP解析,按照请求源的IP地址进行两级索引查询,查找出IP地址的请求记录信息,并判断周期内的IP地址的请求次数是否超过阈值,即判断请求是否超速,如果超速,丢弃该IP地址的DNS查询请求,若未超速,将DNS查询请求透传给上层协议栈进行处理。\n[0081] 本实施例中的防御方法和防御装置可以集成于类似于安全卫士的互联网安全软件中,与安全中心的云端服务器数据连接,及时发现并上报可疑DNS,减小恶意DNS对网络的侵害。\n[0082] 图5是根据本发明一个实施例的DNS系统的系统架构图,该DNS系统提供了高可靠、高防护、高性能的域名解析服务。当顶级服务器、根域服务器或授权服务器遭遇攻击或故障时,本实施例的DNS系统可启动灾备紧急应答模式,保障互联网在根域服务器或授权服务器修复之前基本正常运行,为系统抢修和恢复留下足够的时间。与客户端的安全卫士联动,可以第一时间提示用户,并帮助用户使用安全DNS进行域名解析,并能在故障解除之后迅速将用户的DNS恢复为故障前设置。\n[0083] 在本实施例中的DNS系统包括有一个或多个DNS安全服务器(如图中设置于北京电信、上海电信、上海联通、北京联通中的DNS服务器),分别用于对用户客户端的发出的DNS解析请求进行域名解析,在每台DNS安全服务器中设置有上述任一种实施例中介绍的DNS攻击的防御装置。在如图5所示的DNS系统架构中,当上海电信、北京电信、上海联通以及北京联通的用户在使用网络服务时,在DNS安全服务器设置有DNS攻击的防御装置,该防御装置获取DNS查询请求以及DNS查询请求的请求源的IP地址;按照IP地址在访问记录数据库中查询得出请求源的请求记录信息;判断请求记录信息中在预定周期内的请求次数是否超出了预设阈值;若是,判定请求源进行DNS攻击,并进行防御。防御方法可以使用直接过滤超速的DNS请求,或者结合用户客户端中安装的安全卫士等软件,进行安全防护和提示,例如用户客户端在安全建议显示区域输出提示信息或将DNS服务器地址修改为预设的安全地址。\n[0084] DNS安全服务器通过使用一个高速缓存,采用缓存存取优化、预更新等各种手段尽量降低了解析时延,实现了高速安全解析。当某一个IP请求源的流量异常突增时,DNS攻击的防御装置自动分析和安全联动措施,对该IP的DNS解析请求源限速。通过DNS攻击的防御装置验证的DNS解析请求,可以直接通过RCS集群和灾备系统进行后续处理。\n[0085] 需要说明的是,本例中提及的上海电信、北京电信、上海联通以及北京联通仅用作示例,并不对实际操作中的用户来源形成限定。本发明的防御方法和防御装置还可以在检测出攻击的攻击源后,结合检测可疑DNS的方法通过对比已知DNS和待检测的目标DNS对常用域名的解析结果,在待检测的目标DNS的解析结果明显不同于已知DNS的解析结果时,将目标DNS标记为可疑DNS。可以简单迅速地确定出将域名解析成未知结果的DNS,为进一步分析和处理提供了基础。\n[0086] 在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。\n[0087] 类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。\n[0088] 本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。\n[0089] 此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。\n[0090] 本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的DNS攻击的防御装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。\n这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。\n[0091] 应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。\n[0092] 至此,本领域技术人员应认识到,虽然本文已详尽示出和描述了本发明的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根据本发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修改。因此,本发明的范围应被理解和认定为覆盖了所有这些其他变型或修改。\n[0093] 本发明提供了A1.一种DNS攻击的防御方法,包括:\n[0094] 获取DNS查询请求以及所述DNS查询请求的请求源的IP地址;\n[0095] 按照所述IP地址在访问记录数据库中查询得出所述请求源的请求记录信息;\n[0096] 判断所述请求记录信息中预定周期内的请求次数是否超出了预设阈值;\n[0097] 若是,判定所述请求源进行DNS攻击,并进行防御。\n[0098] A2.根据A1所述的方法,其中,获取DNS查询请求包括:\n[0099] 在操作系统的防火墙框架内注册钩子函数;\n[0100] 利用所述钩子函数捕捉所述DNS查询请求。\n[0101] A3.根据A1所述的方法,其中,在获取DNS查询请求之后还包括:\n[0102] 分别判断所述DNS查询请求的数据包数据格式是否符合预定协议,以及所述DNS查询请求的目的端口是否为预定端口;\n[0103] 若均为是,执行查询所述请求记录信息的步骤。\n[0104] A4.根据A1至A3中任一项所述的方法,其中,按照所述IP地址在访问记录数据库中查询得出所述请求源在预定周期内的请求记录信息包括:\n[0105] 按照所述IP地址中前三段的数值,在所述访问记录数据库的第一索引表中查找对应的存储指针,其中所述第一索引表中存储有多个IP地址段分别对应的第二索引表的存储指针;\n[0106] 按照所述IP地址中前三段的数值对应的存储指针读取对应的第二索引表,所述第二索引表中存储有一个IP地址段中多个IP地址的请求记录信息;\n[0107] 按照所述IP地址的第四段的数值,在所述IP地址中前三段的数值对应的所述第二索引表中查找所述IP地址对应的请求记录信息。\n[0108] A5.根据A4所述的方法,其中,\n[0109] 在所述第一索引表中,索引值为IP地址的前三段数值的哈希值,索引项为所述IP地址段对应的第二索引表的存储指针,\n[0110] 在所述访问记录数据库的第一索引表中查找对应的存储指针包括:\n[0111] 计算所述IP地址中的前三段的数值的哈希值;\n[0112] 将所述哈希值作为索引值在所述第一索引表中查找对应的存储指针。\n[0113] A6.根据A4所述的方法,其中,按照所述IP地址中前三段的数值,在所述访问记录数据库的第一索引表中查找对应的存储指针之后还包括:\n[0114] 判断所述存储指针是否为空;\n[0115] 若是,为所述IP地址所在的IP地址段分配存储空间,并在所述存储空间内建立包含多个结构体的数组作为第二索引表,并保存所述存储空间的存储指针;\n[0116] 若否,执行按照所述存储指针读取对应的第二索引表的步骤。\n[0117] A7.根据A4所述的方法,其中,按照所述IP地址的第四段的数值,在所述IP地址中前三段的数值对应的所述第二索引表中查找所述IP地址对应的请求记录信息之后还包括:\n[0118] 判断所述第二索引表中是否包含所述IP地址对应的请求记录信息;\n[0119] 若否,在所述第二索引表中分配所述IP地址的存储空间,并将所述DNS查询请求的信息保存为请求记录信息;\n[0120] 若是,在所述IP地址对应的请求记录信息中添加所述DNS查询请求的信息,以对所述请求记录信息进行更新。\n[0121] A8.根据A7所述的方法,其中在判断所述第二索引表中是否包含所述IP地址对应的请求记录信息之后还包括:\n[0122] 扫描所述第二索引表中的请求记录信息,并删除预订时间内持续未更新的请求记录信息。\n[0123] A9.根据A1至A8中任一项所述的方法,其中,在判定所述请求源进行DNS攻击之后还包括:\n[0124] 向所述请求源的客户端返回DNS请求异常的信息,以便所述客户端进行提示或处理。\n[0125] 本发明还提供了B10.一种DNS攻击的防御装置,包括:\n[0126] 请求获取模块,用于获取DNS查询请求以及所述DNS查询请求的请求源的IP地址;\n[0127] 请求记录信息查询模块,用于按照所述IP地址在访问记录数据库中查询得出所述请求源的请求记录信息;\n[0128] 攻击判断模块,用于判断所述请求记录信息记录中在预定周期内的请求次数是否超出了预设阈值;\n[0129] 防御模块,用于在所述攻击判断模块的判断结果为是的情况下,判定所述请求源进行DNS攻击,并进行防御。\n[0130] B11.根据B10所述的装置,还包括:\n[0131] 函数注册模块,用于在操作系统的防火墙框架内注册钩子函数;\n[0132] 所述请求获取模块还被配置为:利用所述钩子函数捕捉所述DNS查询请求。\n[0133] B12.根据B10所述的装置,还包括:\n[0134] DNS查询请求包判断模块,用于分别判断所述DNS查询请求的数据包数据格式是否符合预定协议,以及所述DNS查询请求的目的端口是否为预定端口;\n[0135] 请求记录信息查询模块还被配置为:如果DNS查询请求包判断模块的判断结果均为是,执行查询所述请求记录信息的步骤。\n[0136] B13.根据B10至B12中任一项所述的装置,其中,所述请求记录信息查询模块包括:\n[0137] 第一索引表查询子模块,用于按照所述IP地址中前三段的数值在所述访问记录数据库的第一索引表中查找对应的存储指针,其中所述第一索引表中存储有多个IP地址段分别对应的第二索引表的存储指针;\n[0138] 第二索引表查询子模块,用于按照所述IP地址中前三段的数值对应的存储指针读取对应的第二索引表,并按照所述IP地址的第四段的数值在所述IP地址中前三段的数值对应的所述第二索引表中查找所述IP地址对应的请求记录信息,所述第二索引表中存储有一个IP地址段中多个IP地址的请求记录信息。\n[0139] B14.根据B13所述的装置,还包括:\n[0140] 第一索引表更新模块,用于判断所述第一索引表查询子模块查询出的存储指针是否为空;若是,为所述IP地址所在的IP地址段分配存储空间,并在所述存储空间内建立包含多个结构体的数组作为第二索引表,并保存所述存储空间的存储指针。\n[0141] B15.根据B13所述的装置,还包括:\n[0142] 第二索引表更新模块,用于判断所述第二索引表中是否包含所述IP地址对应的请求记录信息;若否,在所述第二索引表中分配所述IP地址的存储空间,并将所述DNS查询请求的信息保存为请求记录信息;若是,在所述IP地址对应的请求记录信息中添加所述DNS查询请求的信息,以对所述请求记录信息进行更新。\n[0143] B16.根据B15所述的装置,还包括:\n[0144] 资源回收模块,用于扫描所述第二索引表中的请求记录信息,并删除预订时间内持续未更新的请求记录信息。\n[0145] B17.根据B10至B16中任一项所述的装置,还包括:\n[0146] 攻击提示模块,用于向所述请求源的客户端返回DNS请求异常的信息,以便所述客户端进行提示或处理。\n[0147] 本发明还提供了C18.一种DNS系统,包括:\n[0148] 至少一台DNS安全服务器,用于根据用户请求进行域名解析,DNS安全服务器中设置有根据B10至B17中任一项所述的DNS攻击的防御装置。\n[0149] C19.根据C18所述的DNS系统,还包括:\n[0150] 用户客户端,配置为接收所述DNS攻击的防御装置下发的DNS请求异常的信息,并在安全建议显示区域输出提示信息和/或将DNS服务器地址修改为预设的安全地址。
法律信息
- 2017-11-03
- 2015-03-18
著录事项变更
发明人由濮灿变更为周鸿祎 濮灿 谭晓生
- 2015-03-18
专利申请权的转移
登记生效日: 2015.02.17
申请人由上海聚流软件科技有限公司变更为北京奇虎科技有限公司
地址由201109 上海市闵行区放鹤路1088号第3幢2057室变更为100088 北京市西城区新街口外大街28号D座112室(德胜园区)
申请人变更为奇智软件(北京)有限公司 上海聚流软件科技有限公司
- 2014-08-27
实质审查的生效
IPC(主分类): H04L 29/06
专利申请号: 201410136693.7
申请日: 2014.04.04
- 2014-07-30
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2009-11-04
|
2009-02-10
| | |
2
| |
2010-07-28
|
2010-01-28
| | |
3
| |
2012-04-04
|
2011-12-07
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |