写点什么

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

  • 2020-05-18
  • 本文字数:3181 字

    阅读完需:约 10 分钟

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

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

固件分析方法

固件是控制 IoT 设备的核心,这也是我们在分析 IoT 设备的其他组件之前,希望从固件分析开始的原因。根据 IoT 设备所面向的行业,提取固件镜像并且对其内容进行反汇编的过程可能非常简单。与之类似,对于某些行业的垂直细分领域而言,其采取了专用保护措施,而这些保护措施可能会导致逆向分析过程更加困难或更加耗时。尽管如此,固件分析时还是存在一些通用模式的。通常,测试人员在固件分析时最关注的内容主要包括:


  • 口令。

  • API Token。

  • API Endpoint(URL)。

  • 存在漏洞的服务。

  • 后门账户。

  • 配置文件。

  • 源代码。

  • 私钥。

  • 数据的存储方式。


在后面的章节中,进行固件分析时我们也会重点关注这些内容。本节将向读者概要介绍固件正向分析与逆向分析的方法。


下面列出了 IoT 固件分析时所用到的基本方法:


1)固件提取。


2)固件分析。


3)文件系统提取。


4)文件系统加载。


5)文件系统分析。


6)基于固件仿真的动态分析。

固件提取

在对固件内容进行分析前,我们首先需要获取固件的二进制文件。本节将会对目标设备固件提取所涉及的各种技术进行介绍。

准备工作

提取固件的过程中我们会用到多个工具。由于 Kali Linux 中已经默认安装了所需要的大多数工具,因此在这里将主要使用 Kali Linux 系统。下面是需要用到的工具:


Kali Linux:Kali Linux 可以从网站https://www.kali.org/downloads/直接下载。如果读者使用 VMware 或者 VirtualBox 虚拟机,那么建议从链接https://www.offensive-security.com/kali-linux-vmware-virtualbox-imagedownload/下载 Kali 的虚拟镜像。


Ettercap:虽然 Kali Linux 中已经默认安装了 Ettercap,但是也可以从链接https://ettercap.github.io/ettercap/downloads.html下载。


Wireshark:Wireshark 也默认包含在 Kali Linux 中,也可以从链接http://www.wire-shark.org下载。


SSLstrip:Kali Linux 中已经默认安装了 SSLstrip,也可以从链接https://github.com/moxie0/sslstrip下载。


Flashrom:Kali Linux 中并未默认安装 Flashrom,但是可以执行以下命令方便地安装该工具:


```apt-get install flashrom```
复制代码


此外,还可以通过链接https://www.flashrom.org/Downloads下载 Flashrom。

测试流程

目前,从 IoT 设备中提取固件的方法有很多。我们将在本节中对其中的大部分方法进行介绍。固件镜像的获取方法主要包括:


  • 从厂商网站下载。

  • 代理或镜像设备更新时的流量。

  • 直接从设备转储固件。

  • 通过 Google 搜索引擎搜索/科研渠道。

  • 反编译与之相关的移动应用。


  1. 从厂商网站下载


获取固件最简单的方法就是从厂商网站下载固件。


图 1~图 5 中的截图展示了如何从厂商网站获取固件:


1)进入目标厂商的网站。


2)在搜索栏中输入目标设备,如图 1 所示。


3)选择 Support 选项卡,如图 2 所示。


4)单击 Drivers&Tools 按钮,如图 3 所示。


5)单击下载链接,如图 4 所示。


