【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).但是一直都没有深入研究过 ...
随机推荐
- 解决 appium 当中 uiautomator2 无法启动的问题
在启动 appium 程序中,有时候会出现 uiautomator2 服务无法启动的错误,appium 的日志截图如下: image.png 错误信息: ActivityManager: Unable ...
- Java高级特性之集合
Java集合框架 一.Java集合框架概述 1.数组与集合的区别: 1)数组长度不可变化而且无法保存具有映射关系的数据:集合类用于保存数量不确定的数据,以及保存具有映射关系的数据. 2)数组元素既可以 ...
- [JavaWeb基础] 001.简单的JavaWeb代码和Tomcat配置部署
简介: 其实说明白了就是J2EE应用开发,前端可以有很多的展现方式,后端由Java做逻辑运算和数据支撑.适用于创建服务器应用程序和服务,为搭建具有可伸缩性.灵活性.易维护性的商务系统提供了良好的机制. ...
- 安卓全屏或沉浸式状态栏下输入框(EditText)被键盘遮挡解决方法
沉浸式状态栏用了一段时间了,一直没发现安卓在这方面的坑.最近在集成环信自定义UI的过程中,发现将环信界面设置为沉浸式之后最底部的消息输入框不随键盘弹起而变化了,一直显示在屏幕最下方,体验非常差. 后来 ...
- upload-labs通关手册
最近在练习文件上传,所以记录一下自己练习的过程,既能帮助自己以后复习,同时也能帮到初学者. 主要用到的工具是Burpsuite.首先我们应该明白上传文件的目的是什么,通过上传文件将web后门上传并被成 ...
- ZooKeeper未授权漏洞
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作.最终, ...
- Typora 使用 Markdown 嵌入 LaTeX 数学公式符号语法
博客园不支持渲染 LaTeX 数学公式,需要用到什么公式,请复制到您所用的支持 LaTeX 的编辑器中查看实现效果.Typora 可以渲染 LaTeX 数学公式. 目录 行内与独行 行内公式 独行公式 ...
- AUTOSAR-软件规范文档中的UML
https://mp.weixin.qq.com/s/vm5vWNSpbNIYh25-LjJfYg AUTOSAR软件规范文档中存在两种UML图: Sequence diagrams Config ...
- Java实现 LeetCode 23 合并K个排序链表
23. 合并K个排序链表 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [ 1->4->5, 1->3->4, 2->6 ] 输 ...
- Java实现复数运算
1 问题描述 编程实现两个复数的运算.设有两个复数 和 ,则他们的运算公式为: 要求:(1)定义一个结构体类型来描述复数. (2)复数之间的加法.减法.乘法和除法分别用不用的函数来实现. (3)必须使 ...