写点什么

移动设备攻击和防护

2012 年 3 月 14 日

这篇文章最初发布在__IEEE 的 _安全与隐私 _杂志 __ 上,后来 InfoQ 和 IEEE 计算机协会向您推荐了此文。

在我的青少年时期,手机只是普通用途的手机。你可以用手机呼叫别人,然后和人通话;别人也能呼叫你。当时的手机就只是这样。随着智能手机日益流行,手机的用途发生了很大变化。今天的智能手机比起以前我们所使用的,更像是计算机了。事实上,智能手机就是附加了额外硬件的计算机。具体来说,就是附加了 GMS(移动通信全球系统)无线电设备,以及控制此设备的基带处理器。这些特性非常重要,但它们在提供强大功能的同时也带来了威胁。和 PC 机一直以来的情况一样,目前智能手机正成为攻击者的目标。在这里,我要关注两款智能手机操作系统的安全模型:苹果的 iOS 以及谷歌的安卓。这两款手机在我心目中有特殊的地位,因为我是公开挖掘它们漏洞的先行者。

设备安全涉及多个方面。为了简洁明了,我会抛开加密、锁定和隐私这些主题,而把焦点放在攻击者真正想要做的事情:在你的设备上运行他们的代码。和在 PC 机世界一样,攻击者可以通过两种方式让远程代码在移动设备上运行。第一种方式是诱导用户下载、安装和运行他们的软件——这是恶意软件方式,另一种方式是利用软件漏洞来攻击设备——这是强制下载方式。我下面会探究 iOS 和安卓如何预防这两种攻击方式。

移动设备恶意软件

iOS 和安卓手机操作系统各自提供了公共软件市场——App Store 和 Android Market——但他们采取了不同的方式来限制恶意软件安装到设备上。

iOS

就像苹果的一贯风格,App Store 也是被苹果从上到下严格控制的。应用程序只有经过苹果的批准才能在 App Store 里出售。苹果采用代码签名技术在设备上施行这种措施。除非经过苹果的私人密钥签名,否则 iPhone 不会加载程序库和运行应用程序。除了苹果,没有人知道 iOS 应用程序审查有多么严密。作为一名专业代码审查员,我晓得市场上应用程序数量巨大,苹果不可能对每个应用程序都仔细审查;但任何形式的审查都可以消灭掉最明显的恶意软件。如果某款恶意软件侥幸逃过了审查到达 App Store,而之后被发现了,苹果会将它从 App Store 移除,同时将它从已安装的设备上卸载。

你也许会抱怨 App Store 对开发者不利,但它是恶意软件的有效防护墙。当然,这防护墙偶尔也有失效的时候。

在移动设备上,应用程序运行于限制它们活动范围的沙箱中。例如,一个程序不能访问另一个程序的数据。没有程序可以读取设备上存储的 SMS(短消息服务)消息,等等。所有应用程序遵守同样的沙箱规则,它们被赋予应用程序本身该有的任何活动权限。例如,所有应用程序都能够自由地访问因特网和手机通讯录。 [1]

安卓

开发者能够直接将他们的应用程序投放到 Android Market, 在投放上去之前没有任何审查。安卓手机要求应用程序具有签名,但允许应用程序自我签名。谷歌只是用签名做记录,而不是想用签名控制什么样的代码才能够运行。因此,安卓手机用户能够从任何地方下载应用程序,而不只是从 Android Market。

不同于苹果采用自上而下的恶意软件防御方式,安卓依赖用户群体解决防御问题:让用户对应用程序评分和评论,让用户查看有多少用户下载了某款软件,让用户向谷歌举报恶意软件。如果有足够多的用户批评某款软件,谷歌会将通过将它从市场上移除,还会远程将它从移动设备上清除。对安卓用户很有帮助的一条建议是,永远不要下载没有上千下载量以及大多数正面评论的应用。另一条建议是只到 Android Market 下载应用。目前已经出现较多恶意安卓应用程序,不过大多只出现在非 Android Market 市场上。Android Market 的开放性方便了开发者的使用,但同时也方便了恶意软件开发者的入侵。

对于运行在设备上的应用,安卓同样使用了沙箱模型。然而,安卓的沙箱是针对特定应用的。在安装过程中,应用程序会通知用户它需要什么权限。用户可以同意授予权限或拒绝授予。如果用户拒绝,应用程序就不会安装。这种方式的好处是能够根据每个应用定制沙箱,而不是像苹果那样使用满足各种应用、但规格统一的沙箱。例如,俄罗斯方块游戏不需要访问因特网,所以它就不需要具有访问权限的沙箱。这种模式的弊端是让用户自己做安全决定,而历史已表明这中方式并不好。更进一步分析,首先是用户确实想要安装应用,所以他们才会主动安装,然后他们倾向于随着屏幕一直点击下一步,授予应用要求的权限。

