【计算机网络】DNS 解析 DNS 污染

1. DNS 解析(工作流程、参与方与缓存)

DNS 的目标:把人类可读的域名(如 www.example.com)映射为 IP 地址(如 93.184.216.34)。

典型解析流程(递归解析器 + 迭代查询):

  1. 客户端(stub resolver):浏览器/操作系统发起 DNS 查询,通常询问配置的递归解析器(resolver,如 ISP 提供或 8.8.8.8)。

  2. 递归解析器:如果缓存命中就直接返回;否则它会代替客户端向上级 DNS 进行查询(Root → TLD → 权威):

    • 询问 根服务器.)得到对应顶级域(TLD,如 .com)的 NS 列表。
    • 询问 TLD 服务器 得到目标域名的权威服务器(Authoritative Name Server)。
    • 询问 权威服务器 获取真实记录(A/AAAA/CNAME 等)。
  3. 递归解析器 返回结果给客户端,并把结果缓存(受 TTL 限制)。

关键名词:

  • 权威(Authoritative)服务器:负责某个域名的真实 DNS 记录(由域名持有者或 DNS 提供商托管)。
  • 递归解析器(Resolver):为客户端完成上面整个查询流程的服务器(通常由 ISP、企业或公共 DNS 提供)。
  • Stub resolver:客户端一侧的轻量解析组件(操作系统/浏览器)。
  • TTL:记录在解析器缓存中的存活时间。

2. DNS 污染 / 中毒:概念与类型

DNS 污染/中毒(DNS poisoning) 是指 DNS 响应被篡改或劫持,导致客户端获得错误的 IP,常见后果是访问错误或被引导到恶意站点。

常见类型与成因:

  1. DNS 缓存中毒(Cache poisoning)

    • 攻击者向递归解析器注入伪造的响应(例如伪造 A 记录或 NS 记录),导致解析器缓存错误数据,从而把多个用户引导到恶意 IP。
    • 经典手段:伪造事务 ID、源端口等,使得伪造响应被接受。现代 DNS/操作系统通过随机端口等减小风险,但并非万无一失。
  2. 劫持/篡改(Hijacking)

    • ISP 或中间网络设备基于策略或商业目的修改解析结果(例如将无法解析的查询指向运营商广告页或拦截)。
    • 国家级审查(DNS 污染/污染返回错误 IP 或 NXDOMAIN/截断)也属于这一类。
  3. 中间人攻击(Man-in-the-Middle)

    • 攻击者在通信链路中拦截并修改 DNS 请求或响应(在未加密的情况下可行),常见于局域网或被劫持的 DNS 服务器。
  4. 域名劫持 / 域名解析权更改

    • 域名注册信息被篡改,修改了域名的权威服务器或 A 记录,这属于对域名注册/托管的直接攻击或滥用。

3. DNS 污染会带来哪些风险/危害?

  • 钓鱼/流量劫持:把合法域名解析到恶意服务器,窃取凭证或注入恶意内容。
  • 隐私泄露:用户被重定向到被监控的节点。
  • 可用性损失:合法服务不可达(被解析到虚假 IP 或 NXDOMAIN)。
  • 流量拦截/广告注入:ISP 或中间人通过修改解析插入广告或提示页。
  • 信任破坏:如果 DNSSEC 被绕过或未启用,客户端无法验证响应真实性。

4. 如何检测 / 鉴别是否被污染

快速诊断步骤(用户侧)

  1. 对比多个解析器的结果

    dig +short example.com @8.8.8.8
    dig +short example.com @1.1.1.1
    dig +short example.com @本地递归解析器
    

    如果不同解析器返回不同 IP(且权威服务器并非变化),说明可能被污染或本地 resolver 缓存有问题。

  2. 追踪权威来源

    dig +trace example.com
    

    +trace 会显示从根、TLD 到权威服务器的逐步结果,便于定位哪个层级返回了错误结果。

  3. 查询权威服务器:直接向域的权威服务器查询:

    dig @ns1.example-authoritative.com example.com A
    

    若权威服务器给出正确值,但递归解析器给出错误值,很可能是递归解析器被中毒。

  4. 查看本机缓存

    • Windows: ipconfig /displaydns,清空缓存 ipconfig /flushdns
    • macOS: sudo killall -HUP mDNSResponder(不同系统命令略有差异)。
  5. 检查 DNSSEC:如果域名启用了 DNSSEC,使用 +dnssecdig 输出检查 RRSIG/AD 标志,或使用 delv 等工具验证签名是否有效。DNSSEC 能检测劫持(若验证失败即可发现篡改)。

  6. 判断是 ISP 层面还是本地问题:在同一网络下,用手机切换到蜂窝网络或使用 VPN,再次查询;若换网络未重现问题,则可能是本地或本 ISP 的污染。


