【SEED Labs】DNS Rebinding Attack Lab
Lab Overview
实验环境下载:https://seedsecuritylabs.org/Labs_16.04/Networking/DNS_Rebinding/
在这个实验中模拟的物联网设备是一个恒温器,用于控制室内温度。要成功设置温度,客户端需要能够与物联网服务器交互。由于物联网设备在防火墙后面,外部机器不能与物联网设备交互,因此不能控制恒温器。为了击败防火墙保护,攻击代码必须首先进入内部网络。这并不难,当来自内部网络的用户访问攻击者的网站时,攻击者的代码(JavaScript代码)实际上是从用户的浏览器中运行的,因此在受保护的内部网络中运行。然而,由于浏览器实现的沙箱保护,攻击者的代码仍然不能与物联网设备交互,即使它现在在内部网络中。
这个实验的目标是使用DNS重绑定攻击来绕过沙箱保护,这样攻击者的javascript代码就可以成功地从设备获得必要的信息,并使用这些信息来获得温度测量的一个非常高的值。
本实验涵盖以下主题:
• DNS server setup
• DNS rebinding attack
• Attacks on IoT devices
• Same Origin Policy
我们的攻击目标是防火墙后面的一个物联网设备。我们不能从外部直接访问这个物联网设备。我们的目标是让内部用户运行我们的JavaScript代码,这样我们就可以使用DNS重新绑定攻击与物联网设备交互。
许多物联网设备都有一个简单的内置web服务器,因此用户可以通过web api与这些设备交互。通常,这些物联网设备由防火墙保护,它们不能从外部直接访问。由于这种类型的保护,许多物联网设备没有实现强大的身份验证机制。如果攻击者能够找到与它们交互的方法,就很容易危及其安全性。
我们使用一个简单的webserver来模拟这种易受攻击的物联网设备,该服务器提供两个api:密码和温度。物联网设备可以设置室温。为此,我们需要向服务器的温度API发送一个HTTP请求;请求应该包括两部分数据:目标温度值和密码。密码是定期更改的秘密,但可以使用密码API获取。因此,要成功设置温度,用户首先需要获得密码,然后将密码附加到温度API中。密码不是用于身份验证的;它用于抵抗跨站请求伪造(CSRF)攻击。没有这种保护,一个简单的CSRF攻击就足够了;没有必要使用更复杂的DNS重新绑定攻击。为了简单起见,我们硬编码了密码;在实际系统中,密码将定期重新生成。
LabEnvironment
在这个实验室中,我们将使用三台机器,分别称为用户VM、本地DNS服务器和攻击者VM。为了简单起见,我们使用VirtualBox中的NAT网络适配器将这些虚拟机放在同一个网络上。在现实世界中,它们不在同一个网络上。我们还假设运行在用户VM上的设备在防火墙后面,因此攻击者VM不能直接访问物联网设备。这个实验室的设置相当复杂,因为我们需要配置三个VM并在它们上运行多个服务器,包括一个IoT web服务器(在用户VM上)、一个web服务器和一个DNS服务器(在攻击者VM上)以及一个DNS服务器(在本地DNS服务器上)

LabTasks
Task1: Configure the User VM
Step1. 减少Firefox的DNS缓存时间。为了减少DNS服务器的负载并加快响应时间,Firefox浏览器缓存DNS结果。默认情况下,缓存的过期时间为60秒。这意味着我们的DNS重新绑定攻击需要等待至少60秒。为了让我们的实验更轻松,我们把时间减少到10秒或更少。在URL字段中输入about:config。单击警告页面后,我们将看到首选项名称及其值的列表。搜索dnsCache,找到以下条目并将其值更改为10:

更改后,应该退出Firefox浏览器,并重新启动;否则,更改将不会生效。
Step 2. 改变/etc/hosts.我们需要将以下条目添加到/etc/hosts文件中。我们将使用www.seedIoT32.com作为物联网web服务器的名称。此服务器可以运行在不同的VM上,但为了简单起见,我们在用户VM上运行物联网服务器(其IP地址为192.168.43.175):

