MOSEC 2022 Record

Preface

这篇文章在参会结束后就已经被我提上日程了,一直拖到现在才正式开始写。已然是 12 月,刚好距离会议一个月整。写这篇参会回忆的目的也很简单,一方面是沉淀会议给我带来的启发与思考,另一方面则是一种激励。

今年的 MOSEC 是 11 月 4 日在上海万达瑞华酒店举办的,酒店坐落于上海外滩,与陆家嘴的东方明珠隔黄浦江相望,号称是万达旗下七星级酒店。我是第一次参加这种线下的安全会议,从参会体验来说,不论是会议分享的内容还是环境氛围都是相当不错的,从头到尾听下来虽说不可能全盘消化,但在尝试理解的过程中也能得到不少启发。

这篇 MOSEC 参会回忆中没有包含 BaiJiuCon 的部分。所谓 BaiJiuCon,即台下观众自告奋勇上台分享,每喝一小杯茅台可以获得 5 分钟的演讲时间。说来惭愧,当时我的关注点几乎在大屏上方的倒计时,暗中估算分享人还要不要再饮一杯,因此错过一些精彩的内容。如果有下次的话,我一定下不为例……

在这里感谢提供 MOSEC 门票的华为奇点实验室,感谢 AAA 举办的 ZJUCTF 提供了获取 MOSEC 门票的平台。

Understanding the Apple IO80211Family Subsystem Vol. 2

Speaker: Yu Wang
Bio: The Co-founder and CEO of CyberServal. He loves everything regarding Operating System kernel, from kernel architecture, device driver development, Rootkit/Anti-rootkit solutions to vulnerability hunting, exploitation and mitigation. He has previously presented at MOSEC 2020, Black Hat USA 2014, 2020 & 2022, Black Hat Asia 2016 & 2021, Black Hat Europe 2020 and other conferences.

会议的第一个议题演讲者是薮猫科技的王宇老师,也怪我孤陋寡闻、有眼不识泰山,会议前我特地搜了一下,GeekPwn 评委、多次在 BlackHat 发表演讲、前 FireEye 高级研究员等等,title 可以用闪闪发光来形容。

回到议题本身,这次王宇老师分享的内容是 2020 年 Vol.1 的延续。两年前他便在 MOSEC 分享过 IO80211Family 的相关内容,而时过境迁,Apple 针对该子系统也做了重构,王宇老师时隔一年多针对这一重构后的 IO80211Family 又展开了相关研究。

虽然王宇老师分享的条理逻辑很清晰,但假如我声称完全理解了他分享的内容,那一定是谎话甚至是笑话。我可以做到的是列出一些议题中触动我思绪的点,并尝试梳理后记录下来。后面的议题我也会采用类似的方式,整理出一些我的思考。

  • 攻击面的发现往往很重要。记忆中王宇老师提到,Google Project Zero 里有些研究员提出的新的攻击面有时比漏洞本身更具有价值。在我的理解里,用“选择有时大于努力”来比喻这个现象是比较恰当的,一个新的攻击面所带来的或许是数以百计乃至更多的漏洞。

  • 趁手的工具使得漏洞挖掘的过程事半功倍。在王宇老师分享的这个议题当中,这里的“工具”指 Fuzzing 工具与动态调试工具。在研究重构后的 IO80211Family 的过程中,他将之前开源项目 kemon 移植到了 Apple Silicon 平台并基于 lldb 搭建了远程内核调试环境。通过一个 demo 视频,展示了如何结合使用上面提到的两种工具,相信参会的二进制研究人员都能体会到 debugger 在 console 里任你差遣的喜悦与满足。

  • Do one thing and do it well. 这是 Unix 的哲学,也是 Linux Kernel 的编码规范。王宇老师之所以提到这点,是源于议题中分享的一个他挖洞的亲身经历,漏洞的成因便是在没有遵循上述编码规范:

    void vulnerable(void **args) {
        // ...    
        if (condition0 && (condition1 || condition2) || !condition3) {
            // ....
        }
        else {
            // what should be written here?
        }
        // ...
    }

    上面的代码中,if 判断中合并了太多条件,那么 else 中能否将剩下的情况全部当做同一情况处理呢?如果不能,那么这里很可能就会引入漏洞。

  • 漏洞可能会反复出现在同一模块或组件。这是王宇老师的经验之谈,在代码的重构、整合过程中,有可能不知不觉中引入了新的漏洞,甚至会出现栈溢出这样简单却实用的漏洞。此外,在新版本安全补丁发布后,相关审计工作也需要尽早开始,漏洞可能就潜藏在新的 patch 当中。

