Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
wgpsec avatar

Ios Exploiting

  • 29 installs
  • 1.6k repo stars
  • Updated July 19, 2026
  • wgpsec/aboutsecurity

Helps with ai & agent building tasks during AI-assisted development.

About

ios-exploiting is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted coding.

  • ios-exploiting
  • AI & Agent Building
  • AI-coding skill

Ios Exploiting by the numbers

  • 29 all-time installs (skills.sh)
  • +2 installs in the week ending Jul 27, 2026 (Skillselion tracking)
  • Ranked #9,417 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/wgpsec/aboutsecurity --skill ios-exploiting

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs29
repo stars1.6k
Last updatedJuly 19, 2026
Repositorywgpsec/aboutsecurity

What it does

Helps with ai & agent building tasks during AI-assisted development.

Files

SKILL.mdMarkdownGitHub ↗

iOS 系统级漏洞利用方法论

阶段流: 环境准备(Corellium) → 漏洞面分析 → 内核漏洞利用 → WebKit利用 → PAC绕过 → 沙箱逃逸 → 已知CVE分析

深入参考

  • iOS 内核堆机制与利用技术 → references/ios-kernel-heap.md
  • 缓解机制详解与绕过方法 → references/ios-exploit-mitigations.md

---

Phase 0: 环境准备 (Corellium)

研究环境选择

研究环境?
├─ Corellium(云端 iOS 虚拟化)
│   ├─ 支持内核调试
│   ├─ 支持快照/回滚
│   ├─ 支持多版本 iOS 并行
│   └─ 付费,但研究价值最高
├─ 越狱真机
│   ├─ A11 以下: checkra1n(硬件级越狱)
│   ├─ 需配合 JTAG/SWD(高端研究)
│   └─ 限制: 无法调试内核启动
├─ QEMU (开源)
│   ├─ Project Sandcastle 部分支持
│   └─ 功能有限,不完整
└─ 补丁对比环境
    ├─ Ghidra + BinDiff
    └─ 对比不同 iOS 版本 kernelcache

kernelcache 提取

# 1. 下载 IPSW
# https://ipsw.me/ → 选择目标设备和版本

# 2. 解压 IPSW (实际是 ZIP)
unzip iPhone*.ipsw -d ipsw_contents/

# 3. 解压 kernelcache
# 使用 img4tool 或 joker
img4tool -e -o kernelcache.raw ipsw_contents/kernelcache.*
# 或
jtool2 --dec kernelcache.release.*

# 4. Ghidra 加载分析
ghidraRun
# 新建项目 → 导入 kernelcache → ARM64 / AARCH64
# 自动分析完成后可搜索函数/符号

BinDiff 版本对比

# 定位安全补丁修改的函数
# 1. 下载漏洞版本和补丁版本的 IPSW
# 2. 提取两个 kernelcache
# 3. Ghidra 分析两个版本
# 4. 导出 BinExport: File → Export → Binary BinExport (v2) for BinDiff
# 5. BinDiff 打开 → 新建 workspace → 添加 diff
# 6. 主文件=漏洞版本,次文件=补丁版本
# 7. 关注: Changed Functions → 修改的函数即补丁位置

XNU 版本对应

# iOS 版本 → XNU 版本映射
# https://www.theiphonewiki.com/wiki/kernel
# 例: iOS 15.1 → Darwin Kernel Version 21.1.0 → xnu-8019.43.1

---

Phase 1: 漏洞面分析

iOS 攻击面分类

攻击面?
├─ 远程无交互 (Zero-Click)
│   ├─ iMessage 解析器(图片/音频/视频/PDF/vCard)
│   ├─ FaceTime / VoIP
│   ├─ AirDrop / Bluetooth
│   └─ WiFi 驱动 / 协议栈
├─ 远程需交互 (One-Click)
│   ├─ Safari / WebKit (JavaScript → JIT → RCE)
│   ├─ URL Scheme 处理
│   └─ 恶意配置文件 (.mobileconfig)
├─ 本地提权
│   ├─ 内核 syscall 接口
│   ├─ IOKit 驱动(IOSurface/AGX/IOMFB)
│   ├─ XPC 服务
│   ├─ Mach IPC(port/message/voucher)
│   └─ 文件系统 / sandbox 逃逸
└─ 物理接触
    ├─ USB(lockdownd/usbmuxd)
    ├─ bootrom(checkm8 系列)
    └─ DFU 模式攻击

常见漏洞类型

