OneShell

I fight for a brighter tomorrow

0%

minicom的使用

minicom是在Linux、Unix上常用的一款串口通信工具,可以通过串口连接计算机和其他的嵌入式设备,是一款开源软件。在IoT安全研究中,使用Mac或者Linux的人员可以使用minicom作为串口调试工具。

1
2
3
4
# Mac
brew install minicom
# minicom
sudo apt-get install mimicom

配置

基本配置

minicom在使用之前需要进行配置,使用如下的命令进入配置模式。

1
sudo minicom -s

进入minicom的配置模式之后,使用方向键选择需要配置的部分,一般来说,最基本的配置就是设置Serial port setup,对串口通信的设备、波特率等进行配置。如下是进入配置模式的主页面。配置完成后,可以回到主界面,选择将配置信息作为默认配置Save setup as dfl,或者保存为特定设备名的配置文件。我个人比较喜欢后者,设置一次保存为配置文件,后续对该设备连接直接sudo minocom 配置文件名即可。
undifined

以配置Serial port setup为例,最左边的大写字母可以快速跳转到对应的配置项,例如要配置串口通信设备,直接按下A便可配置Serial Device。具体的设备可以通过ls /dev/*查看连接到计算机的串口通信设备。配置完设备之后,回车,然后可以选择另外的配置选项,就不多赘述,例如直接按下E配置波特率。配置完所有必要的选项后,回车保存所有的设置,回到主配置页面。

undifined

回到主配置界面后:

  • Save setup as dfl:将当前配置作为minicom的默认配置
  • Save setup as..:将当前配置保存成配置文件,以后使用可以从配置文件中加载相应参数
  • Exit:以当前的配置进行串口通信
  • Exit from Minicom:退出minicom

配置启动权限

minicom需要使用到串口设备/dev/xxx,所以需要使用sudo权限来运行,我们也可以修改串口设备的权限,这样后续启动的时候就不需要使用sudo、还要输入密码了。
修改启动权限的方式1:
使用chmod命令。Linux下的一切设备皆文件,我们可以直接使用chmod命令修改串口设备的权限

1
sudo chmod 666 /dev/xxx

修改启动权限的方式2:
配置udev规则。也是Linux上比较推荐的方式,但是在Mac上无法找到这个配置文件。

1
sudo vim /etc/udev/rules.d/70-ttyusb.rules

新增一行

1
KERNEL=="ttyUSB[0-9]*", MODE="0666"

修改后,需要重新插拔一下设备,以重新生成设备节点

暂停minicom

串口的数据会一直输出,有时候我们需要查看之前打印出来的数据,而minicom不能像GUI的日志查看器一样使用直接翻页查看。这个时候可以使用Ctrl + A(Mac上是ESC + Z)键,暂停minicom的输出,选择后续需要执行的操作,例如查看之前打印的数据、开启日志记录功能、重新设置波特率等等。

undifined
如上,就是暂停了之后的minicom菜单,常用的功能:

  • Clear Screen:清空当前的屏幕
  • cOnfigure Minicom:配置minicom
  • Capture on/off:开始记录日志,对于安全研究比较有用的功能,保存了日志方便进行分析,甚至结合bootloader的功能还可以dump固件
  • Timestamp toggle:开启时间戳,在每一行日志的前面都加上时间戳
  • scroll Back:进入浏览模式,可以翻滚查看已经输出的数据

IoT安全的一些操作

记录一下在IoT安全研究中会使用到的一些场景,尽量结合自己之前遇到的案例讲解,文章后续如果遇到其他合适案例也会更新

案例1:结合bootloader的功能dump固件

最近遇到一个路由器设备,可以直接在板子上找到UART,获取到root权限的shell,但是内置的程序中基本上没有能够外带数据的程序,而我还没到最后一步不想把内存芯片拆下来。通过启动日志可以发现,设备的bootloader是CFE,能够在启动内核前暂停进入CFE的配置模式。同时还能看到CPU型号、flash型号

undifined

输入help命令可以看到CFE支持的命令,此处不多说其他的命令,主要关注能够dump内存的命令dm。dm命令语法是:dm 16进制的起始地址 10进制的数据大小
undifined

在设备正常启动的日志中,可以看到rootfs的格式是squashfs,一个嵌入式设备常用的文件系统格式,文件系统在flash中的起始地址是0xb8010100,大小是8388608个字节=8MB。
undifined

知道了文件系统的起始地址和大小,那么就可以使用dm命令进行dump,通过minicom的日志记录功能保存到本地,然后进行处理还原成真正的文件系统。可以先尝试使用dm命令看看起始地址是否为squash文件系统的magic,如下,的确是squash文件系统的文件头(虽然和PE文件的Magic相同但肯定不是PE)

undifined

开启minicom的日志记录功能,同时按下ESC + Z(Mac)暂停,选择L,设置需要保存的文件名,随后minicom的所有输出都会被保存到日志文件中,设置完毕后在CFE中执行:dm 0xb8010100 8388608开始dump文件系统。
undifined

日志内容如下,可以写一个python脚本进行处理,然后还原成真正的文件系统:
undifined

emm,原理是这样没错了,如果bootloader支持dump内存,配合minicom的日志记录功能,理论上是可以dump下来flash芯片的所有内容的。缺点是,速度特别慢,可能这个时间已经能把芯片拆下来到编程器上读取然后焊回去了。但是至少是一种思路,对吧。