【协议-DNS】

DNS协议基础

DNS协议是应用层协议,用于将用户提供的主机名(域名)解析为 IP 地址。

一:域名结构

DNS 的核心系统是一个三层的树状、分布式服务,基本对应域名的结构:
图片: https://uploader.shimo.im/f/PGf2cRVmLN1QAY63.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE3MTExOTY1MDAsImZpbGVHVUlEIjoiMWxxN01SUlEyZGNsSm1BZSIsImlhdCI6MTcxMTE5NjIwMCwiaXNzIjoidXBsb2FkZXJfYWNjZXNzX3Jlc291cmNlIiwidXNlcklkIjo4MjY5OTExN30.mNPbU7mD3JdD5QTZn89wlpBHLAZ2VE3cy81UKkUUNGA

由于 ICANN 管理着所有的顶级域名,所以它是最高一级的域名节点,被称为根域名(root domain)。在有些场合,www.xxx.com 被写成 www.xxx.com.,即最后还会多出一个点。这个点就是根域名。

理论上,「所有域名的查询都必须先查询根域名」ICANN 维护着一张列表(根域名列表),里面记载着顶级域名和对应的托管商。由于根域名列表很少变化,大多数 DNS 服务商都会提供它的缓存。
顶级域名服务器显然就是用来管理注册在该顶级域名下的所有二级域名的,记录这些二级域名的 IP 地址。

权威域名服务器(Authoritative DNS Server):管理自己域名下主机的 IP 地址,比如 http://apple.com 权威域名服务器可以返回 www.pzijun.cn 的 IP 地址

三级域名是形如 www.baidu.com 的域名,可以当做是二级域名的子域名,特征为域名包含两个 .。对于域名所有者/使用者而言,三级域名都是二级域名的附属物而无需单独费用。三级域名甚至不能称为域名,一般称之为域名下的 “二级目录”。

二:域名缓存优化

在这里插入图片描述

本地域名服务器是电脑解析时的「默认」域名服务器,即电脑中设置的首选 DNS 服务器和备选 DNS 服务器。常见的有电信、联通、谷歌、阿里等的本地 DNS 服务。

域名缓存有以下两种方式:

非权威域名服务器(本地域名服务器)缓存 :各大运营服务商或大公司都有自己的 DNS 服务器,一般部署在距离用户较近地方,代替用户用户访问核心 DNS 系统,可以缓存之前的查询结果,如果已经有了记录,就无需再向根服务器发起查询,直接返回对应的 IP 地址本地计算机 DNS 记录缓存 :

浏览器缓存:浏览器在获取某一网站域名的实际 IP 地址后,进行缓存,之后遇到同一域名查询之前的缓存结果即可,有效减少网络请求的损耗。每种浏览器都有一个固定的 DNS 缓存时间,如 Chrome 的过期时间是 1 分钟,在这个期限内不会重新请求 。
DNS操作系统缓存:操作系统里有一个特殊的“主机映射”文件,通常是一个可编辑的文本,在 Linux 里是/etc/hosts,在 Windows 里是C:\WINDOWS\system32\drivers\etc\hosts

三:DNS 查询方式

具体 DNS 查询的方式有两种:
递归查询
迭代查询

「主机和本地域名服务器之间的查询方式是递归查询」,也就是说主机请求本地域名服务器,那么本地域名服务器作为请求的接收者一定要给主机想要的答案。

在这里插入图片描述

「域名服务器之间的查询使用迭代查询方式,以免根域名服务器的压力过大」

在这里插入图片描述

四:DNS 完整查询过程
将我们上面所说的域名服务器之间的 DNS 查询请求过程和域名缓存结合起来,完整查询过程 :
在这里插入图片描述

DNS报文格式解析
DNS 分为查询请求和查询响应。
在这里插入图片描述

事务 ID:DNS 报文的 ID 标识。对于请求报文和其对应的应答报文,该字段的值是相同的。通过它可以区分 DNS 应答报文是对哪个请求进行响应的。

查询问题区域显示dns查询请求的问题,通常只有一个问题。该部分包含正在进行的查询信息,包含查询名(被查询主机名字)、查询类型、查询类。

问题部分(查询问题区域)格式如图所示。

