DNS攻击防护方法及系统
文献发布时间:2023-06-19 12:02:28
技术领域
本发明涉及计算机网络通信技术领域,尤其涉及一种DNS攻击防护方法及系统。
背景技术
DNS(Domain Name System,域名系统)提供了互联网上的一个重要服务,其本质是建立了人的名字世界和底层的二进制协议地址世界的桥梁。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网,而不用去记住能够被机器直接读取的 IP地址数串,通过域名最终得到该域名对应的 IP 地址的过程叫做域名解析。
实现域名解析的架构包括递归DNS服务器及权威DNS服务器等,他们通常暴露在互联网的公共空间中,供任意公众去查询,因此伴随而来的也就会存在相应的恶意攻击,如DDOS(Distributed denial of service attack,分布式拒绝服务攻击)攻击。现有DNS服务器及相应软件的运行机制导致需要大量的硬件资源,特别是花费内存等开销,当DNS服务器遭受大流量攻击的情况下,就会更加放大相应的开销,甚至超过处理性能的阈值,导致DNS服务器不能正常提供服务。
发明内容
本发明的目的在于提供一种DNS攻击防护方法及系统,解决了现有技术中DNS系统资源开销非常大,抗恶意攻击的能力不强,存在安全性瓶颈的技术问题。
为了解决上述技术问题,本发明的一种DNS攻击防护方法,包括如下步骤:
通过内核态中的钩子程序获取网卡接收到的DNS报文,所述钩子程序触发直接对数据链路接收路径的报文处理;
与所述钩子程序连接的BPF程序,所述BPF程序加载于所述钩子程序中实施至少包括在网络协议栈之前执行丢弃或允许通过的处理。
作为本发明上述DNS攻击防护方法的进一步改进,所述BPF程序为字节码,加载于所述钩子程序中以实现对内核态网卡驱动的更新。
作为本发明上述DNS攻击防护方法的进一步改进,所述BPF程序执行的处理是基于数据采集分析组件的抽样分析生成的规则。
作为本发明上述DNS攻击防护方法的进一步改进,所述数据采集分析组件加载于所述钩子程序中基于特定的归纳模型判断DNS报文的特征以确定恶意流量。
作为本发明上述DNS攻击防护方法的进一步改进,所述BPF程序执行的处理由规则管理组件更新下发。
为了解决上述技术问题,本发明的一种DNS攻击防护系统,包括:
钩子单元,用于通过内核态中的钩子程序获取网卡接收到的DNS报文,所述钩子程序触发直接对数据链路接收路径的报文处理;
BPF单元,包括与所述钩子程序连接的BPF程序,所述BPF程序加载于所述钩子程序中实施至少包括在网络协议栈之前执行丢弃或允许通过的处理。
作为本发明上述DNS攻击防护系统的进一步改进,在所述BPF单元中,所述BPF程序为字节码,加载于所述钩子程序中以实现对内核态网卡驱动的更新。
作为本发明上述DNS攻击防护系统的进一步改进,在所述BPF单元中,所述BPF程序执行的处理是基于数据采集分析组件的抽样分析生成的规则。
作为本发明上述DNS攻击防护系统的进一步改进,所述数据采集分析组件加载于所述钩子程序中基于特定的归纳模型判断DNS报文的特征以确定恶意流量。
作为本发明上述DNS攻击防护系统的进一步改进,在所述BPF单元中,所述BPF程序执行的处理由规则管理组件更新下发。
与现有技术相比,本发明通过在数据接收最前端就开始介入处理,基于特定规则对数据进行预决策,减少不必要的内存分配,以抵抗高并发及大流量的开销,同时采用类似虚拟机的机制,来实现线上的处理决策实时更新,提高了处理决策规则的管理灵活性。本发明可以减少资源开销的水平,提高恶意攻击的防护能力。
结合附图阅读本发明实施方式的详细描述后,本发明的其他特点和优点将变得更加清楚。
附图说明
为了更清楚地说明本发明实施方式或现有技术的技术方案,下面将对实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见,下面描述中的附图仅仅是本发明中记载的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明一实施方式中DNS攻击防护方法流程图。
图2为本发明一实施方式中DNS攻击防护架构图。
图3为本发明一实施方式中数据采集分析组件流程示意图。
图4为本发明一实施方式中规则管理组件流程示意图。
图5为本发明一实施方式中DNS攻击防护系统示意图。
具体实施方式
以下将结合附图所示的各实施方式对本发明进行详细描述。但这些实施方式并不限定本发明,本领域的普通技术人员根据这些实施方式所做出的结构、方法或功能上的变化均包含在本发明的保护范围内。
需要说明的是,在不同的实施方式中,可能使用相同的标号或标记,但这些并不代表结构或功能上的绝对联系关系。并且,各实施方式中所提到的“第一”、“第二”也并不代表结构或功能上的绝对区分关系,这些仅仅是为了描述的方便。
如图1所示,本发明一实施方式中DNS攻击防护方法流程图。DNS攻击防护方法,具体包括如下步骤:
步骤S1、通过内核态中的钩子程序获取网卡接收到的DNS报文,所述钩子程序触发直接对数据链路接收路径的报文处理。对于现有的DNS服务的实现路径,接收到的网络报文无论是否是标准的DNS报文,都需要从接收报文到网络协议栈,再到用户态经历整个过程,而其间分配skb(socket buffer,套接字缓存)、套接字加锁、内核/用户态切换都需要耗费相应的资源,特别是宝贵的内存资源。当DNS服务遭受到外部网络大流量攻击的情况下,就会让资源耗费成倍增长从而超出性能阈值,导致DNS服务不能正常提供服务。而在本发明实施方式中,则是对DNS报文接收后的路径进行优化,在内核态的网络协议栈与网卡之间设置特定的机制,对接收到的DNS报文进行快速决策及修改,通过前置诊断及分流而减少不必要流量对资源的耗费。
具体地,如图2所示,对于处于网络协议栈之上工作在用户态的DNS应用服务,由于需要耗费可观的资源,因此在目标情况下需要通过过滤使DNS应用服务仅仅对正常的DNS报文进行处理,进一步,本发明就需要保证非法的报文不会通过网络协议栈到达DNS应用服务,将可能的攻击报文在到达网络协议栈之前就可以被分析和拦截,从而达到保护DNS应用服务的功能。另外,也可以将一些仅需要转发的报文无需经过用户态,而直接在底层的内核态实现转发。但是,这里还需要解决两个主要问题,其一,如何知道DNS报文的到达,其二、依靠什么机制判断DNS报文的处理类型,以下将详述。
在本发明实施方式中,可以在内核态中对网卡驱动设置特定的钩子程序,钩子程序用于在操作系统调用前或执行过程中拦截DNS报文,进一步在本发明实施方式中,钩子程序实现对网卡接收到来的DNS报文进行收集和自定义事件处理。网卡驱动中的钩子程序在中断处理之后,网络协议栈本身实施内存分配之前,会触发对数据链路接收路径的报文处理,由于是在网络协议栈的最底层接收路径上对DNS报文进行处理,即可以理解为直接对网卡数据的流向处理,因此不必过早地在分配skb、套接字加锁、内核/用户态切换的过程中耗费资源,即使存在大流量的数据到来时,也可以将资源消耗节省到可控的范围内。
步骤S2、与所述钩子程序连接的BPF(Berkeley Packet Filter,柏克莱封包过滤器)程序,所述BPF程序加载于所述钩子程序中实施至少包括在网络协议栈之前执行丢弃或允许通过的处理。对于步骤S1中,钩子程序拦截到DNS报文后,就需要进一步对截获的DNS报文进行路径分发,具体如图2所示,在钩子程序所在的网卡驱动,就需要决定是进一步允许将报文交付给上层的网络协议栈,以致到达用户态的DNS应用服务从而实现应用层DNS应用处理,还是判定为恶意报文直接执行丢弃。在具体的实施方式中,上述的分发是由钩子程序连接的BPF程序决定的,BPF程序是同样存在于内核态中,加载于钩子程序之上的报文处理方式,它可以在网络协议栈之前,通过配置或更新来根据不同的报文类型来改变具体的报文流向。优选地,BPF程序为字节码,加载于所述钩子程序中以实现对内核态网卡驱动的更新,这样可以使用于DNS报文流向处理的程序数据化,相当于可以理解为对网卡硬件的功能修改,保证BPF程序的动态加载,即在需要二十四小时连续提供DNS服务的线上系统,可以在不重启的情况下更新底层的DNS报文处理逻辑,大大提高整个线上系统的灵活性。
进一步,还可以利用BPF程序的定义,在网络协议栈之前设置更多的处理逻辑,不仅仅局限于执行丢弃或者允许通过,还可以将接收到的报文直接返回给原接收网卡发送出去,也可以根据需要将相应的报文通过其他设置的网卡转发出去。这样可以大大减少通过网络协议栈到达用户态的报文数据,使资源的消耗得到了有效的管控。
如上所述,通过内核态中的钩子程序和BPF程序的配合,将报文在离网卡接收路径最近的位置做提前判断,这样可以避免不必要的资源消耗,同时对于正常的DNS报文,还可以按照传统的方式通过网络协议栈进入用户态,由DNS应用服务进行处理,不破坏原有的网络架构。进一步,为了提高BPF程序的灵活性和现场实际环境的适应性,如图2所示,还会在网卡接口处并接有数据采集分析组件,优选地也是工作在内核态,与钩子程序配合获取新接收到的报文并进行分析,用于动态判断接收报文的实际情况,通过对接收报文的分析来动态更新BPF程序执行的规则。在具体的实施方式中,如图3所示,数据采集分析组件采集接收报文中的DNS数据,比如分析包括报文的源IP、源端口、目的IP、目的端口、使用的协议、查询域名、查询类型等。然后根据采集的DNS数据对DNS数据进行阈值分析,比如分析访问量异常高的IP地址等,即可以将超过访问阈值的IP地址对应的报文定义为非法报文。相应地,生成的是字节码形式的BPF程序灌入到网卡驱动中,与钩子程序配合,可以将其定义的对应的报文执行丢弃操作。亦或者数据采集分析组件基于特定的分类方式,将特定特征的报文定义为需要返回转发给原网卡或者转发给其他网卡的规则。即数据采集分析组件加载于所述钩子程序中基于特定的归纳模型判断DNS报文的特征以确定不同类型的报文类型,比如恶意攻击的报文,从而生成相应的规则下发给对应的网卡驱动实现报文拦截。
如图2所示,在更多的实施方式中,还会设置规则管理组件,所述BPF程序执行的处理由规则管理组件更新下发,即规则管理组件可以单独或者与数据采集分析组件配合来下发在网卡驱动中实现的报文分发规则。具体地,如图4所示,通过查询监听端口来分析内核态中存在的规则,判断是否接收到新的规则,如果没有就继续查询监听端口,如果接收到相应的规则,就会对相应的DNS规则进行分析,比如具体对相关的源IP、源端口、目的IP、目的端口、协议、查询域名、查询类型、规则类型、规则动作等进行分析,以确定相应的规则是否适合,或者是否需要添加、删除、更新相应的规则,从而更加灵活地去配置底层报文的拦截策略。进一步,实现DNS规则更新,将规则映射变更到内核态的BPF程序中。优选地,还会对是否执行成功进行判断,如果成功了,就会返回到查询监听端口步骤继续执行监听以处理可能接收到的新规则。如果没有执行成功,会将其失败信息记录日志后,再返回进行继续监听。在优选的实施方式中,规则管理组件可以工作在用户态中,便于与操作用户进行交互及更好的应用设计,规则管理组件可以通过网络协议栈与内核态中的BPF程序进行交互,从而实现相应的规则变更,操作用户可以通过规则管理组件直观地查询到当下在内核态所执行的报文转发规则,进一步可以实现简单的规则管理等。
本发明的实施方式相对于DPDK(Data Plane Development Kit,数据平面开发套件)而言,并不需要完全绕开内核态中的网络协议栈,不需要像DPDK那样把DNS报文直接从网卡拉到用户态,而是建立在传统的操作系统架构之下的,无需第三方代码库和许可,无需专用的CPU,对于用户态的应用程序而言,并没有任何的变化,只是并不会收到被内核态中直接定义为恶意流量的报文。整个DNS体系是通过内核态接收到各种DNS查询在内的报文,内核态中的数据采集分析组件会直接对DNS流量进行抽样采集分析,确定是否为攻击流量,进一步还会确定是否下发更新现有的规则。规则管理组件负责规则的管理,包括添加、删除、更新等,规则管理组件对攻击流量下发拦截规则,相应地就是根据实际情况进行修改、更新相应的规则。而在网络协议栈前会根据下发的规则形成的BPF程序,来实现对钩子程序拦截的报文进行特定规则的处理。具体地,可以根据一般规则判断是否为合法的DNS查询,如果是进一步匹配是否为源IP黑名单,如果不是进一步再判断是否再目的端口白名单范围内,如果符合白名单规则,进一步再去匹配域名列表黑名单,如果匹配不成功,说明完全是正常的DNS报文,此时就实施允许通过处理,将对应的报文上交给网络协议栈再发送给用户态的DNS应用服务。如果上述任何一个判断分支判定为非法的报文,此时就可以执行丢弃操作,在更多的实施方式中,也可以执行从原网卡或其他网卡发送出去。需要说明的是,是否为非法报文的判断不仅仅局限于对源IP、目的端口或域名等属性的判断,具体还可以根据实际的情况,比如根据数据采集分析组件的动态分析,或者根据上层规则管理组件下发的规则,来选取一个或多个关于报文的属性进行匹配判定是否为正常的报文。在更多的实施方式中,这种规则生成的方式还可以结合规则管理组件处于用户态的特征及数据采集分析组件处于内核态的特征,进行分工配合,进一步还可以在条件允许的情况下结合人工智能来进一步提高非法报文识别的准确性。
如图5所示,本发明一实施方式中DNS攻击防护系统示意图。DNS攻击防护系统具体包括钩子单元U1、BPF单元U2,钩子单元U1负责对网卡最源头报文的拦截触发,而BPF单元U2则是在钩子单元U1的基础上对获取到的报文进行分类路径处理,BPF单元U2本身基于的路径处理规则可以动态更新的。钩子单元U1和BPF单元U2都工作在内核态,并不是直接对网路协议栈的旁路,而是利用内核态的路径架构,在网络协议栈与网卡之间的路径上建立起多个可选择的“匝道”,使得本身单向通过网络协议栈的路径基础上,结合钩子程序的中断处理而在网络协议栈之前增加了多个数据通路,避开了直接发往网络协议栈的单一方式。
钩子单元U1,用于通过内核态中的钩子程序获取网卡接收到的DNS报文,所述钩子程序触发直接对数据链路接收路径的报文处理。钩子单元U1是工作在内核态执行网卡数据拦截与分析的起点,它是能保证在网络协议栈前进行多数据通路处理的基本保证。钩子单元U1中的钩子程序用于在操作系统调用前或执行过程中拦截DNS报文,它可以在离网卡最近的位置接管DNS报文的接收。钩子单元U1的钩子程序可以放置在网卡驱动中,在中断发生时,获取相应的拦截报文,对DNS攻击拦截速度可达到10G网卡限速。
BPF单元U2,包括与所述钩子程序连接的BPF程序,所述BPF程序加载于所述钩子程序中实施至少包括在网络协议栈之前执行丢弃或允许通过的处理。经过钩子单元U1的数据报文需要在网络协议栈之前执行相应的分流操作,具体地可以包括执行丢弃、允许通过、从当前网卡发送出去、从其他网卡转发等,相应的操作逻辑则需要基于BPF单元U2的管理与执行。
在BPF单元U2中,包括有与钩子单元U1中的钩子程序连接的BPF程序,BPF程序是用来执行具体报文处理的程序,它是加载于所述钩子程序中实施至少包括上述在网络协议栈之前执行丢弃或允许通过的处理,比如,当判断为正常的报文时,将其直接传递给网络协议栈,而如果是非法报文时,则会在网络协议栈之前就实施丢弃。在更多的实施方式中,如果判断为DNS应用服务不需要直接处理只需要转发给其他设备的报文,此时可以在不进入到用户态的前提下直接将报文从当前网卡或者配置的其他网卡转发给指定目的地址的网络设备。
对于BPF单元U2而言,为了提高整个DNS体系处理的灵活性,如果直接采用原有网卡驱动的固定执行架构,显然是不现实的,特别是网络攻击报文具有不可预测性,无法采用一个固定规则来定义未来任何形式的攻击流量,此时则需要建立一个动态的BPF程序更新架构。因此,优选地,BPF程序为字节码,可以理解为将可执行的程序数据化,通过通信机制下发到对应的网卡驱动中,网卡驱动中具有对字节码进行解释执行的平台,从而具有动态更新能力的BPF程序加载于所述钩子程序中以实现对内核态网卡驱动的更新。
既然实现了BPF程序的动态更新,在BPF单元U2中,BPF程序则会基于不同规则生成的机制来配合实施管理更新。一种是基于数据采集分析组件的抽样分析生成的规则来执行,数据采集分析组件优选地也工作在内核态,对钩子程序拦截的报文特征进行分析,基于特定的归纳模型判断DNS报文的特征以确定是否为恶意流量,最终会下发什么样的报文采取什么样的数据分发路径的规则。另一种BPF程序是由规则管理组件更新下发,规则管理组件更多的是扮演操作用户与内核态BPF组件之间的纽带,从而完善规则添加、删除、更新的入口。需要说明的是,DNS攻击防护系统的具体实施方式还可以参照DNS攻击防护方法的具体实施方式。
结合本申请所公开的技术方案,可以直接体现为硬件、由控制单元执行的软件模块或二者组合,即一个或多个步骤和/或一个或多个步骤组合,既可以对应于计算机程序流程的各个软件模块,亦可以对应于各个硬件模块,例如ASIC(Application SpecificIntegrated Circuit,专用集成电路)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)或其他可编程逻辑器件、分立门或晶体逻辑器件、分立硬件组件或者其任意适当组合。为了描述的方便,描述上述装置时以功能分为各种模块分别描述,当然,在实施本申请时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
通过以上实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请也可以借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分也可以以软件产品的形式体现出来。该软件可以由微控制单元执行,依赖于所需要的配置,也可以包括任何类型的一个或多个微控制单元,包括但不限于微控制器、DSP(Digital Signal Processor,数字信号控制单元)或其任意组合。该软件存储在存储器,例如,易失性存储器(例如随机读取存储器等)、非易失性存储器(例如只读存储器、闪存等)或其任意组合。
综上所述,本发明通过在数据接收最前端就开始介入处理,基于特定规则对数据进行预决策,减少不必要的内存分配,以抵抗高并发及大流量的开销,同时采用类似虚拟机的机制,来实现线上的处理决策实时更新,提高了处理决策规则的管理灵活性。本发明可以减少资源开销的水平,提高恶意攻击的防护能力。
应当理解,虽然本说明书按照实施方式加以描述,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为了清楚起见,本领域技术人员应当将说明书作为一个整体,各实施方式中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。
上文所列出的一系列的详细说明仅仅是针对本发明的可行性实施方式的具体说明,它们并非用以限制本发明的保护范围,凡未脱离本发明技艺精神所作的等效实施方式或变更均应包含在本发明的保护范围之内。
- DNS攻击防护方法及系统
- 基于SDN的DDOS攻击防护方法、装置及系统