文档库 最新最全的文档下载
当前位置:文档库 › TaintDroid中文版

TaintDroid中文版

TaintDroid中文版
TaintDroid中文版

DOI:10.1145/2494522 TaintDroid:用于在智能手机上实时监控隐私数据的信息流跟踪系统

作者:William Enck、Peter Gilbert、Byung-Gon Chun、Landon P. Cox、Jaeyeon Jung、Patrick McDaniel 和 Anmol N. Sheth

摘要

如今的智能手机操作系统经常无法让用户有效控制并了解第三方应用程序对隐私敏感性数据的使用方式。我们构建了一个高效的全系统动态污点跟踪和分析系统TaintDroid,用来解决上述弊端。它能够同时跟踪多个敏感数据来源。TaintDroid 利用 Android 的虚拟化执行环境来提供实时分析。通过对 30 款受欢迎的第三方Android 应用程序的行为进行监控,我们在其中的 20 款中共发现了 68 例滥用用户位置信息和设备识别信息的行为。利用 TaintDroid 监控敏感数据能让手机用户了解第三方应用程序的使用行为,并为寻求识别不良应用程序的智能手机安全服务企业提供宝贵信息。

1.引言

现代智能手机平台的一大特点在于使用集中式服务下载第三方应用程序。这类“应用程序商店”为用户和开发者带来了便利,提高了移动设备的娱乐性和实用性,并且促进了应用程序开发的蓬勃发展。其中众多应用程序都将远程云服务的数据与本地传感器的信息相结合,这些本地传感器包括 GPS 接收器、摄像头、麦克风以及加速计等。应用程序通常具有访问这类隐私敏感性数据的合理原因,但是用户却希望确保其数据被正当使用。

智能手机平台所面临的一项严峻挑战就是,如何解决第三方应用程序提供的娱乐性和实用性与其带来的隐私安全隐患之间的矛盾。目前,智能手机操作系统仅提供粗粒度的控制来管理应用程序是否能够访问隐私信息,却很少提供关于隐私信息实际使用方式的信息。比如,用户允许某应用程序访问其位置信息后,他/她无从知晓该应用程序会将此信息发送给基于位置的服务,还是广告发布者,还是应用程序开发者或任何其他机构。因此,用户只能盲目地相信应用程序会妥善处理他们的隐私数据。

这一问题的固有性质决定了它无法通过传统的访问控制技术来解决。一种简单的解决方案是在某进程接收隐私敏感性信息时关闭网络访问。然而,与其他平台相比,智能手机应用程序或许更依赖云服务。这带来了两个重要结果。首先,绝大多数应用程序的运行都需要访问网络。其次,更重要的一点是,一些应用程序必须向特定网络主机发送隐私敏感性信息才能满足用户的需求。因此,这一问题不单在于确定这类信息是否被发送至网络,更在于确定被发送信息的内容和去向。

要想确定应用程序如何使用并披露隐私敏感性信息,可以使用细粒度动态污点分析,即众所周知的“污点跟踪”。“污点”是位于数据项或变量中的标签。该标签将某个语义类型(如地理位置)分配给数据,并可同时编码多个语义类型(一般称为污点标记)。污点跟踪系统的任务是 (1) 在污点来源{2}上分配污点标签,(2) 自动将污点标签传播给依赖数据和变量,(3) 根据污点流动终点中的数据污点标签采取某些操作。比如,当包含手机地理坐标的变量被位置 API (污点来源)返回时,污点跟踪系统可能会将其进行标记,并将该标签传播给由此类变量衍生而来的所有变量(比如,假设a = b + c,那么a由b和c衍生而来},然后在包含位置标签的变量到达网络 API(污点流动终点)时采取某些操作(记录和丢弃)。

安全领域的文献中包含很多污点跟踪的实例,但提出的解决方案或者粗略,或者低效。我们展示了Android 应用程序是可以高效地进行污点跟踪的。此外,我们发现,仅监控单个进程对 Android 而言是不够的,因为数据一般会在应用程序之间流动。

我们的目标是创建一个能够实时运行的全系统污点跟踪框架,以便在充足的上下文中检测敏感数据泄露,从而发现潜在的不良应用程序。实时约束既满足了相关用户的日常使用需要,也让外部安全服务得以本文的最初版本刊登在2010 年《第九届 USENIX 操作系统设计和实现专题研讨会论文集》中。

2014 年 3 月|第 57 卷 |第 3 期|ACM 通讯99

100 ACM 通讯 | 2014 年 3 月 | 第 57 卷 | 第 3 期

? 即使以明文发送的隐私敏感性信息仍难以识别。

比如,地理位置信息属于频繁更改且难以预测的浮点数对。

? 应用程序可以共享信息。如果将监控系统局限在单个应用程序,就无法追踪通过文件和进程间通信 (IPC)传递的数据流,其中包括用于传播隐私敏感性信息的核心系统应用程序。

全系统细粒度动态污点分析能够化解上述挑战,但前提是解决性能约束和过度(污点)跟踪的问题。在这里,敏感信息最先在污点来源中进行识别并被分配一个表示信息类型的污点标志。智能手机拥有明确定义的应用程序编程接口 (API),用于检索隐私敏感性信息(如麦克风数据、位置信息以及手机识别信息等)。随后,动态污点分析技术跟踪带标签的数据如何以可能泄露原始敏感信息的方式来影响其他数据。此跟踪通常在指令级别执行。比如,如果执行 a = b + c 的指令,而 c 带有污点 t ,那么该指令执行后,a 将带有污点 t 。 最后,受影响的数据在离开系统前会在污点流动终点(我们的设计方案中的网络接口)中进行识别。

