时光飞逝,转眼间2021年已过大半,我们的“防火墙ALG技术”系列文章也已经更新到了第四期,之前推送的《防火墙ALG技术之安全策略》《防火墙ALG技术之FTP协议穿墙术》《防火墙ALG技术之TFTP协议穿墙术》可点击链接进行阅读。本期介绍DNS协议穿越防火墙NAT,浅谈个人理解与认知。
DNS协议简介
DNS(Domain Name System,域名系统)是一个应用层协议,DNS 的作用是将人类可读的域名(如:www.winicssec.com) 转换为机器可读的 IP 地址(如:123.56.238.105)。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。DNS协议建立在UDP或TCP协议之上,默认使用 53号端口。客户端默认通过 UDP 协议进行通信,但是由于广域网中不适合传输过大的 UDP 数据包,因此规定当报文长度超过了512字节时,应转换为使用 TCP 协议进行数据传输。此时可能会出现如下的两种情况:
-
客户端认为UDP响应包长度可能超过512字节,主动使用TCP协议; -
客户端使用UDP协议发送DNS请求,服务端发现响应报文超过了 512 字节,在截断的UDP响应报文中将TC设置为1,以通知客户端该报文已经被截断,客户端收到之后再发起一次 TCP 请求(该特性通常也被安全厂商作为一种有效防御DNS Query Flood攻击的手段)。
DNS服务类型
DNS服务器按照配置和实现功能的不同,包括多种不同的类型。
(1)授权型 DNS
一种授权型DNS服务提供一种更新机制,供开发人员用于管理其公用 DNS 名称。然后,它响应DNS查询,将域名转换为IP地址,以便计算机可以相互通信。授权型DNS对域有最终授权且负责提供递归型DNS服务器对IP地址信息的响应。
(2)递归型 DNS
客户端通常不会对授权型DNS服务直接进行查询。而是通常连接到称为解析程序的其他类型DNS服务,或递归型DNS服务。递归型DNS服务就像是旅馆的门童:尽管没有任何自身的DNS记录,但是可充当您获得DNS信息的中间程序。如果递归型DNS拥有已缓存或存储一段时间的DNS参考,那么它会通过提供源或IP信息来响应DNS查询。如果没有,则它会将查询传递到一个或多个授权型 DNS 服务器以查找信息。
DNS记录类型
DNS中,常见的资源记录类型有:
-
A记录(地址) ─ 指定域名对应的 IPv4 地址记录。 -
AAAA记录(地址) ─ 指定域名对应的 IPv6 地址记录。 -
NS记录(域名服务) ─ 指定解析域名或子域名的DNS服务器。 -
MX记录(邮件交换) ─ 指定接收信息的邮件服务器。 -
CNAME(规范)─ 一个域名映射到另一个域名或 CNAME 记录(www.winicssec.com指向 www.wnt.com )或映射到一个 A记录。 -
PTR记录(反向记录) ─ PTR 记录用于定义与 IP 地址相关联的名称。PTR 记录是 A 或 AAAA 记录的逆。PTR 记录是唯一的,因为它们以 .arpa 根开始并被委派给 IP 地址的所有者。
DNS工作流程
在浏览器中输入www.winicssec.com域名,操作系统会先检查自己本地的hosts文件是否有这个域名映射关系。如果有这个域名的映射,就先调用这个IP地址映射,完成域名解析;如果没有这个域名的映射,则查找本地DNS缓存,是否有这个域名映射关系,如果有,直接返回,完成域名解析。
如果hosts与本地DNS缓存都没有相应的域名映射关系,首先会找网络配置参数中设置的首选DNS服务器(记为A-DNS服务器),此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
如果要查询的域名,不由A-DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
如果A-DNS服务器本地区域文件与缓存解析都失效,则根据A-DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至根DNS服务器(记为B-DNS服务器),B-DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。A-DNS服务器收到IP信息后,将会联系负责.com域的这台服务器(记为C-DNS服务器)。C-DNS服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(记为D-DNS服务器)给A-DNS服务器。当A-DNS服务器收到这个地址后,就会找D-DNS服务器,重复上面的动作,进行查询,直至找到www.winicssec.com主机。
如果用的是转发模式,A-DNS服务器就会把请求转发至上一级DNS服务器(记为E-DNS服务器),由E-DNS服务器进行解析;如果E-DNS服务器如果不能解析,那么会继续找根DNS或把转请求转至上上级,以此循环。
DNS报文分析
DNS 分为查询请求和查询响应,请求和响应的报文结构基本相同。DNS 报文格式如表1-1所示:
基础结构部分:DNS 报文的基础结构部分指的是报文首部,每个字段含义:上表中显示了 DNS 的报文格式。其中,事务ID、标志、问题计数、回答资源记录数、权威名称服务器计数、附加资源记录数这6个字段是DNS的报文首部,共12个字节。整个DNS 格式主要分为3部分内容,即基础结构部分、问题部分、资源记录部分,下面将详细地介绍每部分的内容及含义:
-
事务 ID:DNS 报文的 ID 标识。对于请求报文和其对应的应答报文,该字段的值是相同的。通过它可以区分 DNS 应答报文是对哪个请求进行响应的。 -
标志:DNS 报文中的标志字段。 -
问题计数:DNS 查询请求的数目。 -
回答资源记录数:DNS 响应的数目。 -
权威名称服务器计数:权威名称服务器的数目。 -
附加资源记录数:额外的记录数目(权威名称服务器对应 IP 地址的数目)。
问题部分:问题部分指的是报文格式中查询问题区域(Queries)部分。该部分是用来显示 DNS 查询请求的问题,通常只有一个问题。该部分包含正在进行的查询信息,包含查询名(被查询主机名字)、查询类型、查询类。
资源记录部分:资源记录部分是指 DNS 报文格式中的最后三个字段,包括回答问题区域字段、权威名称服务器区域字段、附加信息区域字段。
如图1-1所示,DNS请求报文,问题计数为1、域名为www.baidu.com。
如图1-2-(a) 所示,DNS响应报文,可以看出问题计数为1、也就是对应的请求报文中的问题,而回答计数为3个。
分析Answers字段,如图1-2-(b)所示:其中type A记录是在穿越防火墙NAT网关时需要重点关注内容。
分析Authoritative nameservers字段,如图1-2-(c)所示:
分析Additional records字段,如图1-2-(d)所示:
DNS协议穿越SNAT使用场景为私网的用户访问公网上的DNS服务器进行A查询,根据DNS域名获得内部服务器的私网IP地址。如图2-1所示,Client A/B/C是DMZ区域内的主机,它们的域名在全网内是唯一的,但它们的地址是内部私有地址,其公网地址注册到 Internet 上的DNS服务器上。如果trust区域内的User想用DNS域名访问DMZ内部主机,它必须通过Internet 上的DNS服务器查询内部服务器的域名以获得其IP地址,但这个IP地址是公网地址,需要由DNS NAT应用级网关将其转换为私网地址,这样私网用户就可以在私网内通过域名方式直接访问内部服务器了。
如图2-2-(a)、2-2-(b)、2-2-(c)所示,为私网客户端通过域名方式访问私网WEB服务器过程中的抓包示例,其重点在于公网DNS服务器的响应报文中A记录“123.56.238.105”在经过NAT后转换为“192.168.13.2”。
DNS协议穿越DNAT使用场景为公网的用户访问私网上的DNS服务器进行A查询,根据DNS名获得内部服务器的公网IP地址。如图3-1所示,Client A/B/C是DMZ区域内的主机,它们的域名在全网内是唯一的,但它们的地址是内部私有地址,只有在内部的DNS服务器上才有其域名和IP地址对应的信息。如果外部主机想访问DMZ区内的服务器,它必须通过内部DNS服务器查询内部主机域名以获得其IP地址,但这个IP地址是私有地址,需要由DNS NAT应用级网关将其转换为公有地址,这样外部主机可以通过域名访问到内部服务器。DNS NAT应用级网关仅对DMZ区域内的内部服务器的进行地址转换。
-
01_SNAT时DNS穿墙-WEB.pcap
-
02_SNAT时DNS穿墙-DNS-Server.pcap
-
03_SNAT时DNS穿墙-WEB-Server.pcap
下载方式
微信扫码关注我们
回复:“DNS” 获取下载链接
渠道合作咨询 张先生 18201311186
稿件合作 微信:shushu12121
原文始发于微信公众号(威努特工控安全):防火墙ALG技术之DNS协议穿墙术