5. 如何缓解与防护(用户 & 运维/服务方)

用户端(普通用户/客户端)

  • 使用可信公共解析器:如 Google (8.8.8.8 / 8.8.4.4)、Cloudflare (1.1.1.1)、Quad9(9.9.9.9)。注意某些 ISP 会拦截/劫持 DNS,即使设置了 DNS 也可能被重写。

  • 启用加密 DNS:DNS over HTTPS (DoH) 或 DNS over TLS (DoT),可防止中间人篡改:

    • 浏览器层:Firefox/Chrome 支持 DoH。
    • 系统/路由器:使用支持 DoT/DoH 的解析器或本地代理(例如 Cloudflared、stubby)。
  • 使用 VPN:将 DNS 解析通过 VPN 隧道走,可以绕过本地 ISP 的污染(但要信任 VPN 提供商)。

  • DNSSEC 验证客户端:部分系统/解析器可以启用本地 DNSSEC 验证(比如 unbound 可以启用严格验证),能检测到被篡改的响应。

  • 定期清缓存:遇到解析问题时清空本机 DNS 缓存。

递归解析器 / ISP(运维侧)

  • 启用 DNSSEC 验证:在递归解析器(如 unboundbindknot-resolver)上启用 DNSSEC 验证,拒绝或标记不合法签名的响应。
  • 使用随机源端口与事务 ID:现代解析器默认启用,提高伪造响应难度。
  • 限制递归对外开放(防止被滥用):禁用开放递归或限制访问白名单。
  • 实现速率限制 / 反放大 / 抗缓存中毒策略:防止针对大规模伪造响应的攻击。
  • 监控与告警:监控异常解析结果、TTL 突变、权威 NS 变化等,及时告警。
  • 限制区域传送(AXFR)和使用 TSIG:保护权威服务器数据。
  • 定期打补丁:修补已知的 DNS 软件漏洞(比如某些 DNS 服务器历史漏洞可被利用做缓存中毒)。

权威域名持有者

  • 启用 DNSSEC 并正确签名区域:让下游解析器/用户进行验证。
  • 控制 NS/Registrar 安全:使用 registrar 的安全功能(锁定转移、强认证)。
  • 限制对 AXFR 的访问并保护管理接口

6. 区分“DNS 污染”与“DNS 污染 / 劫持”的实际示例

  • ISP “污染/重定向”:当查询无法解析或为某些敏感域名时,ISP 返回错误 IP(运营商提示页或黑洞 IP)。这是有意为之,目的可能是审查或广告。
  • 真实的缓存中毒攻击:攻击者利用解析器漏洞或网络中间节点注入错误响应,使大量用户解析到恶意网站。
  • DNSSEC 可检测场景:若权威域启用了 DNSSEC,递归解析器在收到伪造响应时会验证失败(如果解析器开启 DNSSEC 验证),从而拒绝返回给客户端—这能显著降低缓存中毒成功率。

7. 常用工具(命令行)用于排查与诊断

  • dig(Linux/macOS):

    • dig +trace example.com(追踪解析链路)
    • dig @8.8.8.8 example.com A(向指定解析器查询)
    • dig example.com +dnssec(检查 DNSSEC)
  • nslookup(Windows/跨平台)

  • delv(用于 DNSSEC 验证)

  • Get-Command / ipconfig /displaydns / ipconfig /flushdns(Windows)

  • tcpdump / wireshark:抓包分析 DNS 流量,观察是否有伪造响应或中间人篡改。

  • unbound-control(若用 unbound),rndc(BIND)等解析器管理工具。


