关闭

TaintDroid剖析之File & Memiry & Socket级污点传播

标签: sockettaintdroidfilememiry污点传播
367人阅读 评论(0) 收藏 举报
分类:

1、涉及到的代码文件


TaintDroid在File,Memory以及Socket三方面的污点传播主要涉及到如下一些文件:

/libcore/luni/src/main/java/libcore/io/Posix.java

/libcore/luni/src/main/native/libcore_io_Posix.cpp

/libcore/luni/src/main/java/org/apache/harmony/xnet/provider/jsse/OpenSSLSocketImpl.java

/libcore/luni/src/main/java/java/io/FileDescriptor.java

/libcore/luni/src/main/java/java/nio/MemoryBlock.java

/libcore/luni/src/main/java/java/nio/ByteBuffer.java

下面分别对这三方面的内容加以分析。

2、File和Memory级别的污点传播


为了实现文件几倍的污点传播,TaintDroid分别对类FileDescriptor,类MemoryBlock以及类ByteBuffer进行了修改。

类FileDescriptor在java中用于表征文件句柄,TaintDroid通过两方面的修改达到污点传播的目的。首先是给类FileDescriptor添加了成员变量hasName和name,以及添加了方法getDescriptor(),其作用主要是用于当监控到污点到达污点槽是,可以打印信息之用。

其次,在Taint.java中的getTaintFile,addTaintFile,logPathFromFd以及logPeerFromFd函数都是针对fd的。getTaintFile是给某个fd添加污点记录,其实现在(/dalvik/vm/native/dalvik_system_Taint.cpp),代码如下:

TaintDroid对Android的文件系统Yaffs2进行了扩充,利用其可扩展字段保存污点信息。getTaintXattr最终会通过系统调用,获取对应fd的污点信息。addTaintFile的实现逻辑分getTaintFile类似,这里不做详细解析。接下来分析logPathFromFd函数。该函数根据fd来获取对应的文件路径,其实现代码如下:

从实现来看,这个函数并没有实质性的操作,因此就不过多分析了。最后是logPeerFromFd函数,从字面意思来看这个函数也是日志打印相关的,而在TaintDroid4.1.1中这个函数还没有实现。

类MemoryBlock主要在java层提供mmap,malloc等内存的操作封装,这类的使用情景非常多,其中ByteBuffer的实现就是基于MemoryBlock的。TaintDroid为类MemoryBlock添加了一个成员变量taint用于记录污点数据,它对外提供的一系列poke和peek接口都有污点跟踪处理,下面是pokeIntArray和peekIntArray函数的实现,其他类型变量的实现类似:

虽然ByteBuffer是基于MemoryBlock实现的,但ByteBuffer需要对外提供信息的访问接口,因此TaintDroid为了ByteBuffer添加了两个方法,如下所示:

有了上述的基本修改之后,接下来我们开始分析文件级别的污点传播逻辑。在Android Framework中,所有文件的读写操作,最后都是通过Posix.java实现的,主要有read, pread, write,pwrite四个流程。这里只分析read和pwrite,其他两个流程是类似的。Posix.read实现如下:

read最终会调用readBytes,readBytes里首先调用原始逻辑readBytesImpl,然后调用Taint.getTaintFile获取当前fd的tag,最终把tag通过Taint.addTaintByteArray函数将污点信息传播到返回结果buffer中。再来看一下pwrite的实现:

pwrite的污点传播实现,依据bffer的类型(byte[]或者ByteBuffer)会有一个分支,但逻辑都是一样的。这里复用了之前ByteBuffer添加的getTaintDirectByteBufferTaint方法。至此File和Memory级别的污点传播就分析完毕了,接下来看一下网络污点传播。

3、Socket级别的污点传播


关于Socket级别的污点传播,TaintDroid主要修改了两个文件,分别是OpenSSLSocketImpl.javaPosix.java(没错,又是它)。先看一下OpenSSLSocketImpl.java。这个文件主要是修改了类SSLOutputStream的两个write方法,需要注意的是这两个方法是污点槽(taint sink),因此这里的主要工作不是进行污点传播,而是实现污点监控日志的输出。我只分析其中一个的实现,见如下代码:

红色框中的输出表示污点跟踪的数据已经通过网络接口传播到外面了。Posix.sendto函数主要是socket的数据发送,也是一个污点槽,即这里也是污点跟踪的终点。Sendto最终会调用sendtoBytes,我们分析sendtoBytes就行了:

4、总结


通过上面的分析,我们知道了TaintDroid在File,Memory以及Socket这三方面的污点传播实现原理,其实分析下来并不复杂,不过需要把关联代码找全还是需要一些时间的。明白这三个方面的污点传播的实现对我们非常有帮助,因为接下来我们要补充完善其他污点的传播,就可以依葫芦画瓢了。

