黑客攻防技术宝典:iOS实战篇(txt+pdf+epub+mobi电子书下载)


发布时间:2020-09-05 12:35:37

点击下载

作者:Charlie Miller Dionysus Blazakis

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

黑客攻防技术宝典:iOS实战篇

黑客攻防技术宝典:iOS实战篇试读:

前言

iPhone已经问世5年有余,人们大概都已经忘了当时的iPhone多么具有开创意义。那时候还没有现在这样的智能手机,很多手机也就是用来打打电话。有些手机中安装了Web浏览器,但并非全功能的,只能呈现最基本的网页,而且手机屏幕的分辨率非常低。好在,iPhone改变了这一切。

iPhone的显示屏几乎占据整个前面板,有着基于WebKit的Web浏览器,而且其操作系统可以由用户自行升级,不需要等着运营商来做这项工作。再加上存储照片、播放音乐和发送短信等功能,这才是人们真正想要拥有的手机(参见图1)。但是,iPhone并不完美。第一代iPhone数据传输速度非常慢,不支持第三方应用,而且安全性特别差,不过它却引领了智能手机和平板电脑的革命。

图1 众多消费者排队等待购买第一代iPhone。图片来源:Mark Kriegsman(http://www.flickr.com/photos/kriegsman/663122857/)。

随着第一代iPhone于2007年问世,一系列其他的苹果产品也随之而来,而它们都运行着iOS。当然,在第一代iPhone等设备问世时这个操作系统还不叫iOS。第一代iPhone使用的操作系统被苹果公司称为OS X,就像其桌面版的“兄长”那样。而在2008年第二代iPhone出现时,这个操作系统被称为iPhone OS。那时候它还不能拥有iOS这个称呼,因为思科公司为路由器设计的操作系统先占用了IOS这个名称。经过一番交易,苹果公司从2010年起正式将其移动操作系统命名为iOS。

紧随iPhone之后的iOS设备是iPod Touch。这种设备基本上就是个不能打电话不能发短信的iPhone。其他iOS设备包括第二代Apple TV和iPad。这些设备每推出新的一代,都是更快、更时髦、更多功能的产品(如图2所示)。

图2 iPhone 4(左)与iPhone 1(右)的对比。全书概览

不过,人们通常只注意这些设备光鲜的外表,很少会去了解它们的内部工作原理。数百万人每天随身携带存放着他们个人信息的这些小设备,但它们到底安全吗?在各种安全大会的演讲中,在越狱社区里,甚至在研究人员的个人日志中,我们都可以发现关于iOS运行安全的信息。本书就是要把这些有关iOS内部原理的知识汇总起来。只有让人们都能接触到这些信息,才能让个人和企业有效评估使用这些设备的风险,并了解如何最大限度地降低这种风险。本书甚至可以提供一些让设备本身更安全与让用户使用起来也更安全的思路。本书内容

本书是按iOS安全功能主题划分章节的,读者可以用不同的方式来阅读本书。不熟悉这些主题或是不想错过任何内容的读者可以从头至尾阅读整本书。本书从相对基础的章节开始,由浅入深地慢慢过渡到后面较为复杂和深奥的章节。而那些已经对iOS的内部细节有所了解的读者可以跳过开头部分,直接阅读自己感兴趣的那些章节。每一章的内容基本上都是相对独立的。在提到其他章的主题时,我们都会指明出处。下面来看一下本书中各章的主要内容。● 第1章。概述iOS设备和iOS安全架构。我们在此介绍本书其余部分所要讨论的大部分主题,最后讨论针对各版iOS发动的一些攻击,包括最早期的一些攻击和针对iOS 5安全架构的一些攻击。● 第2章。讨论iOS在企业中的使用,涉及诸如企业管理和服务提供之类的主题。此外,这一章还讲述如何为企业设备开发应用,包括开发者证书和配置概要文件的工作原理。● 第3章。包含与iOS处理加密敏感数据相关的信息。这一章概述如何为每台iOS设备得出加密密钥以及如何使用这些加密密钥、各种等级的加密以及每种等级下都有哪些文件,讨论开发人员如何利用Data Protection API保护应用中的敏感数据。最后,我们还将展示如何通过蛮力攻击破解密码,以及4位数字密码的脆弱性。● 第4章。针对iOS深入介绍一种主要的安全机制——代码签名。我们将为读者呈现相关的源代码和逆向工程二进制文件,它们用于确保只有由受信任机构签名的代码才能在设备上运行。这一章还将重点介绍iOS代码签名机制中的新内容,它们为实现即时编译而允许未签名的代码以一种严格受控的方式运行。最后,我们介绍iOS 5的早期版本中出现的代码签名机制漏洞。● 第5章。介绍iOS中涉及沙盒的机制。我们将展示iOS内核如何支持把钩子程序放置在关键区域,讨论沙盒具体用到的钩子,然后举例说明应用如何完成自己的沙盒处理,并讲述重要的iOS功能是如何执行沙盒处理的。最后,这一章将讨论沙盒描述文件、这些文件如何描述沙盒所许可的功能,以及如何从iOS二进制文件中提取这些文件以用于研究。● 第6章。展示如何利用模糊测试技术从默认的iOS应用中找到漏洞。我们首先模糊测,接着展示如何对iOS中最大的受攻击面MobileSafari进行模糊测试。这一章重点介绍进行iOS模糊测试的几种不同方式,包括在Mac OS X、iOS模拟器以及iOS设备上进行模糊测试。最后,我们还将展示如何对台式机上没有的SMS解析器进行模糊测试。● 第7章。讲述如何利用第6章介绍的技术找到漏洞,并将其转换为有效的漏洞攻击程序。我们将详细分析iOS的堆管理系统,并说明如何利用“堆风水”技术操控堆内存。然后,这一章讨论漏洞攻击程序开发中的一个主要障碍——地址空间布局随机化(ASLR)。● 第8章。进一步向大家展示在控制进程后可以做些什么。在简要介绍iOS设备中使用的ARM架构后,我们就转而介绍面向返回的程序设计(ROP)。这里将向大家介绍如何手工创建和自动生成ROP有效载荷,还将给出一些ROP有效载荷的例子。● 第9章。从用户空间转入内核。在介绍一些内核基础知识后,我们接着描述如何调试iOS内核从而监控其动态。这一章还将展示如何对内核进行漏洞审查以及如何利用找到的各种漏洞。● 第10章。介绍越狱。首先,这一章讲述有关越狱工作原理的基础知识,接着详细描述不同类型的越狱工具,然后概述越狱工具所需的不同组成部分,包括对文件系统的修改、已安装的守护进程、激活,最后还将通览越狱利用的所有内核补丁。● 第11章。介绍很多iOS设备中都有的另一个处理器——基带处理器。我们将展示如何设置与基带进行交互的工具,并介绍从过去到现在iOS设备的基带中都使用了哪些实时操作系统,然后说明如何对基带操作系统进行审计,还给出了一些漏洞示例。最后,这一章还将描述一些可以在基带操作系统上运行的有效载荷。读者对象

本书是为所有希望了解iOS设备工作原理的人所写的。他们可以是希望融入越狱社区的人,也可以是试图了解如何以安全方式存储数据的应用开发人员,还可以是想要了解如何保障iOS设备安全的企业管理人员,或者尝试从iOS中寻找瑕疵的安全研究人员。

这些目标读者几乎都应该阅读和理解本书前面的章节。虽然后面的章节也都试着从基础知识开始介绍,但是理解这些内容至少能熟悉一些基本套路,比方说如何使用调试器和如何阅读代码清单等。所需工具

如果大家只想对iOS的工作原理有个初步的了解,本书完全可以满足需要。不过,为了掌握本书的绝大部分内容,我们希望大家参照书中示例在自己的iOS设备上进行操作。这样的话,大家就至少需要一部iOS设备。为了真正掌握这些例子,大家需要为iOS设备越狱。此外,虽然有可能为其他平台凑齐一套能起作用的工具,但是为了使用Xcode编译示例程序,大家最好有一台运行Mac OS X的计算机。祝贺大家

我们喜爱自己的iOS设备,我们都是果粉。不过,要是攻击者不能从中窃取个人信息的话,我们会更喜欢这些设备。尽管阅读本书这样的书籍没法让大家阻止所有针对iOS的攻击,但只有越来越多的人了解iOS的安全性及其工作原理,iOS才可能成为一个更安全的平台。请大家准备好,我们马上就要探索iOS安全了,而且要努力让它变得更安全。毕竟,有所了解就等于成功了一半。致谢

我想感谢我的妻子Andrea,感谢她的绵绵爱意与不断支持,还要谢谢我亲爱的儿子Theo和Levi,他们将是iOS黑客和越狱界的新生代力量。——Charlie

首先,我要感谢我的家人Alayna、Simon和Oliver,感谢这几个月来我每晚下班回家后加班加点工作时他们所给予的耐心与关爱。我还想感谢越狱社区提供的种种帮助。他们除了开发专业的越狱工具,还提供了很多能让安全研究人员的工作变得更加简单的文档(比如iPhone wiki),以及用于提取和修改iOS固件的工具。——Dion ysus

我要感谢我的父母、妹妹以及密友对我的不断支持,特别是在我参与编写此书的这段时间;没有他们的话,我想我早疯了。我还要感谢iOS越狱工具开发社区,感谢社区成员进行了大量的技术研究并免费发布开发出的工具,他们还常常提供全部的源代码。最后,我还要感谢Pablo和Paco在我上次写书时提供的帮助。——Dino

我想感谢我的双亲、哥哥和各位密友,感谢他们总是支持我,哪怕我偶尔冒出疯狂的想法。另外,我还要特别感谢我多年来的灵魂伴侣Nami。——Stefan

我想感谢在我个人生活和专业领域中,每一个帮助我沿着这条坎坷之途一路走来的人。我想感谢的人实在太多,真的没办法在这里一一列出。我特别感谢在编写本书时助我一臂之力的Naike和Max。——Vincenzo

我想感谢我的妻女,因为她们长久以来不得不忍受我在写作时对她们视若无睹。我要感谢Thomas Dullien、Joshua Lackey和Harald Welte,在2010年我研究基带的几个月中,我们进行了很多富有启发性的探讨。非常感谢Jacob Appelbaum,他让我接触到了发起我要研究的主题的那些工程师。我还要对那些不愿留名的幕后英雄表示感谢,他们知道我说的是谁,感谢他们所做的一切!最后我要感谢iPhone Dev Team所做的工作,要是没有他们的成果,很多事情就要难办很多。在此,我特别感谢MuscleNerd(肌肉男)和planetbeing在我被iPhone4难住时提供的帮助,还要感谢roxfan为我提供了他的分散加载脚本。——Ralf第1章iOS安全基础知识

如果你也像我们一样,那么只要拿到新设备就会想要了解它的安全性。这里的“设备”当然也包括iPhone。它不再只是带有小型Web浏览器的手机,与老式手机相比,它更像是计算机。当然,这些(以及将来的)设备可能存在与台式机中相似的安全问题。为了避免这些设备受到危害,苹果公司为它们内置了怎样的预防措施和安全机制呢?我们眼前是一个开启计算领域全新分支的机会。安全性对这些新兴智能设备来说有多重要呢?

本章会就iOS设备回答这些问题。首先,我们要看看各种iOS设备上使用的硬件,然后介绍iOS 5的安全架构。重点讲一讲现有设备为了防范恶意软件攻击和攻击者利用漏洞所内嵌的多层防御手段。接着,介绍一些已经发生的针对iOS设备的攻击,从而说明这些防御手段在现实世界中是如何起效(或失效)的。还将按照时间先后顺序,介绍从最早的iPhone到iOS 5设备受到的各种攻击。阅读过程中,大家会看到iOS设备的安全性有了多大的提高。最初版本的iOS几乎没有安全性可言,但iOS 5相对而言则既强大又可靠。1.1 iOS硬件/设备的类型

几年来,iOS一直在发展,各种苹果设备中的硬件也不断推陈出新。随着智能手机和平板电脑的普及,人们都希望拥有一台强大的计算设备。从某种意义上讲,他们期望自己口袋里装着的是一台电脑。

iPad的问世就是在这一方向上迈出的第一步。第一代iPad使用了ARM Cortex-A8架构的CPU,它的速度大约是第一代iPhone所使用CPU速度的两倍。

iPad 2和iPhone 4S则是另一个巨大跨越。它们都使用了ARM Cortex-A9架构的双核处理器,就CPU运算的速度而言,要比A8架构的处理器快20%。更惊人的是,A9的GPU要比A8的快9倍。

从安全的角度看,硬件上差异最大的是iPhone 3GS和iPad 2。iPhone 3GS是第一种支持Thumb2指令集的设备。这种新型指令集改变了创建ROP有效载荷的方式。之前设备中出现的代码序列在iPhone 3GS中突然发生了改变。

另一方面,iPad 2使用了双核处理器,它让iOS的分配程序可以全力运行。这样就对漏洞攻击的构造带来了巨大影响,因为漏洞攻击在多处理器环境下的可靠性要弱很多。

另一项与安全相关的硬件是基带。其实,在大多数国家,苹果公司的设备都是与运营商绑定(锁定)的。

为了解锁iPhone,多数漏洞攻击都会利用手机基带部件的漏洞。之前的几代iPhone一直使用英飞凌公司的基带固件。而CDMA版本的iPhone 4以及各版本的iPhone 4S转为使用高通公司的基带固件。

已经公开的若干种漏洞攻击都是针对英飞凌固件的,但针对高通固件的漏洞攻击尚未出现。1.2 苹果公司如何保护App Store

iOS设备之所以如此了不起,其中一个原因就是它们可以运行丰富多彩的应用;用户可以在苹果的App Store上找到这些应用。App Store上至少有50万种应用,总下载次数已经超过了180亿次(如图1-1所示)。图1-1 用户眼中的App Store。

iOS的应用是利用Xcode和iOS SDK在Mac OS X计算机上开发的。所构建的应用可以在iOS模拟器上运行,也可以在真实的iOS设备上进行测试。然后,就可以将开发出的应用发送给苹果公司进行审查。如果获得批准,这些应用就会被签上苹果的私钥,并被推送到App Store供用户下载。iOS的应用必须得到受信任一方(比如苹果公司)的签名,否则iOS中的强制性代码签名(Mandatory Code-Signing)需求会让这些应用无法在设备上运行(详见第4章)。企业也可以利用类似的系统向雇员分发应用,不过雇员的手机必须经过配置,才能接受由该企业和苹果公司签名的应用。

当然,一旦用户向iOS设备下载了新应用,就为恶意软件提供了可乘之机。苹果公司已经试着用代码签名机制和App Store的审查流程来降低这种风险。除此之外,来源于App Store的应用会以较低级别的权限运行在沙盒中,这种方式可以降低它们的破坏性。大家很快就能看到更多与此有关的内容。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特有的攻击途径。1.4 理解iOS的安全架构

大家可以想象一些针对iOS设备的恼人攻击,本节就要讨论iOS设备如何抵御这些类型的攻击。这里要描述iOS 5,正如大家将要看到的,这是种相当安全的系统。1.5节将介绍iOS是如何一路演变而来的,这是段有点坎坷的发展历程。1.4.1 更小的受攻击面

受攻击面是指处理攻击者所提供输入的代码。就算苹果公司的某些代码中存在漏洞,如果攻击者没法接触这些代码,或者苹果公司根本不会在iOS中包含这些代码,那么攻击者就没法针对这些漏洞开展攻击。因此,关键的做法就是尽可能降低攻击者可以访问(尤其是可以远程访问)的代码量。

苹果公司采取了各种可能的措施,相对于Mac OS X(或其他智能手机)减小了iOS的受攻击面。例如,不管用户喜不喜欢,iOS都是不支持Java和Flash的。这两种应用的安全问题由来已久,所以不含它们就使得攻击者更难找到可利用的漏洞。还有,iOS不能处理某些Mac OS X可以处理的文件,比方说.psd文件。Safari能够处理这一文件类型,但MobileSafari就不行,重要的是,没人会注意到MobileSafari不支持这种不常用的文件格式。此外,苹果公司自有的.mov格式也只被iOS部分支持,因此很多可以在Mac OS X上播放的.mov文件在iOS上无法播放。最后要说的是,虽然iOS原生支持.pdf文件,但只是解析该文件格式的部分特性。再来看看与之有关的一些数据,Charlie Miller曾用一些模糊的文件来测试Preview(Mac OS X系统自带的PDF阅读器),结果引起了100多个错误。而他在用iOS测试相同的文件时,只有约7%的文件在iOS中引发了问题。这意味着通过减少iOS能够处理的PDF特性,苹果公司减少了这种情况下90%的潜在安全漏洞。瑕疵越少,攻击者发动漏洞攻击的机会就越小。1.4.2 精简过的iOS

除了减少可能被攻击者利用的代码,苹果公司还精简掉了若干应用,以防为攻击者在进行漏洞攻击时和得手之后提供便利。最明显的例子就是iOS设备上没有shell(/bin/sh)。在针对Mac OS X的漏洞攻击中,攻击者的主要目标就是试着在“shellcode”中执行shell。而iOS中根本没有shell,所以针对iOS的漏洞攻击就必须寻求其他最终目标。不过,即便iOS中有shell他们也用不上,因为攻击者没法从shell执行诸如rm、ls、ps这样的实用程序。企图运行代码的攻击者要么在被攻击进程的上下文中作案,要么只能自备所有工具。不管怎样,都没那么容易。1.4.3 权限分离

iOS使用用户、组和其他传统UNIX文件权限机制分离了各进程。例如,用户可以直接访问的很多应用,比如Web浏览器、邮件客户端或第三方应用,就是以用户mobile的身份运行的。而多数重要的系统进程则是以特权用户root的身份运行的。其他系统进程则以诸如_wireless和_mdnsresponder这样的用户运行。利用这一模型,那些完全控制了Web浏览器这类进程的攻击者执行的代码会被限制为以用户mobile的身份运行。这样的漏洞攻击所能产生的影响就比较有限了,比如没办法进行系统级别的配置更改。同样,来自App Store的应用其行为会受到限制,因为它们也是以用户mobile的身份执行的。1.4.4 代码签名

iOS中最重要的安全机制是代码签名。所有的二进制文件(binary)和类库在被内核允许执行之前都必须经过受信任机构(比如苹果公司)的签名。此外,内存中只有那些来自已签名来源的页才会被执行。这意味着应用无法动态地改变行为或完成自身升级。这样做都是为了防止用户从因特网上下载和执行随机的文件。所有的应用都必须从苹果的App Store下载(除非对设备进行配置,使其接受其他的源)。苹果公司拥有最终审批权,在检查过应用之后才允许其在App Store中供用户下载。这样一来,苹果公司就起到了为iOS设备杀毒的作用。它会审查每个应用,确定其能否在iOS设备上运行。这种保护使得iOS设备很难受到恶意软件的影响。事实上,iOS中出现的恶意软件屈指可数。

代码签名的另一影响在于让漏洞攻击变复杂了。漏洞攻击如果要在内存中执行代码,可能就要下载、安装并执行其他的恶意应用。而因为它要安装的内容都是未签名的,所以系统会拒绝安装。因此,漏洞攻击会被限制在它们最初利用的那个进程中,除非它继续攻击设备的其他功能。

当然,这个代码签名保护机制也是用户想要越狱的原因。一旦将设备越狱,未签名的应用就可以在越狱过的设备上安装运行。越狱还会破坏其他保护机制(稍后再介绍)。1.4.5 数据执行保护

一般而言,DEP(Data Execution Prevention,数据执行保护)是这样一种机制:处理器能区分哪部分内存是可执行代码以及哪部分内存是数据。DEP不允许数据的执行,只允许代码执行。这一点非常重要,因为当漏洞攻击试图运行有效载荷时,它会将有效载荷注入进程并执行该有效载荷。DEP会让这种攻击行不通,因为有效载荷会被识别为数据而非代码。攻击者通常会试图利用第8章介绍的ROP(Return-Oriented Programming,面向返回的程序设计)技术绕过DEP。在ROP过程中,攻击者通常会用一种进程意料之外的方式重用已经存在的有效代码段,以执行预期行动。

iOS中代码签名机制的作用原理与DEP相似,甚至要更强大。针对启用DEP的系统的一般攻击只是利用ROP创建一块可写入且可执行的内存区域(这样DEP就不会执行)。然后,它就可以在该区域中写入有效载荷并执行该有效载荷。不过,代码签名要求,除非页源自受信任机构签名过的代码,否则该页就不会被执行。因此,在iOS中进行ROP时,攻击者不可能像往常那样关闭DEP。联系到漏洞攻击没法执行它们写入磁盘的应用这一事实,这就意味着漏洞攻击只能执行ROP。它们可能没法执行其他类型的有效载荷,比如shellcode或其他二进制文件。在ROP中写入大的有效载荷非常耗时也非常复杂。这使得对iOS进行漏洞攻击要比针对其他任何平台的漏洞攻击都难。1.4.6 地址空间布局随机化

正如1.4.5节中讨论的,攻击者绕过DEP的方式是重用已存在的代码段(ROP)。不过,要做到这一点,他们需要搞清楚想要重用的代码段位于何处。通过让对象在内存中的位置随机化,ASLR(Address Space Layout Randomization,地址空间布局随机化)使做到这一点变得非常困难。在iOS中,二进制文件、库文件、动态链接文件、栈和堆内存地址的位置全部是随机的。当系统同时具有DEP和ASLR机制时,针对该系统编写漏洞攻击代码的一般方法就完全无效了。在实际应用中,这通常意味着攻击者需要两个漏洞,一个用来获取代码执行权,另一个用来获取内存地址以执行ROP,不然攻击者就需要一个极其特殊的漏洞来做到这两点。1.4.7 沙盒

iOS防御机制的最后一环是沙盒。与之前提到的UNIX权限系统相比,沙盒可以对进程可执行的行动提供更细粒度的控制。例如,SMS应用和Web浏览器都是以用户mobile的身份运行的,但它们执行的动作差别很大。SMS应用可能不需要访问Web浏览器的cookie,而Web浏览器不需要访问短信。而来自App Store的第三方应用不应该具有cookie和短信的访问权。通过让苹果公司指定应用具体需要那些权限,沙盒机制解决了这一问题(参见第5章)。

沙盒有两个效果。首先,它限制了恶意软件对设备造成的破坏。想象一下,就算恶意软件侥幸通过了App Store的审查流程,被下载到设备上并开始执行,该应用还是会被沙盒规则所限制。它可能会窃取设备上所有的照片和地址簿信息,但它没办法执行发短信或打电话等会直接使用话费的操作。沙盒还让漏洞攻击变得更困难。就算攻击者在减小的受攻击面上找到了漏洞,并绕过ASLR和DEP执行了代码,有效载荷也还是会被限制在沙盒里可访问的内容中。总而言之,所有这些保护机制虽然不能说会完全杜绝恶意软件和漏洞攻击,但也大大加大了攻击的难度。1.5 iOS攻击简史

在对iOS设备的防御能力有了基本的了解后,我们来看一些针对iOS设备的成功攻击,看看现实中设备的安全防线是如何被突破的。这个简史也展示了设备的安全性是如何演化以应对各种攻击的。1.5.1 Libtiff

在第一代iPhone于2007年问世时,消费者们为购买它排起了长队。可能是为了尽快上市,第一代iPhone的安全状况并不太好。大家已经看到了iOS 5的情况,而第一代iPhone所使用的“iOS 1”呢:● 有着更小的受攻击面;● 有着精简的操作系统;● 没有权限分离,所有进程都以root权限运行;● 没有强制的代码签名机制;● 没有DEP;● 没有ASLR;● 没有沙盒机制。

因此,如果在设备上发现了漏洞,攻击者就很容易利用这些漏洞。黑客在进行漏洞攻击时可以自由运行shellcode,或是下载并执行文件。而寻找漏洞也是相当简单的,因为第一代iPhone的软件在发售时就有很多已知的瑕疵。任何攻击都能让黑客立即获得root权限。

Tavis Ormandy最先指出用来处理TIFF图像文件的某版Libtiff存在漏洞,而Chris Wade则针对这一漏洞编写出了可用的漏洞攻击代码。这让用户有可能打开恶意网站,从而让这些网站获得对其设备的远程root访问权。该漏洞是在iPhone OS 1.1.2中被修复的。

彼时Libtiff漏洞攻击是可行的,而现在如果在Libtiff库中找到类似的漏洞又会怎样呢?最初的漏洞攻击会在堆内存中写入可执行代码,并让设备执行这些代码。不过,因为DEP的出现,这样做现在已经行不通了。因此,现在的漏洞攻击必须用到ROP,并用某种方式击溃ASLR机制。这可能需要另外的漏洞。此外,即便攻击者成功进行了漏洞攻击,他也只会获得mobile用户权限,受到沙盒的限制。这与之前获得不受限制的root访问权有着天壤之别。

尽管这里讲的是iOS 1,但我们还是要指出,恶意软件对于iOS 1来说并不是什么大问题。因为第一代iPhone没有官方途径下载第三方应用,这种途径直到iOS 2才出现。1.5.2 短信攻击

2009年,研究人员Collin Mulliner和Charlie Miller发现了iPhone短信解析方式中存在的漏洞。那时候人们使用的还是iOS 2。除了ASLR,iOS 2几乎具有iOS 5所具备的所有安全机制。问题在于,尽管大多数进程都是以受沙盒限制的非特权用户身份运行的,但处理短信的进程却不是。而相关的CommCenter程序正好又是以不受沙盒限制的root权限运行的。

没有实现ASLR有一个问题:DEP只有在配合ASLR的时候才能真正起作用。也就是说,如果内存没有随机化,攻击者就能确切知道所有可执行代码的存放位置,执行ROP就会相当简单。

除了是一种进入系统的强大方式,还有其他原因让短信应用成为一条主要攻击途径。其一是不需要用户交互。攻击者不需要引导受害者访问某个恶意网站,而只要知道受害者的电话号码并发送攻击短信即可。其二是受害者没办法防止此类攻击,因为通常状态下不可能禁用iPhone的短信功能。其三,这是一种静默攻击,即便在设备关机的情况下也是可以进行的。如果攻击者在设备关机的情况下发送了恶意短信,运营商会存储这些信息,并在设备开机后第一时间将信息传送到设备上。

这一漏洞在iOS 3.0.1中得到了修复。现在,这样的攻击变得更困难了,不仅因为这样的漏洞攻击要面对ASLR,还因为现在的CommCenter进程是以_wireless用户权限而非root权限运行的。1.5.3 Ikee蠕虫

到iOS 2问世时,iPhone已经相当成熟了。不过,将iPhone越狱还是会破坏设备的整体安全架构。当然,越狱禁用了代码签名机制,不过它所做的远不只此:允许安装软件(关键还是因为运行了未签名代码)扩大了受攻击面,为设备增加了系统实用程序(比如shell),允许安装以root用户权限运行的应用。而关闭了代码签名机制,也就关掉了强有力的DEP。也就是说,ROP有效载荷可以禁用DEP,并在越狱过的设备上写入和执行shellcode。最后,新的未签名应用是不受沙盒限制的。因此,越狱基本上会关闭iPhone的所有安全机制,而不只是代码签名。

因此,越狱过的iPhone会成为漏洞攻击的目标也就不足为奇了。Ikee蠕虫(又名Dutch ransom、iPhone/Privacy.A或Duh/Ikee.B)就利用了很多用户为iPhone越狱后安装了SSH服务器却没有修改默认root密码这一事实。这意味着任何连接到这种设备的人都能用root权限远程控制这些设备。有了这些条件,编写蠕虫就不是什么难事了。除此之外,SSH服务器也是不受沙盒限制的。

Ikee蠕虫在其生命期的不同阶段会做各种不同的事情。起初,它只是修改设备的壁纸(参见图1-2)。后来,它改为执行多种恶意行为,比如锁定iPhone向用户勒索赎金,窃取iPhone中的内容,甚至让受影响的设备成为僵尸网络的一部分。图1-2 Rick Astley永不抛弃你。来源:F-Secure的Mikko Hypponen。

显然,如果用户不把他们的设备越狱,这一切都不会发生。1.5.4 Storm8

2009年,由知名开发商Storm8开发的游戏收集了运行这些游戏的手机上存储的电话号码,然后将这些信息发送到Storm8的服务器上。受到影响的应用包括Vampires Live、Zombies Live和Rockstars Live(参见图1-3)等。有人对Storm8提起了集体诉讼,指控该应用的数据收集功能是人为过失。而在这段时间里Storm8的应用有约两千万的下载量。图1-3 Vampires Live不只为iOS带来了狂暴的吸血鬼。1.5.5 SpyPhone

SpyPhone是Seriot Nicolas编写的概念验证应用,验证了针对第三方应用的iOS沙盒限制。该应用尝试过访问所有可以想象的信息,并试着执行了沙盒所允许的任意行为。针对iOS沙盒有一件事要注意,就是来自App Store的所有第三方应用都有着相同的沙盒规则。这意味着,如果苹果公司认为某一应用应该具有某些权限,那么所有的应用都肯定要具有该权限。这与安卓系统的沙盒机制不同,不同的安卓应用可以具有根据其需求指定的不同权限。iOS这种模式的弱点在于太过宽松。例如,通过以完全合法的方式使用公共API(尽管应用事实上还是受沙盒的限制),SpyPhone可以访问以下数据:● 手机号码;● 对地址簿的读/写访问;● Safari/YouTube搜索关键词;● 电子邮箱账户信息;● 键盘缓存;● 标记有地理信息的照片;● GPS信息;● WiFi接入点名称。

这一应用表明,即便在沙盒内,恶意程序还是能从受影响的设备上提取到数量惊人的信息。1.5.6 Pwn2Own 2010

本书的两位作者Vincenzo Iozzo和Ralf-Philipp Weinmann赢得过2010年针对iPhone 3GS的Pwn2Own黑客竞赛。他们在MobileSafari中找到了让他们可以远程执行代码的漏洞。该漏洞存在于未使用ASLR的iOS 3中。由于使用了代码签名机制,iPhone 3GS的整个有效载荷都被写入ROP中。利用ROP,Iozzo和Weinmann可以打开存放着所有短信的SMS数据库,并将这些短信发送到他们控制的远程服务器上。但他们受到了mobile用户权限和MobileSafari沙盒的限制。要进行更多的破坏还要多费点工夫。他们的努力为他们赢得了15000美元和一部iPhone。2011年这项赛事的大奖则是被本书的另两位作者拿走的。1.5.7 Jailbreakme.com 2(“Star”)

我们介绍了iOS 5为限制远程攻击者所采取的各种措施。这让攻[1]击变得异常艰难,但并非不可能。2010年8月,comex那臭名昭著的jailbreakme.com网站就展示了这样的攻击。(第一版的jailbreakme.com针对的是第一代iPhone,所以相对简单。)第二版的jailbreakme.com网站可以执行一系列行为,并最终让访问该网站的iOS设备越狱。这意味着它肯定像iOS 1.0时代那样获得了远程root访问权。不过,jailbreakme.com 2针对的是iOS 4.0.1,这一系统包含了除ASLR之外的所有安全机制(这一版本的iOS中尚未添加该机制)。那么它是如何起作用的呢?首先,它利用了MobileSafari处理特殊字体时产生的栈溢出,这使得漏洞攻击代码可以在MobileSafari中启动它的ROP有效载荷。接着,这一复杂的有效载荷不是要搬走SMS数据库,而是继续利用另一个漏洞提升对设备的访问权。这第二个漏洞是IOKit的IOSurface属性中存在的整数溢出漏洞。这里提到的第二次攻击让攻击者可以在内核中执行代码。这样攻击者就可以从内核中禁用代码签名机制,然后该ROP会下载用来为iPhone越狱的未签名动态库并加载该动态库。苹果公司很快修复了该漏洞,因为尽管jailbreakme.com网站只是用来为手机越狱,但它很容易改为对访问它的设备执行任何想执行的操作。1.comex是研究iOS设备越狱的著名黑客Nicholas Allegra的网名。——译者注1.5.8 Jailbreakme.com 3(“Saffron”)

目前为止介绍过的所有例子都有个共同之处,那就是它们都是针对iOS 4.3之前的iOS。而ASLR机制正是在iOS 4.3中引入的。一旦加上这最后一道屏障,攻击者要对iOS设备进行漏洞攻击可能就特别困难了?好吧,comex用最高能对付iOS 4.3.3的jailbreakme.com 3再次说明这不是问题。这一版的jailbreakme还是需要进行两次漏洞攻击,一次获得代码执行权,另一次禁用代码签名机制。那么ASLR要怎么处理呢?大家将会在第8章中了解更多与这一漏洞攻击有关的内容,不过现在只要知道被利用的特定漏洞可以让攻击者读写内存就够了。这样一来,攻击者就有可能通过读取某些邻近指针的值找到代码在内存中的位置,接着就可以通过写内存来影响内存并取得进程的控制权。正如之前说过的,战胜ASLR一般而言要么需要两个漏洞,要么需要一个真正特殊的漏洞。这个案例就利用了一个特别强大的漏洞。1.6 小结

本章首先介绍了iOS设备,包括其硬件,以及它们自问世起发生了怎样的改变。然后我们了解了与安全相关的一些基本信息,包括iOS设备面临哪些类型的威胁。接着本章从宏观上介绍了本书涉及的很多概念,讨论了iOS的安全设计,其中很多安全层都会在随后的内容中用专门的一章详细介绍。最后,本章简述了过去针对iOS成功进行的攻击,甚至还有可以绕过iOS 5的所有安全机制的攻击。第2章企业中的iOS

随着iOS设备的不断普及,越来越多的企业开始让员工通过这些设备访问和存储企业数据。通常,企业会购买并完全掌控这些可能要用于访问企业敏感数据的智能手机或其他设备。在某些(也是越来越常见的)情况下,企业可能允许员工利用私人的设备访问企业数据。不管是哪种情况,企业都要权衡允许利用这些移动设备访问企业数据所带来的好处与安全风险。

任何移动设备都可能被放错地方、遗失或盗窃。如果该设备存储着(或是能访问)敏感的企业数据,就会带来数据泄密的风险。为此,通过强密码限制对设备的访问,以及在设备丢失时远程锁定设备或清除设备上的数据就显得很重要了。本章介绍如何利用苹果公司开发的iPhone Configuration Utility(iPhone配置实用工具)和Lion Server Profile Manager(描述文件管理器)为iOS设备创建和应用配置描述文件。这些描述文件可用来确保这些设备严格执行组织的安全政策,例如要求添加强密码。作为一种MDM(Mobile Device Management,移动设备管理)服务,描述文件管理器也可用于远程锁定或擦除遗失的设备。2.1 iOS配置管理

基于iOS的设备可以通过创建和安装配置描述文件(configuration profile)进行管理。描述文件包含管理员对用户设备上安装的系统的设置。这些设置大多数与iOS的“设置”(Settings)应用中的配置选项对应,不过某些设置只能通过配置描述文件设置,而某些则只能在iOS的“设置”应用中配置。只有那些只能在配置描述文件中进行配置的设置才是可集中管理的。

创建和管理配置描述文件最简单的方法就是使用苹果公司推出的Mac或Windows版iPhone Configuration Utility。这一图形化实用工具让管理员可以创建和管理配置描述文件。这些描述文件可以通过USB连接安装到iOS设备上、以附件形式用电子邮件发送给设备持有人,或是直接放在Web服务器上。

如果要管理更多设备,企业就应该使用MDM系统。苹果公司在Lion Server中以描述文件管理器服务的形式提供了这样的系统。该服务对于工作组与中小型组织而言都很适用。不过,对于更大的企业来说,第三方的商业MDM解决方案可能才是最好的。

本节将介绍配置描述文件的基础知识,并描述如何利用iPhone配置实用工具和Lion Server描述文件管理器创建和安装简单的配置描述文件。2.1.1 移动配置描述文件

配置描述文件是一个XML属性列表(property list,以下简称plist)文件,文件中的数据值是以Base64编码形式存储的。我们也可以选择为plist数据签名和加密,这种情况下,配置描述文件是依据RFC 3852 CMS(Cryptographic Message Syntax,加密消息语法)构成的。因为配置描述文件中可能包含用户密码和Wi-Fi网络密码等敏感信息,所以如果要通过网络发送这种描述文件就应该加密。MDM服务器能自动完成这些工作,因此任何需要管理iOS设备的企业都最好使用MDM系统。

配置描述文件是由一些基本的元数据与配置有效载荷组成的。配置描述文件的元数据包含人类可理解的名称、描述、创建该描述文件的组织,以及一些只在后台使用的其他字段。配置有效载荷则是描述文件最重要的部分,因为对应该描述文件的配置选项是靠它们实现的。iOS 5中可用的配置有效载荷详见表2-1。

表2-1 配置描述文件的有效载荷类型。有效载荷描述指定用户从设备移除锁定的描述文件时必须输入的密移除密码码定义用户在解锁设备时是否需要输入密码,以及该密密码策略码必须有多复杂电子邮件配置用户的电子邮件账户Web Clip在用户的待机屏幕上放置Web Clip限制使用设备的用户执行某些行动,比如使用摄像限制头、iTunes App Store、Siri、YouTube、Safari等LDAP配置LDAP服务器以供使用CalDAV使用CalDAV对用户的网络日历账户进行配置日历订阅为用户订阅共享的CalDAV日历将设备与简单证书注册协议(Simple Certificate SCEPEnrollment Protocol)服务器关联起来将具有移动通信基带的iOS设备(iPhone或iPad)配置APN成使用某一特定的移动运营商Exchange配置用户的Microsoft Exchange电子邮件账户为设备指定所要使用的VPN(Virtual Private Network,VPN虚拟专用网络)配置Wi-Fi将设备配置成使用指定的802.11网络

每一种有效载荷都含有一组定义了所支持配置设置的属性列表键和值。在苹果公司的iOS Developer Library(开发者文库)中,iOS Configuration Profile Reference(配置描述文件参考)部分详细列出了各种有效载荷包含的键以及可使用的键值。虽然我们可以根据该规范手工创建配置描述文件,但是只有移动设备管理产品的开发人员才可能这么做。苹果公司建议大多数用户依靠苹果的iPhone配置实用工具或第三方移动设备管理产品来创建、管理及部署配置描述文件。正如接下来所描述的,配备iOS设备数量不多的企业可以用iPhone配置实用工具对这些设备进行配置。2.1.2 iPhone配置实用工具

苹果公司的iPhone配置实用工具是一种可在Mac OS X和Windows操作系统上使用的图形化实用工具,它可以帮助用户在iOS设备上创建、管理和安装配置描述文件。在编写本书之时,该工具最新的版本是3.4,是为了支持iOS 5中的新配置选项而更新的。

在首次运行时,iPhone配置实用工具会自动在用户的keychain中自动创建根CA(Certificate Authority,证书授权机构)证书。iPhone配置实用工具会为那些通过USB端口连接到运行它的主机上的设备自动创建证书,而该CA证书的用途就是给这些证书签名。所创建证书的作用则是为要安全传输到这些设备上的配置描述文件签名和加密。假设接收设备已经由运行iPhone配置实用工具的主机授予了证书,那么你就可以通过不安全的网络(比如电子邮件或Web)安全地发送包含用户凭证的配置描述文件了。1. 创建配置描述文件

为展示如何使用iPhone配置实用工具,在此我们用该工具创建只含密码策略有效载荷的简单配置描述文件,并将其通过直接USB连接安装到iOS设备上。

首先,我们点击侧边栏中LIBRARY(资料库)条目下的Configuration Profiles(配置描述文件)选项。如果已经存在配置描述文件,这样就会将这些文件全部列出来。要创建新的描述文件,请点击New(新建)按钮,这会调出如图2-1所示的配置面板,让用户对配置描述文件的通用设置和特别设置进行配置。大家应该在Name(名称)、Identifier(标识符)、Organization(组织)和Description(描述)字段中填入相应信息,从而确定要为哪些用户的设备安装该配置描述文件。

此处的中文译名基于iPhone配置实用工具3.6.1中文版。——译者注图2-1 创建配置描述文件。

该面板中的另一项重要设置是Security(安全性)设置,它定义了该描述文件能否被移除。有3种设置选择,分别是Always(总是)、Authorization(鉴定)和Never(永不)。如果将其设置为Authorization,那么只有用户输入配置过的“鉴定密码”之后该配置描述文件才可被移除。而如果把该选项设置为Never,用户就可能无法从其设备上移除该配置描述文件。从iOS用户界面移除配置描述文件的唯一方式是:打开iOS中的Settings(设置)应用,选择General(通用)子菜单,然后点击Reset(还原)子菜单,并选择Erase All Content(抹掉所有内容和设置)按钮,从而将设备恢复到出厂状态。它执行的操作非常类似于用户通过iCloud的“查找我的iPhone”发送,或是企业管理员通过动态同步(ActiveSync)或移动设备管理发送的远程擦除命令。记住,那些知识丰富的用户还可以为设备越狱,并从底层文件系统直接删除配置描述文件,从而强制移除该文件。欲详细了解与文件系统中配置描述文件有关的内容,请参考2David Schuetz的2011黑帽大会白皮书“The iOS MDM Protocol”。2.详见http://media.blackhat.com/bh-us-11/Schuetz/BH_US_11_Schuetz_InsideAppleMDM_WP.pdf。——译者注

现在,我们就可以为该描述文件创建配置有效载荷了。请点击Configuration Profile(配置描述文件)面板左侧的Passcode(密码)选项。这样,你就可以在右侧面板中打开可用的密码设置,并设置员工必须设定的、与所要访问数据的保密程度相当的密码。图2-2中的例子展示了为可能用于存储或访问企业敏感数据的iOS设备推荐的设置。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载