低代码到底是不是行业毒瘤?一线大厂怎么做的?戳此了解>>> 了解详情
写点什么

物联网渗透测试(十一):固件分析流程

2020 年 5 月 19 日

物联网渗透测试(十一):固件分析流程

编者按:本文节选自华章网络空间安全技术丛书《物联网渗透测试》一书中的部分章节。


固件分析

一旦我们提取到了固件,接下来的主要工作就是对固件进行分析。其中涉及如何深入固件内部,发现尽可能多的安全隐患,这也正是本节中我们所要做的主要工作。


准备工作

在本节中,我们将会了解提取出固件二进制文件后如何开展固件分析。在这一过程中,有多种固件分析方法供我们选择,帮助我们找到固件中的安全隐患。


正如前面提过的,固件中包含了很多渗透测试人员感兴趣的内容,如 API key、私有证书、硬编码的认证信息以及后门等。


测试流程

为了分析固件,我们将对其逆向以查看其内部组件。固件中的内部组件包括 boot-loader、内核、文件系统以及其他内容。其中我们最感兴趣的是文件系统,因为文件系统中保存了我们需要的所有信息。显然,读者也可以分析 bootloader 并查看其中包含的内容,还可以篡改固件并构建新的固件(我们将在接下来的章节中讨论),但是现在我们只关心如何对固件进行逆向分析以及从中提取出文件系统。


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


1)如果想要查找 Squashfs 文件系统,可以使用 grep 命令在 hexdump 的执行结果中查找“hsqs”字符串1,如图 1 所示。


1 Squashfs 文件系统的头部特征字符串较多,目前已知的有 7 种:标准固件大端序模式为 sqsh,标准固件小端序模式为 hsqs,LZMA 压缩下的大端序模式为 sqlz,3.3 版本的 Squashfs 文件系统在 LZMA 压缩下的大端序模式为 qshs,部分非标准固件小端序模式为 shsq(多为 D-Link 固件),DD-WRT 固件小端序模式为 hsqt,DD-WRT 固件大端序模式为 tqsh。—译者序



图 1


2)读者可以看到,我们在地址 0x000e20c0 处发现了 Squashfs 文件系统。获得了这些信息之后,就可以使用 dd 命令将从该地址开始到文件末尾的内容全部转储下来,如图 2 所示。



图 2


3)一旦获得了从固件二进制文件中截取出来的 Squashfs 文件系统,就可以运行 unsquashfs 等命令来查看整个文件系统,这一过程非常简单。


接下来使用 unsquashfs 命令来看一下我们是否能够提取出整个文件系统,如图 3 所示。



图 3


4)正如在前面的截图中所看到的,我们提取出了 Squashfs 文件系统镜像。读者可以忽略图 3 中的警告和错误,这只是在提示我们没有以 root 用户权限运行该命令。一旦我们提取出了文件系统,就可以浏览文件系统中的各个目录,对其中的各个文件分别进行分析来挖掘漏洞。图 4 是对整个文件系统目录的截图。



图 4


上面就是对固件进行逆向分析并从固件二进制镜像中提取文件系统的方法。我们还可以采用 Binwalk 等工具自动执行前面的所有操作。Binwalk 由 Craig Heffner 开发,借助 Binwalk 我们只需要一条命令就能够从固件二进制镜像中提取文件系统。


5)为了安装 Binwalk,首先需要从位于https://github.com/devttys0/binwalk.git的 Git-Hub 代码库中克隆 Binwalk 代码,命令如下:


git clone https://gethub.com/devttys0/binwalk.git
复制代码


6)然后运行./deps.sh 命令安装 Binwalk 需要的所有依赖文件和二进制文件。


7)Binwalk 安装成功后,读者可以在命令行中敲入 Binwalk 命令并按回车键来确认安装是否成功。如果安装成功,此时命令行窗口会显示出 Binwalk 的帮助菜单,如图 5 所示。


8)下面我们使用 Binwalk 命令从相同的固件中提取出文件系统。这里在执行提取操作时将用到-e 参数:


binwalk -e [firmware-name]
复制代码


9)接下来窗口中会显示出固件中的所有分段,并提取出固件内容,如图 6 所示。



图 5



图 6


10)参数-t 和-vv 可以采用可读性更强以及更加详细的方式打印出命令执行结果。Binwalk 执行完毕之后,会生成名为_[firmwarename].extracted 的文件夹,该文件夹中保存了 Binwalk 提取出的整个文件系统,如图 7 所示。


以上就是采用手工和自动两种方式从固件的二进制文件中提取文件系统的过程。


测试分析

本例中的文件系统提取方法同我们之前采用的方法相同,均是首先使用 magic 字节以及首部特征字符串(例如 Squashfs 文件系统中的 sqsh 字符串等)检测文件系统以及其他组件的偏移。在下面的 URL 链接中可以查看 Binwalk 所能识别的文件系统类型:


https://github.com/devttys0/binwalk/blob/62e9caa164305a18d7d1f037ab27d14ac933d3cf/src/binwalk/magic/filesystems



