【SEED Labs】DNS Rebinding Attack Lab

摘要:
本实验涵盖以下主题:DNSserversetupDNSrebindingattackAttacksonIoTdevicesSameOriginPolicy我们的攻击目标是防火墙后面的一个物联网设备。LabEnvironment在这个实验室中,我们将使用三台机器,分别称为用户VM、本地DNS服务器和攻击者VM。为了减少DNS服务器的负载并加快响应时间,Firefox浏览器缓存DNS结果。在URL字段中输入about:config。Task3:StarttheattackwebserverontheAttackerVM在本实验室中,只能从防火墙后访问物联网设备,即,仅来自实验设置中的用户VM。解压缩文件后,进入attacker_vm文件夹,通过运行准备好的脚本start_webserver.sh或直接运行“flaskrun”来启动web服务器。

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服务器上)

【SEED Labs】DNS Rebinding Attack Lab第1张

LabTasks

Task1: Configure the User VM

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

【SEED Labs】DNS Rebinding Attack Lab第2张

更改后,应该退出Firefox浏览器,并重新启动;否则,更改将不会生效。

Step 2.改变/etc/hosts.我们需要将以下条目添加到/etc/hosts文件中。我们将使用www.seedIoT32.com作为物联网web服务器的名称。此服务器可以运行在不同的VM上,但为了简单起见,我们在用户VM上运行物联网服务器(其IP地址为192.168.43.175):

【SEED Labs】DNS Rebinding Attack Lab第3张

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地址):

【SEED Labs】DNS Rebinding Attack Lab第4张

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

【SEED Labs】DNS Rebinding Attack Lab第5张

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

【SEED Labs】DNS Rebinding Attack Lab第6张

Task2: Start the IoT server on the User VM

在此任务中,我们将在用户VM上启动物联网服务器。通过web服务器,用户可以与物联网设备通信。

Step 1. 安装 Flask.我们使用Flask web框架来开发物联网服务器 sudo pip3 install Flask==1.1.1

【SEED Labs】DNS Rebinding Attack Lab第7张

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

【SEED Labs】DNS Rebinding Attack Lab第8张

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

【SEED Labs】DNS Rebinding Attack Lab第9张

Task3: Start the attack web server on the Attacker VM

在本实验室中,只能从防火墙后访问物联网设备,即,仅来自实验设置中的用户VM。将恶意代码发送到用户虚拟机上的一种典型方式是让用户访问我们的网站,这样放置在web页面上的JavaScript代码就可以进入用户虚拟机上。在这个任务中,我们将启动一个web服务器来托管这些web页面。

Step 1. 安装 Flask。 我们的恶意web服务器也是基于Flask web框架开发的。

【SEED Labs】DNS Rebinding Attack Lab第10张

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

【SEED Labs】DNS Rebinding Attack Lab第11张

Step3. Testing the Attacker’s web server.

【SEED Labs】DNS Rebinding Attack Lab第12张

Task4: Configure the DNS server on the Attacker VM

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

【SEED Labs】DNS Rebinding Attack Lab第13张

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

【SEED Labs】DNS Rebinding Attack Lab第14张

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

【SEED Labs】DNS Rebinding Attack Lab第15张

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

【SEED Labs】DNS Rebinding Attack Lab第16张

【SEED Labs】DNS Rebinding Attack Lab第17张

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

【SEED Labs】DNS Rebinding Attack Lab第18张

Task6. Understanding the Same-Origin Policy Protection

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

attacker_vm的change界面

【SEED Labs】DNS Rebinding Attack Lab第19张

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

【SEED Labs】DNS Rebinding Attack Lab第20张

【SEED Labs】DNS Rebinding Attack Lab第21张

user_vm的change界面

【SEED Labs】DNS Rebinding Attack Lab第22张

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

【SEED Labs】DNS Rebinding Attack Lab第23张

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更改为以下内容:

【SEED Labs】DNS Rebinding Attack Lab第24张

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服务器。这正是我们想要的。

修改好相应文件进行刷新:

【SEED Labs】DNS Rebinding Attack Lab第25张

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

Task8. Launch the Attack

使用用户机访问下列url:

【SEED Labs】DNS Rebinding Attack Lab第26张

【SEED Labs】DNS Rebinding Attack Lab第27张

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

【SEED Labs】DNS Rebinding Attack Lab第28张

免责声明:文章转载自《【SEED Labs】DNS Rebinding Attack Lab》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇charles抓包工具的使用:手机抓包设置和安装证书Python 调试下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

zookeeper 介绍与集群安装

zookeeper 介绍 ZooKeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。ZooK...

CentOS 6.3下rsync服务器的安装与配置[转]

CentOS 6.3下rsync服务器的安装与配置  一、rsync 简介   Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件,也可以使用 Rsync 同步本地硬盘中的不同目录。    Rsync 是用于取代rcp的一个工具,Rsync使用所谓的 “Rsync 算法” 来使本地和远程...

云计算openstack——虚拟机获取不到ip(13)

一、现象描述:openstack平台中创建虚拟机后,虚拟机在web页面中显示获取到了ip,但是打开虚拟机控制台后查看网络状态,虚拟机没有ip地址,下图为故障截图: 二、分析思路:(1)查看neutron服务状态,确保dchp服务正常运行 root@controller22:15:11~#neutron agent-list neutron CLI is...

JVM(三)JVM对象创建与内存分配机制学习

一、对象创建的过程 我们先画一个流程图来看一下对象在创建的过程中,经历了哪些步骤: 类加载检查   虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那就会先执行相应的类加载过程。 分配内存   在类加载检查通过后,接下来虚拟机将为新生对象...

SUDO:/ETC/SUDOERS 可被任何人写 解决方案

问题一: sudo: /etc/sudoers is world writablesudo: no valid sudoers sources found, quittingsudo: unable to initialize policy plugin这个是linux为保证系统安全所做的限制,解决方法运行如下两条命令:pkexec chmod 555 /...

LINUX挂接UNIX系统NFS文件共享

类似于windows的网络共享,UNIX(Linux)系统也有自己的网络共享,那就是NFS(网络文件系统),下面我们就以SUN Solaris2.8和REDHAT as server 3 为例简单介绍一下在linux下如何mount nfs网络共享。   在linux客户端挂接(mount)NFS磁盘共享之前,必须先配置好NFS服务端。   1、Solar...