Advertisement

A Deep Dive into DNS Security for Beginners

阅读量:

作者:禅与计算机程序设计艺术

1.简介

1.1 引言

互联网服务目前已经成为世界范围内最流行的服务之一,越来越多的人开始使用互联网产品和服务。而网络服务中的域名系统(Domain Name System,DNS)也扮演着至关重要的角色,作为解析域名到 IP 地址的中间件,它确保用户在浏览网站时能够访问正确的页面。但是,随着互联网的发展,许多公司越来越重视网络安全,希望限制对 DNS 服务的攻击和欺骗行为。因此,现在越来越多的公司开始开发防御性的 DNS 安全产品,如基于防火墙、入侵检测系统、Web 安全防护、动态 DNS 等等。

然而,对于刚接触 DNS 安全的初学者来说,理解 DNS 的工作原理,以及如何在自己的网络环境中配置 DNS 安全方案并有效保障 DNS 服务器的安全,仍然是一个难点。本文将从以下几个方面详细介绍 DNS 安全的相关知识:

  1. DNS 是什么?
  2. DNS 协议和机制
  3. DNS 缓存投毒攻击
  4. DNS 欺骗与劫持
  5. DNS 劫持攻击及防范
  6. 域名服务器的配置管理和 DNSSEC 设计
  7. DNS 治理与运营监控
  8. DNS 名册传输方式选择
  9. 对策建议

通过阅读本文,可以帮助读者了解 DNS 安全、防御以及运维方面的一些知识。

1.2 DNS 是什么?

域名系统(Domain Name System,DNS)是互联网的一项服务,用于域名到 IP 地址之间的转换。每当用户在浏览器输入域名后,就会自动请求 DNS 服务器解析出对应的 IP 地址进行通信。DNS 将域名转换成 IP 地址,使得域名解析更加容易,并且使通信更加快速。目前,世界上已有数十亿的域名,但仍然没有解决全球分布式计算机网络的单个中心问题。DNS 通过将域名映射到相应的 IP 地址,让用户可以在网络上找到所需的信息或资源。它还负责提供各种服务,例如邮件发送,即时消息传递,以及网络连接。

域名系统由分层的 DNS 服务器组成,它们按照分布式网络结构组织起来,形成一个全局的、覆盖全球的分布式数据库。这些服务器存储着互联网上使用的各种域名和 IP 地址信息,当用户需要查询某个域名对应的 IP 地址时,就向本地 DNS 服务器发起请求。如果本地 DNS 服务器找不到记录,它会向根 DNS 服务器请求授权,授权服务器将响应递送给本地 DNS 服务器,再向顶级 DNS 服务器请求授权,最终找到域名对应的 IP 地址。

图 1 DNS 架构示意图

2. DNS 协议和机制

2.1 DNS 查询过程

当用户访问一个网站时,首先要确定该网站的 IP 地址。为此,用户向本地 DNS 服务器提交域名的请求,本地 DNS 会检查自身的缓存中是否存在对应记录,如果存在则直接返回结果;如果不存在,则向对应的 ROOT DNS 服务器请求授权,ROOT DNS 告诉本地 DNS 服务器下一步应该请求哪个顶级 DNS 服务器;本地 DNS 服务器向顶级 DNS 服务器请求授权,然后把结果返回给用户,顶级 DNS 服务器再向权威 DNS 服务器请求授权,最后返回结果给本地 DNS 服务器,并把结果缓存到本地。如下图所示:

图 2 DNS 请求过程

2.2 DNS 数据包格式

DNS 报文格式共包括三种类型:

  1. 查询报文:用户浏览器向 DNS 发出查询报文,请求进行域名解析,通常采用 UDP 协议。
  2. 回答报文:当 DNS 接收到查询报文时,如果在自己的数据库中找到了相应的记录,则回复回答报文,将域名指向的 IP 地址放入回答报文中。
  3. 错误报文:当 DNS 收到查询报文时,发现数据库中没有相应的记录,或者不支持请求的类型,则会返回错误报文。