漏洞类型常见位置利用复杂度
UAF (Use-After-Free)IPC ports, IOKit objects中-高
堆溢出 (Heap Overflow)解析器(图片/字体/媒体)
类型混淆 (Type Confusion)WebKit JIT, IOKit
整数溢出内核内存分配, 长度校验
竞态条件 (Race Condition)syscall 并发, lock 缺失
信息泄露KASLR 绕过, 堆地址泄露低-中
OOB Read/Write数组/缓冲区边界检查缺失

---

Phase 2: 内核漏洞利用

内核堆布局 (Heap Feng Shui)

堆布局策略?
├─ 旧版 (Pre-iOS 15)
│   ├─ kalloc zones: 按大小分区(16/32/64/.../1280)
│   ├─ 同大小对象相邻 → 堆喷射可预测布局
│   ├─ freelist 指针裸露 → 可伪造
│   └─ 步骤:
│       ├─ 1. 喷射填充碎片孔
│       ├─ 2. 继续喷射迫使新页分配
│       ├─ 3. 放置攻击者控制对象
│       ├─ 4. 释放一个对象创造空洞
│       ├─ 5. 触发目标对象分配到空洞
│       └─ 6. 溢出/UAF 覆写目标对象
└─ 新版 (iOS 15+)
    ├─ kalloc_type: 按类型+大小分区
    ├─ 不同类型对象隔离(OSData ≠ task_t)
    ├─ freelist 指针 XOR 编码
    ├─ per-CPU cache 降低确定性
    ├─ guard pages 检测溢出
    └─ 需要类型特定漏洞或信息泄露

内核原语构建

利用原语构建路径?
├─ 信息泄露 → KASLR 绕过
│   ├─ Mach port 信息泄露
│   ├─ IOKit 属性读取越界
│   └─ 获得内核基地址 + 堆地址
├─ 任意读 (Arbitrary Read)
│   ├─ 伪造 IOKit 对象的虚表
│   ├─ 利用 mach_msg OOL 描述符
│   └─ 内核 task port 伪造
├─ 任意写 (Arbitrary Write)
│   ├─ freelist 指针伪造(旧版)
│   ├─ 虚表劫持 → 控制函数指针
│   └─ pipe buffer 篡改
└─ 任意代码执行
    ├─ 修改进程凭据 (ucred)
    ├─ 绕过代码签名 (trust cache)
    ├─ kernel task port 获取
    └─ 需绕过 PAC + PPL/SPTM

IOSurface 物理 UAF (经典案例)

IOSurface 利用流程:
├─ 1. 分配 IOSurface 对象
├─ 2. 获取底层物理页面引用
├─ 3. 释放 IOSurface(但保持物理页引用)
├─ 4. 物理页被回收,分配给其他内核对象
├─ 5. 通过保留的映射读写被复用的内核对象
└─ 6. 构建 kernel r/w 原语

---

Phase 3: WebKit/Safari 利用

WebKit 漏洞利用链

WebKit → 系统完整利用链:
├─ Stage 1: WebKit Renderer RCE
│   ├─ JIT 编译器漏洞(DFG/FTL)
│   ├─ DOM 对象 UAF / 类型混淆
│   ├─ ArrayBuffer 越界读写
│   └─ 获取: JS 层面任意 r/w
├─ Stage 2: 沙箱逃逸
│   ├─ XPC 服务漏洞
│   ├─ Mach port 操作
│   └─ 获取: 进程外代码执行
├─ Stage 3: 内核提权
│   ├─ IPC UAF → kernel r/w
│   ├─ IOKit 驱动漏洞
│   └─ 获取: 内核级权限
└─ Stage 4: 持久化
    ├─ 修改 trust cache
    ├─ 代码签名绕过
    └─ 安装无签名 payload

JSKit 框架模式 (商业间谍软件)

实战中观察到的模式:

JSKit 利用框架特征:
├─ 可复用入口: 任何 WebKit JIT bug → JS 任意 r/w
├─ 版本抽象: 内置多版本 PAC 绕过模块
├─ 目标指纹: 自动识别 iOS 版本,选择对应绕过
├─ 手动 Mach-O 映射: 内存解析 dyld cache,无需落盘
├─ 组合模式:
│   WebKit RCE → 内核 IPC UAF → kernel r/w → 代码签名绕过 → 无签名 stager
└─ 反分析: Watcher 模块检测:
    ├─ developer_mode_status
    ├─ 越狱痕迹(Cydia/checkrain/frida/sshd)
    ├─ 安全应用(McAfee/Avast/Norton)
    ├─ 自定义代理/根证书
    └─ 特定 locale (US/IL)

