TaintDroid剖析之IPC级污点传播
TaintDroid剖析之IPC级污点传播
作者:简行、走位@阿里聚安全
前言
在前三篇文章中我们详细分析了TaintDroid对DVM栈帧的修改,以及它是如何在修改之后的栈帧中实现DVM变量级污点跟踪、Native方法级跟踪。本篇文章我们来分析下IPC级污点传播。
TaintDroid深入剖析系列目录:
具体实现
这里我以情景为上下进行跟进,每个情景会涉及多个源文件,它们之间的逻辑是互相完整和独立的。
Java层Taint的传播是通过类Taint(libcore/dalvik/src/main/java/dalvik/Taint.java)实现的。
情景——IPC传递
代码:
frameworks/base/cmds/servicemanager/binder.c
frameworks/native/libs/binder/Parcel.h
frameworks/native/libs/binder/Parcel.cpp
framework/base/core/java/android/os/Parcel.java
framework/base/core/jni/android_os_Parcel.cpp
分析:
为了实现IPC的污点跟踪,taintdroid给每个Parcel单独维护了一个taint_info的结构体,其定义在Parcel.h,如下所示:
struct taint_in_parcel
{
uint32_t pos; //污点始址
uint32_t len; //污点长度
uint32_t taint; //污点标记
};
struct taint_info
{
uint32_t mTaintSize; // 当前污点项长度
uint32_t mCurPos; // 当前项索引
uint32_t mCurAllocatedSize; // 当前可用项长度
struct taint_in_parcel * parcelArray; //污点项数组
void* mOwnerCookie; //作用未知
};
然后提供了两个方法对这个结构进行操作,分别是Parcel::updateTaint和Parcel::getTaint。
updateTaint的功能是动态添加污点到当前Parcel,其实现如下:
而getTaint的功能是根据指定的范围获取对应的tag值(因为Parcel的数据是线性存储的),其实现如下所示:
为了可以方便上层接口调用,在android_os_Parcel.cpp通过JNI对上层提供了接口,
再来看一下Parcel.java层污点传递的具体实现,我从四个函数分析,其他的逻辑是类似的。
Parcel.marshall是把Parcel序列化为byte[],其实现如下:
通过getTaint获取当前Parcel的污点集合tag,再通过Taint.addTainByteArray把tag传递给序列化后的data对象。
Parcel.unmarshall的作用跟Parcel.marshall是相反的,通过byte[]还原Parcel对象,其实现如下:
先通过Taint.getTainByArray拿到data的tag,然后再同步到还原后的Parcel对象。
Parcel.writeInt是往Parcel中写入一个32位的整型,其实现如下:
先获取被写入的val的tag,然后再通过调用updateTaint把污点数据同步到当前Parcel对象。
Parcel.readInt是执行与Parcel.writeInt相反的动作,从Parcel中读出一个32倍整形,其实现如下所示:
依据当前的pos和len,getTaint返回对应的tag,然后再通过Tain.addTainInt同步到最终结果val2。
总结:
TaintDroid的IPC污点跟踪粒度是变量粒度的,因此大大提高了污点传播的精准度。下一步继续分析下File & Memory & Socket 级污点传播
作者:简行、走位@阿里聚安全,更多Android安全类技术文章,请访问阿里聚安全博客
TaintDroid剖析之IPC级污点传播的更多相关文章
- TaintDroid剖析之File & Memiry & Socket级污点传播
TaintDroid剖析之File & Memiry & Socket级污点传播 作者:简行.走位@阿里聚安全 1.涉及到的代码文件 TaintDroid在File, Memory以及 ...
- TaintDroid剖析之Native方法级污点跟踪分析
1.Native方法的污点传播 在前两篇文章中我们详细分析了TaintDroid对DVM栈帧的修改,以及它是如何在修改之后的栈帧中实现DVM变量级污点跟踪的.现在我们继续分析其第二个粒度的污点跟踪—— ...
- TaintDroid剖析之DVM变量级污点跟踪(下篇)
TaintDroid剖析之DVM变量级污点跟踪(下篇)作者:简行.走位@阿里聚安全 1 回顾 在上一章节中我们详细分析了TaintDroid对DVM方法参数和方法变量的变量级污点跟踪机制,现在我们 ...
- TaintDroid深入剖析之启动篇
1 背景知识 1.1 Android平台软件动态分析现状 众所周知,在计算机领域中所有的软件分析方法都可以归为静态分析和动态分析两大类,在Android平台也不例外.而随着软件加固.混淆技术的不 ...
- TaintDroid:智能手机监控实时隐私信息流跟踪系统(一)
1.1 摘要 现今,智能手机操作系统不能有效的提供给用户足够的控制权并且很清楚的了解到第三方的应用程序是如何使用其的隐私数据.我们使用了TaintDroid来阐明这个缺点,其是一个高效的,全系 ...
- TaintDroid:智能手机监控实时隐私信息流跟踪系统(三)
4.3 原生代码标记传播 Native 代码是不受TaintDroid监控的.理想情况下,我们获得了相同的传播语义当使用相同的解释副本时.因此,为了精确的在Java层进行污点监控,我们定义了两个必 ...
- TaintDroid简介
1.Information-Flow tracking,Realtime Privacy Monitoring.信息流动追踪,实时动态监控. 2.TaintDroid是一个全系统动态污点跟踪和分析系统 ...
- 【干货分享】前端面试知识点锦集03(JavaScript篇)——附答案
三.JavaScript部分 1.谈谈你对Ajax的理解?(概念.特点.作用) AJAX全称为“Asynchronous JavaScript And XML”(异步JavaScript和XML) 是 ...
- 什么是JS事件冒泡?
什么是JS事件冒泡?: 在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理 程序或者事件返回true,那么 ...
随机推荐
- Power BI for Office 365 概览
伴随着数据量的日益增长,通过自服务式的商业智能把数据转换成辅助决策支持的工具,越来越成为迫切的需求.在以前,处理这些数据往往只是IT人员范围内的事,但是通过Power BI for Office 36 ...
- C++ 系列:C++ 基础 002
Copyright © 1900-2016, NORYES, All Rights Reserved. http://www.cnblogs.com/noryes/ 欢迎转载,请保留此版权声明. -- ...
- Spring MVC 学习 -- 创建过程
Spring MVC 学习 -- 创建过程 Spring MVC我们使用的时候会在web.xml中配置 <servlet> <servlet-name>SpringMVC< ...
- JAVA运行时问题诊断-工具应用篇
该BLOG内容是之前在部门组织讨论运行时问题时自己写的PPT内容,内容以点带面,主要是方便以后自己回顾查看. 大纲包括:1.运行时问题分类 2.服务器自带工具 3.其他工具 4.例子 5.实际情况 运 ...
- java的布尔运算符和位运算符
1.布尔运算符 && 逻辑与: || 逻辑或: != 不等于: 三元操作符:?: :表达式为 condition?expression1:expression2(当条件为真时 ...
- opencv中的SIFT,SURF,ORB,FAST 特征描叙算子比较
opencv中的SIFT,SURF,ORB,FAST 特征描叙算子比较 参考: http://wenku.baidu.com/link?url=1aDYAJBCrrK-uk2w3sSNai7h52x_ ...
- border-radius四个值的问题
我们都知道border-radius后面如果是4个值的话,依次代表的是左上角.右上角.右下角.左下角. 但是这样写呢:border-radius:10px 20px 30px 40px/50px 40 ...
- 【APICloud】APICloud基础学习与快速入门
前言:回顾这几天学习情况,总的来说APICloud官网它的学习资料和社区还是足够了,但是我必须吐槽一句,实在是过于混乱了,视频资料文档资料它一股脑地都堆在了那里,这几天基本处于在各个地方跳转,然后现在 ...
- Ajax浅学习
写在前面:响应事件 function addEvent(obj, type, fn) { if (obj.addEventListener) { obj.addEventListener(type, ...
- PHP用户注册与登录【1】
需求分析 主要功能分为 用户注册.用户登录.用户退出.用户中心 四个部分. 用户注册 用户注册主要功能有: 注册信息表单填写界面 javascript 脚本初步检测用户输入的注册信息. 注册处理模块检 ...