细数iOS上的那些安全防护

细数iOS上的那些安全防护

作者:龙磊、黑雪、蒸米@阿里巴巴移动安全

0x00 序

随着苹果对iOS系统多年的研发,iOS上的安全防护机制也是越来越多,越来越复杂。这对于刚接触iOS安全的研究人员来说非常不友好,往往不知从何入手。因此,为了让大家能够更加系统性的了解iOS上的安全机制,我们从三个方面着眼:代码签名(CodeSign)、沙盒机制(SandBox) 和利用缓解(Exploit Mitigation),对iOS的系统安全机制做了一个总结。希望能够给大家的学习以及研究带来一定的帮助。注意,以下内容是以最新版的iOS 9.3.4做为标准进行讲解。

0x01 代码签名(CodeSign)

为了保护开发者的版权以及防止盗版应用,苹果系统拥有非常严格的签名保护机制。想要开发iOS程序,必须先注册开发者账号,并向苹果申请相关的证书,否则程序只能在模拟器上运行,无法在真机上调试,也无法上架App Store。除了传统的签名机制以外,苹果还额外增加了Team ID的安全防护措施,用来增强iOS系统的安全性。

(1). 传统签名机制 - 数字证书

传统的签名机制即iOS系统中使用的数字证书机制。数字证书是一种对数字内容进行校验的方法,它首先对内容使用摘要算法(例如MD5,SHA1)生成一段固定长度的hash值(可以理解为原内容的摘要),然后利用私钥对这个摘要进行加密,得到原内容的数字签名。接受方一并接收到原内容和数字签名,首先用相同的摘要算法生成原内容的摘要,同时用公钥解密数字签名,得到摘要2,然后比较摘要1和摘要2,若相同,则验证原内容有效。我们从苹果MC(Member Center)中获得的数字证书就是被苹果CA签过名的合法的证书。而iOS设备在执行app前,首先要先验证CA的签名是否合法,然后再通过证书中我们的公钥来验证app是否的确是开发者发布的,且中途没有对程序进行过篡改。理论上想要破解或者绕过这个签名机制,需要能够获取到苹果的私钥,或者能够找到签名校验过程中的漏洞。

(2). 签名校验的实现

iOS在运行代码前,都会对即将运行的代码进行签名校验。签名的校验机制是运行在内核里的。因此想要关闭这个校验的话,需要对系统进行越狱才行。内核在vm_fault_enter中规定了绝大部分情况下,具有执行位的页需要进行签名有效性检查,如果检查到该页签名无效会为进程设置kill flag。签名校验分两种情况;如果binary是platform binary,系统会直接校验binary的哈希值是否存在于trustcache中。如果binary是第三方应用程序,会先在内核在检查执行页对应hash值,而页hash对应的签名由用户态进程amfid校验其正确性。

(3). Team ID

Team ID 最早在iOS 8中被提出,在iOS 9中得到了进一步的加强。Team ID的出现主要是为了阻止攻击者将自己的动态库加载到不属于自己的executable中,常见例子:越狱过程中将动态库加载到系统进程,获得沙箱外的任意代码执行能力;恶意应用通过沙箱逃逸将自己的动态库加载到别人的app运行环境,盗取账号密码等有价值的信息。所以Team ID的具体的校验逻辑就是根据这个原则来设计。除了特殊情况,系统的进程只能加载系统的动态库。第三方app根据自己的Team ID来决定哪些具有相同Team ID的dylib能被加载。

0x02 沙盒机制(SandBox)

很多系统都有沙盒机制,但是像iOS这么复杂的却很少。iOS从UID/GID permission,MAC和entitlement三个维度实现了整个系统的沙盒机制:

(1). UID/GID permission

一般情况下,iOS会将进程的权限分为root和mobile,一些特殊的模块(比如基带)会有自己的用户组。需要注意的是,所有第三方的app都是运行在mobile权限下的。

(2). iOS Mandatory Access Control

iOS的MAC在TrustedBSD Mac Framework基础上实现,在内核具体接口、具体位置插入权限hook check(mac_** call),在发生调用时检查当前进程是否满足调用的MAC police。

而进程的MAC police主要是通过sandbox profile。Sandbox profile是苹果为每个系统进程或app预设的,例如:哪些文件可读可写,哪些不能;哪些system call可以调用,哪些不能等等。

对于系统进程,一般情况下苹果会为不同的系统进程配备不同的sandbox profile,既满足业务需求,又遵循权限最小化原则。

对于第三方app,则是统一配备名为 Container 的sandbox profile,这个profile里面的内容限制可达数千条。限制非常严格,以致于只有很少数的syscall能在第三方app内访问。一些安卓中非常普通的调用,例如fork,exec等创建子进程的系统调用,在第三方app内都是无法生效的。我们常说的沙盒逃逸,其实目的就是跳出container的sandbox profile。

(3). Entitlement