显然,在指令级别执行动态污点分析会造成巨大的性能开销。比如,全系统仿真和每进程动态二进制转换 (DBT)2, 4, 17 一般会造成 2 至 20 倍的性能下降。这一开销的产生原因是,对每个受监控的指令而言,跟踪框架必须 (1) 保存执行上下文,(2) 执行污点传播,然后 (3) 恢复执行上下文。

我们克服该缺陷的方法是,将该跟踪框架移入操作系统内部并充分利用 Android 、BlackBerry 和 Windows Phone 所采用的基于虚拟机 (VM) 的架构。在上述平台中,应用程序由在解释器中执行的 Java 字节码或 .NET 字节码构成。我们修改解释器来执行污点传播,然后仔细地将传播扩散至系统的其余部分。通过修改解释器,我们就不再需要保存和恢复执行上下文了。此外,我们的方法侧重于跟踪由解释器代码使用的数据,它们在整个进程内存中所占比例非常小。值得注意的是,我们的方法并不适用于 iOS ,因为该平台使用二进制应用程序。

图 1 展示了我们的跟踪设计方案。跟踪以四种方式进行。第一,我们检测 VM 解释器以便在不受信任的应用程序代码中进行变量级别跟踪。使用变量语义可以提供优于传统 x86 跟踪逻辑的精度,并且更加侧重于在数据上而不是代码上存储污点标志。第二,我们在应用程序之间使用消息级别跟踪。消息粒度能够将 IPC 开销降至最低,同时将分析扩展至整个系统范围。第三,对于系统提供的原生库,我们使用方法级别跟踪。这里,我们运行不经插桩的平台原生代码,并将污点传播赋予返回值。最后,我们使用文件级别跟踪以确保永久性信息能够以保守的方式保留其污点标志。

进行有效研究。正如其他同类实用系统,该解决方案在设计上必须对性能和精度做出仔细权衡。

我们介绍的 TaintDroid 是基于 Android 的扩展,它是首个通过智能手机平台来跟踪隐私敏感性数据流的实用系统。为平衡性能与跟踪精度,TaintDroid 利用 Android 的虚拟化架构整合了四种粒度的污点传播,即变量级别、方法级别、消息级别以及文件级别。尽管这些并不是新技术,但我们的贡献在于对这些技术加以整合,并针对资源受限的智能手机找到了跟踪精度与性能之间的适当平衡点。

我们的另一个贡献在于使用 TaintDroid 开展了首个同类智能手机应用程序研究,旨在识别大量滥用隐私敏感性数据的行为。这项研究涉及到 30 款随机选取的热门 Android 应用程序,而且它们均会用到位置、摄像头或麦克风数据。我们在安装 TaintDroid 固件的手机上手动运行这些应用程序,然后收集各种 TaintDroid 日志和网络日志,并记录用户关于隐私敏感性数据泄露的预期,以便评估潜在的数据滥用行为。在我们的实验中,TaintDroid 准确地标记了 105 个包含隐私敏感性信息的 TCP 连接。经进一步检查,其中的 37 个连接被明确列为合法连接。通过检查其余 68 个 TCP 连接,我们发现,在这 30 款应用程序中有 15 款向广告服务器发送了用户的位置信息;共有 7 款收集了设备 ID 信息,甚至在有些情况下,它们还收集了电话号码和 SIM 卡序列号信息。总体而言,本研究中三分之二的应用程序以可疑方式使用了敏感数据。这些研究结果让人们更加担忧,应用程序可能会在用户毫不知情的情况下广泛收集地理位置信息和手机识别信息。

2.设计概况

我们所寻求的设计方案应该能让用户实时监控智能手机上的第三方应用程序如何实时处理隐私数据。要求源代码的现有静态分析技术并不适合,因为许多智能手机应用程序是闭源的,而且用于将字节码转化为源代码的技术还远远达不到零错误。即便源代码可用,信息的使用方式也往往由运行时事件和配置决定;实时监控可以说明这些特定于环境的依赖关系。此外,我们假设所有下载的第三方应用程序都是不受信任的,而且这些应用程序同时运行。

监控智能手机上的隐私敏感性信息的网络泄露情况时,面临着几大挑战:

? 智能手机的资源是受约束的。由于智能手机的资

源受到限制,这就妨碍了重量级资源跟踪系统的使用。

? 第三方应用程序被托管了多种隐私敏感性信息。监控系统必须区别多种信息类型,这需要额外的计算和存储。

研究亮点

2014 年 3 月 | 第 57 卷 | 第 3 期 | ACM 通讯 101

访问提供良好的空间局部性。另外,它允许对每个变量实际存储一个 32 位的位向量,从而实现了 32 种不同的污点标志。TaintDroid 为 Android 的 Dalvik VM 转换器中的所有标量值都添加了污点标记存储。Android 的应用程序以 Java 编写,却编译成由 Dalvik 执行的特殊 DEX 字节码。考虑到与 Java 的这些渊源,TaitDroid 必须为方法局部变量、方法参数、类静态字段、类实例字段以及数组提供污点标记存储。DEX 字节码与 Java 字节码的区别在于前者基于

寄存器。这对 TaintDroid 的实现是非常重要的。当 DEX 方法被调用时,Dalvik 会创建一个新的堆栈帧,

用于为该方法所用的所有标量和对象引用变量分配 32 位寄存器存储。如图 2 所示,方法参数也存储在堆栈上,并被映射至被调用方堆栈帧中的高指数寄存器。TaintDroid 通过在寄存器之间交错污点标记来为这些变量提供污点标记存储。TaintDroid 将与类字段和数组相邻的污点标记存储在内部数据结构中。每个数组仅使用一个污点标记,以便将存储开销降至最低,这对字符串来说往往已经足够了。然而,精度上的这种损失可能导致误报。比如,当受污染的值被存储在数组中时,从该数组读出的所有值都会受到污染。幸运的是,Java 数组常常包含不易受污染的对象引用,从而减少了实际中的误报。

