当前位置: 首页 > news >正文

【网络安全】DNS 域原理、危害及防御

关于 DNS 的原理,这里不在做说明,你只需要知道他是 53 UDP 端口即可,以及 Wireshark 走的协议是什么样的

What?

那么什么是 DNS 域传送?我们都知道 DNS 服务器分为 DNS 主服务器、备份服务器、缓存服务器,一般情况下 DNS 域传送是 DNS 主服务器(Primary Server)向从服务器(Secondary Server)同步区域文件(Zone File)的机制,确保所有 DNS 服务器数据一致,区域文件包含域名下所有记录(如 A 记录、MX 记录、CNAME 等)主要的协议类型有

  • AXFR(全量传输):同步整个区域文件
  • IXFR(增量传输):仅同步变更部分(需DNS服务器支持)

默认情况下,域传送应仅允许可信的从服务器发起请求,若配置不当(这里指的是服务器只要收到 AXFR 的请求就进行域传送),攻击者可利用此功能获取敏感信息,这里在放一下 DNS 所有解析记录类型

When a DNS server receives an AXFR request, it issues all data that it knows for the requested domain. It’s mean that such a request will come from the DNS server that is trying to perform the zone transfer (replicate). But if the DNS server is configured incorrectly, any user can have access to this data.

代码

号码

定义的 RFC

描述

功能

A

1

RFC 1035

IPv4地址记录

传回一个32位的IPv4地址,最常用于映射主机名称到IP地址,但也用于DNSBL(RFC 1101)等。

AAAA

28

RFC 3596

IPv6地址记录

传回一个128位的IPv6地址,最常用于映射主机名称到IP地址。

AFSDB

18

RFC 1183

AFS文件系统

(Andrew File System)数据库核心的位置,于域名以外的 AFS 客户端常用来联系 AFS 核心。这个记录的子类型是被过时的的 DCE/DFS(DCE Distributed File System)所使用。

APL

42

RFC 3123

地址前缀列表

指定地址栏表的范围,例如:CIDR 格式为各个类型的地址(试验性)。

CAA

257

RFC 6844

权威认证授权

DNS认证机构授权,限制主机/域的可接受的CA

CDNSKEY

60

RFC 7344

子关键记录

关键记录记录的子版本,用于转移到父级

CDS

59

RFC 7344

子委托签发者

委托签发者记录的子版本,用于转移到父级

CERT

37

RFC 4398

证书记录

存储 PKIX、SPKI、PGP等。

CNAME

5

RFC 1035

规范名称记录

一个主机名字的别名:域名系统将会继续尝试查找新的名字。

DHCID

49

RFC 4701

DHCP(动态主机设置协议)标识符

用于将 FQDN 选项结合至 DHCP。

DLV

32769

RFC 4431

DNSSEC(域名系统安全扩展)来源验证记录

为不在DNS委托者内发布DNSSEC的信任锚点,与 DS 记录使用相同的格式,RFC 5074 介绍了如何使用这些记录。

DNAME

39

RFC 2672

代表名称

DNAME 会为名称和其子名称产生别名,与 CNAME 不同,在其标签别名不会重复。但与 CNAME 记录相同的是,DNS将会继续尝试查找新的名字。

DNSKEY

48

RFC 4034

DNSSEC所用公钥记录

于DNSSEC内使用的公钥,与 KEY 使用相同格式。

DS

43

RFC 4034

委托签发者

包含DNSKEY的散列值,此记录用于鉴定DNSSEC已授权区域的签名密钥。

HIP

55

RFC 5205

主机鉴定协议

将端点标识符及IP 地址定位的分开的方法。

HTTPS

65

RFC 9460

绑定HTTPS

与建立HTTPS连接相关的记录。详见DNSOP工作组和阿卡迈科技发布的草案。

IPSECKEY

45

RFC 4025

IPSEC 密钥

与 IPSEC 同时使用的密钥记录。

KEY

25

RFC 2535[1]RFC 2930[2]

密钥记录

