物理网安全-文件系统

简介: 物理网安全-文件系统

接口识别/调试


工具:SDR、万用表、烙铁、热风枪、烧录座等等,土豪可以再买个示波器、电子显微镜;一些使用的命令行级别的工具,如file、hexdump、strings、dd、lzma、7z等

接口有UART、JTAG、I2C、SPI等


UART(通用异步接收器发送器)


通用异步收发传输器(Universal Asynchronous Receiver/Transmitter,通常称作UART) 是一种串行异步收发协议,可将要传输的数据在串行通信与并行通信之间加以转换,应用较为广泛;

UART是一种硬件组件,允许两个硬件外围设备之间的异步串行通信。它们可以位于同一块电路板上,也可以位于两个不同的设备之间,可以允许通过串行读取/写入设备;

UART主要是用于主机与辅助设备之间通信,如:音响and外接ap之间;

数据包:

数据包由以下几个部分组成:

1、起始位:表示传输数据开始。通常是低脉冲(0),可以在逻辑分析仪中查看。

2、消息:要以八位格式传输的实际消息,如:传输值为A(十六进制-0X41),在消息中被传递为0、1、0、0、0、0、0、和1。

3、奇偶校验位:根据情况,大多数现实生活中无关紧要,设备都是未使用校验位。奇偶校验位用于通过计算消息中1或0的数量,来执行错误和数据损坏的检查,并根据奇校验和偶校验来表明数据传输是否正确。注:校验位仅用于数据损坏检查和验证,而不用于实际校验。

4、停止位:表示结束的标志。通常是高脉冲(1)实现,但也可以由多个高脉冲实现。

大多数设备都是使用8N1配置,此配置代表8个数据位、无验证位、有一个停止位。

在分析的时候也会用到一些设备,逻辑分析仪;

逻辑分析仪是一种可以显示数字电路中各种信号的电平的设备。

如:Salesa逻辑分析仪、Open Workbench逻辑分析仪等

 

为了方便调试,很多iot的设备都会把UART引脚引到PCB上,

 

上图标注的四个就是UART的四个引脚位置, 每个引脚都是有自己的作用;

VCC:供电引脚,通常电压为3.3-5V,如设备没有供电保护,这个引脚一般不接电源,通过转接口进行供电,相对安全一些;

GND:接地引脚,表示负极;

Rx:接收引脚,从另一端接收数据至设备;

Tx:发送引脚,将数据从设备传输到另一端;

注:通过对芯片具有不同功能的引脚输入不同的高低电平,完全对主设备的控制和调试;


JTAG 介绍


JTAG属于微控制器调试接口。微控制器具有在运行期间使用指定引脚进行调试的规定,这些引脚连接到电路板上的引脚。这些引脚(端口)由开发人员和设计人员用于调试,读/写固件和微控制器内部存储器,生产后控制/测试微控制器引脚。这使得调试端口成为最关键的攻击面之一,因为它为攻击者提供了强大的功能和访问权限。除了JTAG之外,还包括cJTAG、SWD。

TAP包含5个信号接口:

1、TCK:为TAK操作提供一个独立的基本的时钟信号

2、TMS:用来控制TAP状态机的转换

3、TDI:是JTAG指令和数据的串行输入端。

4、TDO:是JTAG指令和数据的串行输出端

5、TRST:是JTAG电路的负位输入信号,低电平有效

注:TAP控制器共有16种状态。

JTAG提供多种接口标准,常见的有10针、14针、16针、20针

注:除了这两种还有一些其它的可以参考我以前的文章;


调试UART


方法大同小异,不在此阐述;

参考链接:https://mp.weixin.qq.com/s?__biz=MjM5NTc2MDYxMw==&mid=2458297913&idx=1&sn=7a62e83aeb03466e113fd9cbdee7b024&chksm=b18196b386f61fa510f01f7605d3446145dedac15e9891ab3ab5ae9ac9c0c109fbaece62dbd6&scene=27