Step3. Local DNS Server 。我们需要配置用户VM以使用特定的本地DNS服务器。这是通过将本地DNS服务器设置为解析器配置文件(/etc/resolv.conf)中的第一个名称服务器条目来实现的。一个挑战是所提供的VM使用动态主机配置协议(DHCP)来获取网络配置参数,如IP地址、本地DNS服务器等。DHCP客户机将用DHCP服务器提供的信息覆盖/etc/resolv.conf文件。
要将信息导入/etc/resolv.conf而不用担心DHCP,一种方法是将以下条目添加到/etc/resolvconf/resolv.conf.d/head文件(192.168.43.78为本地DNS服务器的IP地址):

头文件的内容将预先写入动态生成的解析器配置文件。通常,这只是一个注释行(/etc/resolv.conf中的注释来自这个头文件)。在进行更改之后,我们需要运行以下命令使更改生效:

Step 4. Testing 。配置用户VM之后,使用dig命令从您选择的主机名获取IP地址。从这个响应中,请提供证据证明这个响应确实来自你们的服务器。如果找不到证据,说明配置不成功。

Task2: Start the IoT server on the User VM
在此任务中,我们将在用户VM上启动物联网服务器。通过web服务器,用户可以与物联网设备通信。
Step 1. 安装 Flask. 我们使用Flask web框架来开发物联网服务器 sudo pip3 install Flask==1.1.1

Step 2. Start the IoT server. 物联网服务器代码包含在user_vm.zip,可以从实验室的网站上下载。解压缩文件后,进入user_vmf文件夹,通过运行准备好的脚本start IoT .sh或直接运行“flask run”启动物联网服务器。需要注意的是,我们使用端口8080作为物联网服务器(该端口号在实验室设置中是硬编码的;将其更改为不同的数字将破坏实验室设置)。

Step 3. Testing the IoT server 。要测试物联网服务器,请将浏览器指向用户VM上的以下URL。如果一切都设置正确,我们应该能够看到一个恒温器。我们也可以通过拖动滑动条来改变温度设置。

Task3: Start the attack web server on the Attacker VM
在本实验室中,只能从防火墙后访问物联网设备,即,仅来自实验设置中的用户VM。将恶意代码发送到用户虚拟机上的一种典型方式是让用户访问我们的网站,这样放置在web页面上的JavaScript代码就可以进入用户虚拟机上。在这个任务中,我们将启动一个web服务器来托管这些web页面。
Step 1. 安装 Flask。 我们的恶意web服务器也是基于Flask web框架开发的。

Step 2. Start the attacker’s web server 。攻击者的服务器代码包含在attacker_vm.zip,可以从实验室的网站上下载。解压缩文件后,进入attacker_vm文件夹,通过运行准备好的脚本start_webserver.sh或直接运行“flask run”来启动web服务器。

Step3. Testing the Attacker’s web server.

Task4: Configure the DNS server on the Attacker VM
攻击者VM也充当了attacker32.com域名的命名服务器。BIND9服务器已经在攻击者VM上运行,我们需要为它准备一个区域文件。一个示例区域文件包含在attackr_vm文件夹中。我们应该相应地更改区域文件,并将其复制到/etc/bind文件夹中。

将以下区域条目添加到/etc/bind/name .因此上面的区域文件将由BIND9服务器使用。

如果一切都设置正确,我们可以尝试以下dig命令,看看我们得到的响应是否与我们放在区域文件中的响应相同

Task5: Configure the Local DNS Server
在本地DNSserver上,我们设置attacker32.com域的转发记录,因此每当本地 DNS 服务器收到此域内主机的 DNS 查询时,它只需将 DNS 查询发送到指定转发记录的 IPaddress,而不是前往 root server 和the .com server,以找出attacker32.com域的名称服务器的位置。
要将此类记录添加到本地 DNS 服务器,我们需要将以下行添加到 /etc/bind/named.conf