只用于 SIG(0)(RFC 2931)及 TKEY(RFC 2930)。[3]RFC 3455 否定其作为应用程序键及限制DNSSEC的使用。[4]RFC 3755 指定了 DNSKEY 作为DNSSEC的代替。[5]

LOC记录(LOC record)

29

RFC 1876

位置记录

将一个域名指定地理位置。

MX记录(MX record)

15

RFC 1035

电邮交互记录

引导域名到该域名的邮件传输代理(MTA, Message Transfer Agents)列表。

NAPTR记录(NAPTR record)

35

RFC 3403

命名管理指针

允许基于正则表达式的域名重写使其能够作为 URI、进一步域名查找等。

NS

2

RFC 1035

名称服务器记录

委托DNS区域(DNS zone)使用已提供的权威域名服务器。

NSEC

47

RFC 4034

下一个安全记录

DNSSEC 的一部分 — 用来表示特定域名的记录并不存在,使用与 NXT(已过时)记录的格式。

NSEC3

50

RFC 5155

下一个安全记录第三版

DNSSEC 的一部分 — 用来表示特定域名的记录并不存在。

NSEC3PARAM

51

RFC 5155

NSEC3 参数

与 NSEC3 同时使用的参数记录。

OPENPGPKEY

61

RFC 7929

OpenPGP公钥记录

基于DNS的域名实体认证方法,用于使用OPENPGPKEY DNS资源记录在特定电子邮件地址的DNS中发布和定位OpenPGP公钥。

PTR

12

RFC 1035

指针记录

引导至一个规范名称(Canonical Name)。与 CNAME 记录不同,DNS“不会”进行进程,只会传回名称。最常用来执行反向DNS查找,其他用途包括引作 DNS-SD。

RRSIG

46

RFC 4034

DNSSEC 证书

用于DNSSEC,存放某记录的签名,与 SIG 记录使用相同的格式。

RP

17

RFC 1183

负责人

有关域名负责人的信息,电邮地址的 @ 通常写为 a

SIG

24

RFC 2535

证书

SIG(0)(RFC 2931)及 TKEY(RFC 2930)使用的证书。[5]RFC 3755 designated RRSIG as the replacement for SIG for use within DNSSEC.[5]

SOA

6

RFC 1035

权威记录的起始

指定有关DNS区域的权威性信息,包含主要名称服务器、域名管理员的电邮地址、域名的流水式编号、和几个有关刷新区域的定时器。

SPF

99

RFC 4408

SPF 记录

作为 SPF 协议的一部分,优先作为先前在 TXT 存储 SPF 数据的临时做法,使用与先前在 TXT 存储的格式。

SRV记录(SRV record)

33

RFC 2782

服务定位器

广义为服务定位记录,被新式协议使用而避免产生特定协议的记录,例如:MX 记录。

SSHFP

44

RFC 4255

SSH 公共密钥指纹

DNS 系统用来发布 SSH 公共密钥指纹的资源记录,以用作辅助验证服务器的真实性。

TA

32768

DNSSEC 可信权威

DNSSEC 一部分无签订 DNS 根目录的部署提案,使用与 DS 记录相同的格式[6][7]。

TKEY记录(TKEY record)

249

RFC 2930

秘密密钥记录

为TSIG提供密钥材料的其中一类方法,that is 在公共密钥下加密的 accompanying KEY RR。[8]

TSIG

250

RFC 2845

交易证书

用以认证动态更新(Dynamic DNS)是来自合法的客户端,或与 DNSSEC 一样是验证回应是否来自合法的递归名称服务器。[9]

TXT

16

RFC 1035

文本记录

最初是为任意可读的文本 DNS 记录。自1990年起,些记录更经常地带有机读数据,以 RFC 1464 指定:机会性加密(opportunistic encryption)、Sender Policy Framework(虽然这个临时使用的 TXT 记录在 SPF 记录推出后不被推荐)、DomainKeys、DNS-SD等。

URI

256

RFC 7553

统一资源标识符

可用于发布从主机名到URI的映射。

Where?

