美文网首页
IoT固件逆向入门

IoT固件逆向入门

作者: andy_shx | 来源:发表于2020-05-19 15:54 被阅读0次

转载摘录了原文的内容,但是有格式兼容性问题,更好的排版格式详见原文:https://zeroyu.xyz/2019/08/15/How_to_start_IoT_Reverse/

0x00 前言

一篇入门级别的IoT固件逆向文章

0x01 固件下载

  1. tp-link 固件下载

https://www.tp-link.com/in/support/download/

此外tp-link还提供了在线的仿真环境

  1. 小米智能家居的环境

https://github.com/dgiese/dustcloud

0x02 常用工具

Linux系统自带工具

file — 用来检测是否是有效的文件和文件类型
xxd - 会生成给定文件或者标准输入的十六进制格式,也可以将十六进制格式转换回原始的二进制格式
hexdump —16进制导出工具
strings 跟hexdump类似但是可以以可读的形式展示
dd — 从二进制文件中挖掘数据
lzma — 解压LZMA文件

第三方工具

Radare2 - 逆向工程和二进制分析的完整框架
ghidra - nsa开源的逆向分析工具
IDA Pro - 不用多解释的超强逆向分析工具
Firmware_Slap - 使用约束求解和函数聚类自动发现固件中的漏洞
firmwalker - 在安装的固件文件系统中搜索敏感的文件
binwalk - 通过固件文件头来分析文件和文件系统
Fireware Mod Kit — 自动化分析固件文件的一系列脚本
squashfs-tools— 可以通过apt-get squashfs-tools 来安装。用来处理squashfs的一系列工具

0x03 分析示例

此处下载固件 TL-WR841N(EU)_V14_180319

下载之后解压文件

|

<pre style="box-sizing: border-box; overflow-x: auto; padding: 0px; border: none; font-size: 13px; font-family: Menlo, "Meslo LG", monospace; line-height: 22px; border-radius: 4px; background: none;">1
</pre>

|

<pre style="box-sizing: border-box; overflow-x: auto; padding: 0px; border: none; font-size: 13px; font-family: Menlo, "Meslo LG", monospace; line-height: 22px; border-radius: 4px; background: none;">unzip TL-WR841N(EU)_V14_180319.zip
</pre>

|

B10BD5C0-8820-49A2-ABC1-EA4BF20150C0.png

之后使用使用file命令来识别文件类型,此处识别后发现目标是数据类文件

CD422AAB-9C09-46DD-BD27-C56273444ADB.png

既然是数据文件我们就可以使用hexdumpstring来对其中的信息进行分析,作为初始的信息收集过程。
PS:

  1. 因为一般输出的信息非常多,所以此处将输出的信息导入输出文件,方便随后查看。
  2. hexdump -C 参数可以设置输出为hex+ASCII的方式。
9A44A5CB-CAA3-462C-A15A-7EB5A423E0DF.png

之后就可以在文件中搜索自己想要的信息,比如搜索一下文件系统常用的boot loader名字u-boot,就可以在文件中看到相关信息。


C8AB21C5-BC26-46F7-9A50-AC6A099BC222.png

之后可以使用binwalk来对目标进行分析。分析结果主要分为三个部分进行展示:文件地址的十进制和十六进制展示以及对应位置发现的详细描述。从分析结果中也可以确认此处使用的boot loader就是U-boot。

21E84A59-EB8C-4469-BA57-8C5E1F1706A2.png

分析完之后可以使用binwalk -e来对固件的各个部分进行提取。提取完成后就可以进入文件系统获取自己想要的信息了,比如我只关注web页面的源码文件,那么就进入squashfs-root/web

1A6B56C2-CA38-4618-8B35-4DFB05F9A6F2.png

PS: binwalk其它的常用参数
-M:递归扫描提取的文件
-r:提取后删除剩余文件
-e:自动提取已知文件类型
所以一般会使用binwalk -Mre file.bin来提取固件中的信息。

当然此处也可以使用dd命令来对特定位置的文件来提取

|

<pre style="box-sizing: border-box; overflow-x: auto; padding: 0px; border: none; font-size: 13px; font-family: Menlo, "Meslo LG", monospace; line-height: 22px; border-radius: 4px; background: none;">1
</pre>

|

<pre style="box-sizing: border-box; overflow-x: auto; padding: 0px; border: none; font-size: 13px; font-family: Menlo, "Meslo LG", monospace; line-height: 22px; border-radius: 4px; background: none;">dd if=TL-WR841Nv14_EU_0.9.1_4.16_up_boot[180319-rel57291].bin skip=1049088 bs=1 of=TP.sfs
</pre>

|

B25D6B9F-1B47-42F0-8BAC-1B630954E8E0.png

PS:

  1. dd 可以跨文件、设备、分区和卷复制数据
  2. if 标准文件输入
  3. of 标准文件输出
  4. bs 块大小
  5. skip用于跳过指向固件二进制映像中特定地址的指针