该部分中每个字段含义如下:
查询名:一般为要查询的域名,有时也会是 IP 地址,用于反向 查询。
查询类型:DNS 查询请求的资源类型。通常查询类型为 A 类型,表示由域名获取对应的 IP 地址。
查询类:地址类型,通常为互联网地址,值为 1 class :IN。
DNS 请求类型为 A,那么得到的响应信息也应该为 A 类型。

DNS的查询类型有20种,比较常用的查询类型有有	A,NS,CNAME,PTR,MX等五种类型
1)A:由DNS域名到IP地址的查询,即正向查询,编程中由函数gethostbyname实现。
2)PTR:由IP到域名的查询,即逆向查询,编程中由函数gethostbyaddr。
3)NS:NS记录是指定由哪个DNS服务器解析你的域名。
4)CNAME:查询DNS的别名。
5)MX:邮箱服务器查询。
6)AAAA记录:该记录是将域名解析到一个指定的IPV6的IP上
7) TXT记录:TXT记录,一般指某个主机名或域名的说明

资源记录部分:资源记录部分只有在 DNS 响应包中才会出现
在这里插入图片描述

选择基于UDP/TCP发起DNS

当请求体和响应的大小比较小时,通过 TCP 协议进行传输不仅需要传输更多的数据,还会消耗更多的资源,多次通信以及信息传输带来的时间成本在 DNS 查询较小时是无法被忽视的,TCP 连接带来的可靠性在 DNS 的场景中没能发挥太大的作用。

DNS隧道攻击原理

在后门程序进行DNS查询时,如果查询的域名不在DNS服务器本机的缓存中,就会访问互联网进行查询,然后返回结果,如果互联网上有一台攻击者设置的服务器,那么服务器就可以依靠域名解析的响应进行数据包的交换,从DNS协议的角度来看,这样的操作只是反复查询某个或者某些特定的域名并且得到解析结果,但其本质是,DNS预期的返回结果应该是一个IP地址,而事实上不是——返回的可以是任意字符串,包括加密的C&C指令。

使用DGA算法规避本地客户端DNS的缓存。

dns 隧道攻击分类:ip直连型和域名中继型

直连也就是客户端直接和指定的目标DNS Server(Authoritative NS Server)连接。

域名中继型:通过DNS递归查询实现的中继隧道。
①受到木马控制的PC将数据封装到DNS数据报文里,向位于内网的本地域名服务器请求查询baidu.com.
②本地域名服务器透过防火墙向根域名服务器发送查询请求
③经过大量的递归重定向,查询请求发到baidu.com的(伪造)权威域名服务器
④baidu.com(伪造)权威域名服务器是在攻击者控制下,解析并发送响应包
⑤dns响应包穿透内网防火墙
⑥进入内网
⑦本地域名服务器将响应包返回给受控客户端
⑧受控客户端解析DNS响应包中的数据,获取指令

流量特征

1.DnsA记录传输:
利用dns解析过程,在请求解析的域名中包含需外传的数据,如xxxxxx.hack.com。则最终hack.com的dns服务器会收到xxxxx这个数据回传。
2.Dns默认响应值:0.0.0.0
3.dns的txt类型回包:
一般指为某个主机名或域名设置的说明,可被黑客利用回传数据。终端请求某恶意域名的dns解析,dns返回txt记录,包含黑客需要的回传内容,如模块更新数据、指令等
4.wireshark:
dns.flags == 0x8180 and dns.qry.name matches “[0-9a-f]{14}.xxx.xxx” 来过滤出所有的dns流量。

相关推荐

  1. DNS协议报文

    2024-03-25 19:58:03       17 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-25 19:58:03       17 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-25 19:58:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-25 19:58:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-25 19:58:03       18 阅读

热门阅读

  1. Python之装饰器-带参装饰器

    2024-03-25 19:58:03       20 阅读
  2. 查看nginx日志文件

    2024-03-25 19:58:03       22 阅读
  3. 3-9 枚举类代码 演示

    2024-03-25 19:58:03       17 阅读
  4. GESP C++二级认证真题 2024年3月

    2024-03-25 19:58:03       23 阅读
  5. IOS面试题编程机制 21-25

    2024-03-25 19:58:03       16 阅读
  6. 【 Vue 】辅助创建VNode的h函数

    2024-03-25 19:58:03       20 阅读
  7. Spark 集群管理器

    2024-03-25 19:58:03       21 阅读