当DNS服务器错误配置为允许任意IP地址发起AXFR请求时,攻击者可通过伪造请求获取域内所有记录。
攻击步骤:

  1. 识别目标域名的DNS服务器(如ns1.iloli.moe
  2. 向该服务器发送AXFR请求
  3. 若未限制IP,服务器返回完整的区域文件

How?

要检测的话很简单,使用 dig 来扫描域传送是否开放:

dig @ns.example.com example.com AXFR

若返回所有DNS记录,则存在漏洞,当然你也可以用 nslookup

nslookup
> server ns.example.com
> ls -d example.com

使用 nmap 也是可以的

nmap --script dns-zone-transfer -p 53 ns.example.com

这里用 P 神的 Vulhub 来做测试

cd vulhub/dns/dns-zone-transfer/
docker-compose up
# or
docker compose up

首先停止一下 systemctl stop systemd-resolved,如果你有 DNSlog,也一并停止避免出问题,然后我们查询一下 www.vulhub.org 的 A 记录

dig @ip www.vulhub.org

接着发送 AXFR 传输命令

dig axfr @ip www.vulhub.org 

这里我们就可以获取到所有有关 volhub.org 这个域名的子域名了,除此之外也可以直接用 dnsenum 这个工具来枚举,出的更快

顺便分享一下一道 DNS 题目,出自 Nullcon Goa HackIM 2025 CTF#ZoneyE

Problem Description

Are you zoney.eno out or can you find the flag?Author: @gehaxelt52.59.124.14:5007 (UDP)

首秀扫描端口,只扫到了一个 53 端口,结合题目意思就是让我们打 DNS,不过这里不存在 AXFR,看不了子域名,那么既然看不了了,还有什么切入点呢?简单枚举一下记录,得到下面内容

$ dig @52.59.124.14 -p 5007 ZONEy.eno MX; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ZONEy.eno.                     IN      MX;; ANSWER SECTION:
ZONEy.eno.              7200    IN      MX      10 challenge.ZONEy.eno.;; AUTHORITY SECTION:
ZONEy.eno.              7200    IN      NS      ns1.ZONEy.eno.
ZONEy.eno.              7200    IN      NS      ns2.ZONEy.eno.;; ADDITIONAL SECTION:
challenge.ZONEy.eno.    7200    IN      A       127.0.0.1
ns1.ZONEy.eno.          7200    IN      A       127.0.0.1
ns2.ZONEy.eno.          7200    IN      A       127.0.0.1;; AUTHORITY SECTION:
ZONEy.eno.              7200    IN      SOA     ns1.ZONEy.eno. hostmaster.ZONEy.eno. 2016020202 7200 1800 1209600 86400

这里跑了一下 DNSSEC,DNSSEC 使用 DNSKEY 记录存储公钥,用于验证 RRSIG 签名,此处获取的密钥可能与后续签名验证有关

hiJzEdgu+CHLJYd7YwVj1XGDZ1yXpb/hwAQZw6bfZi8QewchSQiqQHID Jr2g6kHPk279x1ornIEXfsFRMZK7xA==$ dig @52.59.124.14 -p 5007 challenge.ZONEy.eno +noadditional +dnssec +multiline ;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;challenge.ZONEy.eno.	IN A;; ANSWER SECTION:
challenge.ZONEy.eno.	7200 IN	A 127.0.0.1
challenge.ZONEy.eno.	7200 IN	RRSIG A 13 3 7200 (20260205220210 20250109201156 53942 zoney.eno.FkEg4bc+JAO5UHd0rPioYDIJoUePo2ppwcGD+DzJd5+ZcE7yhnYUfrVoFZyRPxTVh68pQ1JM8hCP+i/I3SYhkg== );; AUTHORITY SECTION:
ZONEy.eno.		7200 IN	NS ns1.ZONEy.eno.
ZONEy.eno.		7200 IN	NS ns2.ZONEy.eno.
ZONEy.eno.		7200 IN	RRSIG NS 13 2 7200 (20260205220210 20250109201156 53942 zoney.eno.Fk6iOlbARQe4PV3dxHPXF0fpm/Zy7wjhmtOo3RRPPPICbgshleYO+PTWml/7htLzHqIZ52sN+qtgMd236T9hEw== )

一番枚举得到主要解析记录有

A NS SOA MX RRSIG NSEC DNSKEY

这里继续枚举 RRSIG 记录

$ dig @52.59.124.14 -p 5007 ZONEy.eno RRSIG;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ZONEy.eno.			IN	RRSIG;; ANSWER SECTION:
ZONEy.eno.		7200	IN	RRSIG	SOA 13 2 7200 20260205220210 20250109201156 53942 zoney.eno. u+ngLs+oNxlRbc+FAcIA09Fc8qnDhe83lQQnq+WaHbjJgJ0sccE+bt4g uQVZwDdwvDcP3uxQvrUu/E47qLvTKg==
ZONEy.eno.		7200	IN	RRSIG	A 13 2 7200 20260205220210 20250109201156 53942 zoney.eno. 0rDr9a1idCkZ0DwsVAspSHXdjrfxB7uGeIKfP7/CoKH0EvYQrUh77u3V cKA5xy/yecVDuUJVbEty7bAlnxtnyw==
ZONEy.eno.		7200	IN	RRSIG	NS 13 2 7200 20260205220210 20250109201156 53942 zoney.eno. Fk6iOlbARQe4PV3dxHPXF0fpm/Zy7wjhmtOo3RRPPPICbgshleYO+PTW ml/7htLzHqIZ52sN+qtgMd236T9hEw==
ZONEy.eno.		7200	IN	RRSIG	MX 13 2 7200 20260205220210 20250109201156 53942 zoney.eno. gmkyRfRKqYsFKcNpWVP34z8CjyebzTlQELDQXIDslHDC2nLCOWDt7vt/ xLo9YYyoTRIKI8W9H3BKfHQ96Ui3ug==
ZONEy.eno.		7200	IN	RRSIG	DNSKEY 13 2 7200 20260205220210 20250109201156 53942 zoney.eno. ETl+05olcxRq7tOJHqNFgU2XBwi4xOFNSKASwRvolZs30tW2LfVERIG6 QPUPhslZAx/p+kBNNUk6FzfkQNH8Cw==
ZONEy.eno.		86400	IN	RRSIG	NSEC 13 2 86400 20260205220210 20250109201156 53942 zoney.eno. XlNEQqCqeU2ZycJ+BvJ8wtuORr0cHCsBiTD59BPS2QaM2KDVgCd5c0FL zyZ9mP9OpKalRGUYgG7G3QhZwZFgxg==;; AUTHORITY SECTION:
ZONEy.eno.		7200	IN	NS	ns1.ZONEy.eno.
ZONEy.eno.		7200	IN	NS	ns2.ZONEy.eno.;; ADDITIONAL SECTION:
ns1.ZONEy.eno.		7200	IN	A	127.0.0.1
ns2.ZONEy.eno.		7200	IN	A	127.0.0.1

然后试了下子域名 flag.zoney.eno

$ dig @52.59.124.14 -p 5007 ANY flag.zoney.eno +dnssec;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;flag.zoney.eno.			IN	ANY;; AUTHORITY SECTION:
challenge.zoney.eno.	86400	IN	NSEC	hereisthe1337flag.zoney.eno. A RRSIG NSEC
challenge.zoney.eno.	86400	IN	RRSIG	NSEC 13 3 86400 20260205220210 20250109201156 53942 zoney.eno. Ibqmhh5vOMeCm5jiSju6//MjGRiTsVbcNB1hF6MFxc7DlYcZbZIh8Nnz aaSN1gucye6XwE64VnEsar73WsA6Ew==
zoney.eno.		86400	IN	NSEC	challenge.zoney.eno. A NS SOA MX RRSIG NSEC DNSKEY
zoney.eno.		86400	IN	RRSIG	NSEC 13 2 86400 20260205220210 20250109201156 53942 zoney.eno. XlNEQqCqeU2ZycJ+BvJ8wtuORr0cHCsBiTD59BPS2QaM2KDVgCd5c0FL zyZ9mP9OpKalRGUYgG7G3QhZwZFgxg==
zoney.eno.		7200	IN	SOA	ns1.zoney.eno. hostmaster.zoney.eno. 2016020202 7200 1800 1209600 86400
zoney.eno.		7200	IN	RRSIG	SOA 13 2 7200 20260205220210 20250109201156 53942 zoney.eno. u+ngLs+oNxlRbc+FAcIA09Fc8qnDhe83lQQnq+WaHbjJgJ0sccE+bt4g uQVZwDdwvDcP3uxQvrUu/E47qLvTKg==

这里发现新大陆了,最后得到 flag 的域名为 hereisthe1337flag ,查询一下就可以看见 flag 了

$ dig @52.59.124.14 -p 5007 TXT hereisthe1337flag.zoney.eno.;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;hereisthe1337flag.zoney.eno.	IN	TXT;; ANSWER SECTION:
hereisthe1337flag.zoney.eno. 7200 IN	TXT	"ENO{1337_Fl4G_NSeC_W4LK3R}";; AUTHORITY SECTION:
zoney.eno.		7200	IN	NS	ns1.zoney.eno.
zoney.eno.		7200	IN	NS	ns2.zoney.eno.;; ADDITIONAL SECTION:
ns1.zoney.eno.		7200	IN	A	127.0.0.1
ns2.zoney.eno.		7200	IN	A	127.0.0.1

非常有趣

Prevent

  • 限制域传送 IP 范围,仅允许从服务器 IP 发起 AXFR 请求,Linux 配置如下
# bind
zone "example.com" {type master;file "example.com.zone";allow-transfer { 114.5.1.4; }; // 仅允许从服务器IP
};

Windows 没搭环境,网上搜了下说是在DNS管理控制台中,右键区域 -> 属性 -> 区域传送 -> 仅允许到以下服务器,另外如果没有从服务器那直接关掉也是可以的吧

allow-transfer { none; };

或者通过 TSIG 进行认证,通过事务签名(TSIG)加密验证主从服务器身份,防止未授权传输

# bind
key "tsig-key" {algorithm hmac-sha256;secret "Base64加密密钥";
};zone "example.com" {allow-transfer { key "tsig-key"; };
};

至于上面那到 DNS 题,我觉得就是一道简单的 DNS Zone walk 所以没啥防御的点,实在不行可以把 NSEC 升级到 NSEC3

# BIND
dnssec-policy "secure-zone" {nsec3param iterations 10 salt-length 16 salt "a1b2c3d4e5f6";
};

感谢前辈开源

相关文章:

  • 限制应用程序只能运行一个实例
  • 防火墙基本功能介绍
  • 多模态大语言模型arxiv论文略读(134)
  • 基于 SpringBoot+JSP 的医疗预约与诊断系统设计与实现
  • 自定义主题,echarts系列嵌套
  • 焊接机器人氩气省气节能
  • 深入浅出Node.js中间件机制
  • 014 Linux 2.6内核进程调度队列(了解)
  • 《哈希表》K倍区间(解题报告)
  • NVIDIA RTX 5090性能参数介绍 一文读懂
  • 构建高性能网络服务:从Reactor模式到现代服务器架构设计
  • SAP将指定EXCEL工作SHEET的数据上传到内表
  • 第一节 布局与盒模型-Flex与Grid布局对比
  • 什么是Sentinel
  • 使用Windows自带的WSL安装Ubuntu Linux系统
  • 1.2、CAN总线帧格式
  • 【c++八股文】Day3:inline与define与constexpr
  • Flotherm许可使用监控
  • Flink中的反压与背压:原理、检测与应对
  • Origin绘制三Y轴柱状图、点线图、柱状点线图
  • 暗红色网站/如何做网站
  • php怎么用来做网站/营销型网站建设案例
  • 深圳做企业网站多少钱/百度seo快速排名优化
  • 毕设做网站答辩会要求当场演示吗/今日重大国际新闻军事
  • pc网站如何做移动网站/网站关键词怎么设置
  • 做网站用的各种图标大全/手机优化大师官方版