CN110769004B - 在dns客户端或代理服务器使用的dns防污染方法 - Google Patents

在dns客户端或代理服务器使用的dns防污染方法 Download PDF

Info

Publication number
CN110769004B
CN110769004B CN201911072821.5A CN201911072821A CN110769004B CN 110769004 B CN110769004 B CN 110769004B CN 201911072821 A CN201911072821 A CN 201911072821A CN 110769004 B CN110769004 B CN 110769004B
Authority
CN
China
Prior art keywords
dns
analysis
request
result
module
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201911072821.5A
Other languages
English (en)
Other versions
CN110769004A (zh
Inventor
原玉磊
王宝生
赵锋
时向泉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
National University of Defense Technology
Original Assignee
National University of Defense Technology
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by National University of Defense Technology filed Critical National University of Defense Technology
Priority to CN201911072821.5A priority Critical patent/CN110769004B/zh
Publication of CN110769004A publication Critical patent/CN110769004A/zh
Application granted granted Critical
Publication of CN110769004B publication Critical patent/CN110769004B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/02Network architectures or network communication protocols for network security for separating internal from external traffic, e.g. firewalls
    • H04L63/0227Filtering policies
    • H04L63/0236Filtering by address, protocol, port number or service, e.g. IP-address or URL
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/02Network architectures or network communication protocols for network security for separating internal from external traffic, e.g. firewalls
    • H04L63/0281Proxies
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/14Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
    • H04L63/1408Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic by monitoring network traffic
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/14Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
    • H04L63/1433Vulnerability analysis
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/2866Architectures; Arrangements
    • H04L67/30Profiles
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明公开了一种在DNS客户端或代理服务器使用的DNS防污染方法。技术方案是先构建由配置文件、公共内存、初始化模块、解析请求处理模块、解析结果分析模块、解析请求转发模块、解析结果处理模块、结果返回模块组成的DNS防污染系统,解析结果处理模块、解析结果分析模块、解析请求转发模块、结果返回模块并行配合工作,基于被污染DNS服务器在互联网中占少数的现实,向多个DNS解析服务器发送解析请求,通过解析结果报文的源IP对解析结果分类处理,降低多次解析的情况下中间人污染的影响,将正确的DNS解析结果返回给用户。本发明可以准确判定DNS是否被污染,能对污染了的DNS进行应对,可避免在多次转发DNS解析请求时被中间人多次DNS污染的情况。

Description

在DNS客户端或代理服务器使用的DNS防污染方法
技术领域
本发明属于计算机网络安全技术领域,尤其涉及一种在DNS(Domain NameSystem,域名系统)客户端或者代理服务器上使用的DNS防污染方法。
背景技术
在访问互联网时,用户一般使用的是有意义的域名信息,如www.baidu.com;而对计算机来说,则需要通过IP地址来访问目标服务器,这就需要在服务器的域名信息与IP地址之间做转换,在互联网中完成这一转换功能的就是DNS。
在互联网应用蓬勃发展的今天,每天都有数亿用户访问互联网,产生海量的数据流,而这些访问和数据流都需要DNS系统的支持,DNS系统已经成为互联网中的基础设施,同时,DNS系统也成为网络攻击的主要目标之一。《全球DNS威胁报告2018》(https://www.efficientip.com/resources/dns-threat-report-2018/)白皮书中指出,2018年有77%的组织至少经历过一次基于DNS的网络攻击。思科2018年安全报告(https://www.cisco.com/c/zh_cn/products/security/security-reports.html?dtid=osowbo000775#~stickynav=2)发现91%的恶意软件使用DNS作为媒介进行攻击,或者攻击DNS服务本身。一旦DNS系统被攻击,后果非常严重,2016年10月,美国最主要DNS服务商遭遇了大规模DNS阻塞攻击,导致上百家网站无法登陆。因此,DNS安全防护技术成为网络安全技术领域的研究热点。
DNS污染是一种重要的DNS攻击方法。DNS污染主要有2种形式:
1)DNS解析服务器的缓存被污染,使得用户从DNS解析服务器中拿到错误结果。
2)中间人(攻击方)先于DNS解析服务器将错误结果发送给用户。
在DNS防污染方面,靳冲等提出了修改DNS解析软件采用随机DNS端口、增加DNS域名服务器数量、在现有DNS协议框架中引入DNSSEC(Domain Name System SecurityExtensions,DNS安全扩展)等认证技术等方法(参见靳冲,郝志宇,吴志刚.DNS缓存投毒攻击原理及防御策略[J].中国通信,2009,6(04):17-22.);程卫华提出查询ID参数扩展,查询域名字符随机大小写编码等方法(参见程卫华.DNS缓存污染的攻击方式和防御策略[J].电信快报,2015(09):16-21+29.);但是这些方法都涉及到对现有DNS架构的改动,难以推广。同理等提出使用可信DNS解析服务器列表以及DNS指针压缩技术来判断解析结果的正确性(参见同理,党艳平,杨振江.一种避免DNS污染的方法:中国专利,申请号201610887237.5[P],2016年10月11日),但是在针对DNS的网络攻击越来越频繁的情况下,很难有绝对可信的DNS解析服务器。周晨等提出通过DNS解析探测、建立污染IP地址库的方法来判断得到的解析结果是否被污染(参见周晨,韩峰.一种防止域名系统DNS污染的方法和网关:中国专利,申请号201610493048.X[P].2016年06月27日),但是该方法需要经过定期、大量的DNS解析探测,对网络运行产生一定影响,而且发现解析结果被污染后,并没有应对措施。
如何检测出DNS是否被污染并对污染了的DNS进行应对是本领域技术人员极为关注的技术问题。
发明内容
本发明要解决的技术问题是提出一种在客户端或者代理服务器上应用的DNS防污染方法,既能准确判定DNS是否被污染,又能对污染了的DNS进行应对,解决DNS域名解析中解析服务器DNS缓存污染和中间人造成的DNS污染对互联网用户带来的安全隐患。
针对DNS污染的特点及现有DNS防污染策略的不足,本发明在现有DNS协议框架下,基于被污染DNS服务器在互联网中占少数的现实,通过向多个DNS解析服务器发送解析请求,降低DNS解析服务器缓存污染对解析结果的影响,通过解析结果报文的源IP对解析结果分类处理,降低多次解析的情况下中间人污染的影响,最终将正确的DNS解析结果返回给用户。
本发明包括以下步骤:
第一步,构建DNS防污染系统。该系统可运行于DNS客户端或者DNS代理服务器。
DNS防污染系统由配置文件、公共内存(包括DNS解析请求链表、解析结果IP统计链表)、初始化模块、解析请求处理模块、解析结果分析模块、解析请求转发模块、解析结果处理模块、结果返回模块组成。
配置文件存放DNS解析服务器IP地址的总数N(N为正整数。且N大于等于3)、N个DNS解析服务器IP地址、解析结果报文到达超时时间T1(1到10,优选值为2,单位为秒)、分析解析结果执行周期T2(20到100,优选值为50,单位为毫秒)、DNS解析超时时间T3(1到10,优选值为5,单位为秒)。
公共内存中存放DNS解析请求链表、解析结果IP统计链表。
DNS解析请求链表的一个元素包含7个域:域名信息(即name),DNS解析请求报文发送用户的IP地址(即ip),DNS解析请求报文(即req_pkt),DNS解析请求报文接收时间(即time),最近1次DNS解析请求报文转发时间(即stime),最近1次DNS解析请求报文转发的DNS解析服务器序号(即num),解析结果链表。name指DNS解析请求报文中查询名字段的内容;stime指该DNS解析请求报文最近1次被解析请求转发模块转发的时间;num是该DNS解析请求报文最近1次被解析请求转发模块转发的目的解析服务器IP地址在解析服务器IP地址列表中的存储序号;DNS解析请求报文指用户发送的遵循DNS协议规范的请求报文,包括源IP地址src_ip(指发送DNS解析请求报文的用户的IP地址)、用户请求解析的域名信息。
解析结果链表是DNS解析请求链表中元素的一个域,解析结果链表中每个元素存储1个DNS解析结果,DNS解析结果包含3个域:解析结果报文的源IP地址(即sip),解析结果IP地址(即rip)(即解析结果报文中的IP地址),DNS解析结果报文(即packet),packet遵循DNS协议规范,包括报文源IP地址i_sip、DNS解析结果IP地址(即域名对应的IP地址)、用户请求解析的域名信息。
解析结果IP统计链表rip_list包含2个域:解析结果IP地址(rip),解析结果IP地址(rip)的数量。
初始化模块与配置文件、解析请求处理模块、解析结果分析模块和解析请求转发模块相连。初始化模块从配置文件中读取DNS解析服务器IP地址的总数N、解析结果报文到达超时时间T1、分析解析结果执行周期T2、DNS解析超时时间T3,按照顺序从配置文件中读取N个DNS解析服务器IP地址,将N个DNS解析服务器IP地址存入ip_array数组,ip_array中每个元素存储1个DNS解析服务器IP地址,共有N个元素。初始化模块将ip_array和N发送给解析请求处理模块和解析请求转发模块,将T1,T2,T3发送给解析结果分析模块。
解析请求处理模块与用户、初始化模块、公共内存、互联网相连,从初始化模块接收ip_array和N,从用户接收DNS解析请求报文,根据DNS解析请求报文构建DNS解析请求链表元素,并将DNS解析请求链表元素插入到公共内存中的DNS解析请求链表,将DNS解析请求报文分别转发至互联网中的ip_array[0]和ip_array[1]记录的DNS解析服务器。
解析结果处理模块与公共内存、互联网相连,从公共内存中的DNS解析请求链表读取与DNS解析请求报文相应的DNS解析请求链表元素,从互联网中的DNS解析服务器接收DNS解析结果报文,完成DNS解析结果报文与DNS解析请求报文的配对,根据DNS解析结果报文构建解析结果链表元素并插入到公共内存中的DNS解析请求链表中的解析结果链表。
解析结果分析模块与初始化模块、解析请求转发模块、结果返回模块、公共内存相连,从初始化模块接收T1、T2、T3,根据公共内存中的DNS解析请求链表、解析结果IP统计链表,分析DNS解析请求报文和解析结果报文的超时情况、解析结果数量分布情况;根据解析结果数量分布情况,将DNS解析请求链表中的要转发的DNS解析请求报文的域名信息(name)发送给解析请求转发模块;或将DNS解析请求链表中的要返回结果报文中的域名信息(name)和解析结果IP地址(rip)发送给结果返回模块。
解析请求转发模块与初始化模块、解析结果分析模块、公共内存、互联网相连,从初始化模块接收ip_array和N,从解析结果分析模块接收要转发的DNS解析请求报文的域名信息(name),根据要转发的DNS解析请求报文的域名信息(name)从公共内存的DNS解析请求链表中找出对应DNS解析请求报文和当前DNS解析请求报文已转发的DNS解析服务器序号(num,即ip_array中的元素序号),将解析请求转发至ip_array中的下一个DNS解析服务器(即ip_array[num+1]记录的互联网中的DNS解析服务器),同时更新DNS解析请求链表。
结果返回模块与用户、解析结果分析模块和公共内存相连。从解析结果分析模块接收要返回结果报文的域名信息(name)和解析结果IP地址(rip),从公共内存的DNS解析请求链表中的解析结果链表中查找要返回的DNS解析结果报文,将DNS解析结果报文返回给用户。
第二步,初始化配置文件。
根据公开的DNS解析服务器IP地址,将可用的DNS解析服务器IP地址以及DNS解析服务器IP地址的总数N写进配置文件,初始化配置解析结果报文到达超时时间T1(1到10,优选值为2,单位为秒)、分析解析结果执行周期T2(20到100,优选值为50,单位为毫秒)、DNS解析超时时间T3(1到10,优选值为5,单位为秒)。
第三步,初始化模块对DNS防污染系统进行初始化,方法是:
3.1从配置文件读取N、T1、T2、T3,按照顺序读取N个DNS解析服务器的IP地址。
3.2定义存储IP地址的数组ip_array,将N个DNS解析服务器IP地址存入ip_array。
3.3将ip_array和N发送给解析请求处理模块和解析请求转发模块。
3.4将T1,T2,T3发送给解析结果分析模块。
第四步,DNS防污染系统对DNS缓存污染和中间人造成的DNS污染进行防护。本步骤由解析请求处理模块、解析结果处理模块、解析结果分析模块、解析请求转发模块、结果返回模块并行配合工作。
方法是:解析请求处理模块按4.1所述流程从用户接收DNS解析请求报文,根据DNS解析请求报文构建DNS解析请求链表元素,将DNS解析请求链表元素放到DNS解析请求链表中,并将DNS解析请求报文发送给2台DNS解析服务器;同时,解析结果处理模块按4.2所述流程监控是否有DNS解析结果报文到达,根据DNS解析结果报文构建DNS解析请求链表中的解析结果链表;同时,解析结果分析模块按4.3所述流程按照时间周期T2循环执行,对解析结果链表中的DNS解析结果报文进行分析处理;同时,解析请求转发模块按步骤4.4所述流程执行解析请求转发,共同配合对DNS进行防污染;同时,结果返回模块按4.5所述流程监控解析结果分析模块的输出,根据解析结果分析模块的输出情况将DNS解析结果报文返回给用户。
4.1解析请求处理模块按4.1.1-4.1.7所述方法执行:
4.1.1从初始化模块接收ip_array和N。
4.1.2监控用户是否发送了DNS解析请求报文,若发送了DNS解析请求报文,执行4.1.3,若未发送DNS解析请求报文,转4.1.2继续监控。
4.1.3接收用户发送的DNS解析请求报文,从DNS解析请求报文获取源IP地址src_ip。
4.1.4从DNS解析请求报文获取域名信息,记录为str。
4.1.5获取当前DNS防污染系统的时间t0
4.1.6新建DNS解析请求链表元素request,令request的name值为str,令request的ip为src_ip,令request的req_pkt为DNS解析请求报文,令request的time和stime值为t0,令request的num值为1,初始化request的DNS解析结果链表result_list为空,将request插入DNS解析请求链表。
4.1.7将DNS解析请求报文分别转发至ip_array[0]和ip_array[1]记录的DNS解析服务器(即将DNS解析请求报文发到互联网,互联网与DNS解析服务器都是连通的),转步骤4.1.2。
4.2解析结果处理模块按4.2.1-4.2.7所述方法执行:
4.2.1监控DNS防污染系统运行的操作系统的53网络端口,若有DNS解析结果报文到达(这个报文可能是正规DNS解析服务器所发,也可能是中间人所发),执行4.2.2,若无DNS解析结果报文到达,转4.2.1继续监控。
4.2.2接收DNS解析结果报文,从DNS解析结果报文获取报文的源IP地址i_sip。
4.2.3从DNS解析结果报文中获取域名信息,记录为str,以及DNS解析结果报文中的IP地址i_rip。
4.2.4根据域名信息str,从DNS解析请求链表中查找与DNS解析结果报文对应的元素(即找到name域的值与str相同的元素)。如果没有找到,则丢弃本次DNS解析结果报文,转步骤4.2.1。如果找到,令在DNS解析请求链表中找到的解析请求元素为i_request,转步骤4.2.5。
4.2.5根据DNS解析结果报文的源IP地址i_sip,在i_request的解析结果链表域result_list中查找sip值等于i_sip的解析结果元素。如果找到,则丢弃本次DNS解析结果报文,转步骤4.2.1。如果没有找到,转步骤4.2.6。
4.2.6构建DNS解析结果链表元素result0,令result0的sip为i_sip,令result0的rip为i_rip,令result0的packet为解析结果报文。
4.2.7将result0插入i_request的解析结果链表域result_list,转步骤4.2.1。
4.3解析结果分析模块按4.3.1-4.3.8所述方法执行:
4.3.1获取DNS防污染系统时间,令时间变量t1=DNS防污染系统时间,从初始化模块接收T1,T2和T3,初始化链表rip_list为空。
4.3.2读取DNS防污染系统时间,令时间变量t2=DNS防污染系统时间,判定t2-t1是否大于等于T2,若t2-t1大于等于T2,令t1=t2,转4.3.3,否则转4.3.2。
4.3.3从DNS解析请求链表获取DNS解析请求链表元素总数,令为N1,定义变量i=0。
4.3.4从DNS解析请求链表获取第i个元素i_request,获取当前DNS防污染系统时间t3。
4.3.5如果t3-i_request->time大于T3,则i_request的DNS解析超时,i_request->time指i_request的time域的值,从解析请求链表中删除i_request,令N1=N1-1,i=i+1,如果i大于等于N1,说明处理完了解析请求链表中的所有元素,转步骤4.3.2;如果i小于N1,说明解析请求链表中还有元素未处理,转步骤4.3.4。如果t3-i_request->time小于等于T3,说明i_request的DNS解析请求未超时,转步骤4.3.6。
4.3.6判断i_request的req_pkt最近1次被解析请求处理模块处理得到的DNS解析结果报文或解析请求转发模块转发的对应DNS解析结果报文到达是否超时,判断方法为:如果t3-i_request->stime小于T1,说明不超时,令i=i+1,如果i大于等于N1,说明处理完了解析请求链表中的所有元素,转步骤4.3.2,如果i小于N1,说明解析请求链表中还有元素未处理,转步骤4.3.4。如果t1-i_request->stime大于等于T1,说明i_request的req_pkt最近1次被解析请求处理模块处理得到的DNS解析结果报文或解析请求转发模块转发的对应DNS解析结果报文到达超时,转步骤4.3.7。
4.3.7统计i_request的DNS解析结果链表所有元素中不同rip的数量,判断是否有数量相对最大(即有且仅有1个数量最大值)的rip,如果有,将i_request的name值和数量相对最大的rip发送给结果返回模块;如果没有则将i_request的name值发送给解析请求转发模块。具体操作步骤如下:
4.3.7.1删除解析结果IP统计链表rip_list中所有元素。
4.3.7.2从i_request的解析结果链表i_result_list中获取解析结果链表元素总数,令为N2,令j=0。
4.3.7.3获取i_result_list的第j个元素j_result。
4.3.7.4查找rip_list中是否有rip域的值与j_result的rip值相等的元素,如果有,则对应rip_list元素的count值加1,令j=j+1,若j=N2,转步骤4.3.7.6,若j小于N2,转步骤4.3.7.3。如果rip_list中没有rip域的值与j_result的rip值相等的元素,转步骤4.3.7.5。
4.3.7.5构建新的解析结果IP统计链表元素k_rip,令k_rip的rip等于j_result的rip,令k_rip的count为1,将k_rip插入到rip_list。令j=j+1,若j=N2,转步骤4.3.7.6,否则转步骤4.3.7.3。
4.3.7.6按照count值从大到小对rip_list中的元素排序。
4.3.7.7获取排序后rip_list链表中第1个元素的count值count0,和第2个元素的count值count1。如果count0大于count1,则将i_request的name值(令为i_name)和count0对应的rip_list元素的rip值(令为rip0)发送给结果返回模块;如果count0等于count1,将name值i_name发送解析请求转发模块。转步骤4.3.8。
4.3.8令i=i+1,如果i=N1,说明处理完了解析请求链表中的所有元素,转步骤4.3.2;如果i<N1,转步骤4.3.4。
4.4解析请求转发模块接收初始化模块发送的N和ip_array,当接收到解析结果分析模块发送的name值i_name时,将i_name对应的DNS解析请求报文转发至ip_array中记录的DNS解析服务器。具体步骤如下:
4.4.1接收初始化模块发送的ip_array和N。
4.4.2监控是否从解析结果分析模块接收到name值i_name,若接收到,转4.4.3;若未接收到,转4.4.2继续监控。
4.4.3在解析请求链表request_list中查找name值为i_name的元素i_request。
4.4.4令i_num=i_request->num,i_request->num指i_request的num域,如果i_num大于等于N,从request_list中删除i_request,转步骤4.4.2。如果i_num小于N,转步骤4.4.5。
4.4.5令i_request->num=i_num+1,i_num=i_num+1,将i_request的req_pkt转发至ip_array[i_num]记录的DNS解析服务器(即将req_pkt发到互联网,互联网与DNS解析服务器都是连通的)。转步骤4.4.2。
4.5结果返回模块向用户返回最终DNS解析结果,方法是:
4.5.1结果返回模块监控是否从解析结果分析模块接收到name值i_name和rip值rip0,若接收到,转4.5.2;若未接收到,转4.5.1继续监控。
4.5.2在DNS解析请求链表request_list中查找name值为i_name的元素i_request。
4.5.3在i_request的解析结果链表域result_list中查找rip值为rip0的元素j_result。
4.5.4获取j_result的解析结果报文packet。将packet发送至用户。从request_list中删除i_request。转步骤4.5.1继续监控。
采用本发明可以达到以下技术效果:
1)本发明第二步在配置文件配置多个可用的DNS解析服务器IP地址,第四步解析请求处理模块和解析请求转发模块将每一个DNS解析请求转发至2个以上的DNS解析服务器,第四步解析结果分析模块通过解析结果分析模块对多个解析结果的分析,可以准确判断是否有解析结果被污染。
2)本发明第四步解析结果处理模块在接收处理DNS解析结果报文时,根据报文的源IP来区分解析结果(4.2.5步),避免了在多次转发DNS解析请求时被中间人多次DNS污染的情况(因为根据中间人污染的原理,每转发1次,都会有1次中间人污染,按照源IP来分类,1个中间人在多次转发中的多次污染只计算1次)。
3)本发明第四步解析结果分析模块和解析请求转发模块通过分析接收到的所有DNS解析结果报文(4.3.7.2到4.3.7.7),当有多于1个的结果的出现次数均为最多时(即多个结果的出现次数相等且最大),无法区分正确结果和污染结果,继续向配置文件中的下一个DNS解析服务器转发解析请求(4.4.5),直至可以区分正确结果和污染结果,该方法可以消除部分DNS解析服务器缓存被污染时对用户解析结果的影响。
4)本发明第四步解析结果分析模块通过分析接收到的所有DNS解析结果报文,将所有结果报文中出现次数最多的结果作为正确结果,并返回给用户,降低了DNS污染影响。同时,一旦出现次数相对最多的结果即停止向DNS解析服务器重发(4.3.7.7),减少了整个DNS解析的时间。
5)本发明可根据需要在DNS客户端或DSN代理服务器上部署应用。
附图说明
图1是本发明总体流程图;
图2是本发明第一步构建的DNS防污染系统逻辑结构图。
图3是本发明第四步所述的步骤4.3流程图。
具体实施方式
如图1所示,本发明包括以下步骤:
第一步,构建DNS防污染系统。该系统可运行于DNS客户端或者DNS代理服务器。
如图2所示,DNS防污染系统由配置文件、公共内存、初始化模块、解析请求处理模块、解析结果分析模块、解析请求转发模块、解析结果处理模块、结果返回模块组成。
配置文件存放DNS解析服务器IP地址的总数N(N为正整数。且N大于等于3)、N个DNS解析服务器IP地址、解析结果报文到达超时时间T1、分析解析结果执行周期T2、DNS解析超时时间T3。
公共内存中存放DNS解析请求链表、解析结果IP统计链表。
DNS解析请求链表的一个元素包含7个域:域名信息(即name),DNS解析请求报文发送用户的IP地址(即ip),DNS解析请求报文(即req_pkt),DNS解析请求报文接收时间(即time),最近1次DNS解析请求报文转发时间(即stime),最近1次DNS解析请求报文转发的DNS解析服务器序号(即num),解析结果链表。name指DNS解析请求报文中查询名字段的内容;stime指该DNS解析请求报文最近1次被解析请求转发模块转发的时间;num是该DNS解析请求报文最近1次被解析请求转发模块转发的目的解析服务器IP地址在解析服务器IP地址列表中的存储序号;DNS解析请求报文指用户发送的遵循DNS协议规范的请求报文,包括源IP地址src_ip(指发送DNS解析请求报文的用户的IP地址)、用户请求解析的域名信息。
解析结果链表是DNS解析请求链表中元素的一个域,解析结果链表中每个元素存储1个DNS解析结果,DNS解析结果包含3个域:解析结果报文的源IP地址(即sip),解析结果IP地址(即rip)(即解析结果报文中的IP地址),DNS解析结果报文(即packet),packet遵循DNS协议规范,包括报文源IP地址i_sip、DNS解析结果IP地址(即域名对应的IP地址)、用户请求解析的域名信息。
解析结果IP统计链表rip_list包含2个域:解析结果IP地址(rip),解析结果IP地址(rip)的数量。
初始化模块与配置文件、解析请求处理模块、解析结果分析模块和解析请求转发模块相连。初始化模块从配置文件中读取DNS解析服务器IP地址的总数N、解析结果报文到达超时时间T1、分析解析结果执行周期T2、DNS解析超时时间T3,按照顺序从配置文件中读取N个DNS解析服务器IP地址,将N个DNS解析服务器IP地址存入ip_array数组,ip_array中每个元素存储1个DNS解析服务器IP地址,共有N个元素。初始化模块将ip_array和N发送给解析请求处理模块和解析请求转发模块,将T1,T2,T3发送给解析结果分析模块。
解析请求处理模块与用户、初始化模块、公共内存、互联网相连,从初始化模块接收ip_array和N,从用户接收DNS解析请求报文,根据DNS解析请求报文构建DNS解析请求链表元素,并将DNS解析请求链表元素插入到公共内存中的DNS解析请求链表,将DNS解析请求报文分别转发至互联网中的ip_array[0]和ip_array[1]记录的DNS解析服务器。
解析结果处理模块与公共内存、互联网相连,从公共内存中的DNS解析请求链表读取与DNS解析请求报文相应的DNS解析请求链表元素,从互联网中的DNS解析服务器接收DNS解析结果报文,完成DNS解析结果报文与DNS解析请求报文的配对,根据DNS解析结果报文构建解析结果链表元素并插入到公共内存中的DNS解析请求链表中的解析结果链表。
解析结果分析模块与初始化模块、解析请求转发模块、结果返回模块、公共内存相连,从初始化模块接收T1、T2、T3,根据公共内存中的DNS解析请求链表、解析结果IP统计链表,分析DNS解析请求报文和解析结果报文的超时情况、解析结果数量分布情况;根据解析结果数量分布情况,将DNS解析请求链表中的要转发的DNS解析请求报文的域名信息(name)发送给解析请求转发模块;或将DNS解析请求链表中的要返回结果报文中的域名信息(name)和解析结果IP地址(rip)发送给结果返回模块。
解析请求转发模块与初始化模块、解析结果分析模块、公共内存、互联网相连,从初始化模块接收ip_array和N,从解析结果分析模块接收要转发的DNS解析请求报文的域名信息(name),根据要转发的DNS解析请求报文的域名信息(name)从公共内存的DNS解析请求链表中找出对应DNS解析请求报文和当前DNS解析请求报文已转发的DNS解析服务器序号(num,即ip_array中的元素序号),将解析请求转发至ip_array中的下一个DNS解析服务器(即ip_array[num+1]记录的互联网中的DNS解析服务器),同时更新DNS解析请求链表。
结果返回模块与用户、解析结果分析模块和公共内存相连。从解析结果分析模块接收要返回结果报文的域名信息(name)和解析结果IP地址(rip),从公共内存的DNS解析请求链表中的解析结果链表中查找要返回的DNS解析结果报文,将DNS解析结果报文返回给用户。
第二步,初始化配置文件。
根据公开的DNS解析服务器IP地址,将可用的DNS解析服务器IP地址以及DNS解析服务器IP地址的总数N写进配置文件,初始化配置解析结果报文到达超时时间T1(1到10,优选值为2,单位为秒)、分析解析结果执行周期T2(20到100,优选值为50,单位为毫秒)、DNS解析超时时间T3(1到10,优选值为5,单位为秒)。
第三步,初始化模块对DNS防污染系统进行初始化,方法是:
3.1从配置文件读取N、T1、T2、T3,按照顺序读取N个DNS解析服务器的IP地址。
3.2定义存储IP地址的数组ip_array,将N个DNS解析服务器IP地址存入ip_array。
3.3将ip_array和N发送给解析请求处理模块和解析请求转发模块。
3.4将T1,T2,T3发送给解析结果分析模块。
第四步,DNS防污染系统对DNS缓存污染和中间人造成的DNS污染进行防护。方法是:解析请求处理模块按4.1所述流程从用户接收DNS解析请求报文,根据DNS解析请求报文构建DNS解析请求链表元素,将DNS解析请求链表元素放到DNS解析请求链表中,并将DNS解析请求报文发送给2台DNS解析服务器;同时,解析结果处理模块按4.2所述流程监控是否有DNS解析结果报文到达,根据DNS解析结果报文构建DNS解析请求链表中的解析结果链表;同时,解析结果分析模块按4.3所述流程按照时间周期T2循环执行,对解析结果链表中的DNS解析结果报文进行分析处理;同时,解析请求转发模块按步骤4.4所述流程执行解析请求转发,共同配合对DNS进行防污染;同时,结果返回模块按4.5所述流程监控解析结果分析模块的输出,根据解析结果分析模块的输出情况将DNS解析结果报文返回给用户。
4.1解析请求处理模块按4.1.1-4.1.7所述方法执行:
4.1.1从初始化模块接收ip_array和N。
4.1.2监控用户是否发送了DNS解析请求报文,若发送了DNS解析请求报文,执行4.1.3,若未发送DNS解析请求报文,转4.1.2继续监控。
4.1.3接收用户发送的DNS解析请求报文,从DNS解析请求报文获取源IP地址src_ip。
4.1.4从DNS解析请求报文获取域名信息,记录为str。
4.1.5获取当前DNS防污染系统的时间t0
4.1.6新建DNS解析请求链表元素request,令request的name值为str,令request的ip为src_ip,令request的req_pkt为DNS解析请求报文,令request的time和stime值为t0,令request的num值为1,初始化request的DNS解析结果链表result_list为空,将request插入DNS解析请求链表。
4.1.7将DNS解析请求报文分别转发至ip_array[0]和ip_array[1]记录的DNS解析服务器,转步骤4.1.2。
4.2解析结果处理模块按4.2.1-4.2.7所述方法执行:
4.2.1监控DNS防污染系统运行的操作系统的53网络端口,若有DNS解析结果报文到达,执行4.2.2,若无DNS解析结果报文到达,转4.2.1继续监控。
4.2.2接收DNS解析结果报文,从DNS解析结果报文获取报文的源IP地址i_sip。
4.2.3从DNS解析结果报文中获取域名信息,记录为str,以及DNS解析结果报文中的IP地址i_rip。
4.2.4根据域名信息str,从DNS解析请求链表中查找与DNS解析结果报文对应的元素(即找到name域的值与str相同的元素)。如果没有找到,则丢弃本次DNS解析结果报文,转步骤4.2.1。如果找到,令在DNS解析请求链表中找到的解析请求元素为i_request,转步骤4.2.5。
4.2.5根据DNS解析结果报文的源IP地址i_sip,在i_request的解析结果链表域result_list中查找sip值等于i_sip的解析结果元素。如果找到,则丢弃本次DNS解析结果报文,转步骤4.2.1。如果没有找到,转步骤4.2.6。
4.2.6构建DNS解析结果链表元素result0,令result0的sip为i_sip,令result0的rip为i_rip,令result0的packet为解析结果报文。
4.2.7将result0插入i_request的解析结果链表域result_list,转步骤4.2.1。
4.3如图3所示,解析结果分析模块按4.3.1-4.3.8所述方法执行:
4.3.1获取DNS防污染系统时间,令时间变量t1=DNS防污染系统时间,从初始化模块接收T1,T2和T3,初始化链表rip_list为空。
4.3.2读取DNS防污染系统时间,令时间变量t2=DNS防污染系统时间,判定t2-t1是否大于等于T2,若t2-t1大于等于T2,令t1=t2,转4.3.3,否则转4.3.2。
4.3.3从DNS解析请求链表获取DNS解析请求链表元素总数,令为N1,定义变量i=0。
4.3.4从DNS解析请求链表获取第i个元素i_request,获取当前DNS防污染系统时间t3。
4.3.5如果t3-i_request->time大于T3,则i_request的DNS解析超时,i_request->time指i_request的time域的值,从解析请求链表中删除i_request,令N1=N1-1,i=i+1,如果i大于等于N1,说明处理完了解析请求链表中的所有元素,转步骤4.3.2;如果i小于N1,说明解析请求链表中还有元素未处理,转步骤4.3.4。如果t3-i_request->time小于等于T3,说明i_request的DNS解析请求未超时,转步骤4.3.6。
4.3.6判断i_request的req_pkt最近1次被解析请求处理模块处理得到的DNS解析结果报文或解析请求转发模块转发的对应DNS解析结果报文到达是否超时,判断方法为:如果t3-i_request->stime小于T1,说明不超时,令i=i+1,如果i大于等于N1,说明处理完了解析请求链表中的所有元素,转步骤4.3.2,如果i小于N1,说明解析请求链表中还有元素未处理,转步骤4.3.4。如果t1-i_request->stime大于等于T1,说明i_request的req_pkt最近1次被解析请求处理模块处理得到的DNS解析结果报文或解析请求转发模块转发的对应DNS解析结果报文到达超时,转步骤4.3.7。
4.3.7统计i_request的DNS解析结果链表所有元素中不同rip的数量,判断是否有数量相对最大(即有且仅有1个数量最大值)的rip,如果有,将i_request的name值和数量相对最大的rip发送给结果返回模块;如果没有则将i_request的name值发送给解析请求转发模块。具体操作步骤如下:
4.3.7.1删除解析结果IP统计链表rip_list中所有元素。
4.3.7.2从i_request的解析结果链表i_result_list中获取解析结果链表元素总数,令为N2,令j=0。
4.3.7.3获取i_result_list的第j个元素j_result。
4.3.7.4查找rip_list中是否有rip域的值与j_result的rip值相等的元素,如果有,则对应rip_list元素的count值加1,令j=j+1,若j=N2,转步骤4.3.7.6,若j小于N2,转步骤4.3.7.3。如果rip_list中没有rip域的值与j_result的rip值相等的元素,转步骤4.3.7.5。
4.3.7.5构建新的解析结果IP统计链表元素k_rip,令k_rip的rip等于j_result的rip,令k_rip的count为1,将k_rip插入到rip_list。令j=j+1,若j=N2,转步骤4.3.7.6,否则转步骤4.3.7.3。
4.3.7.6按照count值从大到小对rip_list中的元素排序。
4.3.7.7获取排序后rip_list链表中第1个元素的count值count0,和第2个元素的count值count1。如果count0大于count1,则将i_request的name值(令为i_name)和count0对应的rip_list元素的rip值(令为rip0)发送给结果返回模块;如果count0等于count1,将name值i_name发送解析请求转发模块。转步骤4.3.8。
4.3.8令i=i+1,如果i=N1,说明处理完了解析请求链表中的所有元素,转步骤4.3.2;如果i<N1,转步骤4.3.4。
4.4解析请求转发模块接收初始化模块发送的N和ip_array,当接收到解析结果分析模块发送的name值i_name时,将i_name对应的DNS解析请求报文转发至ip_array中记录的DNS解析服务器。具体步骤如下:
4.4.1接收初始化模块发送的ip_array和N。
4.4.2监控是否从解析结果分析模块接收到name值i_name,若接收到,转4.4.3;若未接收到,转4.4.2继续监控。
4.4.3在解析请求链表request_list中查找name值为i_name的元素i_request。
4.4.4令i_num=i_request->num,i_request->num指i_request的num域,如果i_num大于等于N,从request_list中删除i_request,转步骤4.4.2。如果i_num小于N,转步骤4.4.5。
4.4.5令i_request->num=i_num+1,i_num=i_num+1,将i_request的req_pkt转发至ip_array[i_num]记录的DNS解析服务器(即将req_pkt发到互联网,互联网与DNS解析服务器都是连通的)。转步骤4.4.2。
4.5结果返回模块向用户返回最终DNS解析结果,方法是:
4.5.1结果返回模块监控是否从解析结果分析模块接收到name值i_name和rip值rip0,若接收到,转4.5.2;若未接收到,转4.5.1继续监控。
4.5.2在DNS解析请求链表request_list中查找name值为i_name的元素i_request。
4.5.3在i_request的解析结果链表域result_list中查找rip值为rip0的元素j_result。
4.5.4获取j_result的解析结果报文packet。将packet发送至用户。从request_list中删除i_request。转步骤4.5.1继续监控。

