不知道对方的能力,怕吓跑攻击者。设置飞行模式,放在法拉第袋中,线下的会议室沟通。
iMessage 0-click 0day:攻击者通过iMessage发送带有恶意附件的消息给受害者,受害者不会有任何感知(消息提醒、消息记录等),即可触发漏洞。
- CVE-2023-41990,Apple独有的ADJUST TrueType 字体指令中的RCE,该问题在1990就存在,后来被补丁删除。
- 修补 JavascriptCore库环境以执行用Javascript 编写的权限提升漏洞,混淆了JS但还有11000行,主要用于JavaScriptCore和内核内存解析和操作。利用JavaScriptCore调试功能 DollarVM($vm)来获得从脚本操作 JavaScriptCore 内存并执行本机 API 函数的能力。
- CVE-2023-32434,利用XUN内存映射调用(mach_make_memory_entry and vm_map)中的整数溢出漏洞,获得用户级别对设备整个物理内存的读/写访问权限。
- CVE-2023-38606,使用硬件内存映射I/O(MMIO)寄存器来绕过页面保护层(PPL)。新款iPhone针对内核内存的敏感区域提供了额外的基于硬件的安全保护,该保护可以在存在内核内存读取写入漏洞时,防止攻击者获得对设备的完全控制。为了绕过这种基于硬件的安全保护,攻击者使用了硬件自带的调试功能(这些功能并没有被显式的调用过,所以攻击者是如何发现这个功能的是一个疑问)
- 此时已经拥有了对设备执行任何操作的权限
- 启动IMAgent 进程并注入有效负载,以清除设备中的漏洞利用痕迹。
- 以不可见模式运行Safari进程
- 会打开一个URL,HTML 中包含了混淆的 Javascript,主要进行算数运算和Media Source API、WebAssembly等组件可用性检查,使用 WebGL 在粉红色背景上绘制黄色三角形(Canvas 指纹技术)并计算其校验。其中存在 NaCI 进行加解密。将数据发送到第二个C2地址,根据返回的数据判断是否进入下一阶段。
Javascript 验证器:收集设备各种信息传入C2服务器,用来判断是否下发大马。不毕现,可以避免0day漏洞和大马被捕获。
- CVE-2023-32435,Safari执行shellcode,Shellcode中使用上述的 CVE-2023-32434 和 CVE-2023-38606。
Binary 验证器,可同时运行在iOS和macOS上,使用了私有API,在一些模块中实现了对iOS 8.0之前的版本支持,说明使用了很长时间
- 删除可能透露利用过程的 Crash日志、ids-gossip.db(包含iMessage通信过的 Apple ID)
- 在各种数据库中搜索 iMessage 附件的痕迹并删除。
- 获取进程列表以及网络接口列表
- 检查目标设备是否越狱,Pangu、xCon、Evasion7、Electra、unc0ver、checkera1n等
- 开启个性化广告跟踪
- 收集用户名、电话号码、IMEI、Apple ID等。
- 收集已安装的应用程序列表
- 判断指定的文件是否存在
大马
- 辅助模块实现收集本地SQLite、位置、麦克风、密码等敏感信息
- 录制麦克风:可实现是否在屏幕打开时停止录制、录制时长、电量超过10%才会录制;使用 Audio Queu API录制,使用 Speex 编解码器压缩,使用 AES 加密。
- 钥匙串:使用三方开源库 iphone-dataprotection 实现
- 位置:模拟使用已获得授权的服务获取GPS位置信息,同时也获得 GSM MCC/MNC/LAC/CID信息,在GPS不可用时能获得大致位置。
- SQLite:各个应用使用 SQLite 储存信息,包括窃取了 SMS、WhatsAPP、Telegram的消息信息。可以获取照片相关的元数据(例如是否有孩子、男人、女人等)
追踪,如何发现的
- 通过libmobiledevice进行iOS备份,通过MVT导出的 timeline.csv 分析可疑的网络活动
- 发现和可疑网络活动相近时间点时,有一个BackupAgent的系统进程。这个进程在几年前就被弃用了。
- 搭建MITM Server,通过将几台受感染的设备装上根证书,通过VPN连入该网络
- 根据IoC,通过Telgram设置提醒
- 发现验证器,但是是加密的
- 使用NaCI库(https://nacl.cr.yp.to/)实现应用层加密,客户端生成公私钥,使用私钥和C2服务器的公钥导出共享密钥,使用共享密钥加密数据发送给C2并解密收到的消息
- 通过MITMProxy插件,将response中的js生成公私钥的方法替换为从提供的文本串中初始化密钥对。
- 发现两个漏洞
- WebKit
- iOS Kernel
- 发现验证器包含一个清除恶意iMessage痕迹的函数,删除了一个 .watchface 的文件。
- 发送者生成一个随机 AES 密钥,并使用它加密附件,将加密附件上传至iCloud,加密附件的iCloud链接和 AES 密钥(使用设备的公共 RSA 密钥进行加密)一起发送给收件人。
- 因此要找到附件内容,需要 AES 密钥以及附件密文。
- AES 密钥
- 通过 iMessage 协议发送,无法通过 MITMProxy 拦截。
- 一个新思路:阻止 iMessage 使用 iCloud 链接成功下载附件,漏洞就不会激活也就不会删除附件,但 AES 密钥会储存在 SMS.db 中。通过 mitmproxy 插件更改附件 response 中的几个字节,这样附件以及密钥就会储存在 SMS.db,使用 libmobiledevice 对 iOS 进行备份,通过 mvt 从备份文件中的 sms.db 提取密钥,成功获取 .watchface 附件明文。
- 附件密文
- 虽然 Apple 大部分服务都使用HTTPS Pinning,但 iCloud 附件是一个例外。
- 大马
- 通过 mitmproxy 更改 response 代码,实现对大马的通信内容的解密
- 发现还会动态加载辅助模块
- 最终苹果四个0day漏洞、两个验证器、一个植入程序及其模块
隐蔽性
复杂性