基本知识-固件逆向-未完成

摘要: 未整理和的零碎知识

一 固件提取

转自https://www.cnblogs.com/xiaoyehack/

基本知识

1.1 芯片:

功能:存储硬件系统的固件

分类:

ROMread only memory)芯片:分类:ROMPROMEEPROMFLASH-ROM,其中FLASH-ROM是大部分IOT产品的存储器,可通过读取flash芯片提取固件

Flash芯片:

读写:在单电压下,利用专用的刷新程序进行读写操作,以Byte为最小单位写入,以sector(即block)为最小单位删除

存储容量:512K-8M Kbit

作用:存放程序代码

根据技术分类:IIC EEPROMSPI NorFlash CFI FlashParallel NandFlashSPI NandFlasheMMC FlashUSF2.0 等,其中,Parallel NandFlash较适合嵌入式系统,市场占有率高

SPI NorFlash

特性:接口简单、引脚少、易于连接、可在芯片上直接运行代码等

型号:S25FL128MX25L1605W25Q64

封装:SOP8SOP16WSON8US0N8QFN8BGA24 

RAM等其他

芯片印字:芯片上可能印有厂商、芯片型号等

1.2    编程器

功能:读取、编程/烧录Flash芯片,又称烧录器、写入器、写码器等,

分类:

并口多功能BIOS编程器:

可以对 EPROM27系列)、EEPROM28系列)、FLASH ROM293949系列)及单片机、串行芯片等进行读写、编程

1.3    串口通信

功能:串口按位bit发送和接收字节,可以在使用一根线发送数据的同时用另一根线接收数据

协议分类:

RS-232:通信方式允许简单连接三线:TxRx和地线。但是对于数据传输,双方必须对数据定时采用使用相同的波特率。

RS-422:标准全称是“平衡电压数字接口电路的电气特性”,在 RS-232 后推出,使用 TTL 差动电平表示逻辑,就是两根的电压差表示逻辑,RS-422 定义为全双工的,所以最少要4根通信线(一般额外地多一根地线)。

RS-485RS485是一个定义平衡数字多点系统中的驱动器和接收器的电气特性的标准,RS-485 RS-422 的区别在于RS-485为半双工通信方式, RS-422 为全双工方式。 RS-422 用两对平衡差分信号线分别用于发送和接收,所以采用 RS-422 接口通信时最少需要4根线。RS-485 只用一对平衡差分信号线,不能同时发送和接收,最少只需两根连线。

SPI:外设接口Serial Peripheral Interface,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为 PCB 的布局上节省空间,提供方便,正是出于这种简单易用的特性,如今越来越多的芯片集成了这种通信协议,比如 AT91RM9200

I2C:集成电路总线Inter-Integrated Circuit,由飞利浦半导体公司在八十年代初设计出来的一种简单、双向、二线制、同步串行总线,主要是用来连接整体电路(ICS) IIC 是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实时数据传输的控制源。这种方式简化了信号传输总线接口。

1.4信号分析

分类:

示波器:

功能:把电信号转化为图像,分析电路结构,找到待测的引脚和信号源,分析其信号变化和具体的信号形式,得到模拟信号和经过外部AD转换信号的波形图

逻辑分析仪:

功能:以总线(多线)概念为基础,同时对多条数据线上的数据流进行观察和测试的仪器,这种仪器对复杂的数字系统的测试和分析十分有效。逻辑分析仪是利用时钟从测试设备上采集和显示数字信号的仪器,最主要作用在于时序判定。由于逻辑分析仪不像示波器那样有许多电压等级,通常只显示两个电压(逻辑 1  0 ),因此设定了参考电压后,逻辑分析仪将被测信号通过比较器进行判定,高于参考电压者为 High ,低于参考电压者为 Low,在 High  Low 之间形成数字波形。通过连接待测设备的接口,分析其中通信数据,通过协议转码,可以得到具体的16进制数据

固件提取

2.1 直接读取:

将导线连接到芯片的引脚,通过飞线连接编程器进程在线读取固件

通过夹具夹住芯片引脚,连接编程器(如RT809F串行ISP编程器)读取芯片内容。(引脚顺序问题)

打开编程器对应软件,通过智能识别芯片ID即可开始读取固件

如无法识别,可尝试相似型号

固件保存为BIN格式文件

2.2   离线读取:将芯片拆焊下来,通过烧录座编程器,离线读取固件

 固件分析

转自:朱瑞瑾.ARM设备固件装载基址定位的研究.2016.北京理工大学博士学位论文

待补充内容:

协议相关

闫小勇.二进制私有协议逆向关键技术研究与实现.2018.战略支援部队信息工程大学硕士学位论文

反汇编原理相关

胡刚.固件逆向分析关键技术研究.2011.解放军信息工程大学.硕士学位论文

蒋烈辉.固件逆向分析关键技术研究.2007.解放军信息工程大学.博士学位论文

动态调试

刘涛.基于动态二进制翻译的逆向调试器的设计与实现.2008.西安电子科技大学.硕士学位论文

其他

鲍庆国.嵌入式设备固件分析关键技术研究.2016.北京工业大学.硕士学位论文

未完待续

基本知识

1.1   固件分析的目的:

监测病毒和恶意软件

测试加密算法安全性

测试DRM和版权保护

审计软件安全

1.2 固件分析应用场景:

分析固件是否感染恶意软件

分析是否存在漏洞:是否存在后门

进行数字取证:通过逆向工程获取加密算法甚至是密钥以解密存储介质上的加密数据;判断对手是否存在抄袭算法或专利侵权的行为

分析工业控制系统中固件的安全性

1.3 反汇编:把机器码翻译成便于阅读的汇编代码

静态反汇编:将可执行文件根据对应指令转化为汇编代码,但不执行该文件

特点:

一次可处理多个文件

反汇编时间只和文件大小有关系

分类:

线性扫描

递归遍历

工具:

IDA Pro

动态反汇编:在可执行文件的执行过程中监控执行过程进而识别出执行的指令

特点:

一次只能处理程序的一部分

反汇编时间和执行过程中的指令数目有关系

工具:

OllyDBG

固件逆向

2.1 固件逆向的一般过程(2013 Basnight等):

  • 固件获取
  • 二进制分析
    • 人工检查
    • 二进制对比
    • 文件系统分析
  • 反汇编
    •  判定处理器
    • 识别二进制函数
    • 判定基址
    • 检查字符串
    • 重建符号名
  • 固件验证方法
    • 黑盒测试
    • 反汇编分析
    • 硬件调试

针对以上流程的补充(论文作者):

获取固件镜像:

从厂商获得固件更新,还可能获得固件上载程序、固件文件系统、boot loader

对配套的PC端程序进行逆向工程以发现隐藏命令,或使用USB命令检测软件来检测发送的命令以发现隐藏命令

使用设备上的UART接口(需要通过识别UART针脚来识别非标准端口),向设备发送特定的命令转储(dump)出固件

从设备上直接读取Flash,此方法需要把芯片从主板拆焊下来

识别固件的文件系统

对固件进行解压

判定嵌入式操作系统:通过识别固件中开发者或操作系统版权字符串

获取固件运行环境处理器的类型

常见的机器码识别处理器架构

查阅产品手册

拆解设备

对固件进行反汇编猜测处理器类型

获取固件装载基址

如果固件文件为常见的二进制文件结构:如ELFExecutable and Linkable Foramt,反汇编器能实现自动化反汇编,识别大多数额二进制函数

如果固件文件为原始的二进制文件raw binary:需人工设置固件的装载基址辅助反汇编器

固件分析

黑盒测试:分析常见的校验算法以及攻击固件的更新方法

反汇编分析:识别出验证过程相关字符串和二进制数

硬件调试:可建立与PLC设备的物理连接,直接访问设备内存

2.2 案例分析:

案例一:一次逆向过程(2013 Ang Cui等):

(辣鸡编辑器)

案例二:2009 Peck等人àAllen-Bradley ControlLogix以太网网卡:

从设备厂商网站下载目标网卡的多个版本的固件样本

人工检查二进制文件,通过比较多个版本的固件以寻找并识别固件中不同的段,使用工具Deezee发现一个zlib压缩的节,通过其中的符号表来人工推理出固件的装载基址

使用IDA Pro反汇编固件代码,读取符号表对反汇编结果中的二进制函数进行重命名

通过搜索二进制函数名发现一个函数nv_RamValidateChecksumWriteFlash并确定此函数的功能是计算固件的校验值

对函数进行逆向工程获得固件的校验算法,在网卡固件中增加一段概念验证代码(功能:持续Ping一个IP地址) 且不打断设备的正常操作

使用Rockwell提供的固件编程软件ControlFlash将修改后的固件上传到以太网网卡中

案例三:2011 Ruben Santamarta à Modicon PLC以太网网卡:

从官网下载固件更新包

使用二进制文件编辑器人工检查固件,发现一个zlib压缩的节,解压后通过识别常见指令的机器码可判定处理器类型为PowerPC

用工具IDA Pro加载固件,通过查看固件中的版权字符串信息显示固件是基于VxWorks的,因此IDA Pro不能自动识别固件中所有二进制函数,通过搜索函数序言prologue中常见指令的机器码准确定位二进制函数起始位置

(略……)最后发现固件中的隐藏账户

2.3相关研究:

蒋烈辉.一种基于多为可变描述表的处理器结构和指令指令系统表示模板

采用数据库技术实现处理器结构信息和指令系统的管理,解决了多处理器多指令系统适用性问题

建立适用于指令集类型识别的代码特征模型,设计了代码特征抽取和基于多属性决策技术的指令集识别算法,解决固件逆向工程中遇到的处理器类型不明的问题

2011.胡刚.一种重构中断向量表的启发式算法和一种基于中断向量表的函数调用图提取算法

通过研究中断向量表的在固件代码反汇编中对结构重构和反汇编精度的影响

2012.张平.一个固件操作系统识别框架

解决了固件模块剥离与逆向解析、操作系统类型识别以及内核版本识别问题

崔晨.提高了固件代码静态控制流图恢复的精度

通过查找中断向量表中有效中断向量,获取中断服务子程序的流程控制流信息

未完待续--(第9/110

猜你喜欢

转载自www.cnblogs.com/yeeman/p/11289070.html
今日推荐