Claims (7)

1.一种在DNS客户端或代理服务器使用的DNS防污染方法,其特征在于包括以下步骤:
第一步,构建DNS防污染系统,DNS防污染系统运行于DNS客户端或者DNS代理服务器;
DNS防污染系统由配置文件、公共内存、初始化模块、解析请求处理模块、解析结果分析模块、解析请求转发模块、解析结果处理模块、结果返回模块组成;
配置文件存放DNS解析服务器IP地址的总数N、N个DNS解析服务器IP地址、解析结果报文到达超时时间T1、分析解析结果执行周期T2、DNS解析超时时间T3,N为正整数;
公共内存中存放DNS解析请求链表、解析结果IP统计链表;
DNS解析请求链表的一个元素包含7个域:域名信息即name,DNS解析请求报文发送用户的IP地址即ip,DNS解析请求报文即req_pkt,DNS解析请求报文接收时间即time,最近1次DNS解析请求报文转发时间即stime,最近1次DNS解析请求报文转发的DNS解析服务器序号即num,解析结果链表;name指DNS解析请求报文中查询名字段的内容;stime指该DNS解析请求报文最近1次被解析请求转发模块转发的时间;num是该DNS解析请求报文最近1次被解析请求转发模块转发的目的解析服务器IP地址在解析服务器IP地址列表中的存储序号;DNS解析请求报文指用户发送的遵循DNS协议规范的请求报文,包括源IP地址src_ip即发送DNS解析请求报文的用户的IP地址、用户请求解析的域名信息;
解析结果链表是DNS解析请求链表中元素的一个域,解析结果链表中每个元素存储1个DNS解析结果,DNS解析结果包含3个域:解析结果报文的源IP地址即sip,解析结果IP地址即rip,DNS解析结果报文即packet,packet遵循DNS协议规范,包括报文源IP地址i_sip、DNS解析结果IP地址即域名对应的IP地址、用户请求解析的域名信息;
解析结果IP统计链表rip_list包含2个域:解析结果IP地址即rip,rip的数量;
初始化模块与配置文件、解析请求处理模块、解析结果分析模块和解析请求转发模块相连;初始化模块从配置文件中读取DNS解析服务器IP地址的总数N、T1、T2、T3,按照顺序从配置文件中读取N个DNS解析服务器IP地址,将N个DNS解析服务器IP地址存入ip_array数组,ip_array中每个元素存储1个DNS解析服务器IP地址,共有N个元素;初始化模块将ip_array和N发送给解析请求处理模块和解析请求转发模块,将T1,T2,T3发送给解析结果分析模块;
解析请求处理模块与用户、初始化模块、公共内存、互联网相连,从初始化模块接收ip_array和N,从用户接收DNS解析请求报文,根据DNS解析请求报文构建DNS解析请求链表元素,并将DNS解析请求链表元素插入到公共内存中的DNS解析请求链表,将DNS解析请求报文分别转发至互联网中的ip_array[0]和ip_array[1]记录的DNS解析服务器;
解析结果处理模块与公共内存、互联网相连,从公共内存中的DNS解析请求链表读取与DNS解析请求报文相应的DNS解析请求链表元素,从互联网中的DNS解析服务器接收DNS解析结果报文,完成DNS解析结果报文与DNS解析请求报文的配对,根据DNS解析结果报文构建解析结果链表元素并插入到公共内存中的DNS解析请求链表中的解析结果链表;
解析结果分析模块与初始化模块、解析请求转发模块、结果返回模块、公共内存相连,从初始化模块接收T1、T2、T3,根据公共内存中的DNS解析请求链表、解析结果IP统计链表,分析DNS解析请求报文和解析结果报文的超时情况、解析结果数量分布情况;根据解析结果数量分布情况,将DNS解析请求链表中的要转发的DNS解析请求报文的域名信息name发送给解析请求转发模块,或将DNS解析请求链表中的要返回结果报文中的域名信息name和解析结果IP地址rip发送给结果返回模块;
解析请求转发模块与初始化模块、解析结果分析模块、公共内存、互联网相连,从初始化模块接收ip_array和N,从解析结果分析模块接收要转发的DNS解析请求报文的域名信息name,根据name从公共内存的DNS解析请求链表中找出对应DNS解析请求报文和当前DNS解析请求报文已转发的DNS解析服务器序号num,将解析请求转发至ip_array[num+1]记录的DNS解析服务器,同时更新DNS解析请求链表;
结果返回模块与用户、解析结果分析模块和公共内存相连,从解析结果分析模块接收要返回结果报文的域名信息name和解析结果IP地址rip,从公共内存的DNS解析请求链表中的解析结果链表中查找要返回的DNS解析结果报文,将DNS解析结果报文返回给用户;
第二步,初始化配置文件,方法是:
根据公开的DNS解析服务器IP地址,将可用的DNS解析服务器IP地址以及DNS解析服务器IP地址的总数N写进配置文件,初始化配置解析结果报文到达超时时间T1、分析解析结果执行周期T2、DNS解析超时时间T3;
第三步,初始化模块对DNS防污染系统进行初始化,方法是:
3.1从配置文件读取N、T1、T2、T3,按照顺序读取N个DNS解析服务器的IP地址;
3.2定义存储IP地址的数组ip_array,将N个DNS解析服务器IP地址存入ip_array;
3.3将ip_array和N发送给解析请求处理模块和解析请求转发模块;
3.4将T1,T2,T3发送给解析结果分析模块;
第四步,DNS防污染系统对DNS缓存污染和中间人造成的DNS污染进行防护,本步骤由解析请求处理模块、解析结果处理模块、解析结果分析模块、解析请求转发模块、结果返回模块并行配合工作,方法是:解析请求处理模块从用户接收DNS解析请求报文,根据DNS解析请求报文构建DNS解析请求链表元素,将DNS解析请求链表元素放到DNS解析请求链表中,并将DNS解析请求报文发送给2台DNS解析服务器;同时,解析结果处理模块监控是否有DNS解析结果报文到达,根据DNS解析结果报文构建DNS解析请求链表中的解析结果链表;同时,解析结果分析模块按照时间周期T2循环执行,对解析结果链表中的DNS解析结果报文进行分析处理;同时,解析请求转发模块监控解析结果分析模块的输出,执行解析请求转发,配合监控解析结果分析模块对DNS进行防污染;同时,结果返回模块监控解析结果分析模块的输出,根据解析结果分析模块的输出情况将DNS解析结果报文返回给用户,具体方法为:
4.1解析请求处理模块执行方法为:
4.1.1从初始化模块接收ip_array和N;
4.1.2监控用户是否发送了DNS解析请求报文,若发送了DNS解析请求报文,执行4.1.3,若未发送DNS解析请求报文,转4.1.2继续监控;
4.1.3接收用户发送的DNS解析请求报文,从DNS解析请求报文获取源IP地址src_ip;
4.1.4从DNS解析请求报文获取域名信息,记录为str;
4.1.5获取当前DNS防污染系统的时间t0
4.1.6新建DNS解析请求链表元素request,令request的name值为str,令request的ip为src_ip,令request的req_pkt为DNS解析请求报文,令request的time和stime值为t0,令request的num值为1,初始化request的DNS解析结果链表result_list为空,将request插入DNS解析请求链表;
4.1.7将DNS解析请求报文分别转发至ip_array[0]和ip_array[1]记录的DNS解析服务器,转步骤4.1.2;
4.2解析结果处理模块执行方法为:
4.2.1监控是否有DNS解析结果报文到达,若有,执行4.2.2,若无DNS解析结果报文到达,转4.2.1继续监控;
4.2.2接收DNS解析结果报文,从DNS解析结果报文获取报文的源IP地址i_sip;
4.2.3从DNS解析结果报文中获取域名信息,记录为str,以及DNS解析结果报文中的IP地址i_rip;
4.2.4根据域名信息str,从DNS解析请求链表中查找与DNS解析结果报文对应的元素即找到name域的值与str相同的元素,如果没有找到,则丢弃本次DNS解析结果报文,转步骤4.2.1;如果找到,令在DNS解析请求链表中找到的解析请求元素为i_request,转步骤4.2.5;
4.2.5根据DNS解析结果报文的源IP地址i_sip,在i_request的解析结果链表域result_list中查找sip值等于i_sip的解析结果元素,如果找到,丢弃本次DNS解析结果报文,转步骤4.2.1;如果没有找到,转步骤4.2.6;
4.2.6构建DNS解析结果链表元素result0,令result0的sip为i_sip,令result0的rip为i_rip,令result0的packet为解析结果报文;
4.2.7将result0插入i_request的解析结果链表域result_list,转步骤4.2.1;
4.3解析结果分析模块执行方法为:
4.3.1获取DNS防污染系统时间,令时间变量t1=DNS防污染系统时间,从初始化模块接收T1,T2和T3,初始化链表rip_list为空;
4.3.2读取DNS防污染系统时间,令时间变量t2=DNS防污染系统时间,判定t2-t1是否大于等于T2,若t2-t1大于等于T2,令t1=t2,转4.3.3,否则转4.3.2;
4.3.3从DNS解析请求链表获取DNS解析请求链表元素总数,令为N1,定义变量i=0;
4.3.4从DNS解析请求链表获取第i个元素i_request,获取当前DNS防污染系统时间t3;
4.3.5如果t3-i_request->time大于T3,则i_request的DNS解析超时,i_request->time指i_request的time域的值,从解析请求链表中删除i_request,令N1=N1-1,i=i+1,如果i大于等于N1,说明处理完了解析请求链表中的所有元素,转步骤4.3.2;如果i小于N1,说明解析请求链表中还有元素未处理,转步骤4.3.4;如果t3-i_request->time小于等于T3,说明i_request的DNS解析请求未超时,转步骤4.3.6;
4.3.6判断i_request的req_pkt最近1次被解析请求处理模块处理得到的DNS解析结果报文或解析请求转发模块转发的对应DNS解析结果报文到达是否超时,判断方法为:如果t3-i_request->stime小于T1,说明不超时,令i=i+1,如果i大于等于N1,说明处理完了解析请求链表中的所有元素,转步骤4.3.2,如果i小于N1,说明解析请求链表中还有元素未处理,转步骤4.3.4;如果t1-i_request->stime大于等于T1,说明i_request的req_pkt最近1次被解析请求处理模块处理得到的DNS解析结果报文或解析请求转发模块转发的对应DNS解析结果报文到达超时,转步骤4.3.7;
4.3.7统计i_request的DNS解析结果链表所有元素中不同rip的数量,判断是否有数量相对最大的rip,如果有,将i_request的name值和数量相对最大的rip发送给结果返回模块;如果没有则将i_request的name值发送给解析请求转发模块,令i_request的name值为i_name,令数量相对最大的rip为rip0;
4.3.8令i=i+1,如果i=N1,说明处理完了解析请求链表中的所有元素,转步骤4.3.2;如果i<N1,转步骤4.3.4;
4.4解析请求转发模块接收初始化模块发送的N和ip_array,当接收到解析结果分析模块发送的name值i_name时,将i_name对应的DNS解析请求报文转发至ip_array中记录的DNS解析服务器,方法是:
4.4.1接收初始化模块发送的ip_array和N;
4.4.2监控是否从解析结果分析模块接收到name值i_name,若接收到,转4.4.3;若未接收到,转4.4.2继续监控;
4.4.3在解析请求链表request_list中查找name值为i_name的元素i_request;
4.4.4令i_num=i_request->num,i_request->num指i_request的num域,如果i_num大于等于N,从request_list中删除i_request,转步骤4.4.2;如果i_num小于N,转步骤4.4.5;
4.4.5令i_request->num=i_num+1,i_num=i_num+1,将i_request的req_pkt转发至ip_array[i_num]记录的DNS解析服务器,转步骤4.4.2;
4.5结果返回模块向用户返回最终DNS解析结果,方法是:
4.5.1结果返回模块监控是否从解析结果分析模块接收到name值i_name和rip值rip0,若接收到,转4.5.2;若未接收到,转4.5.1继续监控;
4.5.2在DNS解析请求链表request_list中查找name值为i_name的元素i_request;
4.5.3在i_request的解析结果链表域result_list中查找rip值为rip0的元素j_result;
4.5.4获取j_result的解析结果报文packet,将packet发送至用户;从request_list中删除i_request,转步骤4.5.1继续监控。
2.如权利要求1所述的在DNS客户端或代理服务器使用的DNS防污染方法,其特征在于所述N大于等于3。
3.如权利要求1所述的在DNS客户端或代理服务器使用的DNS防污染方法,其特征在于第二步初始化配置文件时将T1设置为1到10秒,T2设置为20到100毫秒,T3设置为1到10秒。
4.如权利要求3所述的在DNS客户端或代理服务器使用的DNS防污染方法,其特征在于所述T1设置为2秒,T2设置为50毫秒、T3设置为5秒。
5.如权利要求1所述的在DNS客户端或代理服务器使用的DNS防污染方法,其特征在于4.2.1步所述监控是否有DNS解析结果报文到达的方法是监控DNS防污染系统运行的操作系统的53网络端口。
6.如权利要求1所述的在DNS客户端或代理服务器使用的DNS防污染方法,其特征在于4.3.7步所述数量相对最大指有且仅有1个数量最大值。
7.如权利要求1所述的在DNS客户端或代理服务器使用的DNS防污染方法,其特征在于4.3.7步具体方法是:
4.3.7.1删除解析结果IP统计链表rip_list中所有元素;
4.3.7.2从i_request的解析结果链表i_result_list中获取解析结果链表元素总数,令为N2,令j=0;
4.3.7.3获取i_result_list的第j个元素j_result;
4.3.7.4查找rip_list中是否有rip域的值与j_result的rip值相等的元素,如果有,则对应rip_list元素的count值加1,令j=j+1,若j=N2,转步骤4.3.7.6,若j小于N2,转步骤4.3.7.3;如果rip_list中没有rip域的值与j_result的rip值相等的元素,转步骤4.3.7.5;
4.3.7.5构建新的解析结果IP统计链表元素k_rip,令k_rip的rip等于j_result的rip,令k_rip的count为1,将k_rip插入到rip_list;令j=j+1,若j=N2,转步骤4.3.7.6;否则转步骤4.3.7.3;
4.3.7.6按照count值从大到小对rip_list中的元素排序;
4.3.7.7获取排序后rip_list链表中第1个元素的count值count0,和第2个元素的count值count1;如果count0大于count1,则将i_request的name值i_name和count0对应的rip_list元素的rip值rip0发送给结果返回模块;如果count0等于count1,将name值i_name发送解析请求转发模块。
CN201911072821.5A 2019-11-05 2019-11-05 在dns客户端或代理服务器使用的dns防污染方法 Active CN110769004B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911072821.5A CN110769004B (zh) 2019-11-05 2019-11-05 在dns客户端或代理服务器使用的dns防污染方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911072821.5A CN110769004B (zh) 2019-11-05 2019-11-05 在dns客户端或代理服务器使用的dns防污染方法

