具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
在描述本发明各实施例之前,简要介绍与本发明密切相关的DNS及DNSSEC的原理。
用户在用域名访问某一个网站时,客户端一般会通过一个域名解析服务器把域名转换成IP地址。域名解析服务器一般需要通过查询根域名服务器、顶级域名服务器、权威域名服务器等多级服务器节点,以递归查询的方式最终获得目标服务器的IP地址,然后交给客户端。在此过程中,攻击者都可以假冒应答方给请求方发送一个伪造的响应,其中包含一个错误的IP地址。发送请求的客户端或者解析服务器接受了伪造的应答,导致用户无法访问正常网站,甚至可以把重定向到一个伪造的网站上去。
DNSSEC是为了解决传统DNS系统中的上述不安全性,由IETF(国际互联网工程任务组)制定的一套配合现有DNS系统的安全扩展系统,目标在于解决各种DNS缓存欺骗、DNS攻击、DNS劫持等问题。
DNSSEC通过为DNS中的数据添加数字签名信息,使得每个节点的DNS服务器在得到应答信息后可以通过检查此签名信息来判断应答数据是否真实,从而为DNS数据提供数据来源验证和数据完整性检验。为此,DNSSEC在数据包中引入了新的资源记录,包括:用于存储验证DNS数据的公钥;用于存储DNS资源记录的数字签名;以及上级授权签名等。其中,数字签名是使用私钥对资源记录的摘要信息加密生成的;公钥对应于加密用的私钥。上级授权签名是DNS服务器的上一级节点对该DNS服务器的公钥散列值的签名,用于防止公钥被伪造。通过上级授权签名,在各级节点之间配置成信任链。
图1a示出了根据本发明一个实施例的DNS安全查询方法的流程图,本发明的方法应用于发起DNS查询的客户端,如PC中。如图1a所示,方法包括如下步骤:
步骤S110,捕获客户端待发送的DNS请求数据包,将DNS请求数据包转换为对应的DNSSEC请求数据包。
DNSSEC在各级服务器节点中部署,通过签名验证保证数据的真实性。但最终接收DNS查询结果的客户端并不检查DNS服务器返回的DNS记录中包含的签名。因此,如果在此阶段发生DNS欺骗,上述的DNSSEC部署并不能识别。
本发明实施例提供了一种方法,在客户端中对返回的包含查询结果的资源记录的真实性进行验证,进一步保证DNS查询结果的真实性和完整性。
如上文所述,DNSSEC的数据包中增加了几种资源记录,这些资源记录在各级域名解析服务器之间的查询以及响应中被使用。但客户端的操作系统中并不支持以DNSSEC的方式与DNS服务器通信。因此,客户端系统中域名解析的相关接口只能形成DNS请求数据包而无法形成带有上述资源记录的DNSSEC请求数据包,不能直接与域名解析服务器之间以DNSSEC方式进行请求和应答。
在本发明提供的DNS安全查询方法中,以自定义的函数或接口捕获客户端待发送的DNS请求数据包,并将其转换为DNSSEC请求数据包。图1b为windows系统网络体系结构示意图。如图1b所示,可利用钩子函数捕获客户端系统应用层(也称用户层)的DNS解析接口以获取DNS请求数据包,并在钩子函数中将DNS请求数据包转换为符合DNSSEC形式的DNSSEC请求数据包。另外,还可以在客户端系统内核层的协议驱动层,或客户端传输层驱动接口层(TDI)中进行捕获和转换,详见下文实施例介绍。
具体地,将DNS请求数据包转换为对应的DNSSEC请求数据包包括在DNS请求数据包中添加DNSSEC请求数据包具有的资源记录。
步骤S120,发送DNSSEC请求数据包至DNS服务器。
将上述转换后得到的DNSSEC请求数据包传递给系统中的发送接口,调用该发送接口将DNSSEC请求数据包发送至DNS服务器。
步骤S130,接收DNS服务器返回的DNSSEC响应数据包。
调用系统中的接收接口接收DNSSEC响应数据包。服务器返回的DNSSEC响应数据包中包括:资源记录的数字签名,公钥和上级授权签名。
步骤S140,捕获客户端接收的DNSSEC响应数据包,利用DNS服务器提供的公钥验证DNSSEC响应数据包中的数字签名。
与步骤S110类似地,捕获客户端接收的DNSSEC响应数据包具体可以在客户端的系统应用层,系统协议驱动层,或客户端传输层驱动接口层中进行。
DNSSEC响应数据包中包含的数字签名由DNS服务器利用私钥对要返回的资源记录的第一摘要信息加密生成,其中,第一摘要信息是DNS服务器对资源记录使用哈希函数生成的。
具体地,该步骤中的验证过程包括:客户端利用DNS服务器提供的公钥对数字签名进行解密,如果能够解密,表明DNSSEC响应数据包确实来自DNS服务器,验证了数据来源的真实性。解密后得到第一摘要信息,再对DNSSEC响应数据包中的资源记录使用哈希函数生成第二摘要信息,然后进行第一摘要信息和第二摘要信息的比对。如果第一摘要信息和第二摘要信息一致,表明资源记录在传输中没有受到过篡改,验证了数据的完整性。
上述验证过程由自定义的函数或接口完成。例如,该步骤中利用钩子函数在客户端系统应用层捕获DNS解析接口以获取DNSSEC响应数据包,则上述验证过程也在钩子函数中进行。
此外,攻击者还可能伪造DNS服务器的公钥和私钥,利用伪造的私钥生成数字签名,达到欺骗的目的,客户端对这种情况无法识别。因此,得到第一摘要信息之前,还可以向DNS服务器上一级的节点查询公钥的上级授权签名,利用上级授权签名验证公钥是否正确。其中,上级授权签名是上一级节点对DNS服务器的公钥加密后形成的。如果仍然不相信该上级授权签名,还可以通过递归的方式继续向更高级的节点查询。
步骤S150,若数字签名验证通过,将DNSSEC响应数据包转换为对应的DNS响应数据包,依据DNS响应数据包进行DNS查询处理。
与上一步骤类似地,将DNSSEC响应数据包转换为对应的DNS响应数据包也在自定义的函数中完成,例如,在上文中的捕获DNSSEC响应数据包的钩子函数中完成。
之后,再将转换后的DNS数据包传递给客户端系统的DNS解析接口,供DNS解析接口依据DNS响应数据包进行DNS查询处理,例如,将查询得到的IP信息传递给应用程序。
在上述方案中,DNS请求数据包的捕获、DNS数据包与DNSSEC数据包之间的转换、DNSSEC数据包的发送和接收以及签名验证等对客户端系统是透明的。通过上述各步骤,在当前客户端系统不支持DNSSEC的情况下,能够在客户端完成对DNS响应数据的真实性和完整性的验证。
根据本发明上述实施例提供的DNS安全查询方法,捕获客户端待发送的DNS请求数据包,将DNS请求数据包转换为对应的DNSSEC请求数据包;发送DNSSEC请求数据包至DNS服务器,以接收DNS服务器返回的DNSSEC响应数据包;捕获客户端接收的DNSSEC响应数据包,利用DNS服务器提供的公钥验证DNSSEC响应数据包中的数字签名;若数字签名验证通过,将DNSSEC响应数据包转换为对应的DNS响应数据包,依据DNS响应数据包进行DNS查询处理。根据上述方案,将DNSSEC中的验证过程应用于客户端,在客户端与最近的DNS服务器之间配置信任关系,从而与各级DNS服务器形成完整的信任链,能够在客户端验证数据的真实性和完整性,进一步避免出现DNS劫持和欺骗问题。
图2示出了根据本发明另一个实施例的DNS安全查询方法的流程图。在本实施例中,在客户端的系统应用层进行DNS数据的捕获。如图2所示,该方法包括如下步骤:
步骤S210,利用钩子函数捕获客户端系统应用层的DNS解析接口以获取DNS请求数据包。
其中,客户端系统应用层的DNS解析接口包括gethostbyname接口和/或getaddrinfo接口。通过构造钩子函数捕获客户端系统调用ethostbyname接口和/或getaddrinfo接口的行为,以获取DNS请求数据包。
步骤S220,将DNS请求数据包转换为对应的DNSSEC请求数据包。
该步骤在上述所构造的钩子函数内部完成。
步骤S230,发送DNSSEC请求数据包至DNS服务器,以接收DNS服务器返回的DNSSEC响应数据包。
步骤S240,利用钩子函数捕获客户端系统应用层的DNS解析接口以获取DNSSEC响应数据包。
与步骤S210类似地,通过构造的钩子函数捕获客户端系统调用ethostbyname接口和/或getaddrinfo接口的行为,获取DNSSEC响应数据包。
步骤S250,利用DNS服务器提供的公钥验证DNSSEC响应数据包中的数字签名,若数字签名验证通过,执行步骤S260。
具体地,该步骤中的验证过程包括:客户端利用DNS服务器提供的公钥对数字签名进行解密,如果能够解密,表明DNSSEC响应数据包确实来自DNS服务器,验证了数据来源的真实性。解密后得到第一摘要信息,再对DNSSEC响应数据包中的资源记录使用哈希函数生成第二摘要信息,然后进行第一摘要信息和第二摘要信息的比对。如果第一摘要信息和第二摘要信息一致,表明资源记录在传输中没有受到过篡改,验证了数据的完整性。
步骤S260,将DNSSEC响应数据包转换为对应的DNS响应数据包,依据DNS响应数据包进行DNS查询处理。
图3示出了根据本发明另一个实施例的DNS安全查询方法的流程图。在本实施例中,在客户端系统协议驱动层捕获DNS请求数据包和客户端接收的DNSSEC响应数据包。如图3所示,方法包括如下步骤:
步骤S310,捕获协议驱动层的NdisSend/NdisSendPackets接口以获取DNS请求数据包。
如图1b所示,NDIS中间层驱动位于NDIS协议驱动层和NDIS小端口驱动层之间,NDIS中间层驱动可以拦截本地所有发送数据包和响应数据包,对发送数据包或响应数据包进行接收、拒绝、修改等操作。NDIS中间层驱动对于上层来说充当的是小端口驱动,对于下层来说充当的是协议驱动的作用。当上层的协议驱动发送数据时,调用NdisSend/NdisSendPackets发送数据包,因此,通过捕获该接口可以获取DNS请求数据包。
步骤S320,将DNS请求数据包转换为对应的DNSSEC请求数据包。
该步骤包括在DNS请求数据包中添加DNSSEC请求数据包中具有的资源记录。
步骤S330,发送DNSSEC请求数据包至DNS服务器。
具体地,该步骤包括:依次调用NdisSend/NdisSendPackets接口、MiniportSend/MiniportSendPackets接口向底层发送DNSSEC请求数据包;底层通过NDIS接口控制物理网络设备,将DNSSEC请求数据包发送给所述DNS服务器。
步骤S340,接收DNS服务器返回的DNSSEC响应数据包。
具体地,该步骤包括:底层通过物理网络设备接收到DNSSEC响应数据包后,NDIS小端口驱动层调用NdisMIndicateReceivePacket接口指示接收到DNSSEC响应数据包。
步骤S350,通过调用中间驱动层向NDIS注册的ProtocolReceivePacket接口捕获DNSSEC响应数据包。
步骤S360,利用DNS服务器提供的公钥验证DNSSEC响应数据包中的数字签名。若数字签名验证通过,执行步骤S370。
该步骤的具体实施过程与上文实施例类似,此处不再赘述。
步骤S370,将DNSSEC响应数据包转换为对应的DNS响应数据包,依据DNS响应数据包进行DNS查询处理。
具体地,依据DNS响应数据包进行DNS查询处理包括:再次调用NdisMIndicateReceivePacket接口通知协议驱动层接收到DNS响应数据包,而后调用ProtocolReceive接口对DNS响应数据包进行处理,继续调用NdisMIndicateReceivePacket接口将DNS响应数据包传递给NDIS协议驱动层,由相应的协议栈对DNS响应数据包进行DNS查询处理。
图4示出了根据本发明另一个实施例的DNS安全查询方法的流程图。本实施例在客户端传输层驱动接口层中过滤出DNS请求数据包。下文以适用于Win2000操作系统的TDI模型为例进行说明。其他操作系统中,例如,Win7系统中,在传输层驱动接口层中过滤DNS请求数据包需要使用WinsockKernel(Winsock内核)或Windows Filtering Platform。
如图4所示,方法包括如下步骤:
步骤S410,在传输层驱动接口层中生成过滤设备。
步骤S420,将过滤设备绑定协议驱动生成的设备。
TDI(Tansport Driver Interface)是传输层驱动接口,是一系列接口的集合,这一系列接口用于连接socket(套接字)和协议驱动中间层。应用程序创建socket,用connect创建连接,使用send和receive来发包和收包等,都是通过TDI来将上层的系统调用转发给协议驱动。
每个协议驱动都会生成一个有名字的设备,这个设备会接收一系列请求,包括生成请求,例如,用于创建socket的IRP_MJ_CREATE请求,用于处理bind(绑定)、connect(连接)、listen(监听)、accept(接受)、send(发送)和recv(接收)等的IRP_MJ_INTERNAL_DEVICE_CONTROL请求。
由于协议驱动生成了设备,可以通过生成过滤设备来绑定上述协议驱动生成的设备。
需要说明的是,步骤S410和步骤S420对于本实施例中的TDI模型是必需的。但对于其他操作系统中的传输层驱动接口层,具有不同的过滤方式,而可能采用不同的方式,而无需生成过滤设备。
步骤S430,利用过滤设备对来自应用层的DNS请求数据包进行过滤。
由于生成了过滤设备来绑定上述协议驱动生成的设备,这样,从应用层发过来的请求就会先经过过滤设备,DNS请求数据包就可以由该过滤设备获取。
具体地,设置创建的过滤设备的分发函数为DeviceDispatch,则所有上层发过来的DNS数据请求包都会回调到DeviceDispatch。进一步地,通过TDI_SEND_DATAGRAM来过滤DNS请求数据包。
步骤S440,发送DNSSEC请求数据包至DNS服务器,以接收DNS服务器返回的DNSSEC响应数据包。
步骤S450,利用过滤设备对来自协议驱动层的DNSSEC响应数据包进行过滤。
与步骤S430类似,具体地,通过TDI_RECEIVE_DATAGRAM来过滤DNS相应数据包。
步骤S460,利用DNS服务器提供的公钥验证DNSSEC响应数据包中的数字签名,若数字签名通过验证,执行步骤S470。
步骤S470,将DNSSEC响应数据包转换为对应的DNS响应数据包,依据DNS响应数据包进行DNS查询处理。
在本发明上述实施例中,分别在客户端系统应用层、客户端系统协议驱动层和客户端传输层驱动接口层进行了DNS请求数据包和DNSSEC相应数据包的捕获。都能够将DNSSEC中的验证过程应用于客户端,在客户端与最近的DNS服务器之间配置信任关系,从而与各级DNS服务器形成完整的信任链,能够在客户端验证数据的真实性和完整性,进一步避免出现DNS劫持和欺骗问题。
图5示出了根据本发明一个实施例的DNS安全查询装置的结构框图,如图5所示,该装置包括:第一捕获模块510,收发模块520,第二捕获模块530,验证模块540,转换模块550和查询处理模块560,各模块功能如下:
第一捕获模块510,适于捕获客户端待发送的DNS请求数据包;
收发模块520,适于发送DNSSEC请求数据包至DNS服务器,以接收DNS服务器返回的DNSSEC响应数据包;
第二捕获模块530,适于捕获客户端接收的DNSSEC响应数据包;
验证模块540,适于利用DNS服务器提供的公钥验证DNSSEC响应数据包中的数字签名;
转换模块550,适于在第一捕获模块510捕获DNS请求数据包后,将DNS请求数据包转换为对应的DNSSEC请求数据包;以及,在验证模块540对数字签名验证通过后,将DNSSEC响应数据包转换为对应的DNS响应数据包;
查询处理模块560,适于依据DNS响应数据包进行DNS查询处理。
可选地,第一捕获模块510进一步适于:利用钩子函数捕获客户端系统应用层的DNS解析接口以获取DNS请求数据包;相应地,第二捕获模块530进一步适于:利用钩子函数捕获客户端系统应用层的DNS解析接口以获取所述DNSSEC响应数据包。
其中,客户端系统应用层的DNS解析接口包括gethostbyname接口和/或getaddrinfo接口。
可选地,第一捕获模块510还可以在系统协议驱动层进行DNS请求数据包的捕获。具体地,第一捕获模块510捕获客户端系统协议驱动层的数据包发送接口以获取DNS请求数据包;相应地,第二捕获模块530捕获客户端系统中间驱动层的数据包接收接口以获取DNSSEC响应数据包。
其中,在捕获DNS请求数据包过程中,第一捕获模块510进一步适于:捕获协议驱动层的NdisSend/NdisSendPackets接口以获取DNS请求数据包;收发模块520进一步适于:依次调用NdisSend/NdisSendPackets接口、MiniportSend/MiniportSendPackets接口向底层发送转换模块550转换后的DNSSEC请求数据包,以供底层通过NDIS接口控制物理网络设备,将DNSSEC请求数据包发送给所述DNS服务器。
在捕获客户端接收的DNSSEC响应数据包过程中,收发模块520进一步适于:底层通过物理网络设备接收到DNSSEC响应数据包后,小端口驱动层调用NdisMIndicateReceivePacket接口指示接收到DNSSEC响应数据包;第二捕获模块530进一步适于:通过调用中间驱动层向NDIS注册的ProtocolReceivePacket接口捕获所述DNSSEC响应数据包;查询处理模块560进一步适于:再次调用NdisMIndicateReceivePacket接口通知协议驱动层接收到转换模块560转换后的DNS响应数据包,而后调用ProtocolReceive接口对DNS响应数据包进行处理,继续调用NdisMIndicateReceivePacket接口将DNS响应数据包传递给协议驱动层,由相应的协议栈对DNS响应数据包进行DNS查询处理。
第一捕获模块510还适于在客户端传输层驱动接口层中过滤出DNS请求数据包;相应地,第二捕获模块530进一步适于:在客户端传输层驱动接口层中过滤出DNSSEC响应数据包。可选地,装置还包括:生成模块570,适于在传输层驱动接口层中生成过滤设备;将过滤设备绑定协议驱动生成的设备;第一捕获模块510进一步适于:利用过滤设备对来自应用层的DNS请求数据包进行过滤;第二捕获模块530进一步适于:利用过滤设备对来自协议驱动层的DNSSEC响应数据包进行过滤。
可选地,验证模块540进一步适于:利用公钥对数字签名进行解密,得到第一摘要信息;根据DNS中的查询结果生成第二摘要信息;比对第二摘要信息和所述第一摘要信息,若第二摘要信息与第一摘要信息相同,判断数字签名通过验证。
可选地,验证模块540还适于:
在利用公钥对数字签名进行解密,得到第一摘要信息之前,向DNS服务器上一级的节点查询公钥的上级授权签名;利用上级授权签名验证公钥是否正确。
根据本发明上述实施例提供的DNS安全查询装置,第一捕获客户端待发送的DNS请求数据包,转化模块将DNS请求数据包转换为对应的DNSSEC请求数据包;收发模块发送DNSSEC请求数据包至DNS服务器,以接收DNS服务器返回的DNSSEC响应数据包;第二捕获模块捕获客户端接收的DNSSEC响应数据包,验证模块利用DNS服务器提供的公钥验证DNSSEC响应数据包中的数字签名;若数字签名验证通过,转换模块将DNSSEC响应数据包转换为对应的DNS响应数据包,依据DNS响应数据包进行DNS查询处理。根据上述方案,将DNSSEC中的验证过程应用于客户端,在客户端与最近的DNS服务器之间配置信任关系,从而与各级DNS服务器形成完整的信任链,能够在客户端验证数据的真实性和完整性,进一步避免DNS欺骗的发生。
本发明的实施例公开了:
A1、一种DNS安全查询方法,包括:
捕获客户端待发送的DNS请求数据包,将所述DNS请求数据包转换为对应的DNSSEC请求数据包;
发送所述DNSSEC请求数据包至DNS服务器,以接收所述DNS服务器返回的DNSSEC响应数据包;
捕获客户端接收的所述DNSSEC响应数据包,利用所述DNS服务器提供的公钥验证所述DNSSEC响应数据包中的数字签名;若所述数字签名验证通过,将所述DNSSEC响应数据包转换为对应的DNS响应数据包,依据所述DNS响应数据包进行DNS查询处理。
A2、根据权利要求A1所述的方法,其中,所述捕获客户端待发送的DNS请求数据包进一步为:利用钩子函数捕获客户端系统应用层的DNS解析接口以获取DNS请求数据包;
所述捕获客户端接收的所述DNSSEC响应数据包进一步为:利用钩子函数捕获客户端系统应用层的DNS解析接口以获取所述DNSSEC响应数据包。
A3、根据权利要求A2所述的方法,其中,所述客户端系统应用层的DNS解析接口包括gethostbyname接口和/或getaddrinfo接口。
A4、根据权利要求A1所述的方法,其中,所述捕获客户端待发送的DNS请求数据包进一步为:捕获客户端系统协议驱动层的数据包发送接口以获取DNS请求数据包;
所述捕获客户端接收的所述DNSSEC响应数据包进一步为:捕获客户端系统中间驱动层的数据包接收接口以获取DNSSEC响应数据包。
A5、根据权利要求A4所述的方法,其中,所述捕获客户端待发送的DNS请求数据包,将所述DNS请求数据包转换为对应的DNSSEC请求数据包,发送所述DNSSEC请求数据包至DNS服务器进一步包括:
捕获协议驱动层的NdisSend/NdisSendPackets接口以获取DNS请求数据包;
将所述DNS请求数据包转换为对应的DNSSEC请求数据包;
依次调用NdisSend/NdisSendPackets接口、MiniportSend/MiniportSendPackets接口向底层发送所述DNSSEC请求数据包;
底层通过NDIS接口控制物理网络设备,将所述DNSSEC请求数据包发送给所述DNS服务器。
A6、根据权利要求A4所述的方法,其中,所述捕获客户端接收的所述DNSSEC响应数据包,利用所述DNS服务器提供的公钥验证所述DNSSEC响应数据包中的数字签名;若所述数字签名验证通过,将所述DNSSEC响应数据包转换为对应的DNS响应数据包,依据所述DNS响应数据包进行DNS查询处理进一步包括:
底层通过物理网络设备接收到所述DNSSEC响应数据包后,小端口驱动层调用NdisMIndicateReceivePacket接口指示接收到所述DNSSEC响应数据包;
通过调用中间驱动层向NDIS注册的ProtocolReceivePacket接口捕获所述DNSSEC响应数据包,利用所述DNS服务器提供的公钥验证所述DNSSEC响应数据包中的数字签名,若所述数字签名验证通过,将所述DNSSEC响应数据包转换为对应的DNS响应数据包;
再次调用NdisMIndicateReceivePacket接口通知协议驱动层接收到所述DNS响应数据包,而后调用ProtocolReceive接口对所述DNS响应数据包进行处理,继续调用NdisMIndicateReceivePacket接口将所述DNS响应数据包传递给协议驱动层,由相应的协议栈对所述DNS响应数据包进行DNS查询处理。
A7、根据权利要求A1所述的方法,其中,所述捕获客户端待发送的DNS请求数据包进一步为:在客户端传输层驱动接口层中过滤出DNS请求数据包;
所述捕获客户端接收的所述DNSSEC响应数据包进一步为:在客户端传输层驱动接口层中过滤出所述DNSSEC响应数据包。
A8、根据权利要求A7所述的方法,其中,在所述在客户端传输层驱动接口层中过滤出DNS请求数据包之前进一步包括:在传输层驱动接口层中生成过滤设备;将所述过滤设备绑定协议驱动生成的设备;
所述在客户端传输层驱动接口层中过滤出DNS请求数据包进一步为:利用所述过滤设备对来自应用层的DNS请求数据包进行过滤;
所述在客户端传输层驱动接口层中过滤出所述DNSSEC响应数据包进一步为:利用所述过滤设备对来自协议驱动层的所述DNSSEC响应数据包进行过滤。
A9、根据权利要求A1-A8所述的方法,其中,利用所述DNS服务器的公钥验证所述DNSSEC响应数据包中的数字签名进一步包括:
利用所述公钥对所述数字签名进行解密,得到第一摘要信息;
根据DNS中的查询结果生成第二摘要信息;
比对所述第二摘要信息和所述第一摘要信息,若所述第二摘要信息与第一摘要信息相同,判断数字签名通过验证。
A10、根据权利要求A9所述的方法,其中,所述利用所述公钥对所述数字签名进行解密,得到第一摘要信息之前,所述方法还包括:
向所述DNS服务器上一级的节点查询所述公钥的上级授权签名;
利用所述上级授权签名验证所述公钥是否正确。
B11、一种DNS安全查询装置,包括:
第一捕获模块,适于捕获客户端待发送的DNS请求数据包;
收发模块,适于发送DNSSEC请求数据包至DNS服务器,以接收所述DNS服务器返回的DNSSEC响应数据包;
第二捕获模块,适于捕获客户端接收的所述DNSSEC响应数据包;
验证模块,适于利用所述DNS服务器提供的公钥验证所述DNSSEC响应数据包中的数字签名;
转换模块,适于在所述第一捕获模块捕获DNS请求数据包后,将所述DNS请求数据包转换为对应的DNSSEC请求数据包;以及,在所述验证模块对所述数字签名验证通过后,将所述DNSSEC响应数据包转换为对应的DNS响应数据包;
查询处理模块,适于依据所述DNS响应数据包进行DNS查询处理。
B12、根据权利要求B11所述的装置,其中,所述第一捕获模块进一步适于:利用钩子函数捕获客户端系统应用层的DNS解析接口以获取DNS请求数据包;
所述第二捕获模块进一步适于:利用钩子函数捕获客户端系统应用层的DNS解析接口以获取所述DNSSEC响应数据包。
B13、根据权利要求B12所述的装置,其中,所述客户端系统应用层的DNS解析接口包括gethostbyname接口和/或getaddrinfo接口。
B14、根据权利要求B11所述的装置,其中,所述第一捕获模块进一步适于:捕获客户端系统协议驱动层的数据包发送接口以获取DNS请求数据包;
所述第二捕获模块进一步适于:捕获客户端系统中间驱动层的数据包接收接口以获取DNSSEC响应数据包。
B15、根据权利要求B14所述的装置,其中,所述第一捕获模块进一步适于:
捕获协议驱动层的NdisSend/NdisSendPackets接口以获取DNS请求数据包;
所述收发模块进一步适于:依次调用NdisSend/NdisSendPackets接口、MiniportSend/MiniportSendPackets接口向底层发送所述转换模块转换后的DNSSEC请求数据包,以供底层通过NDIS接口控制物理网络设备,将所述DNSSEC请求数据包发送给所述DNS服务器。
B16、根据权利要求B14所述的装置,其中,所述收发模块进一步适于:底层通过物理网络设备接收到所述DNSSEC响应数据包后,小端口驱动层调用NdisMIndicateReceivePacket接口指示接收到所述DNSSEC响应数据包;
所述第二捕获模块进一步适于:通过调用中间驱动层向NDIS注册的ProtocolReceivePacket接口捕获所述DNSSEC响应数据包;
所述查询处理模块进一步适于:再次调用NdisMIndicateReceivePacket接口通知协议驱动层接收到转换模块转换后的DNS响应数据包,而后调用ProtocolReceive接口对所述DNS响应数据包进行处理,继续调用NdisMIndicateReceivePacket接口将所述DNS响应数据包传递给协议驱动层,由相应的协议栈对所述DNS响应数据包进行DNS查询处理。
B17、根据权利要求B11所述的装置,其中,所述第一捕获模块进一步适于:在客户端传输层驱动接口层中过滤出DNS请求数据包;
所述第二捕获模块进一步适于:在客户端传输层驱动接口层中过滤出所述DNSSEC响应数据包。
B18、根据权利要求B17所述的装置,其中,所述装置还包括:生成模块,适于在传输层驱动接口层中生成过滤设备;将所述过滤设备绑定协议驱动生成的设备;
所述第一捕获模块进一步适于:利用所述过滤设备对来自应用层的DNS请求数据包进行过滤;
所述第二捕获模块进一步适于:利用所述过滤设备对来自协议驱动层的所述DNSSEC响应数据包进行过滤。
B19、根据权利要求B11-B18任一项所述的装置,其中,所述验证模块进一步适于:
利用所述公钥对所述数字签名进行解密,得到第一摘要信息;
根据DNS中的查询结果生成第二摘要信息;
比对所述第二摘要信息和所述第一摘要信息,若所述第二摘要信息与第一摘要信息相同,判断数字签名通过验证。
B20、根据权利要求B19所述的装置,其中,所述验证模块还适于:
在利用所述公钥对所述数字签名进行解密,得到第一摘要信息之前,向所述DNS服务器上一级的节点查询所述公钥的上级授权签名;
利用所述上级授权签名验证所述公钥是否正确。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与本实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的来电或短信识别装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。