---

Phase 4: PAC 绕过

PAC 机制概述

PAC (Pointer Authentication Codes):
├─ 硬件: ARMv8.3+ (A12 起)
├─ 五个 128-bit 密钥:
│   ├─ APIAKey / APIBKey → 指令指针签名
│   ├─ APDAKey / APDBKey → 数据指针签名
│   └─ APGAKey → 通用签名
├─ 指令:
│   ├─ PACxx → 签名指针(嵌入 PAC 到高位)
│   ├─ AUTxx → 验证+去除 PAC
│   └─ XPACxx → 去除 PAC(不验证)
├─ Modifier(上下文绑定):
│   └─ SP / frame pointer / object ID → 防止跨上下文重用
└─ Apple 定制:
    ├─ 每次启动随机化密钥
    ├─ 用户态/内核态域隔离
    └─ 九种 modifier 类型

PAC 绕过技术分类

PAC 绕过方法?
├─ 内核态 PAC 绕过(极难)
│   ├─ 签名 gadget 重用
│   ├─ 未保护的间接分支
│   ├─ CVE-2023-32424 (Apple Silicon M1/M2)
│   └─ 通常需要实现级 bug,无通用绕过
├─ 用户态 PAC 绕过
│   ├─ dyld shared cache
│   │   ├─ 预签名函数指针复用
│   │   └─ PAC oracle 构建
│   ├─ dlsym(3) 返回已签名指针
│   │   ├─ 调用 dlsym("symbol") → 获取 A-key 签名指针
│   │   ├─ iOS 18.4 dlsym bug (Synacktiv)
│   │   └─ context = 0 的签名可跨进程重用
│   ├─ DYLD 重定位窗口
│   │   ├─ 动态链接时临时 RW 页面
│   │   ├─ 竞态利用修改重定位表
│   │   └─ SPRR/VM_FLAGS_TPRO 保护(新版)
│   └─ ObjC Runtime (SLOP)
│       ├─ NSPredicate / NSExpression / NSInvocation
│       ├─ ISA / selector 指针未完全 PAC 保护
│       └─ SeLector Oriented Programming
└─ 组合绕过
    ├─ 信息泄露 + signing gadget
    ├─ 类型混淆 → 控制已签名对象
    └─ 多 stage 链: 每个 stage 提供不同原语

---

Phase 5: 沙箱逃逸

iOS 沙箱架构

沙箱层次:
├─ App Sandbox(最严格)
│   ├─ 文件系统: 仅访问自身容器
│   ├─ IPC: 受限的 XPC/Mach port 访问
│   ├─ 网络: 受 ATS 约束
│   └─ 逃逸路径: XPC 服务漏洞 / Mach port 操作
├─ WebContent Sandbox(Safari 渲染进程)
│   ├─ 比 App 更严格
│   ├─ 无直接文件系统访问
│   ├─ 有限的 Mach 服务列表
│   └─ 逃逸路径: 利用可达的 Mach 服务
├─ 系统服务 Sandbox
│   ├─ mediaserverd / imagent / SpringBoard
│   ├─ 各有不同权限范围
│   └─ 可作为提权中间跳板
└─ 内核 (无沙箱)
    └─ 完全权限

PPL / SPTM 绕过

PPL (Page Protection Layer) 保护:
├─ 内核内的内核: 即使 kernel r/w 也无法修改保护页
├─ 保护范围:
│   ├─ 页表结构
│   ├─ 代码签名元数据 / trust cache
│   ├─ entitlement 表
│   └─ 内核代码页
├─ 基于 APRR (Access Permission ReRouting)
│   └─ PTE 索引 → APRR 寄存器 → 实际权限
├─ 已知绕过:
│   ├─ Project Zero TLB stale entry trick
│   │   ├─ 操控页表映射 + 不完整 TLB flush
│   │   └─ 获得 PPL 保护页的可写映射
│   └─ PPL 代码本身的 bug(边界检查缺失等)
└─ 演进: A15+/M2+ → SPTM 替代 PPL
    └─ 更高特权级别的页表监控

---

Phase 6: 已知 CVE 分析

典型漏洞利用链