有一个比较有意思的小插曲,在午饭时也听到了 AAA 的学长们对这个问题的讨论:王宇老师在分享自己的 Fuzzing 工作时提到,作为独立研究员,仅仅用一台 Mac 的计算资源是远不能和 Google 这样企业级的计算资源相提并论的,所以在 Fuzz 时他采用了这样的策略 —— 例如一个函数有 5 个参数,仅选取 3 个进行 Fuzz,这样使得他在相同的时间内使得程序跑到了更“深”的地方,非常神奇。

除了这个议题的分享之外,BaiJiuCon 上也出现了王宇老师的身影,介绍的是之前他在 BlackHat 上演讲的内容。王宇老师这个称呼我觉得名副其实,在我看来,身为 CEO 并且已经拥有了这么多安全的 title,仍能在漏洞挖掘的前线做研究工作,这种热爱是值得所有安全研究人员学习的。

La La Land: Theory and Practice on Large-Scale Static Bug Hunting for Android Systems

Speaker: Flanker
Bio: Qidan He, Senior Director of Shaechi Security Lab. He is the winner of multiple Pwn2Own championships and Pwnie Award Best Privilege Escalation. He is recognized in Google and Samsung’s global top security researcher hall of fame, and has spoken at conferences like Black Hat, DEFCON, RECON, CanSecWest, MOSEC, HITB, PoC, etc.

第二个议题的演讲人是 AAA 的老学长,Flanker —— 何淇丹。如果把王宇老师议题的内容总结为 Fuzzing + 动态调试的话,Flanker 的内容可以总结为污点分析 + 静态分析。

Flanker 主要探讨了 Android Java 静态分析引擎。他提到,目前学术界与工业界的做法是 pointer analysis 结合 call graph build,但仍然存在调用路径的缺失等问题。鉴于此,他引入了安卓平台下使用 IFDS (Interprocedural, Finite, Distributive, Subset Problem) 算法的解决方案。粗略的了解了一下,IFDS 算法用于解决程序静态分析中的过程间数据流分析问题。

最后,Flanker 选取了实战中的一些案例,对三星及小米的部分漏洞进行了较为详细的分析。印象中比较深的是 xiaomi arbitrary download —— 通过条件竞争在下载数据传输的过程中不断尝试 race 覆盖目标下载的应用,从而实现任意应用的下载。

  • 竞争窗口 (race windows)

    之前对条件竞争的理解仅仅局限于概念层面,这次会议不少演讲者都提到了 race condition 这一利用方法,也加深了我对它的理解。综合来看,发生条件竞争的核心便是找到合适的竞争窗口,所谓竞争窗口,从代码层面上理解便是竞争对象对应的代码段(可以结合操作系统里的临界区来理解)。例如上面提到的 xiaomi arbitrary download,它是一个 TOCTOU (Time-of-check Time-of-use) Race Condition,这里的竞争窗口便是 check 到 use 这一时间段:程序执行检查资源时通过,但 attacker 在使用这一资源前竞争修改了该资源。

MediAttack - break the boot chain of MediaTek SoC

Speaker: Xuewen Zhang
Bio: Security researcher from Pangu Team. In recent years, her primary interests are low-level security, such as kernel, bootloader, trustzone.

会议的第三个议题,也是上午的最后一个议题,是由盘古实验室的研究员张雪雯带来的。这个议题围绕联发科 (MediaTek, MTK) 芯片的安全启动链展开,主要讲述了相关漏洞的发现与利用。

也是从这个议题开始,我发现前排的 VIP 位置一直没有人入座,本着勤俭节约不浪费的优良美德,我充分利用了 VIP 座位提供的桌子与纸笔,记录下了这个议题的 agenda:

  1. Secure Boot Chain
  2. First Sight to Attack
  3. Attack MTK BootROM
  4. Break Boot Chain of MTK
  5. MTK Meta Mode
  6. Demo

议题的内容在安卓系统层面来说可以说是相当底层了,我对相关知识知之甚少,唯一沾点边的可能就是解锁 Bootloader 并用 Magisk root 过一台 Google Pixel 系列的安卓机。

flow.png

