本文为本人的学习笔记,不保证正确。

DNS 劫持

指DNS服务器被控制,查询DNS时,服务器直接返回给你它想让你看的信息。这种问题常为 ISP 所为。
由于一般的的电脑的 DNS 服务器 的配置都为自动获取,实际上会由 ISP 分配,因此通常会默认使用 ISP 的 DNS 服务器。ISP 控制该服务器,可实现 DNS 劫持。
ISP 使用 DNS 劫持的目的,通常是插入广告,说白了就是想赚钱。
当 ISP 的 DNS 服务器 收到你的 DNS 查询时,其实际上会返回一个中间服务器的IP,该服务器内容是你访问的网站的缓存,但是运营商通常会在该缓存中 "加料",浏览器显示的域名是正确的,可实际访问的却不是真正的服务器。
解决方法:可通过使用可信DNS服务器来解决。

HTTP 劫持

由于 HTTP 是明文通信,运营商可直接拦截 response,将广告插入其中或修改为302重定向响应来添加推广链接。
解决方法:无技术上的应对方案,打电话举报可能有效。或者使用 https

DNS 污染

也称做:DNS 缓存投毒攻击(DNS cache poisoning)

DNS 污染,指 GFW、或黑客通过技术手段将虚假数据插入 非权威 DNS 缓存中,使用户查询到虚假信息。
由于 DNS 使用明文通信,一般使用的是基于 UDP 不可靠协议,只接受最先收到的格式正确的 response,因此该查询很容易被篡改。
针对DNS的污染具有传染性,但是由于 TTL 的限制,DNS 污染具有短时性,过了时间若不进行再污染,污染就会消失。
举例 - GFW:防火长城對所有经过骨干出口路由的在UDP的53端口上的域名查询进行IDS入侵检测,一經發現與黑名單關鍵詞相匹配的域名查詢請求,防火长城會馬上伪装成目标域名的解析服务器给查询者返回虚假结果。由于通常的域名查询没有任何认证机制,而且域名查詢通常基于的UDP協議是无连接不可靠的协议,查询者只能接受最先到达的格式正确结果,并丢弃之后的结果。用户若改用TCP在53端口上进行DNS查询,虽然不会被防火长城污染,但可能会遭遇连接重置,导致无法获得目标网站的IP地址。
解决方法

  1. 需要绕过这些被污染的 DNS 服务器,并骗过国际网关处的 GFW,也就是使用加密代理。使用加密代理还可绕过 IP 黑名单机制,因为访问该 IP 的是你的国外代理。
  2. 或者将已知的可用 IP 存入本地 hosts 文件中,这样就不需要 DNS 服务。但是由于 GFW 的 IP 黑名单在不断更新,你的 hosts 也需要不断更新。

劫持与污染的区别

DNS记录污染同劫持的不同之处,在于污染针对的是 DNS 缓存或用户,是在查询信息到达目标 DNS 服务器前,经过的的节点上做手脚 ,而劫持是 DNS 服务器自己把记录改成错误的内容。对于GFW来说,DNS劫持用于国内服务器,而对于国外服务器GFW无法更改其内容,故采用DNS污染方式篡改用户收到的信息。
GFW的DNS污染过程,是当你向国外DNS服务器查询DNS记录时候,这些流量走到国外出口处即会遭到GFW的关键字审查,如果上了黑名单,GFW会立即向你返回一个虚假的DNS记录。由于默认的DNS查询方式是UDP,加上DNS查询结果只认最快返回的结果,所以你一定是先收到了GFW给你返回的虚假DNS记录;就算100ms后你收到了真正的来自国外DNS的回复,那也会被你的系统无视掉。如果GFW想彻底污染一个域名,那么不只是普通用户,连国内所有的DNS服务器也会收到虚假的DNS纪录导致全国性的DNS污染。

中间人攻击

中间节点 通过对于DNS包的拦截,返回恶意地址,然后将用户引向恶意的源地址。
该种方式可以通过向一些DNS服务器中发送伪造的记录,从而造成一个区域内的某些域收到感染。(这么说GFW做的DNS污染,也算在这个类别里了)

其他

IP 黑名单:GFW 将已知的 google、youtube 等的 IP 加入黑名单,在网关处直接封锁。这样即使你绕过了 GFW 的 DNS 劫持或污染,仍然无法访问这些网站。

参考

【HTTP劫持和DNS劫持】
DNS-解析、劫持、污染
维基百科 - 防火长城(FQ可看)