Entitlement的出现主要是为了上面两个维度都无法解决的权限检查问题。

假设有这样的场景:

进程 A 是 service 、进程 B 是 client,两者通过IPC通讯。

进程A提供的服务接口分别有:a1 , a2 ,其中只希望接口a1能被B访问。

因为检查发生在用户态,不能直接使用TrustedBSD Mac Framework,同时需要有更简单的查询方式,这样就需要在a2接口的代码中加入权限校验。基于entitlement的校验框架就是在这个需求背景下被提出来的。业务进程只需要关注entitlement的内容,而entitlement的正确性由签名保证。比如想要访问提供了能删除app的接口的”com.apple.mobile.installd”服务就必须拥有对应的”com.apple.private.mobileinstall.allowedSPI” entitlement才行。而lockdownd这个service是用于和iTunes交互来进行安装、升级、删除应用的,所以这个服务为了能与installd服务通讯,进行删除app操作,就需要拥有”com.apple.private.mobileinstall.allowedSPI” 这个entitlement:

0x03利用缓解(Exploit Mitigation)

除了常见的Stack Canaries、 ASLR和DEP等利用缓解技术之外,iOS还有很多高级的或者独有的利用缓解技术:

(1).栈金丝雀保护 (Stack Canaries)

栈金丝雀保护是已知的放置在缓冲器和控制数据之间的一个随机值。当缓冲器溢出时,最先被破坏通常是金丝雀值。因此当金丝雀的数据的验证失败的时候,就表示出现了缓冲区溢出,从而触发保护机制,并使程序停止运行。

(2).地址随机化 (ASLR/KASLR)

为了增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,用户态进程在每次启动时的执行文件基址都是随机生成的。并且,在每次手机重启后,内核kernel mach-o的基址也是随机的。

(3).数据执行保护 (DEP)

DEP是为了防止数据页执行代码。通常情况下,默认不从堆和栈执行代码。DEP会检测从这些位置运行的代码,并在发现执行情况时引发异常。在mprotect对应的内核实现中,不允许page被同时赋予执行和写这两种权限。当page的权限发生变化或一个新的page mmap到内存中的时候,vm_fault_enter会检查这个页是否有执行位,如果有执行位,会对这个页做签名检查。

(4). 堆释放元素保护 (Heap Free Element Protection)

在iOS中,如果修改一个zone中已释放的free element,当内存管理器再次分配内存到这个free element的时候会发生随机panic。具体的逻辑是,当element被释放后,内核会根据重启时创建的token生成一些内容填充在element中。这样一方面用户态无法得知填充的内容是什么,另一方面内核在分配内存的时候可以根据token知道这个element有没有被修改,如果被修改就产生panic。

(5).堆元素地址随机化 (Random Heap Element Address)

iOS系统在释放内存块的过程中,会对内存释放后在free队列中的顺序进行随机化处理,这个安全措施主要是使用攻击者无法根据堆喷接口调用的时序来预测对应元素在内核的布局。

(6).内核补丁保护 (Kernel Patch Protection)

ARMv8-A架构定义了四个例外层级,分别为EL0到EL3,其中数字越大代表特权(privilege)越大:

EL0: 无特权模式(unprivileged)

EL1: 操作系统内核模式(OS kernel mode)

EL2: 虚拟机监视器模式(Hypervisor mode)

EL3: TrustZone monitor mode

KPP就是运行在Application Process 的 EL3中,目的是用来保证:只读的页不可修改、page table 不可修改、执行页不可修改。 

0x04 总结

虽然iOS有众多的安全机制和缓解措施,但这并不代表iOS系统牢不可破。有时候一些不起眼的小错误就可能导致蝴蝶效应,最终造成整个安全系统的崩盘。通过对最新的iOS 9.3.4研究,我们团队依然找到了iOS系统上的一些安全问题,甚至可以导致整个系统被控制。如下视频就演示了在最新的iOS 9.3.4上获取系统最高权限并安装cydia的过程:

视频:http://v.youku.com/v_show/id_XMTY5NjQxMDc0OA==.html

更多技术交流和进展,欢迎大家继续关注阿里移动安全。

0x05 参考资料

1. Hacking from iOS 8 to iOS 9, POC 2015.

2. ARMv8 wiki

3. To Sign and Protect – COPS in OS X and iOS, RSA 2015

4. 漫谈iOS程序的证书和签名机制

 

作者:龙磊、黑雪、蒸米@阿里巴巴移动安全,更多安全类技术文章,请访问阿里聚安全博客


阿里聚安全由阿里巴巴移动安全部出品,面向企业和开发者提供企业安全解决方案,全面覆盖移动安全、数据风控、内容安全、实人认证等维度,并在业界率先提出“以业务为中心的安全”,赋能生态,与行业共享阿里巴巴集团多年沉淀的专业安全能力。

时间: 2024-11-01 20:13:56

细数iOS上的那些安全防护的相关文章