其中,DNS 查询报文和回答报文均包括五个字段:

  1. Header:共占两字节,用于标识 DNS 报文的 ID 和 QR 标志位。ID 是 DNS 报文的唯一标识符,用于标识每个 DNS 查询事务,QR 为响应报文(1)还是查询报文(0)。
  2. Question Record(查询记录):占 10 个字节,用于指定域名的类型和类别。
  3. Answer Record(回答记录):最多可容纳多个回答记录,每个回答记录占 11 个字节。
  4. Authority Record(授权记录):可容纳多个授权记录,每个授权记录占 11 个字节。
  5. Additional Record(附加记录):可容纳多个附加记录,每个附加记录占 11 个字节。

每个字段都以固定的长度进行编码。Header 字段包括两个字段——ID 和 QR,前者用来标识 DNS 报文的唯一 ID,后者用于指示报文是查询报文(0)还是回答报文(1)。Question Record 中的 TYPE 和 CLASS 字段分别表示查询的域名类型和类别。回答记录和授权记录中各自存放着查询的域名的 IP 地址、主机名、TTL(Time To Live,生存时间),以及其他扩展字段。Additional Record 中一般为空。

查询报文和回答报文示例:

复制代码
    // 查询报文示例:
    ID:                 1234
    QR:                  0 (查询报文)
    Opcode:              0 (标准查询)
    AA:                  0 (非权威应答)
    TC:                  0 (非截断报文)
    RD:                  1 (期望递归)
    RA:                  0 (非递归可用)
    Z:                   0 (RESERVED)
    RCODE:               0 (无差错)
    QDCOUNT:             1 (查询数量为 1)
    ANCOUNT:             1 (回答数量为 1)
    NSCOUNT:             0 (授权数量为 0)
    ARCOUNT:             0 (附加数量为 0)
    Query:               www.example.com IN AAAA
|--------------|

                        域名    QTYPE
               Query Data区     |-------------------|
                                   数据   |---------------------|
                                                      查询数据区示例            
||

                                                    可用查询类型为AAAA          
    
    // 回答报文示例:
    ID:                 1234
    QR:                  1 (回答报文)
    OPCODE:              0 (标准查询)
    AA:                  0 (非权威应答)
    TC:                  0 (非截断报文)
    RD:                  1 (期望递归)
    RA:                  0 (非递归可用)
    Z:                   0 (RESERVED)
    RCODE:               0 (无差错)
    QDCOUNT:             1 (查询数量为 1)
    ANCOUNT:             1 (回答数量为 1)
    NSCOUNT:             0 (授权数量为 0)
    ARCOUNT:             0 (附加数量为 0)
    Answer:
                1 answers:
                  [DNS Resource Record of type AAAA with TTL=3600]
                    NAME:        www.example.com
                    RDLENGTH:    16 bytes
                    TTL:         3600 seconds
                    RDATA:       fd00:a516:7c1b:17cd:6d81:2137:bd2a:2c5b
|---------------|------------------|

                                         IPV6 地址                 
    
|------------------------------------|------------------|

     Answer Record Section  |---------------|-----------------------|
                            回答记录区     |-------------------------|
                                                 回答记录示例        
||

                                                 IPv6 类型的回答记录
    
             1 name server record(s):
                  [DNS Resource Record of type NS with TTL=600]
                      NAME:      example.com
                      RDLENGTH:  10 bytes
                      TTL:       600 seconds
                      RDATA:     ns1.example.com
|-----------|---------------|

                                            名称                    
|----------------------|-----------------|

                      authority records section(s):
                         empty                                      
       additional records section(s):
           empty                                                           
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读

2.3 DNS 缓存投毒攻击

DNS 缓存投毒攻击是一种威胁 DNS 服务器的攻击方法,它利用 DNS 缓存中保存的过时的信息,误导用户访问到恶意站点或域名。此攻击方法可以分为四步:

  1. 漏洞分析:收集 DNS 缓存投毒攻击工具、漏洞验证脚本等。
  2. 搭建测试环境:设置多个域,模拟不同地区的用户访问,并配置恶意的 DNS 服务器,然后安装恶意软件。
  3. 攻击演练:黑客通过精心构造的 URL 来诱导受害者点击,并等待受害者打开链接。
  4. 观察反应:实施攻击后,观察 DNS 服务器的行为,检查其是否发生变化。如果 DNS 服务器缓存的条目被修改,那么攻击就成功了。

