TaintDroid:智能手机监控实时隐私信息流跟踪系统(三)
4.3 原生代码标记传播
Native 代码是不受TaintDroid监控的。理想情况下,我们获得了相同的传播语义当使用相同的解释副本时。因此,为了精确的在Java层进行污点监控,我们定义了两个必要的前提条件:1)所有被访问的外部变量(对于其他方法的类字段引用)根据数据流都被标记上了相应的污点。2)根据成数据流所有返回值都被分配了一个污点标记。TaintDroid完成这些的前提条件是通过各种人工方式,推断,方法概要,取决于环境要求。
内部虚拟机方法:内部虚拟机的方法又叫做直接译码法,传递一个指向32位数组的寄存器参数和一个指向返回值的指针。对于java参数和返回值堆栈指针增加提供了如图 4所示的访问污点标记。在不同的版本之间虚拟机内部方法有一个相对很小的数字在频繁的增加,在污点传播需要的时候我们将会进行手动检测和修补。我们鉴定了185个内部虚拟机方法在Android的2.1版本;但是,只有5个要求打补丁的:数组复制的本地方法System.arraycopy()。执行Java反射的几个本地方法。
JNI 方法:调用JNI方法通过JNI调用桥。调用桥解析Java参数并且使用方法的描述符字符串给返回值赋值。为了提供污点传播我们对所有的JNI方法都进行了修补。当JNI方法返回时,TaintDroid调用方法概要标签对污点传播进行更新。一个方法配置文件是一个列表(from,to)指示流动的变量,这些变量可能是方法参数,类变量或返回值。枚举出所有的JNI方法的信息里是一个耗时的过程,最好的方法就是使用源代码完成自动化分析(这个也是我们今后要做的工作)。我们目前包括了一个额外的传播启发式补丁。启发式算法是一个JNI方法中一个保守的方法只操作原语和字符串和返回值。他分配了方法参数污点标记标签到污点的返回值的集合。对于调用方法的对象启发式的算法有假阴性,它涵盖了许多存在的方法。
我们对官方Android版本(2.1)的源码中包含的JNI方法进行了一个调查来确定特定的属性。我们发现了2844个JNI方法与Java接口和C或者C++的实现。在这些方法中,913个方法没有对象的引用(作为参数,返回值,或者方法)因此自动被我们的启发式算法所覆盖。剩下的方法可能有或者可能没有信息流而产生假阴性。目前,我们按需要定义了方法概要。例如,在IBM Native Converter 类中的方法在字符类型和字节类型数组之间要求传播的转换。
4.4 IPC 污点传播
当APP之间在交换数据时污点标记必须传播。跟踪的粒度直接影响了性能和内存开销。TaintDroid使用信息级的污染跟踪。一个信息的污染标签代表了信息上一次污点标记分配给的变量。我们使用了信息水平级的粒度使得在进程间通讯的性能和存储开销达到最小化。
我们选择在变量水平实现消息级别的污点传播,因为在一个变量级系统,一个狡猾的接收器可能通过为打包的变量在不同方式的方式下获取没有污点传播的变量而戏弄监控。例如,如果一个IPC包裹的信息包含一系列的标量值,这个接收器可以解包一个字符串,从而获得没有污染传播标签的值在标量值的序列里。因此,为了阻止应用程序可以使用这种来移除污点标记,目前执行污点保护都是在信息层级。
对于IPC之间的污点传播会导致假阳性。类似与数组,所有的数据项为一组分享同一个污点标记。例如,第8部分讨论了跟踪IMSI的限制以免部分配置的参数之在同一个包里。未来将会考虑word级的污点标记以及额外的一致性检查确保解包变量的准确传播。然而这种额外的复杂性将会对IPC性能产生负面的影响。
4.5 二级存储污点传播
当数据被写入文件的时候可能会导致污点的丢失。我们设计了存储每个文件的污点标记。这个污点标记将会被更新当写文件或者在读取文件的时候传播数据。TaintDroid存储文件污染标签在文件系统的扩展属性里。为了达到这个目的,我们执行了支持Android的热文件系统扩展属性(YAFFS2)并且格式化了可移除的SD卡与ext2文件系统。至于数组和IPC,存储每个文件的污点标记将会导致假阳性并且限制了信息数据库污点标记的粒度(见第5节)。或者,我们可以跟踪污点标记在更细的粒度通过牺牲更多的内存和性能开销。
4.6 污点性能库
污点源和污染池定义的虚拟化环境污染标签必须进行污点交互。我们抽象出污染源和污染池逻辑组成一个单独的污点接口库。这个接口执行两个功能:1)增加对变量的污点标记;2)从变量检索污点标记。这个库只能提供添加未设置或者清除污染标签的功能,这些功能将会被用来对于可以的Java code 移除污点标记。
增加污点标记数组和字符串通过内部虚拟机方式很简单,所有的这些都存储在数据对象当中。对于基本的数据类型,一方面,是存储在解释器的内部栈当方法调用结束之后会被销毁。因此,污点库使用该方法的返回值作为一种污染原始变量的手段。开发人员通过一个值或者变量添加进合适的污点方法中(e.g., addTaintInt())返回的变量值有相同的值只是增加了指定的污点标记。注意栈存储在污点标记检索时不会产生并发。
5 隐私HOOK点
使用TaintDroid进行隐私分析需要确定操作系统内敏感隐私数据源和检测污染源。在以前,动态污点分析系统假设污点源和污点池的位置是微不足道的。但是,对于像Android这样复杂的操作系统通过各种各样的方式为应用程序提供各种各样的信息,例如:直接访问,服务接口。每一种可能的隐私敏感信息都必须要认真研究才能决定定义污染源的最好方式。
污染源只能够针对TaintDroid提供的存储标签的内存增加污点标记。目前,污点池和污点源的位置都被限定在解释器代码,IPC消息,文件的变量中。本节将讨论这些有价值的污染源和污染池是怎么实现这些限制的。我们给予信息特征对污染源进行了概括。
低带宽传感器:各种各样的隐私敏感信息是通过低带宽传感器获得的。例如:位置信息和加速器。信息是常常会改变的并且会同时被多个应用程序所使用。因此,于智能手机操作系统多路访问低带宽传感器使用一个管理是一个很常见的现象。一个传感器管理者代表了一个理想的污点HOOK位置。对我们分析而言,我们将钩子插入到Android的LocationManager和SensorManager的应用程序中。
高带宽传感器:隐私信息例如麦克风和照相机是高带宽的。它需要传感器频繁的返回许多的数据量并且这些数据都只是一个应用程序来使用。因此,智能手机的操作系统可能通过大数据缓存,文件或者两者共享传感器的信息。当传感器信息通过文件共享,文件必须使用合适的污点便签标记。由于API的灵活性,我们将会对麦克风和照相机信息数据缓冲区和文件污点下钩子。
信息数据库:共享信息例如通讯录地址和短信息常常存储在基于文件类型的数据库中。这样的组织形式提供了有用的明确的污点源类似于硬件传感器。通过添加一个污点标记数据库文件,所有的信息从文件读取将会自动受到污染。我们使用这种技术来跟踪通讯录信息。值得注意的是虽然TrainDroid对于这些变量是文件级别的粒度值是合适的,但是可能存在一些文件对于他们来说粒度可能太大了。但是,我们还没有遇到这样的数据源。
设备标识:信息是唯一的标识电话或者用户敏感隐私。并不是所有的个人的可识别信息都可以很容易的被污染。但是,电话标识了几个容易污染的标识:电话号码,SIM卡标识(IMSI,ICC-ID)以及IMEI都可以通过定义好的API进行访问。我们测试了电话号码的,ICC-ID,IMEI的API。IMSI污染源存在继承限制我们将在第8节进行讨论。
网络污点池:我们的隐私分析确定了污染信息传送的网络接口。VM基于解释器的方法要求污染池被放置在解释的代码中。因此,我们设置了Java framework层的库的HOOK点,这些地方将会被native层的socket库所调用。
TaintDroid:智能手机监控实时隐私信息流跟踪系统(三)的更多相关文章
- TaintDroid:智能手机监控实时隐私信息流跟踪系统(一)
1.1 摘要 现今,智能手机操作系统不能有效的提供给用户足够的控制权并且很清楚的了解到第三方的应用程序是如何使用其的隐私数据.我们使用了TaintDroid来阐明这个缺点,其是一个高效的,全系 ...
- TaintDroid:智能手机监控实时隐私信息流跟踪系统(四)
6 应用程序研究 款流行的应用程序是怎么使用用户敏感数据的.选取的应用程序可以根据相应的权限通过Internet获得各种各样的用户数据.我们研究发现三分之二的这些数据暴露了用户详细的地理位置 ...
- Sentry实时应用错误跟踪系统在Kubernetes中私有化部署
应用错误跟踪系统:对软件系统运行过程中产生的错误日志进行收集从而实现监控告警. 虽然软件错误❌是不可避免的,但是可以降低错误数. 提高对错误的治理能力能让错误带来的损失降到最低
- 1.8-1.10 大数据仓库的数据收集架构及监控日志目录日志数据,实时抽取之hdfs系统上
一.数据仓库架构 二.flume收集数据存储到hdfs 文档:http://flume.apache.org/releases/content/1.9.0/FlumeUserGuide.html#hd ...
- 基于SkyWalking的分布式跟踪系统 - 微服务监控
上一篇文章我们搭建了基于SkyWalking分布式跟踪环境,今天聊聊使用SkyWalking监控我们的微服务(DUBBO) 服务案例 假设你有个订单微服务,包含以下组件 MySQL数据库分表分库(2台 ...
- Dapper,大规模分布式系统的跟踪系统--转
原文地址:http://bigbully.github.io/Dapper-translation/ 概述 当代的互联网的服务,通常都是用复杂的.大规模分布式集群来实现的.互联网应用构建在不同的软件模 ...
- Dapper,大规模分布式系统的跟踪系统
概述 当代的互联网的服务,通常都是用复杂的.大规模分布式集群来实现的.互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发.可能使用不同的编程语言来实现.有可能布在了几千台服务器 ...
- 如何在本地搭建一个Android应用crashing跟踪系统-ACRA
https://github.com/bboyfeiyu/android-tech-frontier/tree/master/others/%E5%A6%82%E4%BD%95%E5%9C%A8%E6 ...
- 【转】使用JIRA搭建企业问题跟踪系统【个人推荐】
免责声明: 本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除. 原文作者:Judy Shen的专栏 原文地址:使用JIRA搭建企业问题跟踪系统 ...
随机推荐
- CentOS-6.3安装配置SVN
安装说明 系统环境:CentOS-6.3 安装方式:yum install (源码安装容易产生版本兼容的问题) 安装软件:系统自动下载SVN软件 检查已安装版本 #检查是否安装了低版本的SVN [ro ...
- Installshield 64位操作系统下拷贝文件,如何重定向到32位的系统文件夹下
原文:Installshield 64位操作系统下拷贝文件,如何重定向到32位的系统文件夹下 64位操作系统下拷贝文件重定向问题,在在复制代码前加上Disable(WOW64FSREDIRECTION ...
- high performance program (SSE4.2 intrin instruction)
In file included from mm_lddqu.si128.c:2:0: /usr/local/lib/gcc/x86_64-redhat-linux/4.7.1/include/nmm ...
- 【麦子学院】OpenCV教程函数总结
个自带样例. parter 1: No1. adaptiveskindetector.cpp 利用HSV空间的色调信息的皮肤检測,背景不能有太多与肤色相似的颜色.效果不是特别好. No2. bagof ...
- C#JSON序列化与反序列化
原文:C#JSON序列化与反序列化 windows phone学习也有一段时间了,想要做一个新闻客户端练练手,于是就在网上找看有没有接口之类.在天狗播客找到了热点热词新闻资讯API开放接口,接口提供的 ...
- OCP-1Z0-051-题目解析-第4题
4. Which two statements are true regarding single row functions? (Choose two.) A. They a ccept only ...
- Spring IOC之Classpath扫描和管理的组件
在前面的大部分例子我们使用XML去指明配置数据去定义在Spring容器中的每一个BeanDefinition.上一节我们展示了如何在 代码层注解的方式来提供大量的配置信息.即使在这些例子中,但是,基础 ...
- jQuery在线选座订座(影院篇)
原文:jQuery在线选座订座(影院篇) 我们在线购票时(如电影票.车票等)可以自己选座.开发者会在页面上列出座次席位,用户可以一目了然的看到可以选择的座位及支付.本文以电影院购票为例,为您展示如何选 ...
- 【分享】SAS统计分析软件学习教程电子书合集下载
SAS是著名的统计分析软件,全称为Statistics Analysis System,最早由北卡罗来纳大学的两位生物统计学研究生编制,并于1976年成立了SAS软件研究所,正式推出了SAS软件. 转 ...
- Effective C++(12) 复制对象时要复制每一个成员
问题聚焦: 负责拷贝的两个操作:拷贝构造函数和重载赋值操作符. 一句话总结,确保被拷贝对象的所有成员变量都做一份拷贝. Demo void logCall(const std::string&am ...