iOS安全入门与进阶
iOS安全入门与进阶
安全学习很难,但,山顶很高,哪怕失败了,也证明你爬过了高山,而不是在土丘上登顶。土丘容易被铲平,而高山不会,你挑战的目标就是你挑战的见证。
这是鸡汤还是警句,就取决于你有没有行动。让那些一笑而过的人成为历史的沙砾吧。你、我会书写历史。
iOS架构
iOS安全研究的动力
图:移动平台0day漏洞赏金榜,来自Zerodium
iOS Security
Apple会发布iOS安全架构的白皮书:
iOS安全技术演进
Isolation
Restricted Sanbox
- 默认的沙盒规则为Container
- 所有从App Store下载的APP,第一次打卡应用时,询问用户访问控制是否给予权限
- 沙盒内的应用和内核的交互非常窄
- 沙箱内的应用只能访问几个有限的内核模块 [TODO,哪几个?]
Code Signing
Apple上的代码签名验证很严格
Expoloit Mitigation(ASLR, DEP)
Data Protection
- Passcode 屏幕锁、指纹识别、FaceID?TODO
- 很多敏感数据只有在正确的passcode输入后,才会生成有效的解密key
- iPhone5S后,有一个专门的硬件芯片负责Passcode的计算、生成Passcode Key和Passcode输入错误次数的检测(从硬件上进行的防范)
Hypervisor
- iOS 9之后
- 会检查内核代码段的完整性 Kernel Patch Protection
iOS安全体系经历了从无到有,从弱到强的发展,其中也得益于硬件芯片的发展。
iOS(通用)漏洞挖掘
1.识别Attack Surface
先明确哪些地方会接受数据,识别攻击面
iOS本地攻击面
USB
- 文件访问接口
- 备份还原接口
- 问题比较多,被大量分析的一个接口
- 应用管理接口
- 安装一个IPA包时,通过PC端上传一个包给iOS,iOS中有一个installd的守护进程,在解压缩IPA包时,需要时间,此时可以造成一个竞争条件漏洞
- 参考:IORegistryIterator竞争条件漏洞分析与利用 TODO
- 开发者接口
- 配合Xcode
安装的应用
- JekyII 类型应用(USENIX Security’13)
- Masque Attacks(FireEye Research)
接口漏洞资料
- 《是谁推开我的“窗”:iOS App接口安全分析》,长亭科技:Link TODO
用户态远程攻击面分析
- 任何网络连接都有可能成为攻击面
- Mobile Safari
- JailbreakMe
- Mobile Pwn2Own
- Messager 研究iMessage黑产漏洞信息 [TODO, 重要]
- 🎯CEV-2009-2204, SMS vulnerability, Charlie Miller
- 🎯CVE-2015-1157, crafted Unicode text reboot bug
- 系统中的网络服务进程
- 🎯CVE-2015-1118, crafted configuration profile reboot bug
- Mobile Safari
内核攻击面分析
用户态和内核的任何通信渠道都是潜在的攻击面。对于内核来说,可以默认流入的数据都是有害的
进一步细分
ioctl
File System
Devices
IOkit:macOS和iOS上的驱动内核扩展总称
MIG:负责用户态到内核态的数据交互
文件系统(File System)
- 🎯HFS legacy volume() name stack buffer overflow
- JailbreakME 3 for iOS 4.2.x
- 🎯HFS heap overflow
- Corona for iOS 5.0
- 🎯HFS legacy volume() name stack buffer overflow
POSIX系统调用
- posix_spawn 处理file action data的整数溢出漏洞
- p0sixspwn for iOS 6.1.3
ioctl
- Packet Filter Kernel Exploit
- 🎯DIOCADDRULE ioctl 处理函数未初始化变量漏洞
- 可以使任意内核地址的内容减一
- 🎯limera1n/greenpois0n for iOS 4.1
- 🎯DIOCADDRULE ioctl 处理函数未初始化变量漏洞
- Packet Filter Kernel Exploit
设备 /dev/*
- 🎯ptmx_get_ioctl 内存越界访问漏洞
- ptmx设备在处理minor参数的时候没有做越界检测
- evasi0n7 for 7.0.x
- 🎯ptmx_get_ioctl 内存越界访问漏洞
🎯IOKit(很多)
- IOSurface
- IOMobileFrameBuffer(越狱漏洞,2017年,iOS10,堆溢出)
- IOUSBDeviceFamily:Link ,最终可以实现RCE
- IOShareDataQueue
- IOHIDFamily,开源模块,漏洞很多
- …
2.理解数据交互过程
非常关键,读源码,明确用户态和内核态的交互过程
3.审计代码实现和逻辑
审计、发现代码缺陷
4.挖掘漏洞构造触发样本
构造、使用POC进行验证
自动化挖掘(静态、动态)