一  什么是DNS

DNS 是域名系统 (Domain Name System) 的缩写,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。

DNS 域名结构

通常 Internet 主机域名的一般结构为:主机名.三级域名.二级域名.顶级域名。 Internet 的顶级域名由 Internet网络协会域名注册查询负责网络地址分配的委员会进行登记和管理,它还为 Internet的每一台主机分配唯一的 IP 地址。全世界现有三个大的网络信息中心: 位于美国的 Inter-NIC,负责美国及其他地区; 位于荷兰的RIPE-NIC,负责欧洲地区;位于日本的APNIC ,负责亚太地区。

DNS查询报文

DNS应答报文

DNS 的解析流程

全世界有很多的域名需要解析,这些不可能都在一台服务器上解析,那就太慢了。dns解析采用了树形结构的解析流程。

在上面的解析流程的前面其实还有一步的,系统在发出dns解析之前会先看看本地是否保存了相关域名的解析,如果有的话会节省会多的时间。该文件保存在

C:\Windows\System32\drivers\etc\hosts,文件保存了本地dns解析的相关内容,如下:

# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost

二  DNS相关的攻击类型
1 针对DNS服务器的DDOS攻击
第一类 基于主机耗尽型的dns查询拒绝服务攻击

这类攻击就是向受害者DNS服务器发送大量的dns解析请求包,由于DNs服务器美妙查询的次数有限,使得它忙不过来造成拒绝服务攻击。

第二类 基于宽带耗尽型的DNS反弹式拒绝服务攻击(DNS reflector attacks,又称DNS amplification attacks)
原理:大量主机伪造受害者ip向互联网上的大量开放式递归DNS服务器发送NDS查询请求包。由于开放递归DNS服务器并不对请求包进行地质真实性验证,因此都会进行应答,这样受害着将同时接收到大量的DNS请求应答包,堵塞受害DNS服务器的网络,最终形成拒绝服务攻击。
什么是开放递归DNS服务器?
开放递归服务器是指支持递归查询,同时对发起递归查询请求的客户端不进行身份验证的DNS服务器。
如下图:

2  针对用户的DNS劫持

简单的说什么是dns劫持呢?

就是本来你想访问携程的网站www.ctrip.com,结果输入域名后返回给你的是百度的服务器ip,那么自然显示在浏览器中的也就是百度的页面。

那么我可以根据上面介绍的dns解析流程来看看哪些地方会导致返回给你的ip是错误的。

a 首先是dns服务器地址被劫持

比如你的路由器中的dns服务器地址被修改为恶意的dns服务器。那就一切都完蛋了,你访问的任何域名都被解析成其他的地址。

但是这种情况一般是不会发生的, 因为恶意人员登录不了的路由器修改不了dns服务器地址,就更修改不了你本机的dns设置。不过当几个小的漏洞结合在一起的时候就成为了大的漏洞。比如之前出现过的路由器劫持事件:

漏洞本身依赖3个部分:

  1. tp-link路由器发现存在csrf漏洞。

  2. 有些用户的路由器没有更改用户名和密码,使用了默认的用户名和密码;或者浏览器记录了路由器的登录状态。

  3. firefox和chrome等浏览器支持Http Authentication。

这些结合在一起就导致了这么一个攻击流程:

  1. 恶意人员构造了一个恶意的web页面,如www.foo.com/text.html,页面的功能是自动登录路由器并修改dns地址。

  2. 恶意人员构造一个url发送给被害者,当被害者点击这个链接的时候就访问了恶意页面,就修改了路由器的dns地址。

接下来就简单了,恶意人员可以将你想要访问的网站域名如www.ctrip.com解析到任意其他的地址如1.1.1.1等。(当然他不会解析到这里,要有经济利益,或者广告或者ctrip推广联盟url等。)

下面附上tplink的小demo:

<script>
function dns(){
alert('I have changed your dns on my domain!')
i = new Image;
i.src='http://192.168.1.1/userRpm/LanDhcpServerRpm.htm?dhcpserver=1&ip1=192.168.1.100&ip2=192.168.1.199&Lease=120&gateway=0.0.0.0&domain=&dnsserver=8.8.8.8&dnsserver2=0.0.0.0&Save=%B1%A3+%B4%E6';
}
</script>//修改dns
<img src="http://admin:admin@192.168.1.1/images/logo.jpg" height=1 width=1 onload=dns()>//登录

b hosts文件被修改

根据解析流程来看,如果要解析www.ctrip.com的ip,系统会首先访问hosts文件,看看有没有相关的绑定:

如果有如下记录:

1.1.1.1  www.ctrip.com

你们系统就不会将www.ctrip.com发送给dns服务器去解析,直接就将它解析为1.1.1.1。

c DNS服务器缓存中的映射关系被修改,又称缓存投毒攻击

系统检测到hosts文件中没有响应的域名的解析的时候就会发送给本地dns服务器进行解析,解析之前会先查看缓存中是否存在,如果没有,再将解析请求发送给下一个dns服务器。结果返回后将该域名的解析结果保存到缓存中,方便下一次的解析。

针对缓存中的解析的攻击有2种:

传统的DNS缓存投毒攻击:恶意人员向受害DNS服务器发送域名的解析请求,然后抢在权威服务器应答前伪造应答包发送给受害服务器。这样错误的解析记录就保存到了缓存中,那么接下来缓存时间内所有该域名的解析就都是错误了。这种攻击伪造的是回答资源记录,攻击时间很短,效率低。