文件系统


我们将固件逆向以查看其内部组件。固件中的内部组件包括 boot-loader、内核、文件系统以及其他内容。其中我们最感兴趣的是文件系统也是作为突破口的地方,因为文件系统中保存了我们需要的所有信息;

固件是一个二进制文件压缩包,而文件系统只是其中的一个组件,存储在二进制文件的特定偏移地址中,且具有一定的尺寸。然而,此时我们还不知道关于固件中文件系统的任何信息,包括其偏移量和尺寸。为了找到这些信息,需要使用 hexdump 和 grep 等工具来搜索我们所关注内容的特征信息;


SquashFS文件系统


简述


SquashFS是一套供linux内核使用的只读压缩文件系统,压缩率高,遵循GPL开源协议;

对于iot等嵌入式设备来讲,使用SquashFS可以降低成本;

使用NAND闪存作为存储介质的嵌入式设备中,使用SquashFS前提是内核要支持SquashFS,同时还要支持MTD字符设备和块设备;

SquashFS适用于长时间开机的设备且对稳定性要求较高的,所以物联网设备多采用SquashFS;


特点


· 数据(data),节点(inode)和目录(directories)都被压缩

· 保存了全部的 32 位 UID/GIDS 和文件的创建时间

· 最大支持 4G 文件系统

· 检测并删除重复文件


标准


标准固件大端序模式为sqsh,标准固件小端序模式为hsqs,LZMA压缩下的大端序模式为sqlz,3.3版本的Squashfs文件系统在LZMA压缩下的大端序模式为qshs,部分非标准固件小端序模式为shsq,DD-WRT固件小端序模式为hsqt,DD-WRT固件大端序模式为tqsh;


SquashFS文件系统判断


binwalk DVRF_v03.bin

 

项目地址:https://github.com/ReFirmLabs/binwalk

工具获取:https://www.123pan.com/s/s0u0Vv-XgRwd提取码:1JsH


JFFS2 文件系统


简述


JFFS2 是 RedHat David Woodhouse 在 JFFS 基础上改进的文件系统,是用于微型嵌入式设备的原始闪存芯片的实际文件系统。。


文件头标识


JFFS2文件系统通常使用"0x1985"作为头部特征标识符;


结构


JFFS2在闪存介质上存在两种类型的结构(jffs2_raw_inode和jffs2_raw_dirent),jffs2_raw_inode包含文件的管理数据,jffs2_raw_dirent用于描述文件在文件系统中的位置;

真正的数据存储在jffs2_raw_inode节点的后面,大部分的数据都是在系统挂载之后建立起来的;这两种类型的结构由公共的文件头结构,jffs2_unknown_node;

jffs2_unknown_node结构中,有一个jint32_t类型和hdr_crc变量,代表了文件头部中其他字段的CRC(循环沉余效验)值;

JFFS2是使用CRC来验证存储数据的正确性的;


特点


· 优点使用了压缩的文件格式。最重要的特性是可读写操作。

· 缺点JFFS2 文件系统挂载时需要扫描整个 JFFS2 文件系统,因此当 JFFS2 文件系统分区增大时,挂载时间也会相应的变长。使用 JFFS2 格式可能带来少量的 Flash 空间的浪费。这主要是由于日志文件的过度开销和用于回收系统的无用存储单元,浪费的空间大小大致是若干个数据段。JFFS2 的另一缺点是当文件系统已满或接近满时, JFFS2 运行速度会迅速降低。这是因为垃圾收集的问题。


加载步骤


· 步骤 1. 扫描整个芯片,对日志节点进行校验,并且将日志节点全部装入内存缓存。

· 步骤 2. 对所有日志节点进行整理,抽取有效的节点并整理出文件目录信息。

· 步骤 3. 找出文件系统中无效节点并且将它们删除。

