随着2019年进入最后一个月,整个2010年代即将成为过往。过去十年漏洞领域的研究发展,可谓波澜壮阔、精彩纷呈。我屡次提笔试图记录这十年的技术发展,最终都因为这个事情的难度远远超出自己的预想而弃笔。不过有些想法不吐不快,索性简单总结些个人观点,抛砖引玉供人讨论、补充和参考。
1、后PC时代,控制流完整性 (Control flow integrity) 成为新的系统安全基础性防护机制
2000年代后期,地址空间随机化(ASLR)和数据执行保护(DEP/W^X)成为两项通用的基础性漏洞利用缓解机制。不幸的是,利用漏洞实现内存信息泄漏绕过ASLR进而基于ROP/JOP/Data-only attack等攻击技巧实现任意代码执行成为攻击者的标配 (更多内存漏洞攻防技术信息,参考《SoK: Eternal War in Memory》,https://people.eecs.berkeley.edu/~dawnsong/papers/Oakland13-SoK-CR.pdf)。面对大量绕过ASLR和(DEP/W^X)的漏洞利用样本,学术界再次掀起了针对细颗粒度ASLR和Anti-ROP的研究高潮。最终,在诸多潜在技术解决方案中,(粗颗粒度的)控制流完整性技术赢得了市场 (不同CFI机制实现细节和对比,参考 《Control-Flow Integrity: Precision, Security, and Performance》https://nebelwelt.net/publications/files/17CSUR.pdf)。为此,英特尔芯片中新增了CET特性(Control-flow Enforcement Technology),支持粗颗粒度前向跳转地址验证和基于Shadow Stack Register的返回地址验证,ARM V8.3标准中增加了PAC(Pointer Authentication Code)特性,支持对数据或者代码指针完整性的验证;LLVM、GCC、VisualStudio等主流编译器中支持开启CFI特性的编译选项;Windows、Android、iOS等操作系统都已经在用户态和内核态实现不同粒度的CFI机制。
CFI机制可以有效缓解控制流劫持类型的漏洞利用技术。但是,如果漏洞利用过程中不依赖于控制流劫持即可获取任意内存读写能力,CFI机制也无法保证内存数据的完整性和机密性。例如,2014年爆发的Heartbleed漏洞是由OpenSSL库心跳协议解析过程中的内存越界读引起的;攻击者可以利用该漏洞读越界读取服务器内存中的敏感信息。面对这种“简单粗暴”的越界读,CFI也无能为力。现阶段基于软件的CFI实现,很难对函数返回地址有效验证;基于硬件的CFI实现,依赖于新型硬件支持,普及范围有限。此外,实现覆盖操作系统内核、系统服务和用户态应用的全栈CFI尚需时间,攻击者可以对尚未应用CFI或CFI实现不完备的模块攻击。
过去十年里,64位芯片大范围普及,在性能大幅提高的同时,增加了很多新的安全特性。Intel芯片相继支持SMEP (Supervisor Mode Execution Prevention)和SMAP (Supervisor Mode Access Prevention)特性,ARM平台上实现相应的PXN (Privileged Execute Never)和PAN(Privileged Access Never)特性,强化了内核和用户态之间的隔离。Intel早在2016年就发布的CET特性,终于有望在下一代Tiger Lake处理器中实现。ARM v8.3 中PAC特性在苹果A12系列芯片得到了实现,自iPhone Xs起,iPhone家族正式进入到PAC时代;结合新的PPL (Page Protection Layer)机制,iPhone设备上代码动静态完整性得到了前所未有的保护。2018年,ARM公布了v8.5,其中MTE(Memory Tagging Extension)特性有望有效缓解内存越界类的安全漏洞。
这些已经部署和即将部署的硬件安全特性令人对下一阶段系统安全充满期许,而过去几年中暴露出来的硬件底层安全漏洞同样令人吃惊。2014年,CMU的研究人员在计算机体系结构领域顶级会议ISCA上,发表了题目为“Flipping Bits in Memory WithoutAccessing Them: An Experimental Study of DRAM Disturbance Errors”的论文,介绍了影响深远的Rowhammer问题:高频访问DRAM内存单元可能引起临近内存单元中数据bit反转。几个月后,Google Project Zero团队就成功利用该问题实现了沙盒逃逸和内核提权(https://www.blackhat.com/docs/us-15/materials/us-15-Seaborn-Exploiting-The-DRAM-Rowhammer-Bug-To-Gain-Kernel-Privileges.pdf);其他研究团队进一步在浏览器环境、移动设备环境里重现和利用了这个问题。尽管很多研究人员提出了缓解Rawhammer问题的方法,从成本、性能、有效性等角度综合考量,彻底杜绝Rawhammer问题仍面对巨大挑战。
除了存储器件,处理器本身也问题重重。长久以来,不断有研究讨论处理器某些新增特性会引起侧信道攻击,安全和性能的冲突愈发严重。处理器侧信道这一问题在2017年集中爆发。多个研究团队相继公开了Spectre、Meltdown以及各种变形攻击,利用处理器乱序执行、分支预测、推测执行等核心特性,达到绕过内存隔离机制越权读取内存的效果。这些侧信道攻击不仅可以使ASLR安全防护机制失效,甚至可以导致Container、SGX等执行环境中隐私数据泄漏。考虑到这些芯片的巨大存量以及修复的复杂性,Spectre、Meltdown 这些攻击的长尾效应会非常明显。
2010年代,移动互联网的爆发式增长离不开两大移动操作系统的发展:iOS和Android。放下了兼容性等沉重包袱,移动操作系统的设计者们获得了从零开始设计安全架构的机遇。虽然iOS和Android起源于“古老”的XNU和Linux,移动操作系统的设计者们从桌面操作系统陷入安全困局的过程中学习到了足够多的教训。移动操作系统从全新视角处理用户、设备、应用和开发者的关系,打造了新的移动生态环境,在此基础上全方位的从信任根存储、可信启动链、固件开放度、版本控制、应用分发、权限管理、沙盒设计、数据加密、硬件隔离环境等角度改进终端安全。在对抗漏洞利用的策略上,移动操作系统不仅快速部署了PC系统中通用的漏洞缓解机制,而且不断采用软硬件相结合的漏洞利用封堵机制。与桌面操作系统对比,移动操作系统的安全性实现了弯道超车。
不过,移动设备面对的攻击也越来越多。尽管难度越来越大,业界一直都存在针对最新iOS设备的越狱;野外针对iPhone的远程攻击样本多次被捕获;从初代iPhone到iPhone X之间所有iOS设备的Bootrom中都存在安全漏洞,由于Bootrom代码固化在硬件中,这些漏洞无法通过软件升级修复,致使这些设备永远都能越狱。对于Android设备,TEE (Trusted ExecutionEnvironment)是具备最高权限的执行环境;然而,研究人员在不同厂商Android设备的TEE里都发现过高危安全漏洞;随着承载的功能越来越多、攻击面越来越大,TEE面临的考验依然十分严峻。
2010年代,作为最主要的网络入口,浏览器成为各大巨头公司的争夺焦点。同样的,浏览器也成为了网络攻击的焦点。自2007年起,漏洞军火商ZDI公司每年都会举办PWN2OWN比赛(https://en.wikipedia.org/wiki/Pwn2Own),浏览器一直都是比赛的重头戏。在这十年里,各家厂商开始了漫长的浏览器安全治理之路:一方面不断强化隔离策略,尝试将不同功能模块拆分到不同执行空间,细化内存管理器,实现不同对象堆空间隔离等,提高漏洞利用难度;另一方面采用筑墙策略,不断细化浏览器沙盒规则,缩减系统暴露给浏览器的攻击面,降低已获取任意代码执行能力的情况下漏洞造成的危害。这十年中,浏览器一再被攻破,但是攻击的难度也越来越高。诸如Chrome浏览器的沙盒逃逸和PAC环境下Safari浏览器的任意代码执行等问题都是当下研究的难点。不过可预见的,浏览器攻防对抗仍将是下个十年的热点。
继浏览器之后,WiFi协处理器、BaseBand基带、蓝牙也都成为攻击对象。2017年,Google Project Zero成功展示了通过畸形WiFi信号,攻击WiFi协处理器中漏洞并以此为跳板控制Android和iPhone手机内核的完整攻击链。最近几期的Mobile Pwn2own比赛中,手机基带已经成为常规项目:攻击者通过伪基站信号,攻击BaseBand基带的漏洞。另外,作为网络拓扑中的一个重要缓解,路由器也成为攻击的重灾区。不幸的是,很多路由器厂商显然还没有做到准备,旗下产品在各种破解大赛中屡次被攻破;选手所利用的漏洞大多是简单命令注入或最传统的堆栈溢出。
针对即时通信工具、社交软件、邮件客户端的远程攻击威力巨大。2019年的BlackHat USA峰会上,Google Project Zero、盘古团队、和微软安全团队分别披露iMessage、Facetime和OutLook客户端的远程漏洞;针对WhatsApp的远程攻击样本在野外捕获。反观国内,微信、QQ、微博,这些拥有庞大用户量的社交软件,安全性到底如何呢?作为参考,2017年,我们在一个流行解压库里发现路径穿越的问题,结果当时的微博、陌陌、快手、网易云音乐、QQ音乐等应用都受影响;通过流量劫持触发该漏洞并覆盖热补丁文件后,我们在微博应用里获取了任意代码执行的能力。
对于传统PC和服务器而言,网络服务的安全性仍旧令人担忧。2017年,Windows SMB 协议的安全漏洞“永恒之蓝”披露后,爆发了席卷全球的Wannacry类蠕虫病毒。
提到漏洞研究,不能不提自动化漏洞挖掘。2000年代涌现出一大批基于程序静态分析的漏洞检测技术,但在2010年代,模糊测试fuzzing赢得了更多检验和认可,程序静态分析则更侧重于服务于fuzzing的样生成和反馈指导。以ClusterFuzz, OSS-Fuzz, AFL等为代表的工业界fuzzing工具在实战中发现了大批软件安全漏洞,学术会议上关于fuzzing的论文也越来越多。更可喜的是,关于自动化生成漏洞利用样本的研究也越来越多。Google Project Zero 所披露的漏洞中,fuzzing所发现的比例高达37%; 不过,人工审计发现的比例是54.2%(https://i.blackhat.com/USA-19/Thursday/us-19-Hawkes-Project-Zero-Five-Years-Of-Make-0day-Hard.pdf),人力仍然是漏洞挖掘的最宝贵资源。
2020年代迎来了5G,真正的万物互联时代将到来,漏洞的影响范围会因此越来越广。一方面,核心系统的安全防护会继续提升;面对这些最新、最全面的防护机制,攻击研究的难度会越来越大,高价值漏洞和利用技巧将成为稀缺资源。另一方面,安全防护的短板效应会进一步放大。在万物皆可被攻击的环境里,各种薄弱环节将成为攻击者的首选目标。如何从单点防护扩展到系统化全局防护体系建设可能迎来新的机会。
原文始发于微信公众号(盘古实验室):从研究者视角看漏洞研究之2010年代