DNS 劫持、HTTP 劫持与 DNS 污染的更多相关文章

  1. DNS原理及劫持问题

    对于互联网,人们总是高谈阔论,却很少有人愿意去了解电脑.手机.电视这些设备到底是如何被“连接”起来的.本文通过“我”,一个普通的网络请求的视角,给大家介绍下“我”的工作流程是如何的. 人们动动手指,点 ...

  2. 内网DNS投毒技术劫持会话

    工具列表: tcpdump Ferret Hamster node closurether 拓扑环境: 攻击机:Kali 10.10.10.237 被攻击机: win7 10.10.10.232 因为 ...

  3. 网络安全(一)主动进攻之DNS基础和ettercap实现DNS流量劫持

    alittlemc,个人原创,个人理解和观点.若有错误.不理解请与我联系,谢谢! 介绍了DNS的解析过程. DNS劫持的思路和实践. DNS 域名 以为live.bilibili.com为例子,从后到 ...

  4. DNS篇(详解DNS)

    *文章来源:https://blog.egsec.cn/archives/601 *本文将主要说明:本文主要叙述什么是DNS.域名的层级.DNS 解析过程.DNS的缓存时间.DNS 的记录类型.DNS ...

  5. 域名dns查询_查询域名dns ip地址

    最近有部分用户反应管理的天气网站打开偏慢,决定从每一个可以出现的问题点查起!首先就是dns! 通过360dns监控对比发现,同一组域名,15tianqi.cn的dns响应时间比较长,在300-700间 ...

  6. Windows Server 2008 R2 创建辅助DNS服务器并接管主要DNS服务器

    公司需求: Zhuyu公司局域网有一台主要DNS服务器,经领导讨论需要规划安装一台辅助DNS服务器备用. 功能需求: 当主要DNS服务器宕机或系统崩溃,辅助DNS服务器能接管主要DNS服务器工作,并且 ...

  7. DNS服务器:主要介绍DNS的服务原理以及安装及其主从配置

    DNS服务器:主要介绍DNS的服务原理以及安装及其主从配置 一.DNS简介 1.DNS    DNS是域名系统(Domain Name System)的简称,它是一个将域名和IP相互映射的分布式数据库 ...

  8. DNS单机部署以及智能dns部署

    dns理论 dns的出现 网络出现的早期是使用IP地址通讯的,那时就几台主机通讯.但是随着接入网络主机的增多,这种数字标识的地址非常不便于记忆,UNIX上就出现了建立一个叫做hosts的文件(Linu ...

  9. centos DNS服务搭建 DNS原理 使用bind搭建DNS服务器 配置DNS转发 配置主从 安装dig工具 DHCP dhclient 各种域名解析记录 mydns DNS动态更新 第三十节课

    centos  DNS服务搭建  DNS原理  使用bind搭建DNS服务器 配置DNS转发 配置主从  安装dig工具  DHCP  dhclient  各种域名解析记录  mydns DNS动态更 ...

  10. 【计算机网络】DNS的作用以及修改DNS的方法

    1.DNS的作用及修改DNS的方法 1.1.DNS的作用 DNS就是将域名映射成ip的分布式数据库服务器,它的作用如下图: 1.2.修改DNS的方法 常用的DNS服务器 1.114.114.114.1 ...

随机推荐

  1. sweetalert 1.0多次回调函数bug

    一个删除功能,原来的实现方式(注释部分)有多次的回调,会出现第二个swal窗口不显示,回调函数体不执行的情况.后来的解决方式是使用bootstrap的modal模态框,删除成功后显示模态框,模态框关闭 ...

  2. Linux最常用命令实战

    1.改变机器的名称: vim /etc/hostname Master 在文件中修改机器名称为我们想要的名称(相当于域名) 可以通过shutdown -h now 关闭 2.查看当前机器IP: ifc ...

  3. 微信jssdk实现分享到微信

    本来用的是这个插件http://overtrue.me/share.js/和百度分享 相同之处:在微信分享的时候,分享的链接都不能获取到缩略图... 不同之处:百度分享在微信低版本是可以看到缩略图的( ...

  4. 【51nod1677】treecnt(树上数学题)

    点此看题面 大致题意: 给你一个节点从1~n编号的树,让你从中选择k个节点并通过选择的边联通,且要使选择的边数最少,让你计算对于所有选择k个节点的情况最小选择边数的总和. 题解 这道题乍一看很麻烦:最 ...

  5. python_22_enumerate

    a=['a','d','f','g'] for i in enumerate(a): print(i) #enumerate 把列表的下表以元组的形式取出来 #结果 # (0, 'a') # (1, ...

  6. Python pep8代码规范

    title: Python pep8代码规范 tags: Python --- 介绍(Introduction) 官方文档:PEP 8 -- Style Guide for Python Code 很 ...

  7. Python02 变量

    变量 因为Python是弱变量类型编程语言,所以变量赋值不需要类型声明. 每个变量在内存中创建,都包括变量的标识,名称和数据这些信息. 每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 变量 ...

  8. (转)国内外优秀的Web前端工程师

    1. 国内外优秀的Web前端工程师 寻找Github.微博.知乎等技术社区上比较活跃.影响力大的圈内大神,供大家膜拜! 视野所限,未必全面,欢迎大家推荐.自荐. 排名不分先后,序号只为标记方便. 提供 ...

  9. 详解JVM工作原理和特点

    在我们运行和调试Java程序的时候,经常会提到一个JVM的概念.本文将为大家讲解JVM工作原理和特点,希望对大家有所帮助. AD:网+线下沙龙 | 移动APP模式创新:给你一个做APP的理由>& ...

  10. RabbitMQ-消费者"未处理完的消息"丢失

    一个关于客户端(消费者)开启自动应答,重启后"未处理消息丢失"的小坑.(主要是对RabbitMQ理解不够) 首先,申明一下: 本文所谓的 "丢失消息" 不是指服 ...