图 7


读者还可以在 Binwalk 中手工添加更多特征,然后重新编译 Binwalk 源代码,从而实现对其他文件系统的识别。


拓展学习

除了提取文件系统,读者还可以使用 Binwalk 进行一系列其他操作,例如针对某个特定固件镜像进行熵分析,该操作能够帮助读者判断固件镜像是否进行了压缩或者加密。熵分析需要在运行 Binwalk 时带上-E 参数,之后再跟固件名,操作命令如图 8 所示。



图 8


从上面的截图中可以看出,该固件并未加密,因为加密的固件镜像熵值会出现大幅波动。


延伸阅读

想了解更多关于固件分析与逆向分析的内容,可以访问 Binwalk 开发者 Craig Heffner 的博客。读者可以从博文中了解到不同的固件镜像会如何变化,以及可能存在哪些漏洞。Craig Heffner 的博客链接为http://www.devttys0.com/


图书简介https://item.jd.com/12623610.html



相关阅读


物联网渗透测试(一):简介


物联网渗透测试(二):IoT 中的 Web 应用


物联网渗透测试(三):IoT 中的 移动应用


物联网渗透测试(四):IoT 渗透测试环境的部署


物联网渗透测试(五):威胁建模概念简介


物联网渗透测试(六):IoT 设备威胁建模剖析


物联网渗透测试(七):固件威胁建模


物联网渗透测试(八):IoT Web 应用威胁建模


物联网渗透测试(九):IoT 移动应用威胁建模


物联网渗透测试(十):固件分析方法


2020 年 5 月 19 日 10:00378

评论

发布
暂无评论
发现更多内容

区块链溯源,茶叶溯源平台的搭建

13828808769

#区块链#

2021春招JAVA面试总结:Java+并发+Spring+MySQL+分布式+Redis+算法+JVM等

云流

Java 编程 程序员 架构 面试

Mac下brew更新及安装Prometheus+Grafana

程序员架构进阶

Prometheus 监控系统 容器化 28天写作 3月日更

散列(哈希)表算法学习

Nick

数据结构 算法 哈希算法

React 中后台系统多页签实现

清秋

Vue 前端 React keepalive

区块链溯源服务平台,区块链商品防伪溯源解决方案

13828808769

区块链+ #区块链#

一次客户需求引发的K8s网络探究

京东科技开发者

云计算

HTML5+CSS3高级动画的应用实践

云小梦

JavaScript html css3 浏览器API 网页动画

如何学习数据结构与算法

C语言与CPP编程

c c++ 数据结构 程序人生 算法

一个魔幻的框架,3分钟纯 Java 注解搭个管理系统

程序员内点事

Java 前端 后端

实现一个“能中断”的ajax

云小梦

JavaScript ajax Promise axios 请求拦截

浅析 Fabric Peer 节点

Rayjun

架构师训练营 4 期 第13周

引花眠

架构师训练营 4 期

智慧公安警务系统搭建,警务大数据可视化分析平台解决方案

13828808769

智慧城市

Logstash 中 Ruby filter 使用指南

Langer

ruby Logstash ELK

第八章作业

LouisN

一文搞懂如何实现 Go 超时控制

Kevin Wan

go 微服务 微服务治理 超时

数据分析作业-用户分析-ReadHub

隋泽

产品经理训练营

云图说|一张图带你了解华为云分布式数据库中间件

华为云开发者社区

数据库中间件 DDM 分布式数据库中间件 华为分布式数据库中间件

地标户外媒体,正发挥着其他媒体不可比拟的营销价值!

󠀛Ferry

七日更 3月日更

Python OpenCV setMouseCallback 回调函数,取经之旅第 13 天

梦想橡皮擦

3月日更

Java程序员都要懂得知识点:反射

华为云开发者社区

Java 对象 反射 class 函数

区块链溯源,茶叶溯源平台的搭建

13828808769

区块链+ #区块链#

浅析Node中间件Koa&Express:原理和实现

云小梦

JavaScript node.js 中间件 koa

使用Flask Nginx Gunicorn和Supervisor部署一个简单的Restful API接口服务器

Langer

Python 部署与维护 服务器部署 web服务

尤雨溪 Twitch 直播:下一代前端构建工具 ViteJS —— Open Source Friday

清秋

翻译 前端 vite webpack 构建工具

开源项目月刊《HelloGitHub》第 60 期

HelloGitHub

GitHub 开源 开源项目

用户体验 | 页面阅读进度提示

云小梦

html css3 用户体验 页面进度提示

ONE MORE

吴小平

企业利用边缘计算的10种方式

浪潮云

边缘计算

华为云自研PB级分布式时序数据库揭秘第一期初识GaussDB(for Influx)

华为云开发者社区

云原生 时序数据库 华为云 分布式时序数据库 GaussDB(for Influx)

2021 ThoughtWorks 技术雷达峰会

2021 ThoughtWorks 技术雷达峰会

物联网渗透测试(十一):固件分析流程-InfoQ