你现在已经听说了苹果公司宣布了一项新的漏洞赏金计划在最近的黑帽会议上。苹果安全工程和架构主管伊万·克里斯特(Ivan Krstic)亲自宣布了这一消息,这是一次不同寻常的露面。但这只是50分钟演讲的最后10分钟。在前40分钟,Krstic前所未有地深入探讨了iOS安全的三个组成部分。我说的深,是指深海。
总的来说,我对这些系统保护用户数据的彻底程度感到敬畏,甚至对苹果本身也是如此。我将尽量传达所说的内容,但不要太专业。
加固的WebKit JIT映射
抱歉,这就是它的名字。JIT代表Just In Time,指的是Javascript代码在执行前及时编译的方式。“这对于高性能JavaScript来说是必要的,”Krstic解释道。“但密码签名政策必须放宽。JIT编译器发出新的无符号代码。攻击者可以执行任意代码。”
简单介绍一下背景知识,可以用读、写和执行权限标记内存区域。这种区分很早以前就引入了,它阻止了在专门用于数据的区域执行代码的攻击。简而言之,苹果的解决方案涉及一种技术,将编译后的JavaScript放入允许的内存区域只有执行。进程不能读取已有的数据,也不能写入新的数据。除此之外还有更多的内容,但这一针对iOS 10的改变消除了所有可能的攻击。
安全Enclave处理器
苹果设备上的应用程序在一个称为应用处理器(Application Processor,简称AP)的CPU中运行。现代苹果设备有一个完全独立的CPU,称为安全飞地处理器(Secure Enclave Processor,简称SEP)。“SEP由一个强大的加密主密钥保护,不受用户密码的影响,”Krstic说。“离线攻击是不可能的。它避开AP的攻击面,即使AP已经被攻破。它仲裁所有用户访问并管理自己的加密内存。在第一次初始化时,它使用一个真正的随机数生成器在处理器内创建一个唯一的设备密钥。它不能导出,而是存储在不可变的安全ROM中。”
Krstic接着解释了该设备如何使用四种不同特征的内部安全密钥。类型A只有在设备解锁后才存在。类型B是一个始终存在的公钥,加上一个在设备解锁时存在的私钥。类型C在设备启动后第一次解锁时出现。D型总是可用的。
演示接着展示了一些非常复杂的图表。其中一个演示了启动和解锁设备的过程,展示了每种密钥类型是如何创建和存储的。你设备上的每个文件都有自己唯一的加密密钥;另一张图显示了让SEP对该文件进行身份验证和解密的复杂过程,同时将基本的安全密钥保存在内部。另一个人解释了让你选择“稍后更新”的复杂过程。还有人完成了允许通过触摸ID解锁的过程,而无需以任何方式保持主钥匙可见。
从这部分谈话中得到的关键是,苹果真的,真的考虑过在Secure Enclave处理器内部完全管理加密所需要的东西,而不强迫用户去做太多的麻烦。如果你想自己看看这些图表,请查看克里斯的完整展示(在新窗口中打开)。
同步的秘密
你可以在多台苹果设备之间同步数据,这非常方便。HomeKit可以让你管理物联网设备,AutoUnlock可以让你的Mac解锁苹果的手表你的照片可以通过iCloud同步,等等。但在安全方面,同步是个问题。
“传统的方法并不好,”克里斯说。“一种方法是让用户在所有设备上输入一个强大的‘抽屉钥匙’;失去它,就失去了获取秘密的途径。另一种方法是将数据封装在派生密钥中,使数据暴露给帐户提供者。”
“我们在这里有很多目标,”克里斯继续说道。“秘密必须在所有设备上可用,并由强大的加密技术保护。即使丢失了所有连接的设备,用户也可以恢复秘密。数据不会暴露给苹果,也不存在暴力攻击的可能性。”
基本iCloud Keychain系统中的身份验证很简单。每个设备都有自己的密钥对,为了将新设备添加到同步循环中,您必须从现有设备之一批准它。苹果的后端没有参与其中;它没有特权。如果用户无法访问所有设备,可以通过iCloud安全密钥和iCloud密码重新访问。
Krstic非常详细地解释了苹果是如何管理这个系统的,同时不让任何人,包括苹果公司的任何人,从后端访问数据。该系统涉及所谓的管理卡,它是在一批新的加密服务器投入使用时创建的。“管理卡是在车队服役时在一个安全的仪式上制作的,存放在苹果公司三个不同组织保管的单独的物理保险箱中,装在防篡改证据袋里,”克里斯说。
这种情况只会持续到舰队真正投入使用。当时,Krstic说,“我们让管理卡通过一种新颖的单向散列函数。”他从讲台下拿出一个显然用过的搅拌器,接着说,“是的,用搅拌器的一次旅行。”一旦加密服务器激活,它就不能以任何方式更新或修改,即使是苹果,因为管理卡已经被销毁了。如果真的需要更新,苹果必须启动一个新的机群,并发送一个软件更新,让用户的设备连接到新的机群。
“我们为什么要这么做?”克里斯说。“为什么我们要采取最后这一极不寻常的步骤?”我们不遗余力地设计安全系统以提供信任。当数据离开设备时,风险甚至更高。我们需要保持这种信任。如果我们继续持有那些管理卡,那就有可能不是真的。这就是我们对待用户数据使命的严肃态度。”
问:“你这么做是因为联邦调查局要求提供信息吗?”克里斯回答说:“我是个工程师。我只能回答关于我今天为什么出席的问题。”好吧,有道理。但我认为提问者是对的。创建一个你自己都无法修改的自包含系统是防止其他人做出不必要更改的好方法。
我希望我在Krstic的演讲中传达的细节没有让你们的眼睛呆滞。从小组成员散去后的闲聊来看,房间里真正的字节级安全极客们对此印象深刻。