3.2.解释型代码污点传播

DEX 字节码运算为 TaintDroid 带来了多项明显优势。首先,所有的运算都有明确的语义。与 x86 不同的是,并不缺乏用于清除变量(如,xor %eax-,%eax )的寄存器或特殊约定。其次,标量值不同于指针。这使得污点传播更加精确。最后,非方法局部变量带有可保留类型的明确污点标记存储(如上所述)。

在大多数情况下,污点标记传播正如人们所预料的那样进行。指令始终会覆盖目标寄存器;因此,一元运算将目标寄存器的污点标记设置为源寄存器的污点标记,二元运算(如 a = b + c )将目标寄存器的污点标记设置为两个源寄存器的污点标记的并集(如t (a ) ← t (b ) ∪ t (c ))。就实现而言,该并集仅仅是污点标记位向量的一个位 OR 。但是,在一些情况下,污点传播并不是直接的(如数组下标和对象引用)。完整的传播逻辑及相关探讨可参见我们的最初论文。93.3.原生代码污点传播

原生代码在 TaintDroid 中不受监控,因为执行自动污点传播需要重量级技术,如动态二进制转换 (DBT)。事实上,我们会在该方法终止后,将源代码检查和简单启发相结合来合成污染状态。

虽然这种设计实现了颇具实用性的跟踪,但它却依赖于固件的完整性。我们信任在用户空间执行的虚拟机以及由不受信任的解释型应用程序加载的任何原生系统库。因此,我们假设只有平台原生库可以加载。否则,应用程序不仅能够清除污点标志,还可以破坏解释器内的跟踪。我们在目标平台 (Android) 修改了原生库加载程序,使其仅加载来自固件的原生库。为测试兼容性,我们在 2010 年 7 月对总共 1100 款应用程序进行了调研,它们均是 Andorid Market 上各类别中排名前 50 位的最受欢迎的免费应用程序,结果表明:包含 .so 文件的应用程序所占比例不足 5%。因此,我们预期TaintDroid 仅与一小部分应用程序不兼容。3.TAINTDROID

TaintDroid 实现了在 Android 平台上的多粒度污点跟踪。设计的关键在于对跟踪精度和性能进行仔细的权衡取舍。TaintDroid 在 VM 解释器中使用变量级别跟踪。多个污点标志被存储为一个污点标记。当应用程序执行原生方法时,变量污点标记会赋予其返回值。最后,污点传播扩展至 IPC 和文件。

本节概述 TaintDroid 在实现中面临的主要挑战。此处我们将探讨 (a) 污点标记存储,(b) 解释型代码污点传播,(c) 原生代码污点传播,(d) IPC 污点传播,以及 (e) 二级存储污点传播。更多详细内容可参见我们的最初论文。9

3.1.污点标记存储

污点标记的存储会同时影响性能和内存开销。传统的污点跟踪系统为每个数据字节或字存储一个标记。3, 23通常在实现中该标记包含单独一个比特位。为进一步降低存储开销,这类系统使用非相邻影子内存23或标记图25,仅维护污染字节的标记。TaintDroid 则采取截然不同的方法。由于我们知道哪些字节是变量,我们可以通过仅持续跟踪变量的污染状态来显著缩小要跟踪的内存范围。这样一来,TaintDroid 就能够将污

点标记存储在与变量相邻的内存中,这将为污点标记

Message-level tracking

Variable-level

tracking Method-level

tracking

File-level

tracking 图 1.运用多级别方法在 Android 中进行高性能污点跟踪。

研究亮点

102 ACM 通讯 | 2014 年 3 月 | 第 57 卷 | 第 3 期

3.4.IPC 污点传播

当 Andorid 应用程序彼此通信时,它们会通过绑定 IPC 接口发送包对象。对 TaintDroid 而言,有必要通过包来传播污点标记,从而跟踪在已下载第三方应用程序之间传递的敏感信息,以及在第三方应用程序与系统之间传递的敏感信息。实际上,Android 的多数核心功能都是使用与第三方软件相同的应用程序抽象来实现的。

TaintDroid 为每个包消息分配一个污点标记。与包中的变量级别或字节级别跟踪相比,这种做法实现的性能更高,内存开销更低。此外,变量级别跟踪可被操控,因为对不同大小的变量进行的打包是由发送方和接收方定义的。但是,其缺陷在于误报(与数组相似)。正如第 7 节所述,这会让某些污点来源成为 TaintDroid 的问题。未来的实现将研究细粒度包跟踪的开销。

3.5.次级存储污点传播

TaintDroid 必须确保,当受污染的数据写入文件时,污点标记会在该文件稍后被读取时恢复。我们目

前为每个文件存储一个污点标记,因为细粒度跟踪

会导致重大开销。但是,当被跟踪信息的类型频繁混合时,误报就成为了这种方法的弊端。在我们的实验中,这并不是一个严重的问题。为存储污点标记,TaintDroid 使用了文件系统中的扩展属性。当 TaintDroid 开发出来的时候,最广泛使用 YAFFS2 文件系统并不带有 xattr 支持,因此我们必须添加这种支持。YAFFS2 后来加入了正式的 xattr 支持,而新推出的手机还配备了支持标准 ext4 文件系统的硬件闪存转换层。Android 存储架构的另一个局限在于 SD 卡。Android 在 SD 卡上使用 FAT 文件系统,该系统并不支

持 xattr 。我们将 SD 卡格式化为 ext2 格式并修补了文件写入 API ,以便使用与 FAT 相一致的文件权限,从而确保与现有应用程序兼容。4.隐私HOOK 的放置