漏洞挖掘

当然,攻击者可以试图绕过设备安装和审查过程,然后直接操控设备。移动设备的攻击面(attack surface)和 PC 机的非常相似;最容易受到攻击的目标是像网页浏览器和邮件客户端这样的应用程序。通常,移动设备的攻击面更小些,因为可以攻击的代码相对要少。例如,你在手机浏览器中找不到 Java 和 Flash,但在桌面电脑浏览器中他们却很常见(同时也是常见的漏洞挖掘目标)。

然而,智能手机中存在两条 PC 机中没有的攻击途径。其中一条途径利用是 SMS 消息处理。Collin Mulliner 和我曾展示过怎样利用 iPhone 手机的 SMS 消息解析器漏洞来控制手机。 [2] Intrepidus 组织的研究员拿 Palm Pre 手机做过类似的研究。 [3] 另一条攻击途径是利用 GSM 无线电设备,它最近才被挖掘出来。Ralf - Philipp Weinmann 曾展示过怎样利用 GSM 软件的漏洞控制手机的基带处理器。 [4]

iOS

知道软件存在漏洞是一回事,能够写代码利用它的漏洞是另外一回事。就拿 iOS 来说,它使用了分层安全技术以防止被恶意攻击。iOS 采用了数据执行防护(DEP)技术和地址空间布局随机化(ASLR)技术。DEP 区分了数据和代码,使得漏洞挖掘很困难。这样,攻击者不能在向进程输送数据的同时又跳到该进程去执行数据。绕过 DEP 的典型方式是使用面向返回编程(ROP)技术。不过,在 ASLR 存在的情况下,ROP 技术是无效的,因为攻击者找不到要重用的代码。所以,找到代码执行漏洞并开发出一个利用漏洞的功能是很困难的。

上面说的只是第一层防护。就算攻击者利用漏洞让恶意代码在进程中执行,iOS 还有许多机制以限制攻击者的破坏范围。例如,代码只能在沙箱中执行。攻击者不能做诸如发送和接收 SMS 消息之类的事情。另外,代码只以低级权限用户“Mobile”的身份运行,而不是根级别的身份。最终的结果是,攻击者不能在设备上安装和运行任何恶意软件或工具程序。攻击者通常想上载键盘嗅探器或其他攻击工具,但代码签名的要求使这些方式不可行。通过这层防护,再加上 iOS 没有命令行和其他公用功能,意味着攻击者只能在被攻击进程中完成所有活动,而不能在设备上持久攻击。

当然,不存在完美的防护。分层的 iOS 模型也曾几次被攻破。首先就是我前面提到的 SMS 攻击。这种攻击的后果是使负责接收 SMS 消息的进程在根级别上运行,而不是在沙箱中。另外一次攻击请见 jailbreakme.com 网站,它将两个漏洞利用程序联合起来。第一个是 Safari 手机浏览器的代码执行漏洞利用程序,这个漏洞利用程序的 payload 包含了第二个漏洞利用程序。而第二个漏洞利用程序使用根级别的权限停用代码签名,然后下载安装真实的 payload,该 payload 能够越狱(破解)移动设备(请见侧栏,了解更多关于越狱的信息)。

安卓

安卓将所有相关应用程序(比如网页浏览器)都放进沙箱中运行,以限制攻击者的破坏。这样,攻击者须要挖掘两个漏洞发起攻击,和前面探讨 iOS 时强调的一样:一是让代码运行,二是突破沙箱环境。能保护安卓免受攻击的另一个原因是许多应用程序是用 Java 写的,这样可以避免内存溢出问题。Collin 和我在安卓中发现了一个 SMS bug,它和导致 iOS 安全模型被破坏的 bug 相似。但由于安卓中的这个 bug 处于 Java 应用程序中,从而无法利用。

然而,安卓的一点很大不足就是没有采用 ASLR 和 DEP 技术。这导致在安卓中挖掘漏洞要比在 iOS 和 Windows Phone 7 上容易得多。后两者都采用了 ASLR 和 DEP 技术。除了安卓,Palm Pre 和黑莓两款手机也没采用 ASLR 和 DEP。iOS 在发布的头年也没有采用 DEP,到了今年才加了 ASLR。希望安卓很快会填补这一不足。

