加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 服务器 > 系统 > 正文

如何发现“利用DNS放大攻击”的服务器

发布时间:2018-04-19 08:14:09 所属栏目:系统 来源:站长网
导读:副标题#e# 反向解析公共IP - 这里没有问题 Tl; dr:有些域名名称服务器可能会在直接查询反向解析私有IP时暴露内部的IP地址和域名。用dig -x检查一下,或者使用privdns.py 检查一下。 一个简单的错误 我最近犯了一个很小且看似不重要的错误:我试图连接某个
副标题[/!--empirenews.page--]

反向解析公共IP - 这里没有问题

Tl; dr:有些域名名称服务器可能会在直接查询反向解析私有IP时暴露内部的IP地址和域名。用dig -x检查一下,或者使用privdns.py 检查一下。

 一个简单的错误

我最近犯了一个很小且看似不重要的错误:我试图连接某个公司的基础设施的服务器,但没有登录到他们的VPN。这看起来很无聊,你可能会觉得,这样的事情每天都在发生。但几个小时后,我正在编写Python代码,并且在大量扫描互联网上的DNS服务器。即使我最终没有取得成功(从安全的角度来看这是很好的结果),但这仍然是一个有趣的实验。那么到底发生了什么事。

如何发现“利用DNS放大攻击”的服务器

如何发现“利用DNS放大攻击”的服务器

当我试图ping内部公司的服务器时,我得到了下面的回应:

  1. michael@seventysix:~ ping internal-db1.example.com 
  2. PING internal-db1.example.com (10.0.0.1) 56(84) bytes of data. 
  3. ^C 
  4. --- internal-db1.example.com ping statistics --- 
  5. 3 packets transmitted, 0 received, 100% packet loss, time 2014ms 

当然,结果显示超时了。但注意一些事情:域名已经被正确解析。即使我没有登录到VPN,我仍然可以解决内部域名。为了确保这不是由于某个DNS缓存造成的,我尝试从云集群中未曾登录到公司网络并使用不同名称服务器的虚拟机中重现此操作,并得到了相同的结果。

为了理解这背后的事情为什么这么有趣,这里有一些关于IP地址和DNS的背景知识。

内部,外部IP和DNS

IPv4和IPv6地址空间分为私有和公有IP。以下网络是私有的:

  1.  10.0.0.0/8 
  2. 172.16.0.0/12 
  3. 192.168.0.0/16 
  4.  FC00 :: / 7 

例如,在你的家庭网络或公司内部网络中使用专用IP。如果你在内部网络中处理公司服务器,他们通常具有上述范围内的IP。

为了连接名称服务器和IP地址,我们使用DNS(域名服务)。DNS服务器(或“域名服务器”)是将域名example.com翻译成IP的服务器。老知识,到目前为止,你很可能知道这一点。内部公司网络中使用的是同样的东西:你不必记住10.0.0.1内部数据库服务器的IP,而是使用DNS将域名internal-db1.example.com 翻译成私有IP,例如10.0.0.1。因此,当你的普通Windows桌面客户端尝试连接到数据库服务器时,它会要求DNS服务器将该域名解析为internal-db1.example.com可以与之通信的IP。(如果你想了解更多关于DNS的信息,我鼓励你从伟大的互联网上观看这个漂亮,简洁的视频 —— 那个人不是我哦:)

  1. https://youtu.be/4ZtFk2dtqv0 

在一些公司中,管理内部IP的域名的同一DNS服务器同时也管理着其公共IP的域名,例如他们网站的域名。请求“谁是www.example.com”和“谁是internal-db1.example.com”,都是从同一个DNS服务器 —— 即公司的DNS服务器来问询ns1.example.com。这就是我刚才遇到的那种情况,ns1.example.com是为解决内部和 外部IP 而设立的名称服务器。只是这台名称服务器不在乎请求解析域名的IP地址是来自公司的内部网络还是外部,所以它响应了我的请求。

  1. => "Who is internal-db1.example.com"? 

响应:

  1. <= "Hey, it's 10.0.0.1", 

不用担心它是通过内部地址来响应来自公司网络之外的DNS请求。

使这一事件成为可能的另一个要求是该公司使用了相同的域名来服务内部和外部。假设他们的网站被命名为:

  • www.example.com。

内部数据库服务器被命名为:

  • internal-db1.example.com。

在ping internal-db1.example.com时,我并没有明确地查询这个公司的DNS,因为我家的DNS被设置为使用不同的DNS(假设它是Google的DNS)。由于DNS具有分布式结构,如果Google的DNS想要获取www.example.com的IP ,它首先会要求其中一个根DNS服务器负责跟踪谁负责第二级域名example.com。已联系的根服务器会使用域名ns1.example.com的IP作为域名example.com的授权服务器来响应Google的DNS 。然后谷歌的DNS请求ns1.example.com解析internal-db1.example.com并收到它最终转给我们的响应也就是我们上面看到的内部IP。如果有内部域名internal-db1.example.local,Google的DNS就不会知道是谁要求顶级域名(.local),因为注册的公司example.com没有注册(也不能)example.local。

想一想:在这一点上,Google的DNS知道公司的内部域名和相应的IP。而互联网上查询的其他所有DNS服务器internal-db1.example.com都会知道同样的事情。乍一看并不是什么大不了的事情,但是作为一个试图保护这个基础设施的人,我希望你们仍然能够明白这一点。

 一个小的信息泄漏

显然,我现在可以通过询问任何公共DNS来解析公司的内部域名。更让人感兴趣的是许多公司都可以用来枚举服务器:

  • db1-internal.company.com
  • db2-internal.company.com
  • db3-internal.company.com

等等 - 这意味着如果你知道一个服务器的名称,那么你可以猜测其他服务器的名称。当然,你也可以尝试爆破域名名称,也许是dev-internal.company.com或log-internal.company.com。这里的泄露信息的问题在于,你可以爆破内部域名,并检查公司网络中是否有这些名称的机器,检索内部IP 而不登录到网络。但是,你仍然需要暴力域名名称。(是的,有工具可以做到这一点。)

 一个更严重的信息泄漏问题

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读