写点什么

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

  • 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:002225

评论

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

大数据培训工作就业前景怎么样

小谷哥

浪潮 KaiwuDB 陈磊:布局数字能源,创新助力 “双碳”

KaiwuDB

关于K8s集群环境工作组隔离配置多集群切换的一些笔记

山河已无恙

k8s管理 K8s 多集群管理 12月月更

2022中国产业数字化发展成熟度区域指数分析——充分利用特长,形成区域比较优势,夯实中国式现代化建设基础

易观分析

数字化 产业

来聊一聊 ElasticSearch 最新版的 Java 客户端

江南一点雨

Java elasticsearch springboot ES

ZBC陆续在主要CEX开启Staking,锁定市场大部分流通量成大利好

股市老人

专利进阶(一):软件专利工程师浅谈如何针对计算机软件类专利申请进行技术挖掘

No Silver Bullet

专利 12月月更 软件专利工程师 技术挖掘

Verilog的语句块

芯动大师

Verilog Verilog语法 Verilog语句块

场景 | 大型电商企业运营管理数字化解决方案

九科Ninetech

选取数据的原则

穿过生命散发芬芳

数据分析 12月月更

C++开发,这些GUI库一定不要错过!

Jackpop

chatGPT的49种应用场景介绍,各开发语言接入chatGPT参考指南

非喵鱼

Java Python 前端 编程语言 ChatGPT

极客时间运维进阶训练营第八周作业

好吃不贵

云渲染是什么?云渲染和自己渲染有什么区别?

Renderbus瑞云渲染农场

云渲染 渲染农场 云渲染平台

ZBC陆续在主要CEX开启Staking,锁定市场大部分流通量成大利好

BlockChain先知

2022-12-16:给你一个长度为n的数组,并询问q次 每次询问区间[l,r]之间是否存在小于等于k个数的和大于等于x 每条查询返回true或者false。 1 <= n, q <= 10^5 k

福大大架构师每日一题

golang 算法 福大大

AngularJS进阶(四十二)ng-options渲染的第一项为空问题分析及解决方案

No Silver Bullet

12月月更 ng-options 页面渲染 上拉加载

下一个AI舞台,名叫煤矿

脑极体

凭借这份Java面试复盘笔记,我在2022寒冬之际也斩获了多张Offer!

程序员小毕

spring 程序员 后端 架构师 java面试

Chrome浏览器竟然可以用ChatGPT了!

Jackpop

架构实战模块1作业

Geek_e3a35c

数据库原理及MySQL应用 | 数据库安全加固

TiAmo

安全 数据库· 12月月更

Python开发游戏?也太好用了吧!

Jackpop

声网管浩森:元宇宙派对场景的最佳实践

声网

实践 元宇宙 RTE2022

横空出世!阿里巴巴Spring全家桶实战笔记真香

Java永远的神

spring 源码 架构师 springboot SpringCloud

多名网络主播因恶意炒作被列入警示名单,如何打击这种违规行为

石头IT视角

SpringBoot整合Swagger2,再也不用维护接口文档了!

@下一站

12月日更 12月月更 springboot整合 swagger2

相见恨晚!Git这些功能太好用了!

Jackpop

打造算力新引擎!安擎上海智能制造基地正式运营

科技热闻

模块二 -- 朋友圈高性能复杂度分析

陈实

「架构实战营」

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