细数史上十大坑爹软件

  坑爹软件之十:取消在线状态的手机QQ 前不久发布的手机QQ iPhone 4.0版/Android 4.1版在用户界面进一步向微信"学习",将所有好友的头像都显示为在线状态,并去除了"在线""离线"文字提示.这让很多手机QQ用户感到不习惯.愤怒的用户在App Store评价栏里给手机QQ打出了7万条"一星"评价,让手机QQ的口碑创下了历史新低. 不让用户看见QQ好友的登录设备,其目的是打造"无差别登录"

OA公司有哪些?细数市场上主流OA系统

伴随着企业信息化的大潮大浪,用户对OA系统的需求呈现出明显增长的趋势.为了迎合用户的需求,OA系统在建设的过程当中不断创新,不论是在产品的技术还是组织架构方面都将脱胎换骨,致力于为用户打造最方便.最全面.最快捷的办公平台系统.而在这些快速前行和发展的OA系统当中,最受瞩目的就属泛微OA.致远OA和华天动力OA了.下面,就让我们来为这三家OA系统做一个横向对比,以此作为一个选型参考. 从功能上来看 泛微OA系统目前有着ecology.eoffice.eteams版本的OA软件产品,其功能非常全面,

时刻为iPad 3准备着!细数iOS高清游戏大作

史上最好的3D动作游戏前言:近日,倍受瞩目的iPad 3终于有了确切的消息,苹果公司将于美国太平洋时间3月7日上午10:00(北京时间3月8日2:00)在旧金山召开发布会,推出新一代iPad产品.美国多家媒体收到的邀请函显示为iPad一角,包括地图.日历以及Keynote三个图标.日历图标暗示发布会将在3月7日星期三举行.邀请函文字显示:我们这里有些东西,你们必须来看一看.摸一摸((We have something you really have to see. And touch).苹果发出

细数iOS发展史 往届WWDC大会回顾

万众期待的WWDC(苹果电脑全球研发者大会)大会召开在即,在此之前我们已经听到了很多关于本次大会的消息,除了一直备受关注的iOS 8之外,苹果将涉足智能家居平台,以及iWatch即将亮相都为本届WWDC增添了不少亮点.当然在展望未来的同时我们不能忘记过去, 第一届WWDC大会于1983年在美国加州举行,按照传统,苹果公司将会发布最新研发的技术以及产品, 另外还会向参会者介绍在过去的一年中产品的销售情况.但实际上,之前的WWDC大会不但不会向公众开放,甚至是完全保密的,就连召开的时间也时有变动.那

细数车展上的那些乳神们

[page] [page] [page] [page] [page] [page] [page] [page] [page] [page] [page] [page] [page] [page] [page] [page] [page] [page] [page] [page] [page] [page] [page] [page] [page] [page] [page] [page] [page]

细数下现在网络上风行的SEO培训的五大罪行

摘要: 随着SEO的迅猛发展,在网络上各种SEO培训也越来越多,其中,很大一部分都是打着免费听课的旗号.现在SEO培训已经相当混乱,10块大洋你就可以在淘宝买到30G的资料.SEO行业本来就比 随着SEO的迅猛发展,在网络上各种SEO培训也越来越多,其中,很大一部分都是打着免费听课的旗号.现在SEO培训已经相当混乱,10块大洋你就可以在淘宝买到30G的资料.SEO行业本来就比较混乱,要知道,在SEO行业赚钱的人是不会大声嚷嚷说我赚了钱,我来开办培训和你分享我的财富.现在我们来细数下现在网络上风行

凤姐比美被评赛天仙 细数坑爹iOS软件

细数坑爹iOS软件话说又到了一年一度的315打假日,在这一天难免会有很多坑爹产品被揪出来.今天我也为广大iPhone.iPad用户做一点小贡献,让一些高居App Store排行榜的坑爹应用现出原形.话不多说,下面我就给大家一一亮出这些神奇的App,真心不明白苹果是怎么通过审核的--

细数人体器官仿生,还有哪些可开发的

细数人体器官仿生,还有哪些可开发的 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 人体器官列表(后续'借'张人体图过来 -- 读书人的事情,不能叫偷,叫窃,谐个音,就叫借了) 1.眼:摄像头:

拒绝单打独斗!细数云计算十大企业合作

本文讲的是拒绝单打独斗!细数云计算十大企业合作[IT168 专稿]许多公司都在为了围绕着云计算创新和吸收云计算基础架构进行合作.许多大公司进行合作,协同提供云解决方案.无论是Google和VMware还是微软和惠普,都在为了综合云产品结成合作伙伴.至于确定于那家公司合作,这就是解决方案供应商自己的事了. 为了证明在云计算的旅途上,很少有厂商会单枪匹马,在这里我们列出了十个厂商合作的事件以供参考. Google 与Vmware Google致力于将企业自身深入人心.为了达到这一目标,这个搜索巨人,