Publications (2)

Publication Number Publication Date
CN110769004A CN110769004A (zh) 2020-02-07
CN110769004B true CN110769004B (zh) 2020-07-14

Family

ID=69336313

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911072821.5A Active CN110769004B (zh) 2019-11-05 2019-11-05 在dns客户端或代理服务器使用的dns防污染方法

Country Status (1)

Country Link
CN (1) CN110769004B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113259399B (zh) * 2021-07-08 2021-10-15 中国人民解放军国防科技大学 基于异构信息网络的域名服务器安全威胁分析方法及装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101640679A (zh) * 2009-04-13 2010-02-03 山石网科通信技术(北京)有限公司 域名解析代理方法和装置
CN104468865A (zh) * 2014-12-25 2015-03-25 北京奇虎科技有限公司 域名解析控制、响应方法及相应的装置
CN106161436A (zh) * 2016-06-27 2016-11-23 汉柏科技有限公司 一种防止域名系统dns污染的方法和网关
CN106572199A (zh) * 2016-10-11 2017-04-19 上海北信源信息技术有限公司 一种避免dns污染的方法
CN106817436A (zh) * 2016-12-09 2017-06-09 互联网域名系统北京市工程研究中心有限公司 一种防止dns强解结果被污染的方法及系统

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7930428B2 (en) * 2008-11-11 2011-04-19 Barracuda Networks Inc Verification of DNS accuracy in cache poisoning
CN101420433B (zh) * 2008-12-01 2013-03-13 成都市华为赛门铁克科技有限公司 防御域名系统欺骗攻击的方法及装置
CN105939337B (zh) * 2016-03-09 2019-08-06 杭州迪普科技股份有限公司 Dns缓存投毒的防护方法及装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101640679A (zh) * 2009-04-13 2010-02-03 山石网科通信技术(北京)有限公司 域名解析代理方法和装置
CN104468865A (zh) * 2014-12-25 2015-03-25 北京奇虎科技有限公司 域名解析控制、响应方法及相应的装置
CN106161436A (zh) * 2016-06-27 2016-11-23 汉柏科技有限公司 一种防止域名系统dns污染的方法和网关
CN106572199A (zh) * 2016-10-11 2017-04-19 上海北信源信息技术有限公司 一种避免dns污染的方法
CN106817436A (zh) * 2016-12-09 2017-06-09 互联网域名系统北京市工程研究中心有限公司 一种防止dns强解结果被污染的方法及系统