8. 总结

  • 解析流程:客户端 → 递归解析器 → 根 → TLD → 权威 → 缓存 → 返回。
  • 缓存中毒:攻击者注入伪造响应到递归解析器缓存,从而影响大量用户。
  • 污染后果:钓鱼、隐私泄露、可用性下降。
  • 检测方法:对比多个解析器、dig +trace、查询权威服务器、检查 DNSSEC。
  • 防护:DNSSEC、DoH/DoT、使用可信解析器、递归解析器加固、权限与速率限制、监控告警。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/923645.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/923645.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用住宿楼模型彻底理解Kubernetes架构(运行原理视角)

导读:从楼宇建设到租客入住的全流程想象我们正在建设一栋巨型智能住宿楼,从基础设施搭建到租客入住管理,每个环节都对应Kubernetes的组件和概念。本文将按运行原理的先后顺序,系统解析Kubernetes的23个核心组件与基本概念。把 Kub…

嘉银科技基于阿里云 Kafka Serverless 提升业务弹性能力,节省成本超过 20%

作者:四牛 前言 云消息队列 Kafka 版 Serverless 系列凭借其秒级弹性扩展、按需付费、轻运维的优势,助力嘉银科技业务系统实现灵活扩缩容,在业务效率和成本优化上持续取得突破,保证服务的敏捷性和稳定性,并节省超过 20…

RTOS 任务状态与调度机制详解

