固件渗透的攻防之路

IoT 2年前 (2022) admin
736 0 0

1. 固件介绍

1. 常见系统

嵌入式linux 

日益流行的Linux操作系统进行裁剪修改,使之能在嵌入式计算机系统上运行的操作系统

Vxworks
美国风河(WindRiver)公司于1983年设计开发的一种嵌入式实时操作系统(RTOS)

pSoS
主要应用领域是远程通信,航天,信息家电和工业控制。但该公司已经被风河公司(windriver)兼并,从VxWorks5.5开始,已将PSOS的主要特点融入VxWorks中
Palm OS
Palm OS是一种32 bit的嵌入式操作系统,广泛应用于移动终端设备
uC/OS
专门为计算机的嵌入式应用设计的 CPU 硬件相关部分是用汇编语言编写的 总量约200行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的CPU 上

Windows CE
Windows CE是微软公司嵌入式、移动计算平台的基础,它是一个开放的、可升级的32 bit嵌入式操作系统,是基于掌上型电脑类的电子设备操作系统

2. 固件分类

开源固件
Openwrt
ddwrt
Merlin
闭源固件
各个厂家不公开


固件结构
BootLoader:启动
Kernel:内核
Rootfs:文件系统
Config:配置
Bootloader
在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境

常见版本:
U-Boot , Redboot , ARMboot , Blob , Bios-lt , Bootldr , vivi
Kernel
内核,BootLoader启动后会加载内核,内核会初始化系统环境,加载文件系统,然后启动系统进程用户进程,设置系统时钟等等操作,由此设备就能正常运行。

内核版本:
命名方式为:主版本号、此版本号、序列号,2.6版本以前,次版本号是偶数为稳定版本,奇数为开发版本,如下:
Linux 2.4.x ---稳定内核版本
Linux 2.5.x ---实验(开发)内核版本
查看内核版本:
进入Shell之后,查看/proc/version就能知道版本。
有的路由器,只有一个Kernel,没有后续的用户进程,所有的操作都在Kernel里面。

固件渗透的攻防之路

Rootfs
文件系统,是操作系统的重要组成部分,是操作运行的基础。不同的路由器使用的文件系统格式不尽相同。根文件系统会被打包成当前路由器所使用的文件系统格式,然后组装到固件中。

常见文件系统:
Ext2 , Ext3 , Ext4 , ReiserFS , JFFS2 , Cramfs , Squashfs , UBI …
一般一个文件系统包含:
/bin:存放常用程序 , /etc:存放设置信息
/lib:存放so库文件 , /dev:设备信息
/proc:内核,进程,硬件信息, usr:存放常用用户程序 ......
config
配置,用于存放可修改的设置,一般是加密的或以一定格式存放的数据。
解密后一般以key=value的方式存储,如下
原始配置

固件渗透的攻防之路

解密后的配置

固件渗透的攻防之路

3. 固件解包

binwalk — 通过固件文件头来分析文件和文件系统, 会分析二进制文件中可能的固件头或者文件系统,然后输出识别出的每个部分以及对应的偏移量。

固件渗透的攻防之路

binwalk能够识别常见的几种文件系统,偶尔会碰到解不开的固件,主要有两种情况:

1.没有文件系统
一般就说明这款设备只有一个程序来控制,也就是只有kernel,由它完成设备所有的操作,那么就直接分析它就行了。
2.加密的固件
如果分析后确定它并不是kernel,逆向后没有发现对应的正常的汇编代码显示,那么可以确定固件被加密了.如果能够找到方法解密,解密后再用binwalk解包。
加密的固件首先得解密,一般有3种方法:

1. 能够根据经验看出其是如何加密的,由于性能限制,一般路由器不会使用太复杂的加密算法,简单异或…

固件渗透的攻防之路

2. 使用串口或Jtag等硬件调试的方法,设备启动完成后,能够拿到shell,通过命令传出所有文件;或者能dump出固件在内存的表现形式。

固件渗透的攻防之路

