前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用chroot和fake filesystem解决物联网设备研究时的工具移植问题

利用chroot和fake filesystem解决物联网设备研究时的工具移植问题

作者头像
Atum
发布2022-12-22 14:42:42
3420
发布2022-12-22 14:42:42
举报
文章被收录于专栏:安全杂谈

问题描述

在研究物联网设备时经常会碰到工具缺失的问题。比如我最近在玩的一款物联网设备,该设备基于busybox封装了简单的文件系统,缺少了gdb等研究工具。此外由于文件系统中没有sshd,所以研究过程中也只能通过默认的tty进行交互,非常蛋疼。

设备默认tty和fs环境

传统解决思路

应对这种问题的常规思路是对需要用到的工具进行静态编译,并丢到设备的文件系统中。虽然这种方法可以解决很多工具缺少的问题。然而,并不是所有的工具都是可以成功的静态编译,比如sshd,就很难静态编译成功。

新的思路

我决定尝试了一种新的思路:往设备中丢动态链接的工具并使用fake filesystem解决依赖问题。 具体来说,首先在一个Linux发行版中安装好sshd、gdb等常用工具并将其filesystem打包。接着,将打包好的文件系统解包到设备上。最后,chroot过去,就可以执行sshd、gdb之类的工具了。

fake filesystem

实际例子

这里举一个实际的例子。首先,我们通过以下Dockerfile build一个安装了sshd等常用工具的ubuntu 20.04 docker。

代码语言:javascript
复制
FROM  ubuntu:20.04
ENV TZ=UTC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN sed -i "s/http:\/\/archive.ubuntu.com/http:\/\/mirrors.tuna.tsinghua.edu.cn/g" /etc/apt/sources.list
RUN apt update && apt install -y openssh-server gdb git gcc make cmake
RUN apt install -y openssh-server 
RUN apt install -y gdb git gcc 
RUN apt install -y make cmake

接着,导出其文件系统,并将该文件系统解包到目标设备中。

代码语言:javascript
复制
docker export $container_id  > fakefs.tar

在目标设备上,我们chroot到fakefs中,chroot之后,一些没有特殊依赖的工具软件如gcc、make、gdb等已经可以正常使用了。

由于sshd依赖于/dev/urandom /dev/random /dev/ptmx /dev/pts等设备文件,在运行sshd之前,我们需要首先创建这些文件。

代码语言:javascript
复制
mknod /dev/urandom c 1 9
mknod /dev/random c 1 8
mknod /dev/ptmx c 5 2
mkdir /dev/pts
mount -t devpts devpts /dev/pts
mount -t proc none /proc 

完成之后,就可以运行sshd了。

sshd运行成功之后,我们就可以在自己的pc上ssh到设备上,而不再需要忍受不支持复制粘贴等功能的的默认tty的折磨。

值得注意的是,这样ssh进去之后是chroot环境,要想访问原来的文件系统。使用trick逃逸出来即可。

总结

利用这种方法,可以完成大多数不依赖于具体内核环境的工具移植,甚至可以移植包管理工具并以此安装更多的软件。

使用包管理工具安装更多软件

不过,值得注意的是,由于chroot之后的环境缺少/dev /proc等一些特殊文件系统。因此,对于依赖于这些特殊文件系统的工具(如sshd)来说,需要先解决这些依赖,才能够正常运行。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-03-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题描述
  • 传统解决思路
  • 新的思路
  • 实际例子
  • 总结
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档