Also Published As

Publication number Publication date
CN110769004A (zh) 2020-02-07

Similar Documents

Publication Publication Date Title
US10296748B2 (en) Simulated attack generator for testing a cybersecurity system
US11863587B2 (en) Webshell detection method and apparatus
US10200384B1 (en) Distributed systems and methods for automatically detecting unknown bots and botnets
US11574047B2 (en) Cyberanalysis workflow acceleration
US9026676B1 (en) Systems and methods for prepending nonce labels to DNS queries to enhance security
US8260914B1 (en) Detecting DNS fast-flux anomalies
US7849507B1 (en) Apparatus for filtering server responses
US8869275B2 (en) Systems and methods to detect and respond to distributed denial of service (DDoS) attacks
US8375120B2 (en) Domain name system security network
US8561187B1 (en) System and method for prosecuting dangerous IP addresses on the internet
EP2532121B1 (en) Using aggregated DNS information originating from multiple sources to detect anomalous DNS name resolutions
JP6315640B2 (ja) 通信先対応関係収集装置、通信先対応関係収集方法及び通信先対応関係収集プログラム
US20070177499A1 (en) Network connectivity determination
US20100235915A1 (en) Using host symptoms, host roles, and/or host reputation for detection of host infection
CN104468554A (zh) 基于ip和host的攻击检测方法和装置
US20150033335A1 (en) SYSTEMS AND METHODS TO DETECT AND RESPOND TO DISTRIBUTED DENIAL OF SERVICE (DDoS) ATTACKS
US20200412686A1 (en) MAPPING INTERNET ROUTING WITH ANYCAST AND UTILIZING SUCH MAPS FOR DEPLOYING AND OPERATING ANYCAST POINTS OF PRESENCE (PoPs)
Jin et al. Design of detecting botnet communication by monitoring direct outbound DNS queries
Xu et al. Secure the Internet, one home at a time
Antonakakis et al. A centralized monitoring infrastructure for improving DNS security
Matic et al. Pythia: a framework for the automated analysis of web hosting environments
CN109565453B (zh) 用于扩充网络流量报告的方法及系统
CN110769004B (zh) 在dns客户端或代理服务器使用的dns防污染方法
Tazaki et al. MATATABI: multi-layer threat analysis platform with Hadoop
US11159548B2 (en) Analysis method, analysis device, and analysis program

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant