Endlessdoors后门事件详细分析之 - Zbtlink路由器 后门分析
漏洞概述
该固件出厂即内置了 ENDLESSDOORS 远控植入体。设备一旦启动,它便以 root 权限伪装成 kworker 内核线程常驻运行——全程不监听任何本地端口,因此常规端口扫描、入站防火墙规则都发现不了它。相反,植入体会周期性地主动向硬编码的 C2 服务器发起一条未认证、未加密的 TCP 连接:端口 7000 作命令通道,端口 7001 作交互式 shell 回连。
收到指令后,植入体直接以 root 身份调用 popen() 执行任意命令并回传结果;其中一条特殊指令 rctlbash 会当场拉起一个完整的交互式 root shell。由于整条信道全程零认证,任何能够触达该 C2 地址、劫持设备 DNS/路由,或掌握其备用域名的一方,都能向设备下发命令、直接拿到完全 root 权限。而"设备主动外联"这一特性,更让 NAT 与防火墙形同虚设。
一、信息收集
从Zbtlink官网下载对应固件。
1.1 binwalk
binwalk -E // 先观察是否加密,如果整个固件被加密,熵值应该普遍接近 1.0,这里应该是没有

binwalk -Me // 提取出文件系统,是squashFS文件系统共
1.2 查看架构以及保护
file ./bin/busybox
checksec ./bin/busybox

判断是 mips32 位 小端序 的架构
1.3 启动项分析
进入到 ./etc/init.d 中我们发现 有个 uhttpd 文件


然后在 /etc/config 中找到了 uhttpd 进去观察

从这里可以得知 其文档的根目录www 且 HTTP 请求路径 /ubus 需要 转发到 ubusd 的 Unix socket , 以及开启些必要服务
# 1. 启动系统基础
/etc/init.d/boot start # 挂载文件系统、创建设备节点
# 2. 启动系统服务
/etc/init.d/system start # 系统配置
# 3. 配置网络
/etc/init.d/network start # 初始化网络接口
# 4. 启动 ubus(系统总线,关键!)
# ubusd 通常在 boot 阶段启动,检查是否运行
busybox ps | grep ubusd
# 5. 启动 Web 服务器
/etc/init.d/uhttpd start
1.4 ubusd
ubusd(通用总线守护进程)— OpenWrt 的系统消息总线
在做 chroot 仿真时,ubusd是必须第一个启动的进程。因为所有其他服务(boot、uhttpd...)启动时都会尝试连接 /var/run/ubus.sock

而 boot 文件下带有很多的运行所需的相关文件
所以模拟的大致流程就是 ubusd → boot → uhttpd
二、固件模拟
cp $(which qemu-mipsel-static) ./
先进行挂载
sudo mount --bind /proc proc
sudo mount --bind /sys sys
sudo mount --bind /dev dev
sudo chroot ./ ./qemu-mipsel-static ./bin/busybox sh
rm -rf /var
rm -rf /tmp
mkdir -p /var/run
mkdir -p /var/log
mkdir -p /var/lock
mkdir -p /var/state
mkdir -p /tmp
chmod 777 tmp
./etc/init.d/boot start
./etc/init.d/system start
./etc/init.d/network start
busybox ps | grep ubusd
./etc/init.d/uhttpd start

尝试运行发现缺失 ubus,启动 ubus
./sbin/ubusd > /tmp/ubusd.log 2>&1 &
运行后出现 ubus.sock文件

uhttpd_ubus 插件需要它转发 /ubus 请求

./etc/init.d/uhttpd start
./usr/sbin/uhttpd -f -h /www -p 0.0.0.0:8080 // 设置端口为8080
浏览器进行访问,以默认密码 admin 登录

三、漏洞分析
目标:squashfs-root/usr/sbin/kworker(ENDLESSDOORS 植入体,r