3. 互联网上搜索同类型设备的解密方法

固件渗透的攻防之路

2. 固件获取方式

获取固件常用的6种方法

1. 官网或联系厂家获取升级固件
一般情况下,可以到官方网站找到官网上下载不到旧版的固件,利用搜索引擎搜索可以联系厂家获取

固件渗透的攻防之路

固件渗透的攻防之路

2. 在线升级,抓包获取下载地址
有的设备的后台管理,自带检查升级功能,我们只需要把设备放在一个有流量镜像功能的路由器/交换机下,点升级的时候,把流量捕获出来就行。
有的设备的厂家会提供电脑端升级包,在升级的时候,用wireshark捕获升级流量。
当然,分析这些升级流量的条件是明文的请求才行,要不然得想其他方法。

固件渗透的攻防之路

3. 通过自带的telnet、ssh等使用管理员用户(root)登录,获取目录及文件
拿到shell了,也就能输入命令。能输入命令,就能看到Flash的布局,最终对应dev的区块,把数据给回传回来。当然也可以直接传输把显示的所有目录传回来。

固件渗透的攻防之路

4. 通过硬件调试串口,进入uboot或拿到shell后读取内存
方式一:通过自带Uboot,一般Uboot里面会带有内存操作的命令,如md,那么就可以用md把一些地址的内存给显示在屏幕上,最后经过整理,还原为实际的二进制数据,得到的就是固件了。
方式二:一般能够串口调试,就能拿到shell了,那么就跟telnet一样了,就可以把目录文件都传出来了。

固件渗透的攻防之路

固件渗透的攻防之路

5. 通过硬件调试JTAG接口,利用调试工具读取内存

固件渗透的攻防之路

6. 拆Flash芯片,用编程器读取固件

固件渗透的攻防之路

固件渗透的攻防之路

引脚定义

VCC:电源正极
GND:电源地
TXD:数据发送
RXD:数据接收
一般电路板上会有连续4个 或4个以上接触点的地方,很有可能就是串口了。

固件渗透的攻防之路

1、有标识
注意路由器的RXD与转换线的TXD连接,路由器的TXD与转换线的RXD连接,GND接GND,VCC一般不用连接。

固件渗透的攻防之路

固件渗透的攻防之路

2、无标识
1.首先找GND,这是最容易的,公共地与它相连,电路板的裸露的大面积的导体一般就是公共地,如果不好确定,可以找电源的地,这个在适配器上会详细标明,找到插在电路板上的那一端就能找到地。
2.找TXD,当路由器启动的时候,一般会向串口发送数据,如果发现有一个引脚,一段时间在3.3V,一段时间又突然降到2.8V或更低,这样电压有个大的波动的情况的引脚,就很有可能是TXD。

3.找VCC,确定GND和TXD后,我们可以确定其他的引脚可能是VCC或RXD

如果这两个引脚的电压一个是3.3V,另一个是3.3V以下,那么3.3V这个就很有可能是VCC,另一个则是RXD。

如果这两个引脚的电压都是3.3V,那么不用着急,你可以连上转接线后测试下,按照一种方式接后有回显那就是对的,否则就反个方向就行了。

固件渗透的攻防之路

固件渗透的攻防之路

3. 通过硬件调试的方法绕过密码验证拿到权限

实验
串口登陆需要密码

固件渗透的攻防之路

固件渗透的攻防之路

jtag

固件渗透的攻防之路

uart

固件渗透的攻防之路

原理

固件渗透的攻防之路

1.改这个地方,为了绕过密码长度和密码匹配验证,提示错误也可以进入下一步;

固件渗透的攻防之路

2.改这个地方,为了让提示错误的时候也能绕过最终验证。

固件渗透的攻防之路

固件渗透的攻防之路

固件渗透的攻防之路

扫码关注

原文始发于微信公众号(Day1安全团队):固件渗透的攻防之路

版权声明:admin 发表于 2022年8月25日 上午9:01。
转载请注明:固件渗透的攻防之路 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...