至此,关于TaintDroid的深入剖析系列文章就告一段落了。回顾所有文章,我们发现在整个分析过程中,并不仅仅分析了TaintDroid的污点传播实现,还顺带详细了解了Dalvik、Native栈帧结构,java层数据组织方式以及Android IPC,File, Memory,Socket操作等等等等。我相信,有了这些知识,读者后面无论分析多么复杂的android平台系统,都能做到事半功倍。

TaintDroid深入剖析系列文章目录:

TaintDroid深入剖析之启动篇

TaintDroid剖析之DVM变量级污点跟踪(下篇)

TaintDroid剖析之Native方法级污点跟踪分析

TaintDroid剖析之IPC级污点传播


作者:简行、走位@阿里聚安全,更多安全类技术文章,请访问阿里聚安全博客

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

TaintDroid剖析之IPC级污点传播

前言在前三篇文章中我们详细分析了TaintDroid对DVM栈帧的修改,以及它是如何在修改之后的栈帧中实现DVM变量级污点跟踪、Native方法级跟踪。本篇文章我们来分析下IPC级污点传播。
  • AliMobileSecurity
  • AliMobileSecurity
  • 2016-08-10 13:41
  • 405

taintdroid源码分析 三之 解释器污点传播

序号 指令类型 指令含义 污点传播逻辑 污点传播描述 1 Move vx,vy 移动vy的内容到vx T(vy)→T(vx) 将T(vy)复制到T(vx) 2 Return ...
  • naturesince
  • naturesince
  • 2014-10-14 17:07
  • 1725

taintdroid源码解析一 如何为隐私数据加上污点标记

当安卓出生时,我还在高三不知道什么是智能手机,当
  • naturesince
  • naturesince
  • 2014-10-13 23:08
  • 1629

Android动态污点分析工具TaintDroid部署指南 - FloraF

TaintDroid是一款著名的Android动态污点分析工具。本文总结了部署TaintDroid的全部过程。如果部署过程中有任何疑问,可以与我联系,我会尽量提供帮助。
  • u013731561
  • u013731561
  • 2016-04-13 22:44
  • 1472

TaintDroid剖析之Native方法级污点跟踪分析

在前两篇文章中我们详细分析了TaintDroid对DVM栈帧的修改,以及它是如何在修改之后的栈帧中实现DVM变量级污点跟踪的。现在我们继续分析其第二个粒度的污点跟踪——Native方法级跟踪。
  • AliMobileSecurity
  • AliMobileSecurity
  • 2016-07-25 14:53
  • 1008

TaintDroid实现数据流的污点追踪

TaintDroid实现数据流的污点追踪 taintdroid不同层次的污点标签追踪: 1:变量级别的追踪:java代码-->dalvik虚拟机的解释器的执行字节码-->对内存中的变量地址的下地址开辟一个32位的空间存储一个污点标签 图1 2:java方法中的污点标签传递开辟双倍空间...
  • zero9988
  • zero9988
  • 2015-12-16 00:30
  • 1143

TaintDroid剖析之DVM变量级污点跟踪(下篇)

在启动篇中我们详细分析了TaintDroid对DVM方法参数和方法变量的变量级污点跟踪机制,现在我们将继续分析TaintDroid对类的静态域、实例域以及数组的污点跟踪。
  • AliMobileSecurity
  • AliMobileSecurity
  • 2016-07-18 14:42
  • 394

动态污点分析浅述

转载:http://blog.csdn.net/leeeryan/article/details/6267521        动态污点分析(Dynamic Taint Analysis)是近几年刚刚被提出的一种新的有效检测各种蠕虫攻击和自动提取特征码用...
  • fireblue1990
  • fireblue1990
  • 2016-09-13 22:13
  • 1094

事务传播性是什么?

我们都知道事务的概念,那么事务的传播特性是什么呢?(此处着重介绍传播特性的概念,关于传播特性的相关配置就不介绍了,可以查看spring的官方文档)         在我们用SSH开发项目的时候,我们一般都是将事务设置在Service层 那么...
  • haozhugogo
  • haozhugogo
  • 2017-02-21 21:58
  • 517

Kubernetes1.6新特性:POD高级调度-污点和容忍特性/报告节点问题特性

(一)  核心概念Pod是kubernetes中的核心概念,kubernetes对于Pod的管理也就是对Pod生命周期的管理以及对Pod进行调度管理。Kubernetes早期版本使用系统默认调度器来对Pod进行统一调度管理,在1.2版本中增加了多个调度器特性,多个调度器可以并行调度不同的P...
  • horsefoot
  • horsefoot
  • 2017-06-01 08:37
  • 11380
    个人资料
    • 访问:178960次
    • 积分:3093
    • 等级:
    • 排名:第13041名
    • 原创:133篇
    • 转载:4篇
    • 译文:3篇
    • 评论:23条
    最新评论