要使用 TaintDroid 来监控应用程序,必须将污点来源添加至 Android 框架。我们修改了 Android 系统代码,以便将污点标记添加至各种污点来源。在大多数情况下,我们选择将污点来源添加至系统应用程序的 Java 部分中,这些应用程序可检索来自硬件的值。下文介绍了我们所遇见的最重要的污点来源类别。低带宽传感器。许多类型的隐私敏感性信息是通过低带宽传感器(位置和加速计等)获取的。这类信息往往变化频繁,并且由多个应用程序同时使用。因此,Android 使用传感器管理工具来以多路复用方式访问低带宽传感器。这种传感器管理工具是放置污点来源 hook 的理想点。我们将 hook 放置在 Android 的 LocationManager 和 SensorManager 应用程序中。

内部 VM 方法。Dalvik VM 包含一套核心方法,它们可由解释型代码直接调用,同时传递一指向 32 位寄存器参数数组的指针,以及一个指向返回值的指针。TaintDroid 将所有污点标记放置在参数值之后(不妨回忆一下图 2 中的堆栈)。这样一来,只要方法不影响污点传播,就无需修改。而对于那些影响污点传播的方法,可以方便地使用相应的污点标记。在 Andorid 2.1 版本的 185 个内部 VM 方法中,只有 5 个方法需要修补(如,数组处理和反射)。JNI 方法。其余原生方法大多使用 Java 原生接口 (JNI) 并通过 JNI 调用桥来调用。调用桥解析 Java 参数并分配一个返回值,因此它是在执行原生方法后修补跟踪状态的理想位置。为此,我们定义

了一个方法配置文件表,其中定义了一系列 (from, to ) 可指示方法参数、类变量和返回值之间的流动的对。使用自动静态分析工具来完全填充方法配置文件表的效果最佳;但是,为满足本研究的目的,我们根据需要人工定义了几种方法。为补充该人工制定的规范,我们创建了一个传播启发:将方法参数污点标记的并集分配至返回值的污点标记。如果该方法只采用原始参数、字符串参数以及返回值,那么这种启发是保守的。对于 Android 2.1 版本,我们发现 2844 种 JNI 方法中的 913 种属于这种情况。其余方法可能存在漏报,并且可能需要明确的方法配置文件规范。尽管我们发现,这些方法对我们的调查行之有效,但对原生代码进行更全面的思考是今后研究的重要方向。

Low addresses (0x00000000)High addresses (0xffffffff)Interpreted targets

Native targets

图 2. 修改后的堆栈格式。污点标记在解释型方法目标寄存器和原生方法附加寄存器之间交错排列。暗灰色方框代表污点标记。

2014 年 3 月 | 第 57 卷 | 第 3 期 | ACM 通讯 103

合法用途。例如,其中数个被标记的 TCP 连接均含有 HTTP 标头,指示使用了 Google Maps for Mobile (GMM) API ,而相应的应用程序则显示了用户所在位置的地图。然而,其余 68 个被标记的 TCP 连接却泄露了隐私敏感性数据。表 1 汇总了这些调查结果。

发送到广告服务器的位置数据。半数接受研究的应用程序均在未获得用户明确或默许同意的情况下,向第三方广告服务器泄露了位置数据。在这 15 款应用程序中,只有两款在首次运行时显示了最终用户许可协议,然而,这两份协议并未提及上述泄露数据的行为。被泄露的位置信息兼有纯文本和二进制两种格式。后者凸显出了 TaintDroid 相对于基于模式的简单数据包扫描的优势。应用程序将位置数据以纯文本形式发送到 https://www.wendangku.net/doc/b06628751.html, 、https://www.wendangku.net/doc/b06628751.html, 、https://www.wendangku.net/doc/b06628751.html, (11 款应用程序),以二进制格式发送到 FlurryAgent (4 款应用程序)。泄露给 AdMob 的纯文本位置数据显示在 HTTP GET 字符串中:

. . .& s=a14a4a93f1e4c68 &..& t=062A1CB1D-476DE85B717D9195A6722A9&d%5Bcoor-d%5D=47.661227890000006%2C– 122.31589477 &. . .针对 AdMob SDK 的调查表明,s = 参数是某应用程序发行者独有的标识符,coord= 参数则提供了地理坐标。

对于由 FlurryAgent 发送的二进制数据,我们则根据以下一系列事件来确认位置数据遭到泄露。首先,名为“FlurryAgent ”的组件通过向位置管理期进行注册来接收位置更新。然后,TaintDroid 日志消息显示了从位置管理器接收污染包的应用程序。最后,当应用程序收到污染包后,其 Android logcat 日志会立即报告:“正在向 http://data.?https://www.wendangku.net/doc/b06628751.html,/aar.do 发送报告”。

我们的实验表明,这十五款应用程序收集了位置数据,并将其发送至广告服务器。在某些情况下,即使应用程序并未显示任何广告,位置数据依然被发送至广告服务器。但我们通过 TaintDroid 证实,三款接受研究的应用程序(不包含在表 1 中)只根据用户的请求传输位置信息,进而向服务器提取本地内容。这一发现表明了监控应用程序如何在实际中使用或滥用所授予权限的重要性。

手机信息。在 30 款接受研究的应用程序中,20 款要求获得读取手机状态并访问互联网的权限。我们发现,在这 20 款应用程序中,有 2 款向其服务器传输了:(1) 设备的手机号码、(2) IMSI ,即用于识别 GSM 网络中的具体用户的唯一 15 位代码,以及 (3) ICC-ID 号码,即唯一 SIM 卡序列号。我们通过检查信息的纯文本来验证标记是否正确。两款应用程序都没有告知用户将通过手机发送这些信息。请注意,虽然我们没有显式跟踪 IMSI (见第 7 节),但它包含在由 TaintDroid 标记的纯文本网络缓冲区中。

