跳到主要内容

6. 区域完整性 (Zone Integrity)

确保所传输区域数据的完整性, 对维护 DNS 基础设施的安全性和可靠性至关重要. 本节讨论 AXFR 的完整性考虑, 并推荐最佳实践.

完整性威胁 (Integrity Threats)

区域传输面临若干完整性威胁:

  1. Man-in-the-middle attacks: 位于 AXFR client 和 server 之间的攻击者可能拦截并修改传输中的区域数据.

  2. Spoofing attacks: 攻击者可能冒充 AXFR server, 并向 AXFR client 发送伪造的区域数据.

  3. Replay attacks: 攻击者可能捕获一次合法区域传输并在之后重放, 从而可能导致 client 回退到过时区域数据.

  4. Unauthorized modifications: 如果没有适当认证和完整性检查, 攻击者可能在区域传输期间注入, 删除, 或修改 resource records.

完整性保护机制 (Integrity Protection Mechanisms)

为防范这些威胁, AXFR implementations 应该采用以下一种或多种完整性保护机制:

TSIG (Transaction Signature)

TSIG [RFC2845] 使用共享密钥和 HMAC algorithms 提供消息级认证和完整性保护.

TSIG 在 AXFR 中的工作方式:

  1. AXFR client 在其 query message 中包含 TSIG RR, 并使用预共享密钥签名.

  2. AXFR server 验证查询上的 TSIG signature. 如果验证失败, server 以 RCODE NOTAUTH 或 REFUSED 响应.

  3. 如果查询有效, AXFR server 在其 response messages 中包含 TSIG RRs:

    • 第一条 response message 必须包含 TSIG RR.
    • Intermediate messages 可以省略 TSIG (为提高效率), 但该序列仍由第一条和最后一条消息上的 TSIG 保护.
    • 最后一条 response message 必须包含 TSIG RR.
  4. AXFR client 验证 response messages 上的 TSIG signatures. 如果任一验证失败, client 必须丢弃整个区域传输.

优势: TSIG 提供强完整性保护和相互认证. 它在 DNS implementations 中得到广泛支持.

限制: 需要预共享密钥, 且必须安全分发和管理这些密钥.

SIG(0) (Signature)

SIG(0) [RFC2931] 使用 DNSSEC-style signatures 提供基于公钥的消息认证.

SIG(0) 在 AXFR 中的工作方式:

  1. AXFR client 使用其私钥为 query message 签名, 并在查询中包含生成的 SIG(0) RR.

  2. AXFR server 使用 client 的公钥验证签名 (该公钥通过 DNS 获取或来自本地 trust anchor).

  3. AXFR server 可以使用自己的私钥为 response messages 签名, 使 client 能够验证响应的真实性.

优势: 消除预共享密钥需求. 适用于密钥分发具有挑战的场景.

限制: 相比 TSIG, 实现和配置更复杂. 依赖 public key infrastructure.

DNSSEC

对于 DNSSEC-signed zones, AXFR client 可以使用 DNSSEC signatures (RRSIG records) 验证所传输区域数据的完整性.

DNSSEC 如何保护 AXFR:

  1. AXFR server 传输区域, 包括所有 RRSIG, DNSKEY, 和 NSEC/NSEC3 records.

  2. AXFR client 使用区域中的 DNSKEY records 验证所传输 RRsets 上的 RRSIG signatures.

  3. 如果 DNSSEC validation 失败, client 不应该提供该区域数据.

优势: 为区域数据提供端到端完整性保护, 不仅保护传输期间的数据, 也保护提供给 resolvers 时的数据.

限制: 要求区域已使用 DNSSEC 签名. 不保护 AXFR protocol 本身 (例如防范未授权 clients).

网络层安全 (Network-Level Security)

除应用层安全机制外, AXFR transfers 可以使用网络层安全进行保护:

  1. TLS/SSL: 使用 TLS 或 SSL 加密 TCP connection, 可为区域传输提供机密性和完整性保护. (Note: 区域传输的 DNS-over-TLS 在本文撰写时尚未标准化.)

  2. IPsec: 通过 IPsec-protected connections 进行的区域传输可受益于 IPsec 提供的机密性, 完整性, 和认证.

  3. VPNs 或 private networks: 通过 private network (如 VPN) 进行区域传输可以提供额外安全层.

建议 (Recommendations)

  1. 使用 TSIG 或 SIG(0): AXFR servers 和 clients 应该支持并使用 TSIG 或 SIG(0) 保护区域传输. TSIG 是最常部署的方案, 对多数部署是推荐.

  2. 验证传输数据: AXFR clients 应该在将收到的区域数据提交到本地区域数据库之前验证其完整性. 对 DNSSEC-signed zones, 此验证包括检查 DNSSEC signatures.

  3. 安全密钥管理: 对基于 TSIG 的部署, operators 必须确保共享密钥使用密码学强随机数生成器生成, 并被安全存储和分发.

  4. 监控异常: Operators 应该监控区域传输中的异常, 例如区域大小的意外变化, 异常传输频率, 或完整性检查失败.

  5. 使用强算法: 使用 TSIG 时, operators 应该使用强 HMAC algorithms, 如 HMAC-SHA256 或 HMAC-SHA512, 而不是 HMAC-MD5 等较弱算法. 算法选择指南见 [RFC4635] 和 [RFC5702].

处理完整性失败 (Handling Integrity Failures)

如果 AXFR client 检测到完整性失败 (例如 TSIG validation failure, DNSSEC validation failure), 它必须:

  1. 丢弃从失败区域传输接收的所有数据.
  2. 记录该失败以供审计和故障排查.
  3. 可选地, 在适当延迟后重试区域传输 (带 backoff).

AXFR client 不得将部分接收的或完整性失败的区域数据提交到其 authoritative zone database, 因为这样可能导致向 DNS clients 提供不正确或恶意数据.