Strive for lofty goals

IoT Security

I

IoT的安全问题主要集中在硬编码敏感信息、启用了硬件调试端口、不安全的固件、不安全的数据存储、未认证访问、不安全的通信通道、不安全的配置、数据输入未过滤。

IoT基础信息

  • CPU架构:ARM、X86、MIPS、PPC
  • 内存:
  • 储存:Flash(NOR/NAND)、SD、TF
  • Bootloader:Uboot
  • 操作系统:Linux、RTOS、VxWorks

固件

固件提取

预留接口读取

JTag/SWD

Jlink/Xtag(GDBs/OpenOCD)插入Jtag->Jflash读取

UART/USART

  • USB转TTL,连接主板UART口
  • 使用PuTTY Serial模式连接COM口,Speed 9600
  • 上电,拿到shell
    • 通过init启动sh。printenv、setenv bootargs init=/bin/sh、saveenv、getshell

提权获得文件系统权限

利用一些提权漏洞或者后门获得完整Shell。

从存储芯片读取固件

飞线Flash芯片在线读取固件

通过芯片夹连接到芯片的引脚,连接电脑,使用编程器即可读取保存固件。

拆焊Flash芯片离线读取固件

将Flash芯片拆焊下来,通过烧录座编程器,离线读取保存固件。

拆焊STM32->插入烧录座->Jlink插入Jtag->JFlash读取。

其它获取固件方式

  • 官网下载
  • 找售后客服或代理商要
  • 三方网站共享的
  • 中间人抓包获取更新固件时的远程链接
  • 有些产品固件更新需要借助独立的软件,可逆向该软件获得固件。
  • 逻辑分析仪
  • 修改uboot启动脚本,删除密码、启动sh、挂在硬盘等方式获取高权限和文件
  • 通过uboot的md命令读取内存,NOR Flash使用

固件逆向

识别压缩算法

通过binwalk -E 可以看固件是否有压缩或加密,一般压缩算法包括 LZMA、LZO、LAMA2。

如果固件加密,最直接的方式是找到解密密钥。一般来说,解密程序本身会在固件内。存在几种情况

  • 早期固件版本没有加密,解密程序随着某个过度版本提供,过度版本的固件未加密,找到这个版本提取解密程序来解密最新版本固件。
  • 早期固件就开始加密,中间更改了加密方案,新解密程序随着某个过度版本提供,过度版本使用的还是老的加密方式,找到这个版本提取解密程序来解密最新固件。
  • 早期固件就开始加密,中间更改了加密方案,没有过渡期间,后续的版本固件直接使用新加密方案。

一出现的概率比较高,二也有可能,三就比较难利用。

在之前固件中找到解密程序后,通过QEMU模拟执行解密程序,对新版本固件解密,之后使用binwalk提取即可。

By Feei
Strive for lofty goals
Loading