摘要:前言在前三篇文章中我們詳細分析了對棧幀的修改,以及它是如何在修改之后的棧幀中實現(xiàn)變量級污點跟蹤方法級跟蹤。總結的污點跟蹤粒度是變量粒度的,因此大大提高了污點傳播的精準度。下一步繼續(xù)分析下級污點傳播。
前言
TaintDroid深入剖析系列目錄:在前三篇文章中我們詳細分析了TaintDroid對DVM棧幀的修改,以及它是如何在修改之后的棧幀中實現(xiàn)DVM變量級污點跟蹤、Native方法級跟蹤。本篇文章我們來分析下IPC級污點傳播。
TaintDroid深入剖析之啟動篇
TaintDroid剖析之DVM變量級污點跟蹤(下篇)
TaintDroid剖析之Native方法級污點跟蹤分析
具體實現(xiàn)這里我以情景為上下進行跟進,每個情景會涉及多個源文件,它們之間的邏輯是互相完整和獨立的。
Java層Taint的傳播是通過類Taint(libcore/dalvik/src/main/java/dalvik/Taint.java)實現(xiàn)的。
情景——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
分析:為了實現(xiàn)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; //污點項數(shù)組 void* mOwnerCookie; //作用未知 };
然后提供了兩個方法對這個結構進行操作,分別是Parcel::updateTaint和Parcel::getTaint。
updateTaint的功能是動態(tài)添加污點到當前Parcel,其實現(xiàn)如下:
而getTaint的功能是根據(jù)指定的范圍獲取對應的tag值(因為Parcel的數(shù)據(jù)是線性存儲的),其實現(xiàn)如下所示:
為了可以方便上層接口調用,在android_os_Parcel.cpp通過JNI對上層提供了接口。
再來看一下Parcel.java層污點傳遞的具體實現(xiàn),我從四個函數(shù)分析,其他的邏輯是類似的。
Parcel.marshall是把Parcel序列化為byte[],其實現(xiàn)如下
通過getTaint獲取當前Parcel的污點集合tag,再通過Taint.addTainByteArray把tag傳遞給序列化后的data對象。
Parcel.unmarshall的作用跟Parcel.marshall是相反的,通過byte[]還原Parcel對象,其實現(xiàn)如下:
先通過Taint.getTainByArray拿到data的tag,然后再同步到還原后的Parcel對象。
Parcel.writeInt是往Parcel中寫入一個32位的整型,其實現(xiàn)如下:
先獲取被寫入的val的tag,然后再通過調用updateTaint把污點數(shù)據(jù)同步到當前Parcel對象。
Parcel.readInt是執(zhí)行與Parcel.writeInt相反的動作,從Parcel中讀出一個32倍整形,其實現(xiàn)如下所示:
依據(jù)當前的pos和len,getTaint返回對應的tag,然后再通過Tain.addTainInt同步到最終結果val2。
總結:TaintDroid的IPC污點跟蹤粒度是變量粒度的,因此大大提高了污點傳播的精準度。下一步繼續(xù)分析下File & Memory & Socket 級污點傳播。
作者:簡行、走位@阿里聚安全,更多Android安全類技術文章,請訪問阿里聚安全博客
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65038.html
摘要:回顧在上一章節(jié)中我們詳細分析了對方法參數(shù)和方法變量的變量級污點跟蹤機制,現(xiàn)在我們將繼續(xù)分析對類的靜態(tài)域實例域以及數(shù)組的污點跟蹤。充分理解這一點,對我們后續(xù)分析復雜污點傳播邏輯很有幫助。對數(shù)組對象的修改在成員之后添加成員。 1 回顧 在上一章節(jié)中我們詳細分析了TaintDroid對DVM方法參數(shù)和方法變量的變量級污點跟蹤機制,現(xiàn)在我們將繼續(xù)分析TaintDroid對類的靜態(tài)域、實例域以及...
摘要:后文將圍繞做一些介紹。盡管如此,的使用對新手而言仍然充滿了困難。本系列文章基本為個人見解,難免有錯誤與誤解,如有客觀錯誤歡迎提出。 前言 說到Android的污點分析框架,網(wǎng)上的搜索結果大多指向靜態(tài)的FlowDroid與動態(tài)的TaintDroid。盡管由于加固、混淆等技術使得針對Android的靜態(tài)分析越來越困難,但靜態(tài)分析的無先驗分析能力無法被動態(tài)分析取代,使得靜態(tài)分析仍有發(fā)揮空間。...
閱讀 3045·2021-10-12 10:12
閱讀 5349·2021-09-26 10:20
閱讀 1515·2021-07-26 23:38
閱讀 2807·2019-08-30 15:54
閱讀 1636·2019-08-30 13:45
閱讀 1953·2019-08-30 11:23
閱讀 3078·2019-08-29 13:49
閱讀 819·2019-08-26 18:23