Artifact Evaluation: Greenhouse USENIX 20231
本次测试基于
- VMvare17
- Ubuntu 20.04
- Greenhouse USENIX 2023 Artifact Evaluation Version v5
测试时间
- 2024.10.07
下载 artifact
作者在zenodo上提交了论文对应的artifact2, 包含一个docker容器与多个说明文档, 对应链接为: https://zenodo.org/records/8217895.
下载其中的docker容器文件greenhouse-ae.tar与使用文档README.md, 留作备用.
关于该方案的具体细节可参考3;
基于 docker 搭建运行环境
运行该artifact需先安装依赖:
1
sudo apt install docker docker-compose
其余部分基于artifact所提供的手册进行.
1
2
3
4
5
6
#只执行一次:
docker load -i greenhouse-ae.tar
# 每次启动容器都要执行:
docker run -it --privileged -v /dev:/host/dev greenhouse:usenix-eval-jul2023 bash
/gh/docker_init.sh
/gh/test.sh
过程中可能遇到无法访问docker daemon的报错, 需要在容器中执行 usermod -aG docker root命令并重新启动容器.
对固件进行 rehost
该程序对固件进行rehost时需要指定品牌, 查看程序源代码, 发现该程序主要支持以下品牌:
- netgear
- dlink
- trendnet
- tenda
- asus
因此, 本文选择了华硕(asus)某款路由器的固件进行测试, 下载链接为: https://dlcdnets.asus.com.cn/pub/ASUS/wireless/RT-BE88U/FW_RT_BE88U_300610233921.zip?model=RT-BE88U
随后, 使用greenhouse对该固件进行rehost.
1
2
3
4
# 将文件复制到container中
sudo docker cp ./RT-BE88U_3.0.0.6_102_33921-g6ecb73c_620-gaf023_BA08_nand_squashfs.pkgtb 0db2:/
# 参数中指定品牌名和固件文件路径
gh/run.sh asus /RT-BE88U_3.0.0.6_102_33921-g6ecb73c_620-gaf023_BA08_nand_squashfs.pkgtb
以上命令仅供参考, 需要根据官方手册并结合实际情况进行修改.
运行完成后, 在容器的/gh/result/路径下发现新文件夹<sha256hash>, 将其中的<firmware-name>复制到主机中留作备用.
1
2
3
4
# 在主机中执行
sudo docker cp \
0db2:/gh/result/<sha256hash>/<firmware-name> \
~/d9f3/<firmware-name>
在docker中运行rehost后的固件
经典换源环节, 已换过的不需要重换.
1
2
3
4
sudo touch /etc/docker/daemon.json
sudo chmod 666 /etc/docker/daemon.json
sudo echo "{\"registry-mirrors\": [\"https://dockerproxy.cn\"]}" >> /etc/docker/daemon.json
sudo chmod 644 /etc/docker/daemon.json
利用greenhouse产生的构建文件重新构建一个容器, 作为固件的运行环境.
1
2
3
cd ~/d9f3/<firmware-name>/debug
sudo docker-compose build
sudo docker-compose up
固件成功启动后, 根据构建文件~/d9f3/<firmware-name>/debug/docker-compose.yml中指定的ip与端口访问固件程序.
本文采用默认设置: 172.21.0.2:80, 成功在浏览器中访问.

在创建无线网络这一步遇到问题, 输入SSID与password后, 页面保持加载状态, 始终无法进入下一个页面, 猜测与docker环境中缺少无线网络必需硬件设备有关.