· 步骤 4. 最后整理内存中的信息,将加载到缓存中的无效节点释放。


注:


因为JFFS2是一种日志文件系统,所以不论电源以那种方式在任何时间停止供电,JFFS2都可以保持数据的文章性;

当系统因为突然掉电重启时候,JFFS2会自动将系统恢复到掉电前的一个稳定状态(文件系统在稳定状态之后的改变将无法进行恢复);

JFFS2针对NOR闪存和NAND闪存设备都提供了掉电保护功能,这可以使用户的数据更加稳定和安全,不用担心数据因为断点丢失和无法恢复;

所以嵌入式系统很适合使用这两种闪存介质;


YAFFS2 文件系统


简述


 yaffs2 是专门为 NAND Flash 设计的嵌入式文件系统。它采用的是日志结构的文件系统,提供了损耗平衡和掉电保护,可以有效地避免意外掉电对文件系统一致性和完整性的影响。

YAFFS2(Yet Another Flash File System)闪存文件系统,是唯一一个专为NAND闪存设计的文件系统;

YAFFS2使用独立的日志文件来跟踪文件系统内容的变化;

YAFFS有两个版本:YAFFS和YAFFS2;

§ YAFFS只支持页面大小为512B(小页)的NADN闪存

§ YAFFS2是YAFFS的升级版本,向下兼容NADN闪存的情况下,也能很好的支持页面大小为2KB(大页)的NADN闪存;

当系统掉电重启后,YAFFS2和JFFS2不同,YAFFS2不像JFFS2那样使用旧文件对新文件进行覆盖,YAFFS2针对已写入的部分使用新的文件,针对未写入的部分使用旧的文件;

这个方式增强掉电时未写入文件的安全性能,在写入新文件时,不会因为掉电而导致文件丢失等,而是把这部分新写入的文件完好的保存;


优缺点


· 优点专门针对 NAND Flash,软件结构得到优化,速度快。使用硬件的 spare area 区域存储文件组织信息,启动时只需扫描组织信息,启动比较快。采用多策略垃圾回收算法,能够提高垃圾回收的效率和公平性,达到损耗平衡的目的。

· 缺点没有采用压缩的文件格式。当包含的内容相同时, yaffs2 镜像文件要比 jffs2 镜像文件大。


USBIFS 文件系统


简述


懒得写了,对不起,555


CramFS 文件系统


头特征


Cramfs文件系统头部特征字符为"0x28cd3d45"


简述


CramFS文件系统是专门针对闪存设计的只读、压缩的文件系统,它不需要一次性地将文件系统中的所有内容解压到RAM中,而是在系统需要访问某个位置的数据时,马上计算出该数据在CramFS中的位置,并将其解压到RAM中,然后通过内存访问来获取数据。也就是说,在使用CramFS时,如果嵌入式设备需要储存暂时性的数据,就必须另外保留一个闪存空间进行储存。

cramfs 是针对 Linux 内核 2.4 之后的版本所设计的一种新型文件系统,使用简单,加载容易,速度快。


优缺点


· 优点将文件数据以压缩形式存储,在需要运行时进行解压缩,能节省 Flash 存储空间

· 缺点由于它存储的文件是压缩的格式,所以文件系统不能直接在 Flash 上运行。同时,文件系统运行时需要解压数据并拷贝至内存中,在一定程度上降低读取效率。另外 cramfs文件系统是只读的。

文件系统手动提取

系统命令

作用

选项

file

用于文件类型识别

-L:查看链接文件

grep

用于查找文件里符合条件的字符串

-i:忽视大小写 -s:不显示错误信息 -a:不忽略二进制数据

hexdump

将二进制文件转换为ASCII、八进制、十进制、十六进制格式进行查看

-C:输出规范的十六进制和ASCII码 -n length:格式化输出文件的前length个字节 -s:从偏移量开始输出

strings

在对象文件或二进制文件中查找可打印的字符串