高带宽传感器。麦克风和摄像头等来源都属于高带宽。来自传感器的每个请求都会返回大量仅能被某个应用程序所使用的数据。因此,操作系统通过大型数据缓冲区或文件(或二者兼具)来获取传感器信息。当传感器信息通过文件共享时,该文件必须使用相应的标记进行污染。对于为访问麦克风和摄像头接口而提供的两种 API 抽象,我们都添加了 hook 。

信息数据库。通讯簿和短信等共享信息通常存储在基于文件的数据库中。通过向这类数据库文件添加污点标记,所有从文件读取的信息都将自动被污染。我们最初使用这种技术来跟踪通讯簿信息。后来的实现方案修改了 Android 的内容解析程序类,以根据查询应用程序所指定的内容提供程序的名称(如“权限字符串”)来添加恰当的污点标记。

设备标识符。手机或用户的唯一识别信息属于隐私敏感性信息。并不是所有的个人识别信息都易于污点跟踪。但是,手机包含一些易于污染的标识符:手机号码、SIM 卡标识符 (IMSI, ICC-ID) 以及设备标识符 (IMEI) 都可以通过定义完好的 API 访问。我们检测了 API 以获取手机号码、ICC-ID 以及 IMEI 。IMSI 污点来源的固有局限性已在第 7 节中进行了讨论。

基于网络的污点流动终点。TaintDroid 可识别受污染信息何时被传输出网络接口。我们基于解释器的方法要求 TaintDroid 的代码在解释型代码中检测网络传输。因此,我们在Java 框架库中调用原生套接字库的时间点上进行了插桩。

5.应用程序研究

为证明 TaintDroid 的实用性,我们研究了 30 款流行的第三方 Android 应用程序,它们均可以访问用户的隐私敏感性数据和互联网。这组应用程序是从范围更大的一组流行应用程序中随机选出的,后者均可以访问互联网,并且至少可以访问位置、摄像头或音频数据中的一种。在随机选取应用程序时,我们更侧重于那些可以访问有趣的隐私敏感性信息的应用程序,因为无访问权限的应用程序显然无法泄露数据。关于我们的实验方法的详细内容,可参见我们的最初论文。9 下文将阐述我们的主要发现。

我们的实验包括手动运行和研究上述应用程序的功能。我们记录了 TaintDroid 日志和一个 tcpdump 数据包追踪,以便获取真实数据。我们也记录了最终用户许可协议 (EULA) 和关于数据泄露的隐含预期。我们的实验共生成了 1130 个 TCP 连接,TaintDroid 正确地标记了 105 个含有受污染隐私敏感性信息的连接(也就是说,TaintDroid 没有出现误报)。标记的 TCP 连接包括纯文本和二进制编码数据。

我们对 105 个被标记为含有隐私敏感性信息的 TCP 连接进行了检查,发现其中的 37 个明确属于

研究亮点

104 ACM 通讯 | 2014 年 3 月 | 第 57 卷 | 第 3 期

果证实了这一行为。使用 IMEI 的哈希值可以提供更多保护,因为它无法倒回真实的 IMEI 。但是,如果所有应用程序都直接将 IMEI 转换成哈希值,就会引起类似的隐私担忧。

第三方应用程序可以通过收集手机标识符来跟踪用户的行为。手机号码往往可以很容易地与机主姓名关联起来,因为许多用户将手机号码公布在社交网络和其他网站上。另外,即使是收集看似无法辨识的号码,如 IMSI 、ICC-ID 和 IMEI 等,也会对用户的隐私权造成影响。第一,手机上的所有应用程序都使用相同的手机标识符。如果标识符和行为被某个与很多应用程序相关联的机构(例如,广告或分析服务)所收集,就可以创建更加准确的用户资料。第二,这些标识符在用户使用手机期间是固定不变的,而且,如果 SIM 卡被安装到新的手机中,则标识符可能在更长时期内保持不变。这意味着用户无法像使用 Web 浏览器那样简单地清除跟踪 cookie 。最后,这些标识符通常会连同电子邮件地址等个人识别信息一起被收集。这些收集起来的数据可以用于创建小型数据库,从而将真实用户与其手机标识符相关联。过去,这种映射信息仅仅由手机运营商保存。

这一发现表明,Android 的粗粒度访问控制未能提供充足的保护来防范试图收集敏感数据的第三方应用程序。此外,我们发现一款应用程序在手机每次启动时都会传输手机信息。尽管该应用程序在首次使用时显示了使用条款,但其中却并未就收集此类高度敏感信息做出说明。出人意料的是,该应用程序在安装完成后,甚至还没有等到用户使用,就立刻传输手机数据。

设备唯一 ID 。 设备的 IMEI 同样遭到应用程序的泄露。IMEI 可对特定手机进行唯一识别,用于防止被盗手机访问蜂窝网络。TaintDroid 的标记表明,9 款应用程序传输了 IMEI ,其中的 7 款既没有显示最终用户使用协议,也没有在其中就收集 IMEI 作出说明。7 款应用程序中有一款是流行的社交网络应用程序,还有一款是基于位置的搜索应用程序。此外,我们发现 7 款应用程序有 2 款在向其内容服务器传输设备的地理坐标时包含了 IMEI ,从而有可能将 IMEI 改用作客户端 ID 。

相比之下,9 款应用程序中有 2 款更加谨慎地对待 IMEI 。其中一款应用程序在其隐私声明中明确表示会收集设备 ID ,另一款应用程序则使用了 IMEI 的哈希值而非数值本身。我们通过比较两部不同手机的结

表 1。应用程序研究结果。

权限

信息发送

