1.3 理解安全威胁

本书介绍iOS安全机制,从它如何起效以及如何攻破这种机制进行探讨。要全面理解苹果公司在保障其产品安全方面所采取的措施,首先要知道这些设备可能面对的各种威胁。

总体来看,很多桌面电脑所遭受的攻击同样会发生在iOS设备上。这些攻击可分为两大类:恶意软件和漏洞攻击。恶意软件在个人电脑中已经出现几十年了,而且正成为移动设备的一大威胁。总的来说,恶意软件就是那些安装后一旦运行就会“做坏事”的软件。恶意软件可能与用户需要的软件捆绑在一起,也可能伪装成用户想要的软件。不管哪种情况,用户都会下载和安装这些恶意软件,而这些恶意软件在执行时会干一些坏事,包括发送电子邮件、允许攻击者远程访问、安装按键记录器,等等。所有通用计算设备或多或少都会受到恶意软件的威胁。电脑就是用来运行软件的,用户让它们做什么,它们就会做什么。就算用户要求它们运行一些恶意的内容,这些计算设备也会欣然接受。电脑没什么真正的漏洞,它只是不知道该运行什么程序,不该运行什么程序。保护设备不受恶意软件危害的常规方式是使用杀毒软件。杀毒软件的工作就是确定哪些软件是安全的,哪些是不安全的。

另一方面,漏洞攻击则利用了设备中软件的底层漏洞运行其代码。用户可能只是在浏览网页、阅读电子邮件,或根本什么都没做,突然间一些恶意代码(可能是以网页、电子邮件或短信等形式)就会利用某个漏洞在设备上运行代码。这种攻击有时称为下载驱动攻击(drive-by-download),因为与恶意软件不同的是,用户一般会是无辜的受害者,他们并没有试图安装任何代码,只不过是要使用自己的设备而已!漏洞攻击可能在受影响的进程内部运行某些代码,或者下载、安装并运行某些软件。受害的用户可能不知道一些不同寻常的事已经发生了。

这样的漏洞攻击要求具备两个条件。第一个条件是设备上安装的软件有瑕疵或漏洞。第二个条件是攻击者有办法利用这一漏洞让其控制的代码在设备上运行。针对这两个条件,预防措施也有两种。第一就是加大找出漏洞的难度。这可能意味着将更少的代码暴露给攻击者(减小受攻击面),或是尽可能清理并删除代码中的瑕疵。这一方法的问题在于某些代码肯定要一直暴露给攻击者,否则设备就没法与外界交互。此外,找出深藏在海量代码中的所有(或者说大多数)漏洞是很难做到的。如果很容易的话,就不用写书,甚至也不用越什么狱了!

第二种预防漏洞攻击的方式就是加大攻击者通过漏洞执行恶意代码的难度。这涉及大量的技术问题,比如我们在全书中都要讨论的数据执行保护与内存随机化(memory randomization)。顺着这条思路,退一万步讲,就算攻击者最终在代码中找到了bug,并让恶意代码运行起来,大家至少可以把恶意代码可能造成的损害降到最低。这需要利用权限分离或沙盒让某些流程无法接触敏感数据。例如,Web浏览器或许并不需要制作视频或发送短信的功能。

到目前为止,我们一直在围绕所有设备共同面临的安全威胁展开讨论。接下来,我们说一说针对iOS设备的攻击与针对个人电脑的攻击有什么区别。当然,这些攻击在很多方面是非常相似的。iOS就相当于精简了的Mac OS X,因此这两者之间存在很多共同或至少是非常类似的漏洞和攻击。差异的确存在,不过基本上可以归结为受攻击面的区别。受攻击面是指攻击者可以访问而且会处理攻击者所提供输入的那部分代码。

从某种角度上讲,iOS设备的受攻击面要比相应的Mac OS X台式机小。比如,iOS上就没有安装iChat这样的应用,而QuickTime之类应用的功能也大大地简化了。类似地,MobileSafari不支持Safari浏览器可以解析的一些文件类型。因此,我们可以说iOS的受攻击面更小。从另一方面来看,某些功能只出现在iOS设备上,特别是只出现在iPhone上,比方说短信功能。iPhone可以解析短信,但Mac OS X中没有对应的代码,这说明在某种意义上iOS的受攻击面又更大。而iPhone基带处理器上运行的代码也会扩大iOS的受攻击面。我们将在第6章和第12章中分别讨论这两种iOS特有的攻击途径。

目录