6)用户也可以选择 Copy Link Address,在测试主机上直接执行 wget(wget <http://URL.com>)命令进行文件下载,如图 5 所示。



图 1



图 2



图 3



图 4



图 5


  1. 代理或镜像设备更新时的流量


有时候厂商网站可能并不支持固件下载,此时读者可以选择第 2 种方法(即在设备固件更新过程中,代理转发设备更新时的流量),或者选择第 3 种方法(直接从设备转储固件)。为了在设备更新过程中实现对固件更新流量的代理转发,读者必须在更新期间实施中间人(Man-In-The-Middile,MITM)攻击或者镜像设备流量。或者,读者也可以代理转发 Web 或移动应用的流量,从中提取出固件下载的 URL 地址。


众所周知,厂商会对固件下载请求中的 user-agent 字段进行验证,所以读者可能还需要调整数据包首部中的 user-agent 字段。以下是针对 IoT 设备实施 MITM 攻击进而监控设备流量的基本步骤,用到的工具包括 Kali Linux、Ettercap、Wireshark 和 SSLstrip。其中 Kali Linux 中已经安装了本节中需要用到的所有工具。


当前有多种方法和工具可以对目标设备发起 MITM 攻击,进而实现流量转发。下面介绍的就是其中一种捕获设备流量的方法。


1)启用 IP 转发功能:


echo 1 > /proc/sys/net/ipv4/ip_forward
复制代码


2)配置 iptables,将目的端口 80 的流量重定向至 SSLstrip 监听的端口 10000。


intables -t nat -p tcp -A PREROUTING --dport 80 -j REDIRECT --to-port 10000
复制代码


3)启动 SSLstrip:


ssltrip -a
复制代码


4)启动 Ettercap GUI:


ettercap -G
复制代码


5)图 6 展示了上述操作的运行结果。



图 6


6)单击菜单栏中的 Sniff 菜单,再单击 Unified sniffing 选项,如图 7 所示。



图 7


7)选择所要监听的网卡,如图 8 所示。



图 8


8)选择 Scan for hosts 选项,如图 9 所示。



图 9


9)此时即启动 Wireshark 程序,可以看到部分接口有流量通过,如图 10 所示。


10)单击 Start capturing packets 按钮开始捕获目标设备的网络流量,如图 11 所示。



图 10



图 11


11)根据实际需求过滤出所关注的网络报文。在本例中,目标设备的 IP 地址为 192.168.1.137,如图 12 所示。



图 12


  1. 直接从设备转储固件


如果通过厂商网站或者流量代理的方法均无法获取固件,还可以尝试通过 UART、SPI 或者 JTAG 接口直接转储固件。直接进行固件转储需要拿到物理设备,并拆解设备找到其中的闪存芯片。找到闪存芯片之后,读者可以直接通过 UART 接口也可以使用 SOIC8 测试夹来连接芯片进而转储固件,其中用到了工具 Flashrom 以及支持 SPI 的硬件开发板,例如 Shikra1。图 13 展示了如何使用 SOIC 测试夹和 Shikra 连接设备。


1 Shikra 是一款用于固件分析的硬件设备,用户借助 Shikra 可以与不同的底层数据接口(通过 USB 接口)进行交互。—译者注



图 13


图片来源:http://www.xipiter.com/uploads/2/4/4/8/24485815/9936671_orig.jpg562


将固件内容转储为 bin 文件的命令如下所示:


$ flashrom -p ft2232_spi:type=232H -r spidump.bin
复制代码


使用 Flashrom 或者前面介绍的某种方法提取到了设备固件之后,分析人员就可以开始对固件的二进制文件进行分析了。


  1. Google 搜索


如果出于某些原因,我们难以借助前面介绍的方法提取出固件镜像,那么最后的选择就是求助于 Google 搜索。可以直接在 Google 中输入想要查找的固件名称,搜索是否存在目标固件的下载链接,也可以搜索一下其他人的工作成果,看看是否已经有人对该设备的固件进行了研究。此外,设备厂商在岗或者离职的工作人员也可能会将固件文件上传到其个人的存储空间或 Web 服务器上。无论哪种情况,都可以使用 Google dorking 技术缩小指定目标设备的搜索范围。我们还可以通过链接https://www.exploit-db.com/google-hacking-database利用 Google Hacking 数据库来搜索固件或设备。

测试分析

在本节中,我们简要介绍了如何通过厂商站点、部署 MITM 测试环境捕获设备流量、直接从设备转储固件以及 Google 搜索等方法来获取固件。现在,我们来解释下为什么需要通过这些方法获取固件,难道不是直接从厂商网站下载就行了吗?