在日常生活中,智能手机已经越来越重要,不使用手机的人越来越少。从安全的角度考量,移动设备没有 PC 机那么开放和暴露,并且还采用了 PC 机所没有的安全策略,比如沙箱和代码签名技术。然而,移动设备存储着私人信息,它们因此成为狂热的攻击目标。不过时至今天,你若丢失私人信息,更可能会是因为把手机忘在了出租车或酒吧中,而不是因为恶意软件或强制下载。

越狱

越狱(破解)技术能冻结代码签名,使 iPhone 能运行非来自 App Store 的应用。但这样会破坏几乎所有 iOS 提供的保护。首要一点是冻结代码签名会导致平台裸露给了恶意软件;另外一个问题是让许多没有签名的应用以根级别权限运行于非沙箱环境中。越狱补丁还会允许内存可写和可执行(这在 iOS 中是不正常的),一定程度上使数据执行防护技术失效。所以,越狱技术在带来自由的同时也导致了潜在的安全问题。

关于作者

Charlie Miller是 Accuvant 实验室的计算机安全研究员。他的联系邮箱是 charlie.miller@accuvant.com

IEEE 安全与隐私协会的首要目标是跟踪和促进安全、隐私及可靠性技术的发展,并将这些发展以有用的方式提供给各领域的专业社区——包括学术研究者和行业从业者。


[1] N. Seriot, “ iPhone Privacy ,” pre­sentation at Black Hat DC 2010

[2] C. Mulliner and C. Miller, “ Fuzz­ing the Phone in Your Phone ,” presentation at Black Hat 2009

[3] WebOSL: Examples of SMS De­livered Injection Flaws ,” Insight, 16 Apr. 2010

[4] R.P. Weinmann, “ All Your Base­band Are Belong to Us

[5] B. Alberts and M. Oldani, “Beating Up on Android”

[6] CVE 2009-2999 ” Mitre, 2011

查看英文原文: Mobile Attacks and Defense


感谢侯伯薇对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2012 年 3 月 14 日 00:002237

评论

发布
暂无评论
发现更多内容

架构师训练营第 1 期 -- 第十周作业

发酵的死神

极客大学架构师训练营

试试,阿里P7的笔试题:多线程按序打印如何实现?

Java架构师迁哥

架构师训练营第十周总结

_

总结 极客大学架构师训练营

《华为数据之道》读书笔记:第 5 章 面向“联接共享”的数据底座建设

方志

大数据 数据中台 数据仓库 数字化转型

第六章作业

孤星

网上系统显示部分入注数据未回传不更新该怎么解决?

Geek_a6658e

维权 互联网应用技术方案

阿里面试 问我字符串

java金融

Java 面试 string 字符串

复旦教授亲身编写,最新版《神经网络与深度学习》中文版开放下载

计算机与AI

神经网络 学习

食堂就餐卡系统设计

cc

大家都知道jmeter,但是它会让你的工作效率至少提升80%

996小迁

Java 编程 程序员 架构 面试

Java-Mock简化单元测试

落日楼台H

Java 测试 单元测试 Mock Mock测试框架

作业-第6周

arcyao

架构师训练营第 6 周课后练习

菜青虫

极客大学架构师训练营

在网上的AG账户登录异常说是涉嫌套利不给办理取出怎么办?

Geek_a6658e

专业出黑团队

如果不想你被称做掉包侠,那么请有效地学习机器学习算法知识

计算机与AI

学习

设备日志的用途

日志 snmp

第六章总结

孤星

架构师训练营第十周总结

月殇

刘华:我最近听到最对味的话,就是“先Scale down再Scale out”

刘华Kenneth

DevOps 敏捷

架构师训练营第 1 期第 10 周学习总结

好吃不贵

极客大学架构师训练营

在Spring data中使用r2dbc

程序那些事

WebFlux R2DBC 程序那些事 spring data spring-data-r2dbc

架构师训练营第 1 期第 10 周作业

好吃不贵

极客大学架构师训练营

架构师训练营第 6 周学习总结

菜青虫

极客大学架构师训练营

架构师训练营第十周作业

月殇

极客大学架构师训练营

尾调用与尾递归

哈希说

算法

LeetCode题解:860. 柠檬水找零,模拟情境,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

架构师训练营—第十周学习总结

Geek_shu1988

架构师训练营一期学习心得

cc

初学小白你不知道的C语言经典算法(附带答案)

ShenDu_Linux

c++ 程序员 算法 C语言 数据结构与算法

刘华:上云后,你的架构设计可以更飞

刘华Kenneth

云计算 架构设计 技术选型 云平台

架构师训练营—第十周作业

Geek_shu1988

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

移动设备攻击和防护-InfoQ