作为一个爱好广泛的安全研究员,研究研究iot安全也是必须的
iot与传统pc软件的区别
iot,可以说是嵌入式别名
研究iot安全,通常研究的是运行在嵌入式设备上的软件(俗称固件)上的安全。
iot和传统pc软件的区别主要在于以下3点:
- 嵌入式系统固件通常情况下直接与硬件底层进行交互来执行任务(一般情况下,嵌入式设备的硬件资源实在有限,不足以支持一个操作系统的运行)
- 固件通常存储在嵌入式设备的ROM(read-only memory)或非易事内存芯片(比如flash内存和 EEPROM(Electrically Erasible Programmable Read-Only Memory)中
- 固件格式复杂多样,没有统一标准(因为过于底层,以致于程序运行的入口点在那个内存地址都是由嵌入式开发人员随意决定的),且通常一个固件就包含了保证设备运行的所有内容。
iot安全研究的困难
其实从这些区别就可以看到一些iot研究的困难了。
- 底层硬件平台复杂,结构不同(因为iot固件直接和硬件进行交互,不同的产商diy设计自己的硬件产品,直接导致固件设计产生巨大差异,没有统一标准)
- 专用性强,源码/文档不公开(懂得都懂,这要是公开了才怪了)
- 运行环境受限(一般情况下只有自家硬件才能运行得起来自家固件,然而一般厂商硬件资源有限,跑fuzz都嫌慢;所以学术界很推崇用模拟方式来模拟固件运行,用服务器的资源来跑fuzz,然而因为硬件不行,模拟起来也很费劲)
- iot固件与通用pc程序不同,文件结构上有差异(包括不同固件入口点都随开发者开心,有用ida分析固件的人可以发现,有些固件,甚至ida都没办法辨别其型号和入口点,需要你自己选)
iot设备组成
直接上图:
IOT设备至少由一个cpu(执行固件)和一组外设组成。外设负责进行交互。
外设的种类丰富多样,大伙看一下有个印象就行。
至于片上外设
和片外外设
大家可以想象一下自己的电脑,首先电脑有个耳机插口,这个就叫做片上外设
,那么耳机就叫做片外外设
.大概就是这么个关系。所以才有 CPU只能通过片上外设和片外外设进行交互的说法。
CPU与外设交互的方法种类多种多样:
MMIO(Memory-Mapped Input/Output)
外设的硬件寄存器直接映射到CPU可访问的内存空间中。
PMIO(Port-Mapped Input/Output)
用一些ISAs(Industrial Standard Architecture)引入特殊指令来与外设进行通信。
比如x86-64 的 in/out指令。
外设寄存器没有映射到主存上,通过使用指令查询端口进行访问
IRQs(Interrupt Requests)
外设发起中断信号,通知cpu发生事件。
其概念和OS接收到中断后保存上下文转去处理中断事件一致。
DMA(Direct Memory Access)
允许外设独立于CPU在其他外设和主存直接传输数据。
就是你CPU在干某件事情的同时,使用DMA通信的设备可以操作主存或和其他外设交互。并发!
iot固件类型分类
分成三种型号。
- I型 基于通用目的操作系统的设备。通常带有linux内核,有轻量的用户空间环境(busybox、uClibc),与硬件交互通常经过驱动程序。
- II型 基于嵌入式操作系统的设备(该操作系统比较低级,没有内存管理单元等高处理器特性,当然主要原因是硬件资源不足 直接上大的操作系统跑不起来),但是仍然存在用户态和内核态的隔离,比如VxWorks、ZephyrOS。常常用于单用途的电子设备,比如DVD播放器和LTE调整解调器。
- III型 不具备操作系统抽象的设备,采用所谓”monolithic firmware”,一个固件直接负责和硬件交互,执行cpu运行逻辑。其操作通常采用一个控制循环+外设触发中断以处理外部事件 , 固件可以完全定制。
iot面临的风险攻击
硬件层面
- 调试接口攻击。 固件开发肯定是需要调试的,如果设备发布后,员工忘记封闭接口了,攻击人员可以直接通过接口来获得高权限root
- flash芯片的攻击,flash芯片通常存了固件,如果芯片没有设置读写保护,可以直接读取固件并修改固件来绕过认证。
- 测信道分析攻击, 采用设备的硬件特征泄露来提取被处理数据的信息,并利用这些信息推断出设备上的敏感信息。
- 节点复制攻击 相当于中间人攻击
系统层面
- 固件修改攻击 顾名思义
- 固件恶意软件 也顾名思义
- 操作系统层面 指一般嵌入式的内核班长都比较低级,可以通过搜索cve 搜索已知exp实现快速进攻。
应用软件层面
- 后门 不用多说了
- 第三方代码库复用 懂得都懂
- 厂商定制代码 为了适配不同的架构,厂商需要对不同的架构做大量的开发工作(适配第三方库,厂商自主开发模块 etc) 开发人员安全意识不足,导致代码设计的安全缺陷
网络服务层面
- 远程管理接口不安全 弱口令,密码可以被爆破 etc
- 外设协议(针对协议比如 ZigBee 发起攻击)
- 通信协议方面 DDos攻击等等
- 暴力搜索攻击 端口扫描+爆破
- phantom设备攻击 中间人攻击(不知道为什么要起奇奇怪怪的名字)
iot分析一般步骤
设备固件获取
一般可以通过 UART(Universal Asynchronous Receiver/Transmitter) 或 JTAG(Joint Test Action Group)接口读取固件,或者也可以去官网
查找固件版本。
还可以用中间人攻击截获更新固件的流程来获得固件。
固件自动化解析
当前,基本上只能模仿I型固件,II型固件和III型固件比较难用。
设备固件安全分析技术的研究
安全分析技术,就是在拥有固件且可以模拟运行的情况下,实行的用于自动化挖漏洞的方法。
静态分析
静态分析是当前非常流行(2022-11-15记录)的技术,其主要思想是模拟人看代码的过程,分析程序运行的流程,形成一个结果(比如cfg 交叉引用 函数调用图 等等)
在此基础上,出现了符号执行(虚拟机模拟执行程序流程,用z3引擎求解到达路径的输入) 和 fuzz(通过一个种子生成随机输入,喂到程序中,fuzz会记录引发crash的输入) 等当下十分流行的技术。
值得一提的是,当前学术界内,关于 静态分析、符号执行、fuzz的 iot安全相关的论文 数量是非常多的(懂得都懂),但是实际上有没有用,我也不知道。
动态分析
动态分析一般都是人手动对设备进行调试。