Objective by the Sea(下文简称OBTS)v5 将在当地时间 10 月 6 日,也就是明天上午在西班牙巴塞罗那附近的 Carafell 开始主题演讲议程。对应北京时间大约下午四点左右开始。会议将会在油管直播,有兴趣可以去看。
[油管]/channel/UCQycc8VDhHuNkZlKSSTDHzw
OBTS 由 Objective-See 基金会主办。
图片来自 OBTS 官网,版权归原作者所有
Objective-See 起源于 Patrick Wardle 在 2015 年左右开始运营的关于 OS X 系统安全的博客,主攻 macOS 终端安全和恶意软件研究。名字读出来就知道玩的是谐音哏 Objective-C。不过 2015 年那会都已经有 swift 了,怎么不玩点恶趣味的,起名叫卡戴珊什么的……
Patrick 来自夏威夷,是 DEFCON 和 BlackHat 等会议的常客。毫不夸张地说,只要关注过 Mac 平台的安全,你就一定会在媒体上听过他的名字,或读过他发的技术文章。对于 macOS 平台红蓝对抗、EDR 等终端安全产品的从业者来说,Objective-See 是必读网站。
目前这个基金会主要运营 Objective-See 的免费开源 macOS 安全工具包,《The Art of Mac Malware》系列书籍的撰写和筹办 Objective by the Sea 会议。
很不幸这次我不能去发回现场报道,所以发一些小小的剧透蹭热度。
前几周才厚着脸皮问他临时加塞了一张门票,本来想着这次终于可以网友见面,没想到又出情况不能成行。从 2019 年开始到现在,年年邀请,年年放鸽子,每次原因还都不一样。
我本来还约好了朋友趁机去巴塞罗那过生日,这下不但聚会没了,顺带下周巴黎的另一场会议 Hexacon 也黄了。万幸最后我生日没落得一个人过。
不认识路,找了个看上去有点脏兮兮的海滩敲了点文章,别笑
顺便说一嘴。和越狱圈天天相爱相杀的苹果某知名内核安全开发 Pierre(@pedantcoder),他下周也去 Hexacon。之前这帮人推特上就经常线上调戏,这回会发展到线下舌战群儒吗?想想还挺好笑,遗憾的是我不能去现场当小报记者了。
详细的议题名单在这:
https://objectivebythesea.org/v5/talks.html#Speaker_25
篇幅限制,仅摘录三个我个人最期待的议题。下面的介绍带有我强烈的个人偏好,所以完整的内容还请读者自行查阅官网。
Process Injection: Breaking all macOS Security Layers with a Single Vulnerability
这个议题在今年 BlackHat 讲过一次。博客和 BlackHat 的议题幻灯片地址如下:
https://sector7.computest.nl/post/2022-08-process-injection-breaking-all-macos-security-layers-with-a-single-vulnerability/
https://i.blackhat.com/USA-22/Thursday/US-22-Alkemade-Process-Injection-Breaking-All-macOS-Security-Layers-With-a-Single-Vulnerability.pdf
这个议题新颖的地方首先在于攻击面,逆向分析了一个高频使用但很少人分析过的 app 状态保存/恢复机制。
本质上就是攻击对象序列化和反序列化。有趣的点在于,Java 的反序列化被研究得非常透彻,而 Objective-C 反序列化则鲜有人问津。
最早 Google Project Zero 在这方面做了不少研究,一开始 2017 年 Ian Beer 就提交过一些缓冲区溢出的问题,而到了 2019 年则直接完成了一个通过 iMessage 的“零点击”攻击演示。GP0 对此的研究都用了内存安全的漏洞。毕竟在 iOS 上有强制代码签名策略,纯逻辑的方式执行代码似乎是不可能的事……
直到后来这个认知被 NSO Group 的 iMessage 0click 利用打破。很显然 NSO 从 GP0 等的公开研究里学习了不少技巧,也第一次找到了一个完全使用反序列化逻辑漏洞来实现沙箱逃逸的例子。虽然已经是去年的事件,直到现在,这个 exploit 还是反复被安全社区和媒体拿出来鞭尸。
话题回到 macOS 代码注入的这个议题。
如果对 Java 反序列化有研究,会知道面向属性编程(POP)这个概念。简单说就是从现有的代码中找到一连串特定功能的代码片段,这些代码片段通常出现在对象反序列化的生命周期方法中,读取特定的属性作为输入。通过控制序列化数据可以控制这些方法的执行流程,通过一连串的调用链实现最终的目的。
在 Objective-C 中也类似,主要通过 initWithCoder: 这个生命周期方法构造输入和 POP 链条。写到这里有点收不住了,还是看作者自己怎么解释的吧。之前 BlackHat 的版本中有一些细节一笔带过了,比如第三点任意 class 的构造,第五点怎么将任意个参数传递给任意方法。
也许 OBTS 这个版本会填上之前的坑?
这篇研究可能是 Objective-C 反序列化逻辑漏洞的开山之作。
虽然 macOS 本身修复了其中的部分问题;由于一些 iOS 开发书籍、教程本身水平有限或者没有及时更新,畅销书上写的代码就有安全漏洞。这个不安全的库函数调用在第三方 app 当中遍地都是,能否利用还取决于是否允许可控外部输入和能不能找到足够的 POP 链。这就是议题之外的后话了。
Fugu15 - The Journey to Jailbreaking iOS 15.4.1
这篇文章标题就是靠 Fugu15 骗点击,怎么能不单独列出来?
之前 iOS 很久都没人发过完美越狱(即重启后仍然保持状态),Linus Henze 直接扔了个 Fugu14 出来。
有不少文章认为 Fugu14 上一个完美越狱是盘古的 9.2.1。我之前介绍 0x41con 的发起人就提到了 xerub,他之前放出过一份在 iOS 11 上实现了重启后持久化执行未签名代码,也就是所谓的 untethered:
https://github.com/xerub/acorn
但这份源码对于只是想在手机上装插件的普通越狱用户来说,毫无可操作性。所以大家没印象,正常。
iOS 15.2 增加了很多安全防护机制,一度有人认为是越狱的终点。Linus 将在议题当中介绍自己所用的漏洞的技术细节,特别是如何绕过当时最新的防护措施(mitigations)。
没记错的话今年他才 20。别说了,人比人气死人,更不要说信息技术这种靠脑力可以拉开绝对优势的领域。
议题有一句很值得玩味的话:
A demo of Fugu15 will also be shown, including an interesting (and uncommon) way to install Fugu15 on a device.
古早的 jailbreakme 是通过访问一个网页触发 exploit;而装 app 越狱更为流行,电脑装一次自签名 app 能续上好几天。Electra 和 Unc0ver 都是典型的例子。
那 Fugu15 有什么花样?直接泄露一个吧,虽然这次没有完美越狱,但 Fugu15 可以通过网页直接安装。
本来他想在 0x41 上讲,但是和 Product Security @ AAPL 沟通过的条件是 90 天披露期,在此之前不能对外发布漏洞细节。而OBTS v5 正好到期。这个议题的幻灯片自然也是甲方审核过的,哈哈哈。
这也是一件很有意思的事。原本苹果和越狱水火不容,法院也上过。现在居然允许拿了“保护费”(Bug Bounty)的黑客披露漏洞细节。
Abusing iPhone Co-Processors for Privilege Escalation
Ian Beer 似乎最近不怎么活跃了,只在几个野外利用分析的报告里见到过他的署名。很好奇在干嘛。看到一体介绍,不用猜,多半是关于 Display Co-Processor(DCP)的。
之前 GP0 的博客已经写过一篇比较详细的分析:
https://googleprojectzero.blogspot.com/2022/06/curious-case-carrier-app.html
相信这篇议题也是围绕这个博客展开。
除此之外还有一些关于 TCC、GateKeeper 、KeyChain 等基本安全功能的分析甚至绕过漏洞,红队的技巧,恶意软件实例分析,蓝队如何使用 OSQuery 部署终端安全,终端安全产品开发等的内容,篇幅所限就不一一翻译了。