上图是 MTK 的启动链流程,结合 agenda 来纵观整个议题的内容,可以发现议题是基于漏洞发现并利用这一逻辑进行的。张雪雯首先介绍了上图中的流程,BootROM 在初始时对于研究人员来说是 untouchable 的,因为在从 BootROM 到 Preloader 这一过程中我们无法做任何操作,也没办法提取 BootROM 部分的代码;攻击的切入点是 Preloader,通过 Preloader Download Mode 下的一个越界读写漏洞,使得 dump 出 BootROM 内存与代码执行成为了可能,于是反过来得以对 BootROM 进行深入研究;在针对 BootROM Download Mode 的分析中,印象比较深的是一个任意连续 2 字节写 0 和 2 的漏洞,张雪雯讲到,通过修改边界检查部分的范围绕过白名单,结合另一个漏洞便可以实现任意代码执行;最后展示的 demo 是在 Redmi 上通过前面讲解的漏洞加载自定义操作系统,非常的 amazing.

Understanding Mach IPC

Speaker: Brightiup
Bio: Security researcher from Kunlun Lab, focus on kernel security.

非常硬核的一个议题,来自昆仑实验室的 Brightiup 讲的是 Apple 操作系统中 XNU Mach IPC,内容涉及条件竞争与类型混淆。我在纸上记录的内容上画满了问号,例如他讲到的 struct_ipc_port, mk_timer, QoS, turnstile, double fetch 等等,我听的可谓是云里雾里 :(

The Tour of Coverage Guided Fuzz for An IoT Micro Kernel System

Speakers: Shenrong Liu & Pengju Liu
Bios: Shenrong Liu is a senior security researcher at Singularity Lab, currently mainly researching mobile and kernel security, and has delivered speeches at BlackHat and other conferences. Pengju Liu is also a security researcher at Singularity Lab, member of Tianshu Dubhe team of Beijing University of Posts and Telecommunications, currently mainly researching kernel security.

这个议题选取的研究对象是不太主流的 FuchisaOS,简单了解了一下, Fuchisa 是 Google 继 Android 与 ChromeOS 后开发的第三款操作系统。不同于前两者,Fuchisa 没有使用 Linux 作为其内核,而是使用了名为 Zircon 的新内核,主要面向的是 IoT 设备。

两位研究员首先介绍了 Zircon 内核中的各种机制,随后分析其攻击面并为其适配了 syzcaller 进行模糊测试,最终挑选了一个 UAF 的漏洞进行展示。

Feat(My First EV)!: Add Support for App Store

Speaker: Guanxing Wen
Bio: Security researcher at Pangu in Shanghai, mainly focusing on low-level systems such as trustzone, kernel and peripheral firmware. He is also a fan of pwning smart devices such as TV, speakers, POS and earbuds. He was a speaker at various conferences such as MOSEC,BHEU, Infiltrate and 44CON.

来到了本次会议的最后一个正式议题。

会议进行到这个阶段,按理来说已经较难集中精力去消化演讲者输出的知识了,但不得不承认,闻观行的分享非常吸睛,他分享时语言轻快、生动幽默,给我留下了很深的印象。本来在听完前两个议题后有点自闭,但闻观行讲述故事般的分享,极大地带动了我专注的兴趣与动力。

故事起源于他 2021 年购买的一辆电车。

电车的车载娱乐系统内置的 App 是固定有限的,没有办法安装自己想安装的软件。考虑到有些手机会内置开发者模式,比如连续点击版本号可以打开开发者模式,于是闻观行在车载系统的设置中也做了尝试,发现了一个隐藏的模块,需要输入密码,

这便是他研究这个电车的 motivations:

  1. Install App
  2. Find secret code

在尝试了 USB、Hotspot 与内置应用隐藏入口无果后,他最后选择了 WebView 作为研究的入口,通过已有的 CVE 一步步进入车载系统,最终摸清这是一个 Nvidia Drive OS 实现的虚拟机架构,并在 demo 中演示了他远程获取 root 权限控制车辆门锁、雨刷器、大灯等设备的视频。

Epilogue

行文到此,也接近尾声。

每位嘉宾的议题分享都很惊艳,有的技术分享非常硬核,从代码层面带领观众探究漏洞的成因与 payload 的构造;有的经验分享引人思考,为后人的研究工作提供了宝贵的前人之述;有的过程分享生动有趣,使观众能够带入进去身临其境地体验了研究工作的流程……

期待下一次的相遇,也期待自己有朝一日可以从台下人的角色转变为台上人。

mosec.jpeg