最终得到dd命令分割之后的文件TP.sfs,这是一个存储Squashfs文件系统的文件。之后可以使用unsquashfs工具来对其中的文件系统进行提取。提取完成后会自动创建一个squashfs-root文件夹。

A08A2109-0C9F-4C3E-86FA-A23D0A678977.png

此外,我们还可以使用Google出的firmware-mod-kit来完成对固件的解包和打包,这样我们就可以很方便的在对目标完成修改后重新打包固件(比如植入后门之后重新打包)。
PS: Google已经不对这个工具进行更新,在最新的系统上编译可能会出现问题,所以推荐以下两个第三方修改版。
适用于Linux: https://github.com/rampageX/firmware-mod-kit
适用于macOS: https://github.com/cinquemb/firmware-mod-kit-osx
解包操作如下所示

EA859A97-35DE-4C7D-8013-C6F4F07FB24B.png

重建固件包如下所示


FAAC8614-47CF-41F6-BD2A-293E3AAAC0F7.png

到此为止,我们已经提取了固件的整个文件系统,现在我们可以开始分析文件系统中存在的二进制文件或者某些文件了。

分析文件的话一般是先看etc目录下的配置文件和启动脚本

B4DD20FF-8797-4633-9540-C1F57C2D2700.png

比如说此处可以看到一个passwd文件和init.d文件夹,init.d文件夹下存储的是启动的时候初始化服务和环境rcS文件,可以看一下文件的内容。


909A5DC6-5F72-467D-92E5-24F1C12F7C25.png

可以看到启动的时候将cp -p /etc/passwd.bak /var/passwd,再看passwd.bak文件就可以得到一些默认口令

4CB3F00A-6E9D-4120-BCC3-F038026F0988.png

之后在bin目录下看到login文件,可以使用IDA来对这个文件的登录逻辑进行分析,可能存在登录绕过或者命令注入等漏洞。

6E87135C-D407-4D8E-AD80-DE25BBED2EA3.png

不过再对mips指令集的分析上ghidra更好一些


1C720AAD-26F9-492A-AFDD-E00F3B91F2EB.png

0x04 trick

  1. 在整个二进制文件中搜索字符串
    参数izz | more

    47BCD0CA-59D7-4A3E-806A-1A5346F7BCB4.png
  2. 使用firmwalker扫描敏感文件


    98B7ADDE-2020-44AA-AFB2-AB437AF3E899.png
  3. 使用Firmware Slap扫描漏洞

0x05 总结

文章对目前常用的固件分析工具以及固件的分析流程做了简单的介绍,作为一篇入门级别的文章。

0x06 参考

《How to Start IoT device Firmware Reverse Engineering?》
《逆向路由器固件之解包 Part1》
《IOT渗透测试》
《逆向路由器固件之信息泄露》
《Multiple D-Link Authentication Bypass Vulnerabilities》

相关文章

  • IoT固件逆向入门

    转载摘录了原文的内容,但是有格式兼容性问题,更好的排版格式详见原文:https://zeroyu.xyz/2019...

  • IOT固件爬虫

    前言 最近在看自动化分析固件漏洞,需要爬取很多厂商固件,找到一个不错的爬虫项目记录一下,美中不足的是这个项目很久不...

  • IoT安全:调试环境搭建教程(AArch64篇)

    0x001 前言 IoT设备固件的调试环境搭建坑比较多,发现网上还没有比较完善的各架构的调试环境的入门贴,于是就有...

  • 物联网设备固件模拟流程

    Iot安全之漏洞挖掘。为了对智能设备进行渗透测试,固件模拟可以在没有设备的情况下对固件进行分析。--- 环境 操作...

  • 使用QEMU模拟IOT固件

    简介 在IOT设备测试中,有很多时候可以拿到设备的固件去做进一步的测试。这时就需要某种方式将固件中的程序运行起来,...

  • 逆向入门分析实战(四)

    9/14 文章共计1836个词 是逆向入门分析实战系列的第四篇 是逆向入门分析实战系列的第四篇 逆向入门分析实战(...

  • ghidra添加vxhunter插件

    最近在学习研究VxWorks的固件逆向,也正好学一下美国国安局的ghidra分析VxWorks固件的时候,由于要分...

  • iOS逆向工程的环境搭建

    参考文章:[iOS Reverse入门]微信注入iOS逆向入门实践 — 逆向微信,伪装定位(一) 一. 先在已经越...

  • ios 逆向文章

    iOS逆向入门实践 — 逆向微信,伪装定位(一) iOS 逆向开发小试-钉钉篇 粉丝福利,Pokemon Go 锁...

  • 固件逆向分析1--确定固件加载地址

    1、 固件识别和解压 一般先给binwalk,在给file看下文件的格式,确认是data的二进制文件后 直接给bi...

网友评论

      本文标题:IoT固件逆向入门

      本文链接:https://www.haomeiwen.com/subject/saubohtx.html