Safari → 内核全链 (CVE-2023-419xx 系列)
Intellexa Predator 利用链:
├─ CVE-2023-41993: WebKit JIT → renderer RCE
│   └─ JSKit 框架获取 JS 任意 r/w
├─ CVE-2023-41992: 内核 IPC UAF
│   └─ 释放 IPC 对象 → 重分配 → 悬挂指针利用
│   └─ 构建 kernel r/w
├─ CVE-2023-41991: 代码签名绕过
│   └─ 修改 trust cache → 无签名代码执行
└─ PREYHUNTER: 后续监控植入
    ├─ VoIP 录音 (mediaserverd hook)
    ├─ 键盘记录
    ├─ 拍照(无 UI)
    └─ 录音指示灯隐藏 (SpringBoard hook)
iMessage Zero-Click 模式
iMessage 零点击攻击面:
├─ 图片解析器: ImageIO (TIFF/GIF/PNG/JPEG/HEIF)
├─ 音频解析器: CoreAudio (CAF/MP3/AAC)
├─ 视频解析器: AVFoundation
├─ PDF 渲染: CoreGraphics
├─ vCard 解析: Contacts framework
├─ 利用链典型模式:
│   ├─ 1. 畸形媒体文件触发解析器漏洞
│   ├─ 2. 在 imagent/mediaserverd 进程中获得 RCE
│   ├─ 3. 利用该进程可达的内核接口提权
│   └─ 4. 无需用户任何交互
└─ 案例:
    ├─ FORCEDENTRY (NSO): JBIG2 PDF → 图灵完备虚拟机
    ├─ Operation Triangulation: 字体解析 → kernel
    └─ CVE-2021-30860: CoreGraphics PDF 整数溢出

缓解措施演进

缓解机制引入时期防护目标
Code Signing初始未签名代码执行
DEP/W^X早期shellcode 执行
ASLRiOS 4-5地址预测
KASLRiOS 5-6内核地址预测
KPP / WatchtoweriOS 9 时代,A7-A9 常见内核代码篡改
KTRR / KIPA10+内核代码页写入
PPLA12+内核内存修改保护页
PACA12+ (ARMv8.3)指针篡改/ROP/JOP
BTIARMv8.5+间接分支劫持
PANARMv8.1+内核访问用户内存
PXNARMv8+内核执行用户代码
SPTM/TXM较新平台(如 A15+ / iOS 17+)内核内存与页表权限管理
MTE/EMTE/MIEA19+UAF/堆溢出/OOB

---

Phase 7: 异常处理机制(利用相关)

XNU 异常处理流程

异常触发 → 利用影响:
├─ CPU 异常 (Data Abort / Illegal Instruction / PAC Fail)
├─ trap handler → exception_triage()
├─ 分发顺序:
│   ├─ 1. Thread exception port (调试器)
│   ├─ 2. Task exception port (进程级)
│   └─ 3. Host exception port (ReportCrash)
├─ 无人处理 → bsd_exception() → UNIX signal
│   ├─ EXC_BAD_ACCESS → SIGSEGV/SIGBUS
│   ├─ EXC_BAD_INSTRUCTION → SIGILL
│   ├─ EXC_ARM_PAC → SIGILL (非致命) / 直接终止 (TFRO_PAC_EXC_FATAL)
│   └─ EXC_CRASH → SIGKILL
└─ PAC 异常特殊处理:
    ├─ 平台二进制: TFRO_PAC_EXC_FATAL = true
    ├─ PAC 失败直接终止,不经过调试器
    └─ 防止调试器绕过 PAC 检查

利用中的异常处理

异常在利用中的角色:
├─ 信息收集: 通过异常信息泄露地址
├─ 条件检查: 触发/不触发异常判断条件
├─ crash 稳定性: 利用失败时的优雅退出
├─ anti-analysis 对抗:
│   ├─ Hook EXC_BREAKPOINT → 实现自定义断点
│   ├─ Mach exception port → 自定义异常处理
│   └─ thread_set_state → 修改寄存器恢复执行
└─ 对抗缓解:
    ├─ PAC 异常 → 需避免触发(而非处理)
    └─ 寄存器覆写 → 破坏 crash 取证

---

工具速查

工具用途场景
Ghidrakernelcache 反编译补丁对比/函数分析
BinDiff二进制差异对比定位安全补丁
CorelliumiOS 虚拟化研究内核调试/漏洞复现
Frida运行时 Hook用户态利用验证
r2frida内存分析运行时堆分析
jtool2 / otool二进制解析Mach-O 结构分析
img4toolIPSW 解析kernelcache 提取
checkra1nA5-A11 越狱研究设备准备

---

参考资源

Related skills

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.