二进制固件函数劫持术-DYNAMIC
发布网友
发布时间:2024-10-04 08:20
我来回答
共1个回答
热心网友
时间:2024-10-05 11:43
二进制固件劫持技术详解 - 动态方法
作者:s3cana
本文旨在分享网络安全知识,但读者需自行承担因使用技术可能带来的风险,所有后果自负,非官方责任声明。本文由合天网安实验室原创,若需转发,请注明来源。
固件中的二进制程序依赖特定环境,模拟时需处理硬件相关函数的hook问题。有两种主要的劫持技术:动态注入和静态注入。动态注入,如通过PLT表或LD_PRELOAD变量实现,后者在《家用路由器0day漏洞挖掘揭秘》中被用于D-link DIR-605L路由器的Web应用boa,通过hook apmib_init和apmib_get函数,使qemu可以模拟运行。
然而,LD_PRELOAD并非万能,它受限于编译时的设置,当关闭相关选项时,无法预加载动态链接库。固件的二进制文件结构使得patchelf无法直接修改Section信息,影响劫持。因此,本文探索了利用ELF文件的DYNAMIC Segment,即程序运行时加载所需lib的区域,进行劫持。
DYNAMIC段由Elf32_Dyn结构体数组组成,可通过ELF_HEADER和Program Header找到其在文件中的位置。通过在dynamic和elf_hash之间的空闲空间伪造新的Elf32_Dyn数组,可以添加额外的共享库。实验中,成功地在固件N210RE的boa程序中添加了ibcjson.so,并实现了对apmib_init和apmib_get函数的劫持。
尽管此方法有效,但还有待深入探究ld加载共享库的顺序和劫持原理的底层机制。《家用路由器0day挖掘技术》和《二进制分析实战》等资料可作为参考。