2.4 DNS 欺骗与劫持

DNS 欺骗攻击和劫持攻击都是利用 DNS 服务来获取对方真实 IP 地址的一种攻击手段。下面简要介绍两种 DNS 欺骗攻击方法:

  1. DNS 缓存污染攻击:DNS 缓存污染攻击是利用 DNS 缓存服务器上的缓存记录,对网站的正常访问造成严重影响。攻击者可以创建虚假的、指向其它目的地址的 DNS 记录,同时将伪造的记录加入到 DNS 缓存中,导致用户在访问网站时产生错误的连接。
  2. 绕过 DNS 过滤:DNS 过滤是指防火墙或路由器在对 DNS 查询进行处理时,只允许特定的域名服务器响应 DNS 查询。攻击者可以选择一个看起来合法的 DNS 服务器来响应 DNS 查询请求,进而避开 DNS 过滤规则。

DNS 劫持也是一种 DNS 攻击手段,它允许攻击者篡改目标域名的 DNS 记录,把它指向自己的服务器,替换掉原有的目的服务器的记录,甚至可以完全控制目标域名的解析结果。劫持攻击可以分为两种:

  1. 域名劫持:域名劫持是利用 DNS 的权威服务器故意拒绝某些域名解析请求。攻击者注册一个域名,并指向自己的服务器,让它拒绝任何其他服务器的域名解析请求。这样就可以屏蔽访问目标网站的所有请求。
  2. 浏览器劫持:浏览器劫持是指恶意站点嵌入恶意代码,尝试劫持用户访问目标网站。攻击者会隐藏在网站的恶意代码里,劫持用户的访问,然后安装自己制作的木马。由于用户对木马的信任程度远低于恶意站点,所以很少有用户会注意到它。

2.5 DNS 劫持攻击防范措施

为了防止 DNS 劫持攻击,除了配置 IP 黑白名单外,以下措施可供参考:

  1. 使用公共 DNS 服务器:很多 DNS 提供商提供了免费的公共 DNS 服务器,可以代替私有 DNS 服务器,可以降低 DNS 劫持攻击的风险。另外,各大互联网公司也在积极推动 DNS over HTTPS 技术,通过加密通信的方式防止 DNS 劫持攻击。
  2. 配置 DNS 转发器:如果用户的设备连接的是 VPN 网络,则可以配置 DNS 转发器,将 DNS 请求转发给公共 DNS 服务器。这样可以减轻本地 DNS 服务器的压力,避免出现 DNS 劫持攻击。
  3. 使用隐私保护模式:在浏览器的隐私模式下浏览网页,可以减少 DNS 请求,降低 DNS 劫持攻击的风险。
  4. 更新系统软件:系统软件的升级可能会带来新的安全功能,提高 DNS 服务器的安全性。

2.6 域名服务器的配置管理和 DNSSEC 设计

DNS 记录存储在域名服务器上,是一台独立的计算机。为了保证数据的安全,域名服务器提供了 DNS 安全 Extensions(DNSSEC)技术,它通过数字签名的方式验证 DNS 记录的完整性、保密性和来源不可抵赖性。DNSSEC 可以为 DNS 数据提供强大的防篡改功能,有效保障域名信息的真实性、保密性和完整性。

2.6.1 域名服务器的配置管理

域名服务器需要设定各种参数,例如,运行 IP 地址、域名权限等。为了保证域名服务器的安全性和可用性,需要对其进行合理的配置管理。这里推荐以下几点:

  1. 设置 IP 白名单:IP 白名单是一个用来限制域名服务器可绑定到哪些 IP 地址的列表,可以有效防止域名服务器被恶意攻击。如果允许外部的计算机访问域名服务器,就要小心谨慎。
  2. 分配合适的资源:分配足够的内存、CPU 和磁盘空间,可以避免因过多资源占用带来的性能问题。
  3. 设置守护进程:设置守护进程可以避免因为异常退出导致的资源泄露和攻击。
  4. 创建备份:定时备份域名服务器的配置文件和日志文件,可以保持数据的完整性和可用性。
2.6.2 DNSSEC 设计

