工作需要今天了解了下DNS SEC,现把相关内容整理如下:

一、DNS SEC 简介

  域名系统安全扩展(英语:Domain Name System Security Extensions,缩写为DNSSEC)是Internet工程任务组 (IETF)的对确保由域名系统 (DNS)中提供的关于互联网协议 (IP)网络使用特定类型的信息规格套件。它是对DNS提供给DNS客户端(解析器)的DNS数据来源进行认证,并验证不存在性和校验数据完整性验证,但不提供或机密性和可用性。---维基百科

  简单来说,DNSSEC 就是一个对现有 DNS 协议进行安全完善的拓展。他在现有的 DNS 协议的基础上,增加了几个新的资源记录来达到这个目的。

  DNSSEC 正式来说最早可以追溯到 RFC 2535,1999年3月来自 IBM 的工程师 D. Eastlake 提出了这个提案,不过要说到真正的实施部署,也是最近几年才开始的。2010年7月18日,根域名解析服务器才完成了 DNSSEC 的部署。

二、DNSSEC 新增的资源记录

  这里所指的资源记录类似于我们现有的 A记录、CNAME记录以及TXT记录。

   新增三种资源记录类型:RRSIG (Resource Record Signature)、DNSKEY (DNS Public Key)、DS (Delegation Signer)详细内容如下

RRSIG (Resource Record Signature)

资源记录签名

该记录用于存放我们当前域名每一条记录的 DNSSEC 签名

格式

记录类型

  • 算法类型 (参考附录「算法类型列表」)
  • 标签 (泛解析中原先 RRSIG 记录的名称)
  • 原 TTL 大小
  • 签名失效时间
  • 签名签署时间
  • Key 标签 (一个简短的数值,用来迅速判断应该用那个 DNSKEY 记录来验证)
  • 签名名称 (用于验证该签名的 DNSKEY 名称)
  • 加密签名

DNSKEY (DNS Public Key)

该记录用于存放我们用于检查 DNSSEC 签名的公钥

格式

  • 标识符 (Zone Key (DNSSEC密钥集) 以及 Secure Entry Point (KSK和简单密钥集))
  • 协议 (固定值3 向下兼容)
  • 算法类型 (参考附录「算法类型列表」)
  • 公钥内容

DS (Delegation Signer)

该记录用于存放 DNSSEC 公钥的散列值

格式

  • Key 标签 (一个简短的数值,用来迅速判断应该用那个 DNSKEY 记录来验证)
  • 算法类型 (参考附录「算法类型列表」)
  • 摘要类型 (创建摘要值的加密散列算法)(参考附录「摘要类型列表」)
  • Digest: A cryptographic hash value of the referenced DNSKEY-record.

NSEC (Next Secure)

用于验证不存在的资源记录

三、DNS SEC签名过程

在这次的请求当中,我们可以看到服务器给我们返回了两条记录,一条是 A记录 另一条是 RRSIG 记录。A记录 就是我们想要的结果,而 RRSIG记录 正如上面所讲的,就是 DNS 权威服务器对这个解析结果的一个数字签名。DNS 权威服务器有相对应的私钥,他的作用就是用来对 DNS 请求结果进行数字签名生成数字摘要,然后原先的记录以及这条信息摘要就会一同发送给我们。数据包格式见下图:

  那么,如何判断我们拿到的结果并没有被污染呢,我们就可以通过请求 DNSKEY 来获取对应的公开密钥。拿到了公开密钥之后,我们可以用他先来解密 RRSIG 的摘要,然后我们利用相同的散列算法在算一次摘要,然后将 RRSIG 的摘要和自己算出来的摘要进行比对,如果相同的话就说明这次查询结果是可信的.如下图所示:

  再那么,你也许会问,为什么挟持者不把 RRSIG 以及 DNSKEY 记录也给污染了呢?这就涉及到了信任的问题。

这里用到的就是上面提到的 DS (Delegation Signer) ,DS 的值是从 imlonghao.com 的上一级 com 利用他的私钥对 imlonghao.com 的 DNSKEY 进行加密之后得到的。如果你有疑惑的话,可以拿 com 的公钥进行解密然后比对。如果还是不信的话,可以在去上一级根域名去查,然后通过类似的方法,比对 com 的记录是否正确。查询过程如下图所示:

下图是通过 DNSViz 生成的 DNSSEC 信任链

四、DNSSEC 的现状及问题

无法保证私密性

  DNSSEC 并没有改变 DNS 基于 UDP 的通讯方式,数据流也都是明文传输,他所做的只是加上了一个数字签名,而中间人依然可以看到你请求了什么、结果是什么

挟持发生时不能告诉用户真正的记录

  当用户的 DNS 被挟持的时候,用户通过检查 DNSSEC 签名,可以知道自己得到的并不是真正的解析结果,而是得到了一个被伪造的地址。但是,用户并不知道真正的解析结果是什么。

支持 DNSSEC 的递归服务器并不多

  就目前国内而言,只有 CNNIC 的 4.2.2.4 支持,其他例如 114.114.114.114 以及 223.5.5.5 都不支持

  而国外的话,谷歌在 2013 年 5 月 6 号宣布其公共 DNS 服务器 8.8.8.8 以及 8.8.4.4 支持 DNSSEC。

附录:

算法类型列表

1: RSA/MD5

2: Diffie-Hellman

3: DSA/SHA-1

4: Elliptic Curve

5: RSA/SHA-1

6: DSA-NSEC3-SHA1

7: RSASHA1-NSEC3-SHA1

8: RSA/SHA-256

10: RSA/SHA-512

12: RSA/SHA-512

13: ECDSA Curve P-256 with SHA-256

