第一章:异架构Pwn与Fuzz概述

各位好,我是老周。做二进制安全有些年头了,从x86一路折腾到ARM、MIPS、RISC-V。今天咱们聊聊异架构Pwn和Fuzz测试——这门课的开篇,我打算把几个核心概念先掰扯清楚。

1.1 什么是异架构?

说白了,异架构就是跟我们日常用的x86/x64不一样的CPU指令集架构。你平时用的电脑、服务器,大多是x86。但手机、路由器、嵌入式设备、IoT终端,用的可就是ARM、MIPS、RISC-V这些了。

我刚开始接触异架构Pwn时,最大的感受就是:同样的漏洞,换了个架构,利用手法完全不一样。指令长度、寄存器约定、调用栈布局、内存模型,处处是坑。

架构 常见设备 指令长度 寄存器数量 字节序
ARM (32-bit) 手机、路由器、工控 4字节 (ARM模式) / 2字节 (Thumb) 16个通用寄存器 小端为主
MIPS 路由器、机顶盒、网关 4字节 (固定) 32个通用寄存器 大小端都有
RISC-V 新兴IoT、AI加速器 4字节 (基础指令集) 32个通用寄存器 小端

核心认知:异架构Pwn不是把x86的exp换个编译器重新编译一遍就完事了。指令编码、栈帧布局、系统调用号、GOT/PLT机制,每个架构都有自己的脾气。

1.2 Pwn题目的常见类型

CTF里的Pwn题,说白了就是让你利用程序漏洞,拿到shell或者读取flag。我这些年见过的题目,大致可以分成这几类:

  • 栈溢出(Stack Overflow):最经典的类型。覆盖返回地址、ROP链构造,在异架构下要特别注意栈对齐和返回指令的差异。
  • 堆利用(Heap Exploitation):UAF、堆溢出、double free。ARM和MIPS的堆管理器实现跟glibc不太一样,我踩过不少坑。
  • 格式化字符串(Format String):任意读写原语。异架构下参数传递方式不同,格式化字符串的偏移计算要重新学。
  • 逻辑漏洞(Logic Bug):整数溢出、条件竞争、类型混淆。这类漏洞跟架构关系不大,但利用时还是要考虑目标架构的特性。

我的经验:刚开始做异架构Pwn时,建议从栈溢出入手。因为栈布局相对直观,ROP链构造也有规律可循。堆利用在异架构下坑太多,容易劝退。

1.3 Fuzz测试在安全研究中的定位

Fuzz测试,说白了就是自动生成大量畸形输入,扔给目标程序,看它会不会崩溃。崩溃了,就说明可能有漏洞。

我个人的理解是:Fuzz是漏洞挖掘的第一道筛子。它不保证能找到所有漏洞,但能帮你快速发现那些触发条件简单的、容易被忽略的bug。

在异架构Pwn中,Fuzz的作用尤其明显:

  • 异架构设备上,手动逆向分析成本高,Fuzz可以自动化覆盖大量代码路径。
  • 嵌入式系统往往缺少ASLR、NX等防护,Fuzz出来的crash更容易转化为可利用的漏洞。
  • Fuzz可以帮你发现协议解析、文件格式处理中的边界问题——这些正是Pwn题的高频考点。

注意:Fuzz不是万能的。它很难发现逻辑漏洞、条件竞争、多步骤利用链。Fuzz是工具,不是银弹。我见过有人跑了一周Fuzz一个crash都没出,就怀疑人生了——其实很正常,Fuzz的覆盖率取决于种子质量和变异策略。

1.4 异架构Fuzz的挑战

你想想看,在x86上跑AFL,开箱即用。但换到ARM/MIPS/RISC-V呢?问题就来了:

  1. 模拟器性能:QEMU用户态模拟比原生慢5-10倍,Fuzz效率大打折扣。
  2. 系统调用差异:异架构的系统调用号、参数传递方式不同,Fuzz工具需要适配。
  3. 二进制插桩:AFL的编译时插桩在异架构下不一定能用,需要QEMU模式或静态插桩。
  4. 崩溃可重现性:模拟器下的crash不一定能在真机上复现,我遇到过好几次模拟器跑出crash,真机上跑不出来的情况。

一句话总结:异架构Fuzz,核心是解决模拟执行效率和插桩兼容性两个问题。后面的章节,我会带着大家一步步攻克这些难点。

1.5 本章知识体系

下面这张图,是我梳理的本章知识结构。你可以把它当作整个课程的导航地图:

第一章:异架构Pwn与Fuzz概述 - 知识体系 异架构Pwn与Fuzz 异架构概述 ARM / MIPS / RISC-V 指令集 / 寄存器 / 字节序 Pwn题目类型 栈溢出 / 堆利用 格式化字符串 / 逻辑漏洞 Fuzz测试定位 自动化漏洞挖掘 异架构挑战:模拟/插桩 课程核心逻辑 理解异架构特性 → 掌握Pwn题型 → 用Fuzz高效挖洞 三者环环相扣,缺一不可

1.6 本章小结

这一章,我们聊了三个核心问题:

  • 异架构是什么——ARM、MIPS、RISC-V的基本差异
  • Pwn题目有哪些——栈溢出、堆利用、格式化字符串、逻辑漏洞
  • Fuzz测试的定位——自动化漏洞挖掘的第一道筛子,但要注意异架构下的特殊挑战

给新手的建议:如果你之前只做过x86的Pwn,建议先拿ARM的栈溢出练手。ARM的指令集相对规整,资料也多。MIPS的延迟槽和分支指令比较反人类,可以放后面。RISC-V目前题目还不多,但未来是趋势。