在用户机上测试,dig成功:

Task6. Understanding the Same-Origin Policy Protection
同源策略是一种约定,它是浏览器最核心也最基本的安全功能。浏览器的同源策略,限制了来自不同源的“document”或脚本,对当前“document”读取或设置某些属性。影响“源”的因素有:host(域名或IP地址,如果是IP地址则看做是一个根域名)、子域名、端口、协议。在浏览器中,<script>、<img>、<iframe>、<link>等标签都可以跨域加载资源,而不受同源策略的限制,但是浏览器限制了JavaScript的权限,使其不能读、写返回的内容。
attacker_vm的change界面

单击click之后,user_vm的温度并不会改变


user_vm的change界面

单击click之后,user_vm的温度变为99℃

Task7. Defeat the Same-Origin Policy Protection
击败同源的主要想法保护来自这样一个事实:策略执行基于主机名,而不是IP地址,所以只要我们使用www.attacker32.com的URL,我们遵守SOP的政策,但这并不意味着我们是限制与www.attacker32.com web服务器进行通信。
在用户的浏览器向www.attacker32.com发送请求之前,它首先需要知道www.attacker32.com的IP地址。一个DNS请求将从用户的机器发出。如果IP地址没有缓存在本地DNS服务器上,一个DNS请求最终会被发送到attacker32.com的nameserver,它运行在攻击者的VM上。因此,攻击者可以决定在响应中放入什么。
Step 1: Modify the JavaScript code. 在攻击者虚拟机中,在www.attacker32.com:8080/change中运行的JavaScript代码存储在以下文件中:attacker_vm/rebind_malware/templates/js/change.js。由于该页面来自www.attacker32.com服务器,根据同源策略,只能与同一服务器交互。因此,我们需要将代码的第一行从http://www.seediot32.com:8080更改为以下内容:

Step2: Conduct the DNS rebinding 。我们的JavaScript代码发送请求到www.attacker32.com,请求将返回到攻击者VM。这不是我们想要的,我们希望将请求发送到iot服务器。这可以通过DNS重新绑定技术实现。我们首先映射 www. attacker32.com 为攻击者VM的IP地址,这样用户可以从http: //www.attacker32.com/change获得实际页面。在我们点击网页上的按钮之前,我们重新映射www.attacker32.com主机名到iot服务器的IP地址,按钮触发的请求将到达iot服务器。这正是我们想要的。
修改好相应文件进行刷新:

同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源。所以xyz.com下的js脚本采用ajax读取abc.com里面的文件数据是会被拒绝的。同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的重要安全机制。不受同源策略限制的1. 页面中的链接,重定向以及表单提交是不会受到同源策略限制的。2. 跨域资源的引入是可以的。但是js不能读写加载的内容。如嵌入到页面中的<script src="..."></script>,<img>,<link>,<iframe>等
Task8. Launch the Attack
使用用户机访问下列url:


每当10秒倒计时为0,温度将会被设定为88度:

【SEED Labs】DNS Rebinding Attack Lab的更多相关文章
- 【SEED Labs】Public-Key Infrastructure (PKI) Lab
Lab Overview 公钥加密是当今安全通信的基础,但当通信的一方向另一方发送其公钥时,它会受到中间人的攻击.根本的问题是,没有简单的方法来验证公钥的所有权,即,给定公钥及其声明的所有者信息,如何 ...
- 【SEED Labs】TCP Attacks Lab
Lab Overview 实验环境下载:https://seedsecuritylabs.org/Labs_16.04/Networking/TCP_Attacks/ 本实验涵盖以下课题: • TCP ...
- 利用Dnspod api批量更新添加DNS解析【python脚本】 - 推酷
利用Dnspod api批量更新添加DNS解析[python脚本] - 推酷 undefined
- 【Linux】DNS服务-BIND从服务器、缓存服务器及转发服务器配置(三)
环境 操作系统:CentOS 6.5 DNS软件:bind(安装参照:[Linux]DNS服务-BIND基础配置(二)) BIND从服务器 从服务器就是在bind的主配置文件中添加从域example. ...
- 转 DNS原理及其解析过程【精彩剖析】
DNS原理及其解析过程[精彩剖析] http://369369.blog.51cto.com/319630/812889/ DNS原理及其解析过程 精彩剖析 网络通讯大部分是基于T ...
- DNS原理及其解析过程【精彩剖析】
DNS原理及其解析过程[精彩剖析] 2012-03-21 17:23:10 标签:dig wireshark bind nslookup dns 原创作品,允许转载,转载时请务必以超链接形式标明文章 ...
- 【前端安全】JavaScript防http劫持与XSS
作为前端,一直以来都知道HTTP劫持与XSS跨站脚本(Cross-site scripting).CSRF跨站请求伪造(Cross-site request forgery).但是一直都没有深入研究过 ...
- 【安全开发】Android安全编码规范
申明:本文非笔者原创,原文转载自:https://github.com/SecurityPaper/SecurityPaper-web/blob/master/_posts/2.SDL%E8%A7%8 ...
- 【前端安全】JavaScript防http劫持与XSS (转)
作为前端,一直以来都知道HTTP劫持与XSS跨站脚本(Cross-site scripting).CSRF跨站请求伪造(Cross-site request forgery).但是一直都没有深入研究过 ...
随机推荐
- 使用websocket开发智能聊天机器人
前面我们学习了异步web框架(sanic)和http异步调用库httpx,今天我们学习websocket技术. websocket简介 我们知道HTTP协议是:请求->响应,如果没有响应就一直等 ...
- SQL查找大小为n的连续区间
数据准备 create table sequence ( seq int not null primary key ); insert into values(3); insert into valu ...
- 需求:一个页面中需要用到多个字典数据。用于下拉选项,同时,需要将其保存为json格式。以便于key,value的相互转换。记录在实现过程中踩的坑
本文涉及到的知识: Promise,all()的使用 js处理机制 reduce的用法 map的用法 同步异步 需求: 一个页面中需要用到多个字典数据.用于下拉选项,同时,需要将其保存为json格式. ...
- Python学习之路【第一篇】:Python简介与入门
Python简介 一.什么是Python Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言 ...
- 加速国内Github代码下载速度
标题: 加速国内Github代码下载速度 作者: 梦幻之心星 347369787@QQ.com 标签: [Github, 代码, 下载] 目录: 代码 日期: 2019-10-27 目录 前提说明 解 ...
- 自动化测试: Selenium 自动登录授权,再 Requests 请求内容
Selenium 自动登录网站.截图及 Requests 抓取登录后的网页内容.一起了解下吧. Selenium: 支持 Web 浏览器自动化的一系列工具和库的综合项目. Requests: 唯一的一 ...
- 【docker系列2】docker 的前世今生
Docker 入门,共 3 篇,将带大家进入 Docker 的世界.首先了解 Docker 的发展历程, 然后快速掌握 Docker 的基本使用: Docker 版本及内核兼容性选择是这部分的重点内容 ...
- [Pyspark]RDD常用方法总结
aggregate(zeroValue, seqOp, combOp) 入参: zeroValue表示一组初值 Tuple seqOp表示在各个分区partition中进行 什么样的聚合操作,支持不同 ...
- 【大厂面试03期】MySQL是怎么解决幻读问题的?
问题分析 首先幻读是什么? 根据MySQL文档上面的定义 The so-called phantom problem occurs within a transaction when the same ...
- Java实现 蓝桥杯VIP 基础练习 字符串对比
问题描述 给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一: 1:两个字符串长度不等.比如 Beijing 和 Hebei 2:两个字符串不仅长度相 ...