作者:独抒@伏宸安全实验室
当我们在分析IOT设备,如智能摄像头、智能门锁、智能路由器等等产品时,采用传统的安全检测手段,如对APP的逆向、云端服务器的渗透测试、产品通信的抓包等方式可以获得部分的信息,但如果需要深入分析智能设备底层的工作原理,从中发现更深层次的安全问题,就不可避免的需要直接接触硬件本身,这也是传统安全手段未能触及的部分,据此,下面简单的谈下关于电路分析和芯片固件提取和调试的一点心得。
在对电路进行分析之前,需要对PCB电路图和电子元器件知识有简单的了解。
PCB( Printed Circuit Board),中文名称为印制电路板,又称印刷线路板,是重要的电子部件,是电子元器件的支撑体,是电子元器件电气连接的载体。由于它是采用电子印刷术制作的,故被称为“印刷”电路板。
电子元件有着不同的封装类型,不同类的元件外形一样,但内部结构及用途是大不一样的,比如TO220封装的元件可能是三极管、可控硅、场效应管、或双二极管。TO-3封装的元件有三极管,集成电路等。二极管也有几种封装,玻璃封装、塑料封装及螺栓封装,二极管品种有稳压二极管、整流二极管、隧道二极管、快恢复二极管、微波二极管、肖特基二极管等,这些二极管都用一种或几种封装。贴片元件由于元件微小有的干脆不印字常用尺寸大多也就几种,所以没有经验的人很难区分,但贴片二极管及有极性贴片电容与其它贴片则很容易区分,有极性贴片元件有一个共同的特点,就是极性标志。对于元件识别可以看印字型号来区别,对于元件上没有字符的器件也可分析电路原理或用万用表测量元件参数进行判断。判断元件类型并非一朝一夕就能学会的,这需要多年积累的经验来认识。
在对PCB和电子元器件有一定认知后,就可以开始分析其工作原理和芯片了,常见的IOT产品,一般采用嵌入式linux系统开发,对芯片分析主要目的之一就是获取到硬件系统的固件,从固件中分析可能存在的安全风险。
固件一般存储在ROM中,ROM是只读存储器(Read-Only Memory)的简称,是一种只能读出事先所存数据的固态半导体存储器。其特性是一旦储存资料就无法再将之改变或删除。通常用在不需经常变更资料的电子或电脑系统中,并且资料不会因为电源关闭而消失。
常见的存储芯片按照存储读取方式和制作工艺不同,可以分为: ROM、PROM、EPROM、EEPROM、FLASH-ROM。
在大部分IOT产品中多采用flash芯片作为存储器,提取固件主要也是通过读取flash芯片。
FLASH ROM属于真正的单电压芯片,在使用上很类似EEPROM,因此,有些书籍上便把FLASH ROM作为EEPROM的一种。事实上,二者还是有差别的。FLASH ROM在擦除时,也要执行专用的刷新程序,但是在删除资料时,并非以Byte为基本单位,而是以Sector(又称Block)为最小单位,Sector 的大小随厂商的不同而有所不同;只有在写入时,才以Byte为最小单位写入;FLASH ROM芯片的读和写操作都是在单电压下进行,不需跳线,只利用专用程序即可方便地修改其内容;FLASH ROM的存储容量普遍大于EEPROM,约为512K到至8M KBit,由于大批量生产,价格也比较合适,很适合用来存放程序码,近年来已逐渐取代了EEPROM,广泛用于主板的BIOS ROM,也是CIH攻击的主要目标。
根据技术方式不同可分为: IIC EEPROM、SPI NorFlash 、CFI Flash、Parallel NandFlash、SPI NandFlash、eMMC Flash、USF2.0等。
其中SPI NorFlash因为接口简单,使用的引脚少,易于连接,操作方便,并且可以在芯片上直接运行代码,其稳定性出色,传输速率高,在小容量时具有很高的性价比,这使其很适合应于嵌入式系统中作为 FLASH ROM,所以在市场的占用率非常高。
我们通常见到的S25FL128、MX25L1605、W25Q64等型号都是SPI NorFlash,其常见的封装多为SOP8,SOP16,WSON8,US0N8,QFN8、BGA24等。
一般PCB上有多块逻辑处理IC,在多个IC芯片中,可以通过分析电路原理和查找芯片印字来确定具体的存储芯片。
芯片上的丝印大多数情况会注明厂商和芯片型号,通过印字可以初步确定芯片类型,同时丝印层的文字也可以帮助我们来确定存储的格式和大小,常见的W25芯片的印字含义如下:
读取Flash芯片,需要借助编程器,编程器又称烧录器、写入器、写码器,是专门用来对IC芯片进行读写、编程/烧录的仪器。
并口多功能BIOS编程器,它可以对EPROM(27系列芯片)、EEPROM(28系列芯片)、FLASH ROM(29、39、49系列芯片)及单片机、串行芯片等进行读写、编程,是一种性价比较高的编程器。
编程器种类多样,从功能简单的专用型到功能全面的全功能通用型都有,价格从几十元到上万元不等。
串口通信指串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。在串口通信中,常用的协议包括RS-232、RS-422和RS-485。
RS-232通信方式允许简单连接三线:Tx、Rx和地线。但是对于数据传输,双方必须对数据定时采用使用相同的波特率。
RS-422标准全称是“平衡电压数字接口电路的电气特性”,在RS232后推出,使用TTL差动电平表示逻辑,就是两根的电压差表示逻辑,RS422定义为全双工的,所以最少要4根通信线(一般额外地多一根地线)。
RS485是一个定义平衡数字多点系统中的驱动器和接收器的电气特性的标准,RS-485与RS-422的区别在于RS-485为半双工通信方式,RS-422为全双工方式。RS-422用两对平衡差分信号线分别用于发送和接收,所以采用RS-422接口通信时最少需要4根线。RS-485只用一对平衡差分信号线,不能同时发送和接收,最少只需两根连线。
通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种异步收发传输器,是电脑硬件的一部分。它将要传输的资料在串行通信与并行通信之间加以转换。作为把并行输入信号转成串行输出信号的芯片,UART通常被集成于其他通讯接口的连结上。
对于物联网硬件的串口调试,多数情况下指的就是通过UART串口进行数据通讯, 但是我们经常搞不清楚它和COM口的区别, 以及RS232, TTL等关系, 实际上UART、COM指的物理接口形式(硬件), 而TTL、RS-232是指的电平标准(电信号).
UART有4个pin(VCC, GND, RX, TX), 用的TTL电平, 低电平为0(0V)、高电平为1(3.3V或以上),Uart串口的RXD、TXD等一般直接与处理器芯片的引脚相连,而RS232串口的RXD、TXD等一般需要经过电平转换(通常由Max232等芯片进行电平转换)才能接到处理器芯片的引脚上,否则这么高的电压很可能会把芯片烧坏。
在调试的时候, 多数情况下我们只引出rx、tx、gnd即可,但是UART的数据要传到电脑上分析就要匹配电脑的接口,通常我们电脑使用接口有COM口和USB口(最终在电脑上是一个虚拟的COM口),但是要想连上这两种接口都要需要进行硬件接口转换和电平转换。
对于一台未接触过的机器,拆解首先需要观察其外部结构,是否存在暴露的螺丝孔,如果没有,一般可能隐藏在贴纸或橡胶垫下面,可以用手感受是否存在空洞,部分机器采用卡榫结构,只要找对方向,用一字螺丝刀或撬片,从缝隙中就可以撬开,拆解设备唯一的要诀就是胆大心细。部分常用工具如下:
维修组合套装,用来拆装各类螺丝,PCB夹用来拔出排线,手电筒用来观察芯片印字和PCB走线,PCB测试夹用来夹住某些难以焊接的焊点,排线用来连接各类电子设备,热风枪和焊枪用来拆焊和锡焊。
共享充电宝,采用gprs模块配合物联卡与云端通信
蓝牙挂锁,通过蓝牙芯片与手机配对通信,蓝牙控制电机驱动,使卡锁运转
共享充电宝,采用GSM模块加蓝牙模块控制通信
智能锁,WIFI芯片加蓝牙芯片配合控制,外接指纹识别传感器
智能摄像头,采用WIFI芯片通信,外接音频、视频处理模块
网络摄像机,采用网卡芯片,配合多口输出输入视频信号模块
智能路由器,高容量内存搭配智能OS
智能家居控制终端,高性能WIFI收发中继控制
智能保险柜,采用WIFI芯片控制加指纹识别传感器
无线终端,采用4G模块和WIFI芯片,做便携式WIFI终端
为了读取Flash芯片的内容,有以下三个基本途径:
(1)直接将导线连接到芯片的引脚,在通过导线连接编程器读取固件;
(2)把芯片拆下来,在连接编程器读取固件。
(3)连接TXD、RXD调试PIN,通过UART串口转接读取固件。
根据Flash芯片的封装方式和电路设计不同,需要灵活采用不同的方式。
中国通信协会相关文献 http://www.china-cic.cn/
美国电子工业协会相关标准 https://www.eia.gov/