-n:显示的最少字符数 -a:扫描整个文件

dd

从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出

if=文件名:指定输入文件 of=文件名:指定输出文件 bs=bytes:设置输入/输出块大小为bytes字节 skip=blocks:从输入文件开头跳过blocks个块后再开始复制

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
弹性计算 网络协议 Linux
IPv6访问不通的排查方法
IPv6访问不通的排查方法
IPv6访问不通的排查方法
|
4月前
|
人工智能 自然语言处理 JavaScript
Github又一AI黑科技项目,打造全栈架构,只需一个统一框架?
Motia 是一款现代化后端框架,融合 API 接口、后台任务、事件系统与 AI Agent,支持 JavaScript、TypeScript、Python 多语言协同开发。它提供可视化 Workbench、自动观测追踪、零配置部署等功能,帮助开发者高效构建事件驱动的工作流,显著降低部署与运维成本,提升 AI 项目落地效率。
437 0
|
监控 搜索推荐 数据挖掘
ERP系统中的客户关系管理与客户满意度调查解析
【7月更文挑战第25天】 ERP系统中的客户关系管理与客户满意度调查解析
755 1
|
API 调度 开发者
探索Python中的异步编程:从asyncio到Trio
本文将带你深入Python异步编程的心脏地带,从asyncio的基本概念到Trio的高级特性,我们将一起揭开Python异步编程的神秘面纱,并探讨它们如何改变我们的编程方式。
|
存储
硬盘数据恢复—硬盘出现物理坏道如何妙手回春?
硬盘故障: 硬盘存在物理坏道。 硬盘存在物理坏道的典型表现: 1、若硬盘为系统盘,故障表现通常为:操作系统异常缓慢、蓝屏,重启系统后引导失败并报告硬盘读取出错、系统自动反复重启。 2、若硬盘为移动硬盘,故障表现通常为:电脑无法加载盘符、提示硬盘需要格式化、频繁提示需要运行chkdsk来检查和修复磁盘、数据读取缓慢、死机。
|
编译器 C语言
C语言宏定义(#define定义常量​、#define定义宏​、 带有副作用的宏参数、 宏替换的规则、 宏函数的对比)
C语言宏定义(#define定义常量​、#define定义宏​、 带有副作用的宏参数、 宏替换的规则、 宏函数的对比)
|
Kubernetes Cloud Native 云计算
云原生技术深度解析:重塑企业IT架构的未来####
本文深入探讨了云原生技术的核心理念、关键技术组件及其对企业IT架构转型的深远影响。通过剖析Kubernetes、微服务、容器化等核心技术,本文揭示了云原生如何提升应用的灵活性、可扩展性和可维护性,助力企业在数字化转型中保持领先地位。 ####
|
运维 Kubernetes Cloud Native
Kubernetes云原生架构深度解析与实践指南####
本文深入探讨了Kubernetes作为领先的云原生应用编排平台,其设计理念、核心组件及高级特性。通过剖析Kubernetes的工作原理,结合具体案例分析,为读者呈现如何在实际项目中高效部署、管理和扩展容器化应用的策略与技巧。文章还涵盖了服务发现、负载均衡、配置管理、自动化伸缩等关键议题,旨在帮助开发者和运维人员掌握利用Kubernetes构建健壮、可伸缩的云原生生态系统的能力。 ####
|
存储 编译器 Linux
完全理解ARM启动流程:Uboot-Kernel
完全理解ARM启动流程:Uboot-Kernel
1549 0
|
开发工具 git
百度搜索:蓝易云【git常用命令stash详细解释。】
使用 `stash`命令可以在处理多个分支切换或者保存临时修改时非常有用。你可以通过 `stash`命令保存当前工作目录的修改,切换到其他分支或者应用其他更改,然后再返回并应用之前保存的stash。这样可以确保你的工作目录始终保持干净,并且不会丢失任何重要的修改。
566 4