当从厂商网站下载固件时,通常情况下,用户可以通过厂商提供的服务链接、文件共享或社区论坛下载到需要的固件。但有时厂商在下载固件前要求用户提供口令,或者将固件打包为需要口令才能解压的 ZIP 文件。如果碰到了这种情况,为了节省时间我们就可以直接采用其他方法获取固件。


接下来,我们简要介绍了如何使用 Kali Linux、SSLstrip、Ettercap 和 Wireshark 搭建 MITM 测试环境,以在设备更新期间捕获设备流量。


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



相关阅读


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


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


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


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


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


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


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


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


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


2020-05-18 10:002886

评论

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

一套亿级用户的IM架构技术干货(下篇):可靠性、有序性、弱网优化等

JackJiang

首席AI架构师进阶之旅开启!第4期60位AICA学员硬核开学

百度大脑

AI 百度飞桨

Spark常见的故障排除

五分钟学大数据

大数据 spark 28天写作 3月日更

数据产品经理实战-由BI到业务洞察

第519区

大数据 数据产品 数据分析体系

Fluid 0.5 版本发布:开启数据集缓存在线弹性扩缩容之路

阿里巴巴云原生

容器 云原生 k8s 分布式数据库 调度

在这里,每一行代码都需要被认真对待

DT极客

一气之下开发了个群聊机器人

诡途

Python 办公自动化 群聊机器人

Flink架构体系

大数据技术指南

大数据 flink 28天写作 3月日更

最全面试考点与面试技巧,面试必问

欢喜学安卓

android 程序员 面试 移动开发

C 语言性能优化:循环展开

1

编程 程序员 性能优化 C语言 循环展开

飞桨中国行首站重庆 解读产业 智造

百度大脑

百度 飞桨 中关村智酷

问题排查 | 客户端突如其来的“白屏”等待

蚂蚁集团移动开发平台 mPaaS

html5 移动开发 mPaaS 离线包

加入即可服务1.83亿个家!海尔智家让开发者面向亿万家庭

DT极客

寻找被遗忘的勇气(二十二)

Changing Lin

3月日更

手把手教学基于深度学习的遥感影像倾斜框算法训练与分析

cv君

人工智能 深度学习 AI 智能 视觉

最全模型效果评估报告上线,百度EasyDL助力模型效果快速优化

百度大脑

飞桨 EasyDL

数据分析实战项目-蛋壳公寓投诉分析

诡途

Python 数据分析 蛋壳公寓

致远互联低代码平台让项目管理“秒变”数字化

爱极客侠

如何优化管理,打造高效的技术团队?

有只小耳朵

团队管理 技术管理 数字化转型

智能家居操作系统谁最强?海尔智家独有“智家大脑”行业最领先

DT极客

python 爬虫之selenium可视化爬虫

诡途

Python 爬虫 selenium

飞桨刷新分子性质预测榜单,助力AI药物研发

百度大脑

AI 药物研发 百度飞桨

【遇见Doris】基于Apache Doris的小米增长分析平台实践

ApacheDoris

启动延时缩短 50%-80%,函数计算发布镜像加速功能

阿里巴巴云原生

Docker 容器 开发者 云原生 存储

【疑难杂症】关于Github私有库问题

Sher10ck

GitHub pycharm

入选Gartner全球AI报告,阿里云解读AI工程化的三大基础能力

阿里云大数据AI技术

机器学习 AI Gartner

2021年ONNX开发者大会即将召开

百度大脑

百度飞桨 ONNX

安卓最全面试考点与面试技巧,大厂直通车!

欢喜学安卓

android 程序员 面试 移动开发

【活动回顾】5G时代的直播,将带来哪些低延迟体验

ZEGO即构

揭秘盒马鲜生,如何打破收益增长天花板!

博文视点Broadview

实时 摔倒识别 /运动分析/打架等异常行为识别/控制手势识别等所有行为识别全家桶 原理 + 代码 + 数据+ 模型 开源!

cv君

AI 目标检测 视频理解 引航计划

物联网渗透测试(十):固件分析方法_安全_亚伦·古兹曼,阿迪蒂亚·古普塔_InfoQ精选文章