14: ECDSA Curve P-384 with SHA-384

252: Indirect

253: Private DNS

254: Private OID

摘要类型列表

1: SHA-1

2: SHA-256

3: GOST R 34.11-94

4: SHA-384

参考:

RFC2535   https://tools.ietf.org/html/rfc2535

我所理解的 DNSSEC  https://imlonghao.com/41.html

DNSSEC原理简析及其实用性分析  https://www.lifetyper.com/2014/07/theory-of-dnssec-and-practical-analyze.html

在线数据包  https://www.cloudshark.org/captures/79e23786259b

数据包本地下载

DNS SEC信任链图示svg文件本地下载

DNS(三)DNS SEC(域名系统安全扩展)的更多相关文章

  1. DNS的查找机制、中文扩展,及其对手机扫描商标名称的支持

    DNS的查找机制.中文扩展.及其对手机扫描商标名称的支持 DNS的查找机制 当DNS查找主机时,它首先在本域里查找,假设找不到则交给更上一级的域查找,直至顶级的域. 因此,假设计算机在北大域名(pku ...

  2. Linux系统下搭建DNS服务器——DNS原理总结

    2017-01-07 整理 DNS原理 域名到IP地址的解析过程 IP地址到域名的反向域名解析过程 抓包分析DNS报文和具体解析过程 DNS服务器搭建和配置 这个东东也是今年博主参见校招的时候被很多公 ...

  3. 被动信息收集1——DNS基础 + DNS解析工具 NSLOOKUP使用

    被动信息收集 特点: 基于公开渠道 与目标不直接接触 避免留下一切痕迹 标准參考--OSINT: 美国军方 北大西洋公约组织 名词解释 DNS--Domain Name System 域名系统 因特网 ...

  4. DNS及DNS有什么作用

    什么是DNS,DNS有什么作用: DNS(Domain Name System,域名系统),万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直 ...

  5. DNS劫持 DNS污染

    编号:1021时间:2016年6月24日17:23:50功能:DNS劫持 DNS污染URL:http://www.itechzero.com/dns-hijacking-dns-pollution-i ...

  6. python运维开发常用模块(三)DNS处理模块dnspython

    1.dnspython模块介绍: dnspython(http://www.dnspython.org/)是Python实现的一个DNS 工具包,它支持几乎所有的记录类型,可以用于查询.传输并动态更新 ...

  7. DNS笔记 DNS区域集成到 Active Directory

    可以将 DNS 区域集成到 Active Directory 中以提供增强的容错功能和安全性.OpenDNS   Google Public DNS往返时间 (RTT) 远程访问服务 (RAS)域名与 ...

  8. LINUX中的DNS服务---DNS正向、反向和双向解析

    一.DNS的正向解析 也就是域名解析为IP地址进行访问! 1)vim  /etc/named.conf   ---->  删除forwarders所在行 2)vim  /etc/named.rf ...

  9. 【DNS】DNS的几个基本概念

    一. 根域 就是所谓的“.”,其实我们的网址www.baidu.com在配置当中应该是www.baidu.com.(最后有一点),一般我们在浏览器里输入时会省略后面的点,而这也已经成为了习惯. 根域服 ...

随机推荐

  1. 关于WinForm引用WPF窗体

    项目中有个界面展示用WPF实现起来比较简单,并且能提供更酷炫的效果,但是在WinForm中使用WPF窗体出现了问题,在网上找了一下有些人说Winform不能引用WPF的窗体,我就很纳闷,Win32都能 ...

  2. 选择排序O(n^2)与快速排序O(nlogn)的优越性代码体现

    随机函数生成一个超大数组: [code]: #include <iostream> #include <stdio.h> #include<time.h> #inc ...

  3. Hibernate关系级别注解

    最近在学习Hibernate的相关知识,这一站学习的是Hibernate的注解相关的操作和知识.在这里标注以下为以后查阅和需要帮助的朋友提供便利. 一. 开发环境的搭建: 1. 需要的jar包配置: ...

  4. WCF 在VS中,添加服务引用,地址输入http://ip/Service.svc,点击前往,提示错误,内容如下:

    WCF的service端的webconfig如下: <?xml version="1.0"?> <configuration> <system.ser ...

  5. zoj 3777

    状态压缩dp #include<cstdio> #include<cstring> #include<algorithm> #define maxn 4100 us ...

  6. 【C++基础】内存操作 getMemory改错

    内存操作的考察点:①指针 ②变量生存期及作用范围 ③动态内存申请和释放 笔试题************************************************************* ...

  7. MFC线程钩子和全局钩子[HOOK DLL]

    第一部分:API函数简介 1.       SetWindowsHookEx函数 函数原型 HHOOK SetWindowsHookEx( int idHook,        // hook typ ...

  8. 【形式化方法:VDM++系列】2.VDMTools环境的搭建

    接前文:http://www.cnblogs.com/Kassadin/p/3975853.html 上次讲了软件需求分析的演化过程,本次进入正题——VDM开发环境的搭建 (自从发现能打游戏以来,居然 ...

  9. iOS利用HealthKit框架从健康app中获取步数信息

    微信和QQ的每日步数最近十分火爆,我就想为自己写的项目中添加一个显示每日步数的功能,上网一搜好像并有相关的详细资料,自己动手丰衣足食. 统计步数信息并不需要我们自己去实现,iOS自带的健康app已经为 ...

  10. [itint5]判断是否为二叉搜索树

    http://www.itint5.com/oj/#25 这题在leetcode上是用中序遍历来做的,但是这里由于有相等的情况,即左子树小于等于根,这样中序遍历无法完全判定.可以用递归来做,用递归给出 ...