一、任务状态概述在实时操作系统(RTOS)中,任务通常具有以下几种基本状态:Running(运行态):任务正在 CPU 上实际执行。单核系统中同一时刻最多只有一个任务处于运行态。Ready(就绪态&…

TDengine 特殊选择函数 UNIQUE 用户手册

UNIQUE 函数用户手册 函数定义 UNIQUE(expr)功能说明 UNIQUE() 函数返回指定列去重后的值,功能类似于 SQL 中的 DISTINCT 关键字。对于相同的数据值,UNIQUE 函数会返回时间戳最小的那一条记录。该函数会跳过 NULL 值。 版本要求 最低版本: v3.0.0.0…

新零售第一阶段传统零售商的困境突破与二次增长路径:基于定制开发开源AI智能名片S2B2C商城小程序的实践探索

摘要:新零售第一阶段,传统零售商面临同质化竞争、用户消费意愿低迷、线上电商分流等核心困境。本文以定制开发开源AI智能名片S2B2C商城小程序为切入点,结合阿里巴巴、某知名连锁零售企业等实践案例,分析其通过“AI智能推荐供应链协…

Spark SQL 之 Join Reorder

参考链接 https://www.cnblogs.com/fxjwind/p/14768975.html join Reorder src/main/scala/org/apache/spark/sql/catalyst/optimizer/CostBasedJoinReorder.scala private def reorder(plan: LogicalPlan, output: Seq[Attribute]): LogicalPlan = {<

牛客周赛 Round 109

比赛链接&#xff1a;牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ A-小红的直角三角形_牛客周赛 Round 109 签到题&#xff1a;用勾股定理即可通过此题&#xff08;需要注意对共线情况的判断&#xff09; 代码&#xff1a; // Problem: 小红的直角三角…

[deepseek]LNK2001错误即单独编译汇编并链接

方案一&#xff1a;使用预编译的 .obj 文件&#xff08;最简单&#xff09; 如果汇编代码不常改动&#xff0c;这是最省事的方法。手动编译一次&#xff1a; 打开命令行&#xff0c;切换到 spoof.asm 所在目录。使用你已有的汇编器&#xff08;或者下载一个单独的 MASM 版本&am…

php学习 (第六天)

虚拟主机 一.什么是虚拟主机&#xff1f; 1.1 概念虚拟主机&#xff08;Web Hosting&#xff09;英文&#xff1a;Web Hosting / Shared Hosting核心概念&#xff1a; 一台服务器被切分给多个用户&#xff0c;每个人只使用服务器的一部分资源&#xff08;CPU、内存、带宽、存储…

AcousticsML声学机器学习翻译教程二(特征提取Feature Etraction)

源自&#xff1a;https://github.com/RAMshades/AcousticsM 特征提取 特征是可测量的属性&#xff0c;作为系统的输入。这些输入与特定数据样本相关&#xff0c;机器学习模型可通过解读这些特征来提供预测。特征通常具有独立性&#xff0c;并能提供样本的具体细节。音频特征示例…

【论文阅读】Beyond Text: Frozen Large Language Models in Visual Signal Comprehension

本论文研究了能否利用一个“冻结”的LLM&#xff0c;直接理解视觉信号&#xff08;即图片&#xff09;&#xff0c;而不用在多模态数据集上进行微调。核心思想是把图片看作一种“语言实体”&#xff0c;把图片转换成一组离散词汇&#xff0c;这些词汇来自LLM自己的词表。为此&a…

The Oxford-IIIT宠物图像识别数据集(753M)

0、引言博主研究生期间做的是人工智能领域相关的深度学习模型研究&#xff0c;早期还没定题的时候调研了大量方向。众所周知&#xff0c;模型性能的好坏很大程度上依赖于数据集&#xff0c;因此我当时也接触了大量数据集&#xff0c;这阵子将这些数据集汇总整理了一下&#xff…

jdbc DAO封装及BaseDAO工具类

DAO概念 DAO&#xff1a;Data Access Object&#xff0c;数据访问对象。 Java是面向对象语言&#xff0c;数据在Java中通常以对象的形式存在。一张表对应一个实体类&#xff0c;一张表的操作对应一个DAO对象&#xff01; 在Java操作数据库时&#xff0c;我们会将对同一张表的增…

大模型应用开发2-SpringAI实战

SpringAI整合了大多数大模型&#xff0c;而且对于大模型开发的三种技术架构都有比较好的封装和支持&#xff0c;开发起来非常方便。不同的模型能够接收的输入类型、输出类型不一定相同。SpringAI根据模型的输入和输出类型不同对模型进行了分类&#xff1a; 大模型应用开发大多…

TDengine 时序函数 DIFF 用户手册

DIFF 函数用户手册 函数概述 DIFF 函数用于计算数据列中相邻两行数据的差值&#xff0c;通常用于分析数据的变化趋势和增量。该函数特别适用于监控智能电表数据的变化模式。 语法 SELECT DIFF(column_name [, ignore_negative]) FROM table_name;参数说明 column_name: 数…

清除gradle缓存的某个依赖

要清除 Gradle 缓存中的某个特定依赖&#xff0c;可以按照以下步骤操作&#xff1a;找到依赖在缓存中的路径 Gradle 缓存的默认位置&#xff1a; Windows: C:\Users\<用户名>\.gradle\caches\modules-2\files-2.1 macOS/Linux: ~/.gradle/caches/modules-2/files-2.1 路径…

机器人控制器开发(驱动层——伺服驱动canopen的sdo和pdo)

文章总览 一、核心区别&#xff1a;一句话概括 • ​​SDO&#xff08;服务数据对象&#xff09;​​&#xff1a;像 ​​“问询/设置”​​。用于​​点对点、非周期​​的参数配置和读取。例如&#xff0c;设置电机增益、读取当前位置等。​​速度慢&#xff0c;但确保数据准…

返利APP排行榜数据实时更新:基于 WebSocket 与 Redis 的高并发数据推送技术

返利APP排行榜数据实时更新&#xff1a;基于 WebSocket 与 Redis 的高并发数据推送技术 大家好&#xff0c;我是阿可&#xff0c;微赚淘客系统及省赚客APP创始人&#xff0c;是个冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在返利APP运营中&#xff0c;用户对排…

[论文阅读] 人工智能 + 软件工程 | 告别冗余HTML与高算力消耗:EfficientUICoder如何破解UI2Code的token难题

告别冗余HTML与高算力消耗&#xff1a;EfficientUICoder如何破解UI2Code的token难题 论文信息信息类别具体内容论文原标题EfficientUICoder: A Dual-Modal Token Compression Framework for UI-to-Code Generation with Multimodal Large Language Models论文链接https://arxiv…

【STM32项目开源】STM32单片机智能语音风扇控制系统

目录 一、设计背景和意义 1.1设计背景&#xff1a; 1.2设计意义&#xff1a; 二、实物展示 三、硬件功能介绍 2.1 硬件清单&#xff1a; 2.2 功能介绍&#xff1a; 四、软件设计流程图 五、硬件PCB展示 六、软件主函序展示 七、单片机实物资料 资料获取 查看主页介…