VxWorks固件分析

VxWorks 操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),是嵌入式开发环境的关键组成部分。

介绍

VxWorks 操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),是嵌入式开发环境的关键组成部分。

固件分析

固件提取的常用方式是使用binwalk工具进行分析和提取。

提取

Binwalk分析,该固件内嵌一个使用lzma压缩的二进制数据。

VxWorks Firmware Analysis

解压

可采用lzma命令或者binwalkh指令解压缩

  • lzma

VxWorks Firmware Analysis

  • binwalk

VxWorks Firmware Analysis

该文件就是我们需要分析的VxWorks固件。

固件加载地址

首先需要查找VxWorks系统固件加载地址,否则系统将无法运行。加载地址将影响后面一些绝对地址的引用比如函数表及字符串的引用。

查看设备架构

  • ARM

VxWorks Firmware Analysis

IDA分析

  • 选择ARM/little VxWorks Firmware Analysis

  • 基地址为0 VxWorks Firmware Analysis

VxWorks采用usrInit进行栈初始化,usrInit是VxWorks系统引导后运行的第一个函数。

VxWorks Firmware Analysis

LDR R0,=0x40205000
BIC R0,R0,#3
SUB RO,RO,#4
MOV SP,RO #栈执政赋值 R0=$sp+0 

可知加载的基地址为0x40205000

利用符号表修复函数名

Bzero是VxWorks中一个函数,系统启动过程中会使用bzero函数对bss区的数据进行清零,因此可以利用”grep -r bzero”查找bzero函数。

$ grep -r bzero

VxWorks Firmware Analysis

  • memset

VxWorks Firmware Analysis

手动定位

符号表

VxWorks Firmware Analysis

00 05 1B 29 00 00 34 E4

文件大小和符号表大小

8字节之后就是符号表

00 00 34 E4 => 13540(10进制)

8 + 8 * 13540 = 108328(符号表偏移)->符号表位置

VxWorks Firmware Analysis

函数符号偏移

54 00 00 00 40 37 36 84

类型(函数) 54

符号表偏移 00 00 00 -> 0

内存中的偏移 40 37 36 84

函数名称 AES_CMAC

VxHunter工具修复

自动修复函数名

VxWorks Firmware Analysis

该工具自动识别函数符号

VxWorks Firmware Analysis

项目地址:

https://github.com/PAGalaxyLab/vxhunter.git

总结

VxWorks固件分析,主要从内存加载地址及符号表入手,修改符号表与确定内存加载地址,对后续的漏洞挖掘起到至关重要的作用。