应用程序 [https://www.wendangku.net/doc/b06628751.html,]

位置

手机状态摄像头

麦克风

位置

电话信息

IMEI

Babble Book [com.kalicinscy.babble]

?Cestos Full [com.chickenbrickstudios.cestos_full]?Manga Browser [com.mangabrowser.main]?i Movies and showtimes [com.stylem.movies]?Solitare Free [com.media?ll.solitaire]

?i

The Weather Channel [com.weather.Weather]?3001 Wisdom Quotes Lite [com.xim.wq_lite]??i Antivirus Free [com.antivirus]??i i i

Astrid [com.timsu.astrid]

??i BBC News listen & tweet [daaps.media.bbc]??i Blackjack [spr.casino]

??i Bump [com.bumptech.bumpga]

??i

Children ’s ABC Animals (lite) [com.mob4.childrenabc.animals]??i Hearts (Free) [com.bytesequencing.hearts_ads]??i Horoscope [fr.telemaque.horoscope]??i i

Mabilo Ringtones [mabilo.ringtones]

??i The directory for Germany [de.dastelefonbuch.android]??Traf?c Jam Free [com.jiuzhangtech.rushhour]??i Wertago for Nightlife [com.wertago]??i

i ?

Yellow Pages [com.avantar.yp]

??i Knocking Live Video Beta [com.pointyheadsllc.knockingvideo]???i

Layar [https://www.wendangku.net/doc/b06628751.html,yar]

???Pro Basketball Scores [com.plusmo.probasketballscores]???i Slide:Spongebob [com.mob4.slideme.qw.android.spongebob]???i

The coupons App [thecouponsapp.coupon]???i

i Trapster [com.trapster.android]

?

?

?i

Barcode Scanner [com.google.zxing.client.android]

?iXmat Barcode Scanner [https://www.wendangku.net/doc/b06628751.html,munity]?Myspace [com.myspace.android]?Evernote [com.evernote]

??

?

? = 潜在违规;= 在最终用户许可协议中明确声明;?

发送哈希值。

2014 年 3 月 | 第 57 卷 | 第 3 期 | ACM 通讯 105

实现方案的局限性。Android 使用了 Java 的 Apache Harmony 实现方案,并进行了一些自定义

修改。该实现方案纳入了对 PlatformAddress 类的

支持,PlatformAddress 类包含一个原生地址,并由 DirectBuffer 对象使用。文件和网络 IO API 包括了写和读的“直接”变体,这些变体使用了来自 DirectBuffer 的原生地址。TaintDroid 目前并不跟踪 DirectBuffer 对象上的污点标记,因为该数据存储在不透明的原生数据结构中。目前,TaintDroid 能在读或写的“直接”变体被使用时进行记录,但这种情形发生的频率极低。对于通过原生地址运行的 sun.misc.Unsafe 类,在实现方案上也存在类似的局限。污点来源的局限性。虽然 TaintDroid 可以有效

地跟踪敏感信息,但当被跟踪的信息包含配置标识符时,它会产生重大误报。例如,IMSI 数值字符串由移动国家代码 (MCC)、 移动网络代码 (MNC) 和移动站识别码 (MSIN) 组成,所有这些代码都会一同受到污染。Android 在传送其他数据时广泛使用 MCC 和 MNC 作为配置参数。如果 IMSI 被视为受到污染,会导致同一包中的所有信息都受到污染,最终造成受污染信息激增。因此,对于包含配置参数的污点来源,对包内的

个别变量进行污染更为合适。然而,正如第 5 节的分析结果所示,消息级别的污点跟踪对绝大部分污点来源都是行之有效的。8.相关研究

在过去的几十年中,信息流跟踪和控制一直是众多操作系统和编程语言设计的基础。为简略起见,我们侧重于使用动态污点分析技术的系统,该分析技术主要

用于跟踪旧版程序中的信息流。我们已使用该技术来

提高系统完整性(如防御软件攻击4, 16, 17)和保密性

(如发现隐私泄露

8, 23, 25

),同时跟踪互联网蠕虫。5 动态跟踪方法既包括使用硬件扩展6, 19, 20和仿真环境3, 23 进行的全系统分析,也包括使用动态二进制转换 (DBT)2, 4, 17, 25 进行的每进程跟踪。TaintDroid 的设计灵感源于这些早期研究,但却解决了移动电话所特有的难题。据我们所知,TaintDroid 是第一款手机专用的污点跟踪系统,也是首个通过整合数据对象多粒度跟踪来实现实用全系统分析的动态污点分析系统。

最后,动态污点分析已应用于虚拟机和解释器。Haldar 等人10 利用污点跟踪检测 Java 字符串类以防范 SQL 注入攻击。WASP 11 的动机与之类似;但它对个别字符进行积极污染,以确保 SQL 查询仅包含高完整性的子字符串。Chandra 和 Franz 1 提出在 JVM 中使用细粒度信息流跟踪,并检测 Java 字节码以协助进行控制流分析。与之类似,Nair 等人15 检测了 Kaffe JVM 。Vogt 等人21 对 Javascript 解释器进行检测以防

范跨站脚本攻击。Xu 等人22 使用动态信息跟踪自动检6.性能评估

在应用程序研究中,TaintDroid 只引入了很小的性能开销。原因是:(1) 大多数应用程序主要处在“等待状态”,(2) 重量级运算(例如,屏幕更新和网页渲染)均发生在不受监控的原生库中。为了评估适用于 Android 2.1 版本的 TaintDroid 的性能,我们使用了宏基准测试来表示智能手机的常见活动:加载应用程序、访问通讯簿、打电话和拍照片。如表 2 所示,宏观基准测试仅观察到微不足道的开销(少于 30 毫秒),但拍照片除外,该活动用时超过半秒。造成这种开销的原因可能是当前方法将污点标记传播到使用 xattrs 的文件,而通过缓存可能会改善这一情况。我们不仅通过宏基准测试报告了用户在使用智能手机常见功能时可感知到的性能开销,同时还针对 Java 运算执行了微基准测试。在该实验中,我们针对 Java 使用了标准 CaffeineMark 3.0 基准测试的 Android

端口。TaintDroid 的总体平均 CPU 开销为 14%。我们还在实验中衡量了基准测试进程的内存消耗。基准测试进程在 Android 和 TaintDroid 上分别耗用了 21.28 MB 和 22.21 MB ,这表明内存开销为 4.4%。7.探讨方法的局限性。为了将性能开销降至最低,TaintDroid 仅跟踪数据流(即显式流),而不跟踪控制流(即隐式流)。从第 5 节中可以看出,TaintDroid 可以跟踪敏感数据流,并识别泄露敏感信息的众多应用程序。然而,真正的恶意应用程序可以躲过我们的系统,并通过控制流来泄露隐私敏感性信息。完全跟踪控制流需要静态分析,7, 14这是对第三方应用程序来说是难以付诸实践的,因为它们的源代码不可用。如果污点范围可以确定,就能动态跟踪直接

控制流21;然而,DEX 并不维护可供 TaintDroid 利用的分支结构。用于确定方法控制流图 (CFG) 的按需静态分析提供了这一上下文15;然而,为避免误报和重大性能开销,TaintDroid 目前并不执行这种分析。我们的数据流污点传播逻辑与现有的著名污点跟踪系统是一致的。3, 23最后,一旦信息离开手机,它可能以网络应答的形式返回。当信息离开手机后,TaintDroid 就无法跟踪此类信息传播了。

表 2。宏基准测试的结果。

Android (ms)TaintDroid (ms)

应用程序加载时间6365

通讯簿(创建)348367

通讯簿(读取)101119打电话96106

拍照片17181718

106 ACM 通讯 | 2014 年 3 月 | 第 57 卷 | 第 3 期

研究亮点

2. Cheng, W., Zhao, Q., Yu, B., Hiroshige, S. TaintTrace: efficient flow tracing with dyanmic binar y rewriting.In Proceedings of the IEEE Symposium on Computers and Communications (ISCC) (Jun.2006), 749–754.

3. Chow, J., Pfaff, B., Garfinkel, T., C h r i s t o p h e r, K., R o s e n b l u m , M. Understanding data lifetime via whole system simulation.In Proceedings of the 13th USENIX Security Symposium (Aug. 2004).

4. Clause, J., L i, W., Orso, A. Dytan:

a generic dynamic taint analysis

framework.In Proceedings of the 2007 International Symposium on Software Testing and Analysis (2007), 196–206. 5. Costa, M., Crowcroft, J., Castro, M., Rowstron, A., Zhou, L., Zhang, L., Barham, P. Vigilante: end-to-end

containment of internet worms.

In Proceedings of the ACM Symposium on Operating Systems Principles (Oct. 2005), 133–147. 6. Crandall, J.R., Chong, F.T.Minos: control data attack prevention orthogonal

to memory model.In Proceedings

of the Interna tiona l Symposium on Microarchitecture (Dec. 2004), 221–232. 7. Denning, D.E., Denning, P.J.Certi?cation of Programs for Secure Information https://www.wendangku.net/doc/b06628751.html,mun.ACM 20, 7 (Jul.1977). 8. Egele, M., Kruegel, C., Kirda, E., Yin, H.,

Song, D. Dyanmic spyware analysis.

In Proceedings of the USENIX Annual

Technica l Conference (Jun.2007), 233–246. 9. Enck, W., Gilber t, P., Chun, B.G., Cox, L.P., Jung, J., McDaniel, P., Sheth, A.N.TaintDroid: an information-flow tracking system for realtime privacy monitoring on smartphones.

In Proceedings of the 9th USENIX

Symposium on Opera ting Systems Design a nd Implementa tion (OSDI) (Oct. 2010). 10. Haldar, V., Chandra, D., Franz, M. Dynamic taint propagation for Java.In Proceedings of the 21st Annua l

C o m p u t e r S e c u r i t y A p p l i c a t i o n s Conference (ACSAC) (Dec. 2005), 303–311. 11. Halfond, W.G., Orso, A., Manolios, P. WASP: protecting web applications using positive tainting and syntax-aware evaluation.IEEE Trans.Softw.Eng.34, 1

(2008), 65–81. 12. Ho, A., Fetterman, M., Clark, C., War?eld, A., Hand, S. Practical taint-based protection using demand emulation.In Proceedings of the European Conference on Computer Systems (EuroSys) (Apr. 2006), 29–41.

13. Lam, L.C., cker Chiueh, T. A general dynamic information flow tracking framework for security applications.In Proceedings of the Annual Computer Security Applica tions Conference (ACSAC) (Dec. 2006), 463–472. 14. M y e r s , A.C. J F l o w : p r a c t i c a l mostly-static information flow control.In Proceedings of the ACM Symposium o n P r i n c i p l e s o f P r o g r a m m i n g La n g a u g e s (P O P L ) (J a n. 1999). 15. Nair, S.K., Simpson, P.N., Crispo, B.,

Tanenbaum, A.S.A virtual machine based information ?ow control system for policy enforcement.In The 1st International Workshop on Run Time Enforcement for Mobile and Distributed Systems (REM) (2007).

16. Newsome, J., Song, D. Dynamic taint analysis for automatic detection, analysis, and signature generation of exploits on commodity software.In

Proceedings of the 12th Network and Distributed System Security Symposium (NDSS) (2005). 17. Qin, F., Wang, C., Li, Z., seop Kim, H., Zhou, Y., Wu, Y. LIFT: a low-overhead practical information flow tracking system for detecting security attacks.

In Proceedings of the 39th Annua l

IEEE/ACM International Symposium on Microarchitecture (2006), 135–148. 18. Saxena, P., Sekar, R., Puranik, V. E f f i c i e n t f i n e -g r a i n e d b i n a r y instrumentation with applications to taint-tracking.In Proceedings of

the IEEE/ACM symposium on Code Generation and Optimization (CGO) (Apr. 2008), 74–83,.

19. Suh, G.E., Lee, J.W., Zhang, D., Devadas, S. Secure program execution via

dynamic information flow tracking.In Proceedings of the Conference on

Architectural Support for Programming La ngua ges a nd Opera ting Systems (ASPLOS) (Oct. 2004), 85–96. 20. Va c h h a ra j a n i , N., B r i d g e s , M.J., Chang, J., Rangan, R., Ottoni, G., Blome, J.A., Reis, G.A., Vachharajani,

M., August, D.I. RIFLE: an architectural framework for user-centric information-flow security.In Proceedings of the

37th annual IEEE/ACM International Symposium on Microa rchitecture (2004), 243–254. 21. Vogt, P., Nentwich, F., Jovanovic, N., Kirda, E., Kruegel, C., Vigna, G. Cross-site scripting prevention with dynamic data tainting and static analysis.In

Proceedings of the 14th Network and Distributed System Security Symposium (2007). 22. Xu, W., Bhatkar, S., Sekar, R. Taint-enhanced policy enforcement: a practical approach to defeat a wide range of attacks.In Proceedings of the

USENIX Security Symposium (Aug. 2006), 121–136. 23. Yin, H., Song, D., Egele, M., Kruegel, C.,

Kirda, E. Panorama: capturing system-wide information flow for malware detection and analysis.In Proceedings of the 14th ACM Conference on Computer

and Communications Security (2007), 116–127.

24. Yip, A., Wang, X., Zeldovich, N., Kaashoek, M.F.Improving application security with data flow assertions.In Proceedings of the ACM Symposium on Operating Systems Principles (Oct. 2009). 25. Zhu, D.Y., Jung, J., Song, D., Kohno, T.,

Wetherall, D. Tainteraser: protecting sensitive data leaks using application-level taint tracking.Operating Sys.Rev. 45, 1 (2011), 142–154.测 PHP 解释器源代码,以防范 SQL 注入攻击。最后,PHP 和 Python 的 Resin 24 环境使用数据流跟踪来防范各种 Web 应用程序攻击。当数据离开解释型环境时,Resin 会实现文件过滤器和 SQL 数据库,以字节级粒度对对象和策略进行序列化和反序列化。TaintDroid 的解释型代码污点传播与上述研究存在相似之处。然而,TaintDroid 实现全系统信息流跟踪,将解释器污点跟踪与一系列操作系统共享机制无缝连接。9.结论

虽然智能手机操作系统允许用户控制应用程序对敏感信息的访问,但用户难以了解应用程序如何使用他们的隐私数据。为解决此问题,我们推出了 TaintDroid ,它是一个高效的全系统信息流跟踪工具,可以同时跟踪多个来源的敏感数据。TaintDroid 的一大设计目标就是高效。我们通过整合四个粒度(变量级别、消息级别、方法级别以及文件级别)的污点传播实现了这一目标。我们的评估显示,TaintDroid 在 CPU 密集型微基准测试中的性能开销仅为 14%。此前,关于污点跟踪的大多数研究工作或者效率低下(需要几倍的性能开销),或者需要源代码。由于 Android 应用程序的源代码不可用,人们可能因此认为 TaintDroid 的运行很慢。但事实并非如此:TaintDroid 无需源代码即可跟踪 Android 应用程序的信息流,而且开销适度。

我们使用 TaintDroid 对 30 款热门第三方应用程序的行为进行了研究,并发现其中三分之二的应用程序以不当方式处理敏感数据。特别值得一提的是,在这 30 款应用程序中,有 15 款与远程广告和分析服务器共享用户的位置信息。我们的研究结果证明,使用 TaintDroid 等监控工具来改善智能手机平台不仅富有成效,而且意义重大。

TaintDroid 是一项仍在开展的工作,它已被纳入本文作者和研究界其他人士今后将要开展的项目中。TaintDroid 适用于 Android 2.1 版本、2.3 版本(添加 JIT 支持)以及 4.1 版本。关于下载和构建 TaintDroid 的信息,请参见 https://www.wendangku.net/doc/b06628751.html, 。鸣谢

我们感谢为最初论文9 提供帮助的每位人士。Enck 和 McDaniel 得到了美国国家科学基金会 (NSF) 资助项目 CNS-0905447、CNS-0721579 和 CNS-0643907 的部分支持。Cox 和 Gilbert 得到了美国国家科学基金会杰出青年教授奖 CNS-0747283 的部分支持。

参考资料

1. C h a n d r a , D., Fr a n z , M. F i n e -grained information flow analysis and enforcement in a Java virtual machine.In Proceedings of the 23rd Annua l Computer Security Applica tions Conference (ACSAC) (Dec. 2007).

William Enck (enck@https://www.wendangku.net/doc/b06628751.html,),计算机科学系,北卡罗莱纳州立大学。Peter Gilbert 和 Landon P. Cox ({gilbert, Ipcox}@https://www.wendangku.net/doc/b06628751.html,),计算机科学系,杜克大学。

Byung-Gon Chun (bgchun@snu.ac.kr),首尔国立大学。

Jaeyeon Jung (jjung@https://www.wendangku.net/doc/b06628751.html,),微软研究院。

Patrick McDaniel (mcdaniel@https://www.wendangku.net/doc/b06628751.html,), 计算机科学和工程系,宾夕法尼亚州大学。

A n m o l N.S h e t h (a n m o l.s h e t h @ https://www.wendangku.net/doc/b06628751.html,),Technicolor Research 。

版权归属于作者 / 所有者发行权已授予 ACM 。$15.00

译文责任编辑:陈海波

相关文档