DNS欺骗原理及工作工程分析

2023-11-20

DNS欺骗

  DNS欺骗是这样一种中间人攻击形式,它是攻击者冒充域名服务器的一种欺骗行为,它主要用于向主机提供错误DNS信息,当用户尝试浏览网页,例如IP地址为XXX.XX.XX.XX ,网址为www.bankofamerica.com,而实际上登录的确实IP地址YYY.YY.YY.YY上的www.bankofamerica.com ,用户上网就只能看到攻击者的主页,而不是用户想要取得的网站的主页了,这个网址是攻击者用以窃取网上银行登录证书以及帐号信息的假冒网址,DNS欺骗其实并不是真的“黑掉”了对方的网站,而是冒名顶替、招摇撞骗罢了。整个操作过程其实非常简单,下面我们将探讨DNS欺骗攻击是如何实现的以及如何抵御这种攻击。

  正常DNS通信

  域名系统(DNS)协议在RFC 1034/1035中是这样定义的:它被认为是互联网使用中最重要的协议之一。当你在浏览器输入网址时(例如http://www.google.com),就会向DNS服务器发送一个DNS请求以便找到与该网址相对应的IP地址。这是因为与互联网互连的路由器和设备并不知道google.com,它们只知道IP地址,如74.125.95.103。

  DNS服务器本身的工作原理是,存储IP地址到DNS名称映射的记录(称为资源记录)数据库,联系这些资源记录与客户端,并将这些资源记录与其他DNS服务器联系。整个企业和整个互联网的DNS服务器架构是有点复杂的,事实上,有很多关于DNS架构的专门书籍,但在本文中我们将不会涵盖DNS架构或者所有不同DNS通信类型的内容,不过我们将介绍基本的DNS通信,如图1所示。

  DNS查询和响应

  图1: DNS查询和响应

  DNS函数是属于查询/响应类型的格式,当客户端希望解析DNS域名为IP地址时,就会向DNS服务器发送一个查询,然后服务器会将对应的作为回复。从客户端的角度来看,看到的只有两个数据包:查询和响应。

DNS查询和响应数据包

  图2: DNS查询和响应数据包

  而当我们进一步考虑DNS递归问题时,这种情况就会变得更加复杂。由于互联网DNS结构的层次性,DNS服务器需要能够互相通信以便获取客户端发送的查询所对应的答案。我们的内部DNS服务器可能知道本地局域网络服务器的IP地址映射,但是我们不能指望内部DNS服务器知道全世界网络的IP地址映射。这也就是递归发挥作用的地方,就是当一台DNS服务器代表客户端的名义向另一台DNS服务器发送查询请求,也就是说,这种情况下,DNS服务器变成了客户端,如图3所示。

 DNS通过递归的查询和响应 

图3: DNS通过递归的查询和响应

  欺骗DNS

  执行DNS欺骗攻击的方法有很多,在这里我们将使用一种称为DNS ID欺骗的技术。

  每个通过互联网发送的DNS请求都包含一个独特的识别码,其目的在于辨识查询和响应,并将对应的查询和响应配对在一起。这就意味着,如果我们的攻击计算机可以拦截目标设备发送的DNS查询,我们就只需要做一个包含该识别码的假数据包,这样目标计算机就会根据识别码而接受我们发送的查询结果。

  我们将使用一个简单的工具分两个步骤来完成整个操作。首先,我们对目标设备进行ARP缓存中毒攻击以重新路由通过攻击主机的目标设备的通信,这样我们就能够拦截DNS查询请求,然后我们就能够发送欺骗性的数据包。这样做的目的是为了让目标网络的用户访问我们制造的恶意网址而不是他们试图访问的网址,如图4所示。

  使用DNS ID欺骗方法的DNS欺骗攻击

  图4: 使用DNS ID欺骗方法的DNS欺骗攻击

  有几种不同的工具可以用于执行DNS欺骗攻击,我们选择使用Ettercap,它包含windows和Linux两个版本,大家可以点击此处下载该工具。如果你稍微研究一下这个网址就会发现Ettercap包含很多除DNS欺骗外的功能,它可以用于很多形式的中间人攻击。

  如果你是在windows系统中安装Ettercap,你会发现它包含一个很强大的图形用户界面,不过对于DNS欺骗的情况,我们只需要使用命令行界面。

  在操作Ettercap之前,需要进行一些配置。Ettercap的核心是数据包嗅探器,主要利用不同的插件来执行不同的攻击。dns_spoof插件是用于本文示例的工具,所以我们需要修改与该插件相关的配置文件。在windows系统中,该文件位于C:\Program Files (x86)\EttercapNG\share\etter.dns以及/usr/share/ettercap/etter.dns,这个文件很简单并且包含你想要欺骗的DNS记录。对于我们而言,我们希望所有试图打开yahoo.com的用户被定向到本地网络的主机上,所以我们加入了一些条目,正如图5中所示。

添加欺骗性的DNS记录到etter.dns 

图5: 添加欺骗性的DNS记录到etter.dns

  这些信息就是告诉dns_spoof插件这样的信息:当它发现针对yahoo.com www.yahoo.com或者的DNS查询请求时,就发送IP地址172.16.16.100作为响应。在实际情况下,172.16.16.100会运行某种web服务器软件向用户展现假冒网站。

  一旦文件配置好并保存后,我们就可以执行命令字符串来发动攻击了,命令字符串使用以下选项:

  -T –指定文本界面的使用

  -q –以静音模式运行命令,这样捕捉的数据包不会输出到屏幕

  -P dns_spoof –指定dns_spoof插件的使用

  -M arp –发起中间人ARP中毒攻击以拦截主机间的数据包

  // // -指定整个网络作为攻击的目标

  我们需要的最终命令字符串为:

  Ettercap.exe –T –q –P dns_spoof –M arp // //

  运行此命令将启动两个阶段的攻击,首先是对网络设备的ARP缓存中毒攻击,然后是发送假的DNS查询响应信息。

解析中间人攻击――DNS欺骗  

图6:Ettercap主动搜寻DNS查询

  一旦启动,任何用户试图打开www.yahoo.com都会被重新定向到我们的恶意网站。

从用户角度看到的DNS欺骗的结果

  图7: 从用户角度看到的DNS欺骗的结果

  如何抵御DNS欺骗攻击

  DNS欺骗攻击是很难防御的,因为这种攻击大多数本质都是被动的。通常情况下,除非发生欺骗攻击,否则你不可能知道你的DNS已经被欺骗,只是你打开的网页与你想要看到的网页有所不同。在很多针对性的攻击中,用户都无法知道自己已经将网上银行帐号信息输入到错误的网址,直到接到银行的电话告知其帐号已购买某某高价商品时用户才会知道。这就是说,在抵御这种类型攻击方面还是有迹可循:

  保护内部设备: 像这样的攻击大多数都是从网络内部执行攻击的,如果你的网络设备安全,那么那些感染的主机就很难向你的设备发动欺骗攻击。

  不要依赖DNS:在高度敏感和安全的系统,你通常不会在这些系统上浏览网页,最后不要使用DNS。如果你有软件依赖于主机名来运行,那么可以在设备主机文件里手动指定。

  使用入侵检测系统: 只要正确部署和配置,使用入侵检测系统就可以检测出大部分形式的ARP缓存中毒攻击和DNS欺骗攻击。

  使用DNSSEC: DNSSEC是替代DNS的更好选择,它使用的是数字前面DNS记录来确保查询响应的有效性,DNSSEC现在还没有广泛运用,但是已被公认为是DNS的未来方向,也正是如此,美国国防部已经要求所有MIL和GOV域名都必须开始使用DNSSEC。

  总结

  从攻击技术水平和恶意意图来看,DNS欺骗攻击是非常致命的中间人攻击形式,使用这种攻击技术我们可以利用钓鱼技术来窃取登录信息,利用漏洞安装恶意软件或者导致拒绝服务的情况。在下篇文章中,我们将分析“哈希值传递”攻击,看看它们如何被用于登录windows计算机,而不需要帐号信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DNS欺骗原理及工作工程分析 的相关文章

  • 从 Dns.GetHostEntry() 获取 IPv4 地址

    我这里有一些代码在 IPv4 机器上运行得很好 但在我们的构建服务器 IPv6 上却失败了 简而言之 IPHostEntry ipHostEntry Dns GetHostEntry string Empty GetHostEntry 的文
  • 没有 ID 字段或具有部分 NULL 复合字段的 Grails 域类

    根据对上一个问题的回答 此处回答 Grails 中的 SQL 数据库视图 https stackoverflow com questions 425294 sql database views in grails 427691 我尝试使用域
  • 如何确定c#中的dns变化?

    我想监控dns地址的变化 所以我需要跟踪 dns 更改 我现在正在用线程来做 我获取 dns 并将其保存为文件 然后每 10 秒比较一次它们 但我需要更具体的解决方案 例如 有相关活动吗 这是代码 GetDns public List
  • 如何使用相同的 TXT 和 CNAME 为 Mailgun 配置 DNS?

    Mailgun 告诉我要设置一个TXT记录为mg mydomain com值为v spf1 plus a CNAME记录为email mg mydomain com有价值mailgun org 我这样做了 mailgun 验证了我的域名没有
  • 如何将根(裸)域重定向到 www - heroku 和 zerigo

    我有一个域 example com 和 www example com 我正在使用 Heroku 和 Zerigo 作为 DNS 现在我有一个从我的 Hostgator 帐户从根域到 www example com 的转发 但这不起作用 我
  • 在 Java 中检查名称服务器的 dns 查找

    给定一个域和一个名称服务器 IP 我想知道在 java 中解析 IP 的名称服务器在哪里 我怎样才能实现它 谢谢 您至少有两个选择 如果您的代码必须在任何 VM 上运行 则必须使用众多可用的 Java DNS 库之一 谷歌搜索 java d
  • 多个项目使用同一网络的 Docker DNS

    我有以下内容docker compose yml file version 3 services frontend image alpine command tail f dev null networks shared default b
  • 如何使用 Python 3.x 获取网站的 IP 地址?

    我有一个代表域名的字符串 如何使用Python 3 x获取对应的IP地址 像这样的东西 gt gt gt get ip http www stackoverflow com 64 34 119 12 gt gt gt import sock
  • 如何强制网站 DNS 刷新?

    我正在将我的 Web 应用程序移动到另一台服务器 并在接下来的几天内刷新 DNS 以指向新的 IP 位置 不幸的是 一些浏览器和 SO 保留了 DNS 缓存 这将使用户指向旧的 IP 位置 有些用户是新手 他们不会手动刷新 DNS 缓存 我
  • Apache虚拟主机无域名

    我有一个安装了apache2的VPS 我想通过IP地址访问一些没有域名的PHP项目 例如 http 162 243 93 216 projecta index php http 162 243 93 216 projectb index p
  • proxy_pass 不使用 /etc/hosts 解析 DNS

    在 Nginx 中proxy pass指令未使用以下命令解析 DNS etc hosts文件 有什么方法可以实现这种可能性 也许利用 Lua 作为最后的手段 如果您有一台带有 systemd 的服务器 您可以使用它附带的名称服务器 syst
  • 如何使 Windows DNS 和 WINS 设置保留在 Azure VM 中?

    我在 Azure VM 中设置了一个域控制器 并且其他几个服务器也设置为 VM 当我设置服务器虚拟机时 我将 DNS 和 WINS 配置为指向 DC 的 IP 地址并将它们加入域 但是 这些设置在关闭 虚拟机被释放 后将无法保留 当虚拟机重
  • 非阻塞网络地址解析(gethostbyname 或 getaddrinfo)?

    使用经典的 nsswitch conf 配置 hosts files dns 尝试使用解析名称获取主机名 or 获取地址信息 如果 DNS 没有应答 或配置错误 可能需要一段时间 有没有办法在 nsswitch conf 中配置超时或使用管
  • 如何在通过代理 (Tor) 浏览时阻止 Java 预解析我的主机?

    我目前正在开发一个java应用程序 它使用在本地主机上运行的tor代理来获取显示请求者ip的脚本 我希望这项工作主要由 Tor 代理完成 以便它在最 自然 的状态下工作 我当前的代码看起来与此类似 SocketAddress TorProx
  • 将 Google 域链接到 Amazon ec2 服务器

    我正在使用 Amazon EC2 实例来为 node js 应用程序提供服务 我最近通过以下方式购买了域名谷歌域名 https domains google com我想使用该域名来访问我的 node js 应用程序 Google Domai
  • 告诉 urllib2 使用自定义 DNS

    我想告诉urllib2 urlopen or a 定制开瓶器 使用127 0 0 1 or 1 来解析地址 我不会改变我的 etc resolv conf 然而 一种可能的解决方案是使用类似的工具dnspython查询地址和httplib构
  • 从具有动态外部 IP 的计算机连接到 Azure SQL Server

    我正在尝试将具有动态外部 IP 的本地笔记本电脑连接到我们的 Azure SQL Server 为此 我创建了一个虚拟网络网关并将笔记本电脑连接到该网关 此外 我还向 SQL Server 添加了一个专用端点 之后 我可以使用telnet成
  • 如何让 Docker 容器访问主机上的 dnsmasq 本地 DNS 解析器?

    Docker 容器可能会通过多种方式对 DNS 设置感到困惑 只需在 SO 或更广泛的互联网上搜索 Docker DNS 即可了解我的意思 建议的常见解决方法之一是 将 dnsmasq 设置为主机系统上的本地 DNS 解析器 将其绑定到do
  • Docker 中的 NGINX 缓存 IP 地址并提供错误的 Content-Type

    Summary 我想让NGINX 不是NGINX Plus 通过使用变量从DNS名称重新解析IP地址proxy pass 如建议的这篇 Nginx 官方文章 在变量中设置域名 部分 https www nginx com blog dns
  • 为什么我的 Github 托管网站响应 HTTP 302 而不是 200?

    我拥有该域名penkov id au http penkov id au 我主持一个blog http michael penkov id au blog 2014 01 02 reinventing the wheel html usin

随机推荐

  • 【大学生软件测试基础】白盒测试 - 控制流图 - 01

    任务1 画出程序流程图 任务2 画出控制流图 任务3 根据程序环形复杂度的计算公式 求出程序路径集合中的独立路径数目 任务4 根据环形复杂度的计算结果 源程序的基本路径集合中有多少条独立路径 任务5 设计测试用例 1 程序流程图 2 控制流
  • git资料

    IDEA中Git的使用 https www cnblogs com javabg p 8567790 html 如何用git将项目代码上传到github https blog csdn net laozitianxia article de
  • Centos 7 大硬盘分区(>2TB) - parted & xfs

    Centos 7 针对超过2T的大硬盘 采用parted分区 1 运行parted命令 进入parted界面后 运行p打印已有分区信息 找到前一个分区终止点 如 2 2028kb 51 2GB xfs 其至终点应为51 2GB 运行mkpa
  • RabbitMQ高级特性(四):RabbitMQ之TTL(存活时间/过期时间)

    RabbitMQ高级特性 四 RabbitMQ之TTL 存活时间 过期时间 TTL 全称 Time To Live 存活时间 过期时间 当消息到达存活时间后 还没有被消费 会被自动清除 RabbitMQ可以对消息设置过期时间 也可以对整个队
  • Symbol的理解和使用

    Symbol的诞生 也就是Symbol存在的意义 之前我们的对象属性的数据类型都是字符串 没有其他的 所以会导致属性名的重复 导致属性值被覆盖的情况 比如 你使用了一个他人提供的对象 但又想为这个对象添加新的方法 在添加的操作就很容易覆盖原
  • java中List集合三种获取集合元素方式

    java中List集合三种获取集合元素方式 1 for 2 迭代器 3 增强for循环 List集合常用方法 List作为Collection集合的子接口 不但继承了Collection接口中的全部方法 而且还增加了一些根据元素索引来操作集
  • IntelliJ IDEA出现红色字体解决办法

    如图所示 问题 ApiModel显示红色 点击alt enter提示需要添加io swagger包到classpath中 因为在pom xml中没有把此包引入 如图 解决方案 在pom xml中添加io swagger包 经历1 当我根据I
  • IDE简介

    集成开发环境 IDE Integrated Development Environment 用于提供程序开发环境的应用程序 一般包括代码编辑器 编译器 调试器和图形用户界面等工具 集成了代码编写功能 分析功能 编译功能 调试功能等一体化的开
  • Atlantis 【POJ - 1151】【扫描线模板题+线段树更新】

    题目链接 是一道扫描线的模板题 也是我的第一道扫描线的题了 对扫描线也算是有了第一次的理解 无非就是更新新的向上的区间长度 然后去查询就是了 而查询是O 1 的 因为可以通过树的最上根节点得到的 include
  • KMP比较简单的讲法。

    转载链接 http blog csdn net yearn520 article details 6729426 我们在一个母字符串中查找一个子字符串有很多方法 KMP是一种最常见的改进算法 它可以在匹配过程中失配的情况下 有效地多往后面跳
  • 捕鱼游戏源码(数值+完整项目资源)

    目前捕鱼游戏的玩法 逐渐有这些趋势 捕鱼玩法 消除类玩法 捕鱼玩法 模拟经营玩法 捕鱼玩法 建造养成玩法 这些趋势已经有龙头企业逐渐开始做出尝试 但是对大部分团队来讲 对垂直领域的理解不够深刻 对产品理解不够深刻 团队没有沉淀和积累 通常都
  • chart.js使用学习——柱状图(2:常用属性设置)

    本文介绍柱状图常用属性及效果 柱状图中有部分常用属性与折线图用法相同 本文仅列出这些属性的简要说明 不再详细说明 base 设置图形绘制时的基准值 数值型 默认值为空 设置的值为数值轴上的值 base值未设置 则绘制的柱状图沿数值轴方向的起
  • [解决报错] Invalid attempt to spread non-iterable instance.In order to be iterable, non-array objects mu

    主要原因是因为用let of 方法遍历的时候 有一个参数为null 没有iterable 所以数据处理错误 换成for循环就好
  • 常用搜索引擎使用技巧

    1 指定站内搜索 使用site指定在某网站内搜索 如只在知乎中搜索 liuwons liuwons site zhihu com 2 精确匹配 使用双引号来指定精确匹配单词或短语 如精确搜索 liuwons liuwons 3 模糊搜索 使
  • 通讯编程001——Nodejs快速开发Modbus TCP Master

    本文介绍如何利用ModbusJs库快速开发Modbus TCP Master 相关源码请登录网信数智 wangxinzhihui com 下载 ModbusJs是一个基于Nodejs的Modbus TCP的开发库 目前支持的功能函数有 re
  • vue-tabel 中使用 el-autocomplete 出现的问题

    必须加 popper append to body false popper class vxetableignoreclear 我自己用的话缺一不可 说一下我自己项目中遇到的问题吧 我写的是表格中套表格 会出现就是当下拉选的时候用 sel
  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • 正则表达式中的特殊字符

    字符 含意 做为转意 即通常在 后面的字符不按原来意义解释 如 b 匹配字符 b 当b前面加了反斜杆后 b 转意为匹配一个单词的边界 或 对正则表达式功能字符的还原 如 匹配它前面元字符0次或多次 a 将匹配a aa aaa 加了 后 a
  • python自学篇十五[Numpy——基础(一):(jupyter Notebook+Anaconda+conda+jupyter配置及简单操作 ]

    文章目录 概括 Numpy Scipy pandas matplotlib 一 Numpy 基础 1 jupyter Notebook 1 安装Anaconda 2 Anaconda是什么 1 Anaconda Navigator 2 Ju
  • DNS欺骗原理及工作工程分析

    DNS欺骗 DNS欺骗是这样一种中间人攻击形式 它是攻击者冒充域名服务器的一种欺骗行为 它主要用于向主机提供错误DNS信息 当用户尝试浏览网页 例如IP地址为XXX XX XX XX 网址为www bankofamerica com 而实际