kaminsky缓存投毒攻击:恶意人员发送类似这种的查询请求www24385.ctrip.com到dns服务器,抢在权威应答前伪造应答包发送给dns服务器。它修改的是授权资源记录,可以大量的尝试。

上面就是简单的介绍下缓存投毒攻击,有兴趣的同事可以参考下面的文档
http://wenku.baidu.com/view/c97eb1e5aeaad1f346933fbd.html
d 入侵dns服务器,修改其中的数据库记录。
这种就是比较直接暴力的方法了,当然也是最困难的。

PS:本文为科普文,没有什么高深的技术,只是让更多对安全感兴趣的人能够了解DNS攻击相关原理,欢迎大牛们指正。

转自:http://www.freebuf.com/articles/network/17150.html

[科普]DNS相关的攻击介绍的更多相关文章

  1. linux的DNS相关介绍(转载)

    1.DNS配置文件 /etc/hosts   这个是最早的 hostname 对应 IP 的档案: /etc/resolv.conf :这个重要!就是 ISP 的 DNS 服务器 IP 记录处: /e ...

  2. DNS域欺骗攻击详细教程之Linux篇

    .DNS域欺骗攻击原理 DNS欺骗即域名信息欺骗是最常见的DNS安全问题.当一 个DNS服务器掉入陷阱,使用了来自一个恶意DNS服务器的错误信息,那么该DNS服务器就被欺骗了.DNS欺骗会使那些易受攻 ...

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

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

  4. 详解DNS重绑定攻击

    0x00 前言 DNS重绑定攻击的用法有很多种,这篇文章主要理解DNS重绑定攻击的原理,并介绍如何通过DNS重绑定来攻击内网设备.为了更好的理解DNS重绑定攻击,我们先从Web浏览器的同源策略开始介绍 ...

  5. 03_Elasticsearch如何安装以及相关插件的介绍

    03_Elasticsearch如何安装以及相关插件的介绍 elasticsearch -d (-d参数是为了让服务后台运行) Elasticsearch 目录结构: 文件夹 作用 /bin 运行El ...

  6. CC攻击介绍及如何防御

       CC攻击介绍 CC攻击(Challenge Collapsar)是DDOS(分布式拒绝服务)的一种,前身名为Fatboy攻击,也是一种常见的网站攻击方法.攻击者借助代理服务器生成指向受害主机的合 ...

  7. Spring4相关jar包介绍(转)

    Spring4相关jar包介绍 spring-core.jar(必须):这个jar 文件包含Spring 框架基本的核心工具类.Spring 其它组件要都要使用到这个包里的类,是其它组件的基本核心,当 ...

  8. SD/MMC相关寄存器的介绍

    1.SD卡内部架构 在熟悉SD/MMC相关寄存器之前,我们先来看看SD卡的内部架构是怎么样的,如下图所示: 2.SD/MMC相关寄存器的介绍 从上图中总结出:SD卡内部有7个寄存器. 一.OCR,CI ...

  9. 第二百六十五节,xss脚本攻击介绍

    xss脚本攻击介绍 Cross-Site Scripting(XSS)是一类出现在 web 应用程序上的安全弱点,攻击者可以通过 XSS 插入一 些代码,使得访问页面的其他用户都可以看到,XSS 通常 ...

随机推荐

  1. XSL相关

    <?xml version="1.0" encoding="utf-8" ?> <?xml-stylesheet type="tex ...

  2. C#之委托(函数参数传递)【转】

    原文:http://blog.csdn.net/wangdan199112/article/details/18796527 在学委托这块儿的时候,函数参数这块不是很理解,于是针对一个例子做了深入的理 ...

  3. 通过HttpModule管道,帮助api对接开发

    我们公司的技术以.net为主,最近公司的项目需要和其它以java为主的公司搞对接.   .net提供webapi由java请求调用. 目前出现java说调用了,但是.net一直接收不到数据.两方开发人 ...

  4. Partial Tree

    Partial Tree 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5534 完全背包 做这题前去学习了下完全背包,觉得这个优化简直神技!(以前都是 ...

  5. Ubuntu系统上安装搜狗拼音输入法sogou

    1. 首先在百度搜索搜狗拼音输入法Linux就能看到它的官网:http://pinyin.sogou.com/linux/ 下载后直接安装.安装成功后在控制台输入 im-config 如果选中的是fc ...

  6. React Redux学习笔记

    React Router React Router 使用教程 Redux中间件middleware [译]深入浅出Redux中间件 Redux学习之一:何为middleware? ES6 ES6新特性 ...

  7. Stack Overflow for web end

    Jquery UI tooltip on disabled button In general, disabled elements do not trigger any DOM events. Th ...

  8. Ubuntu安装Mysql过程及远程问题解决

    ubuntu下执行 sudo apt-get instlll mysql-server sudo apt-get install mysql-client 安装过程中会有文字界面设置密码 牢记密码 M ...

  9. javascript基础(三)运算

    原文http://pij.robinqu.me/ 递增递减操作符(包括前置和后置).一元正负符号操作符 这些操作符适用于任何数据类型的值,针对不同类型的值,该操作符遵循以下规则(经过对比发现,其规则与 ...

  10. Union、Union All、Except、InterSect的区别

    UNION: 将多个「结果集 (result set)」的「行 (row)」合并,作为单个结果集返回,并移除重复的行.若有重复的行,只留下一个. UNION ALL: 将多个「结果集 (result ...