写点什么

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

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

评论

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

计算机网络基础(五)---网络层-IP地址的子网划分

书旅

laravel 计算机网络 网络协议 计算机基础

Rust多线程之数据共享

编号94530

rust 多线程 数据共享 什么是多线程

分布式事务解决方案Seata源码解析

Java 分布式 分布式事务

分析师的进阶与升华:努力把自己做“没”

松子(李博源)

方法论 数据模型 数据分析师 指标体系 商业模型

推荐一些学习MySQL的资源

Simon

MySQL

腾讯员工每天在岗不足 8 小时被辞?背后原因可能不止你看到的这些!

程序员生活志

腾讯 辞退

项目管理:如何显性管理并提升Story分解能力

华为云开发者联盟

项目管理 DevOps 故事 用户研究 华为云

尝鲜刚发布的 SpringFox 3.0.0,以前造的轮子可以不用了...

程序猿DD

Spring Boot

我成功转行做了java程序猿!

诸葛小猿

Java 程序员 转行

2020技能排名:Python增速爆炸,SQL和Java老当益壮,AWS大吃一惊

程序猿黑哥

Java Python sql

OOP面向对象编程(Object-Oriented Programming)概述

奈学教育

面向对象编程

从IT建设模式变化看客户中心发展

环信

阿里巴巴取消周报?别高兴太早,也不见得是一件好事

非著名程序员

阿里巴巴 程序员 职场成长 职场误区

OOP面向对象编程(Object-Oriented Programming)概述

古月木易

面向对象 oop

全球区块链专利排行榜中国52家企业上榜

CECBC

为什么编译原理被称为龙书?

苹果看辽宁体育

编译原理 编译优化

调薪

池建强

团队管理 薪酬

【DevCloud·敏捷智库】如何利用用户故事了解需求

华为云开发者联盟

敏捷开发 需求管理 需求 故事 华为云

编程核心能力之复用

顿晓

编程 复用 编程日课 技术思维

智算中心开启智慧时代,浪潮信息迎来新发展

Geek_116789

YAPI接口管理平台使用基础入门(一)

Man

DevOps 最佳实践 YAPI API接口管理

字节跳动的ToB生意经

ToB行业头条

【写作群星榜】7.11~7.17 写作平台优秀作者 & 文章排名

InfoQ写作社区官方

写作平台 排行榜 热门活动

细数2020上半年PC端十大“黑恶势力”,一起康康是谁在“兴风作浪”

360安全卫士

信创舆情一线--台积电宣布9月14日断供华为

统小信uos

华为 芯片 半导体

Flask-Restful 中 fileds.DateTime 不支持 strftime 格式

Leetao

Python flask web开发 Python框架 flask-restful

定义@WeClub

WeClub

WeClub

案例研究之聊聊 Mybatis 源码 (三)

小诚信驿站

学习 开源 刘晓成 源码解析 小诚信驿站

犯罪黑客线上拉人入伙,流窜多地网吧植马,仅为盗取游戏账号

360安全卫士

高价值干货:这可能是你见过最全的网络爬虫总结

华为云开发者联盟

Python Web 爬虫 python 爬虫 内存数据库

小白教程——基于阿里云快速搭建自己的网站

诸葛小猿

阿里云 视频 网站搭建 小白

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