DNSSEC 提供了针对 DNS 记录的强大防篡改功能,可以通过数字签名来实现。简单地说,DNSSEC 的实现分为三个阶段:

  1. 密钥生成:需要使用 RSA 或 ECDSA 等非对称加密算法,生成一对密钥对,公钥放在 DNS 服务器的 DNSKEY 资源记录中,私钥保留在本地。
  2. 证书签名:使用私钥对待签名的 DNSKEY 资源记录进行签名,得到一个 DNSKEY 签名资源记录。将这个签名资源记录放在待签名的 DNS 记录上,一起提交给域名服务器。
  3. 验证签名:域名服务器对待验证的 DNS 记录进行验证,先从 DNS 记录中取出 DNSKEY 资源记录,用公钥验证签名。如果签名验证通过,则说明该 DNS 记录没有被篡改。

除此之外,还有很多其他 DNSSEC 技术可以提升 DNS 记录的安全性,比如 DNS 刷新、NSEC 和 NXT 记录等。

2.7 DNS 治理与运营监控

DNS 的治理主要包括记录管理、统计分析、安全事件响应、法规遵从、政策法规、可靠性保证等方面。DNS 的运营监控主要包括 DNS 服务器健康状况监测、DNS 安全事件检测、域名查询量统计、安全配置管理、预警与报警、异常流量监测等。

2.7.1 记录管理

DNS 记录的管理可以分为三个层次:基础记录、一级域记录和二级域记录。基础记录包括 SOA、NS、MX、CNAME、PTR、TXT 等,一级域记录包括 A、AAAA、SRV 等,二级域记录包括 NS、MX、SOA、TXT 等。

2.7.1.1 基础记录

SOA 资源记录(Start Of Authority):该记录保存在顶级域(TLD)的 DNS 服务器上,用于标识该域名服务器所在的区域。它会标识区域的管理员、电子邮箱、序列号和刷新间隔等信息。通过修改 SOA 记录可以修改所有顶级域记录。

NS 资源记录(Name Server):该记录保存在顶级域的 DNS 服务器上,用于标识该区域的域名服务器地址。

MX 资源记录(Mail Exchanger):该记录保存在二级域的 DNS 服务器上,用于标识区域中的邮件交换机地址。

CNAME 资源记录(Canonical Name):该记录用于将多个名字映射到同一 canonical name 上,方便于记录管理。例如,www.google.com 记录可以指向 google.com 的 A 记录。

PTR 资源记录(Pointer Record):该记录用来将 IP 地址转换为域名,它保存在另一台服务器上。

TXT 资源记录(Text Record):该记录用于保存文本字符串。

2.7.1.2 一级域记录

A 资源记录(Address Record):该记录用于将域名指向指定的 IP 地址。

AAAA 资源记录(IPv6 Address Record):该记录用于将域名指向指定的 IPv6 地址。

SRV 资源记录(Service Locator Record):该记录用于记录服务的位置和端口号。

2.7.1.3 二级域记录

NS 资源记录(Name Server Record):该记录用于标识区域的域名服务器。

MX 资源记录(Mail Exchange Record):该记录用于标识区域的邮件交换机地址。

SOA 资源记录(Start Of Authority Record):该记录用于标识区域的管理员、电子邮箱、序列号和刷新间隔。

TXT 资源记录(Text Record):该记录用于保存文本字符串。

2.7.2 统计分析

DNS 查询量统计可以根据 DNS 请求的目的地址、请求的源地址、查询的类型以及查询响应的时间来进行统计。

2.7.3 安全事件响应

安全事件响应包括安全事件排查、安全事件评估、安全事件通知、安全事件处置等方面。安全事件的排查一般包括收集相关信息、调查原因、采取补救措施,及时向管理人员报告事件。

2.7.4 法规遵从

法规遵从包括收集相关信息、评估事件的影响、采取措施、及时报告事件、跟踪事件的进展。

2.7.5 政策法规

政策法规包括研究国家和地区的相关法律法规、关注新出现的问题、做好事件的总结及研判等。

2.7.6 可靠性保证

可靠性保证主要包括 DNS 服务器的冗余部署、 DNS 服务器的高可用性和负载均衡、 DNS 服务器的监控、 DNS 服务器的高效配置等。

2.7.7 拓展阅读

全部评论 (0)

还没有任何评论哟~