在网络安全领域,DNS拼包(通常指DNS重绑定,DNS Rebinding)是一种巧妙而隐蔽的攻击技术,它并非攻击DNS服务器本身,而是利用浏览器安全模型的特性,绕过“同源策略”,从而让恶意网页能够访问受害者的内部网络资源,如路由器管理界面、内网服务器或其他物联网设备,这种攻击的核心在于欺骗浏览器,使其误认为来自不同IP地址的请求仍属于同一个“源”。

攻击原理与过程
DNS重绑定攻击的实施过程可以分解为几个关键步骤,其精妙之处在于对浏览器行为和DNS解析时间的精准操控。
-
初始访问与DNS解析:受害者被诱骗访问一个由攻击者控制的恶意网站(
evil.com),浏览器首次请求该域名时,攻击者的DNS服务器会返回一个公网IP地址(2.3.4),这个地址指向攻击者自己的服务器,浏览器根据同源策略,将evil.com与其IP地址2.3.4“绑定”或“钉住”。 -
执行恶意脚本:恶意网页中嵌入的JavaScript开始运行,由于JavaScript与宿主页面
evil.com同源,它被允许向2.3.4发起异步请求(如通过fetch或XMLHttpRequest),并读取响应。 -
DNS记录切换:在恶意脚本运行期间,它会通过
setInterval等函数,以极短的间隔(如每秒一次)持续尝试重新连接evil.com,攻击者会迅速修改其DNS服务器的记录,将evil.com的解析结果切换到一个目标内网IP地址,例如受害者的路由器管理地址168.1.1,为了加速这个过程,攻击者通常会设置DNS记录的TTL(生存时间)为极小值。
-
绕过同源策略:当浏览器再次发起对
evil.com的请求时,它会查询DNS缓存,由于TTL极短,缓存已过期,浏览器会向攻击者的DNS服务器发起一次新的查询,这一次,它返回了内网IP168.1.1,关键点在于,浏览器的主机名仍然是evil.com,因此同源策略认为这个对内网IP的请求是“合法”的同源请求,于是放行了请求。 -
内网资源访问:至此,攻击者的恶意脚本成功获得了向受害者内网设备
168.1.1发送请求并读取响应的能力,攻击者可以扫描内网、窃取路由器登录凭证、修改配置,甚至进一步攻击内网中的其他设备。
防御策略
防御DNS重绑定攻击需要从多个层面入手,形成纵深防御体系,以下是一个小编总结性的防御措施表:
| 防御层面 | 具体措施 | 原理说明 |
|---|---|---|
| 浏览器端 | 启用内置DNS重绑定保护 | 现代浏览器(如Chrome、Firefox)会检测DNS解析结果,若IP地址在请求期间发生变化,或解析到私有IP地址,浏览器会阻止该请求。 |
| 网络设备端 | 配置防火墙规则 | 阻止来自内网设备向外发起的、目的IP为内网地址段的连接请求,防止攻击流量“折返”。 |
| 应用服务端 | 严格验证Origin请求头 |
对于提供敏感API的服务,应检查请求头中的Origin或Referer字段,确保请求来自可信的源。 |
| DNS服务端 | 使用提供过滤功能的公共DNS | 一些公共DNS服务(如Cloudflare 1.1.1.1)内置了DNS重绑定过滤功能,可以识别并拒绝响应此类恶意查询。 |
相关问答FAQs
DNS重绑定和DNS劫持有什么区别?

解答:两者虽然都涉及DNS,但目标和机制完全不同,DNS劫持通常是通过污染DNS缓存或控制DNS服务器,将用户访问的域名(如bank.com)直接解析到一个伪造的钓鱼网站IP,其目的是欺骗用户输入账户密码,而DNS重绑定并不改变用户访问的初始网站,它利用的是浏览器的信任机制,让一个原本可信的域名在后续请求中“指向”内网IP,其目标是绕过同源策略,窃取或攻击内网资源,而非直接欺骗用户。
作为普通用户,我应该如何有效防范DNS重绑定攻击?
解答:普通用户可以采取以下简单有效的措施:始终保持浏览器为最新版本,因为现代浏览器已内置强大的防御机制,使用信誉良好的公共DNS服务,如Cloudflare的1.1.1或Google的8.8.8,它们能提供额外的安全过滤层,养成良好的上网习惯,不轻易点击来历不明的链接或下载可疑文件,这是从根本上避免接触攻击源的最佳方式。