沒有使用靜態(tài)分析焦蘑,只是用了數(shù)據(jù)流分析盯拱,沒有控制流分析,不能對本地方法進行污點追蹤例嘱,不能對程序控制流進行污點追蹤狡逢。
前提條件:虛擬機和應(yīng)用程序加載的本地系統(tǒng)庫是安全的
在VM解釋器里是變量級的污點追蹤,各種的污點標記被存儲為一個污點標簽(tag)拼卵,應(yīng)用程序執(zhí)行本地方法時奢浑,污點標簽被作為返回值返回,最后污點標簽被分配給包通過binder機制進行出傳播
在受信任的應(yīng)用程序中標記污染源腋腮,當某個被標記的污染源API調(diào)用native方法時殷费,Dalvik vm解釋器把污染markings存進map,Dalvik虛擬機根據(jù)數(shù)據(jù)流規(guī)則傳播污點tags低葫,當應(yīng)用程序?qū)⑽廴拘畔⑼ㄟ^IPC傳遞時详羡,TaintDroid修改過的binder給每個包分配一個污染tag。包通過kernel傳播給遠方的不受信任的應(yīng)用程序嘿悬。TaintDroid修改過的binder把所有從這個包里讀取的數(shù)據(jù)都指派這個污染tag实柠,Dalvik虛擬機根據(jù)數(shù)據(jù)流規(guī)則傳播污點tags,當不受信任的應(yīng)用程序調(diào)用sink API時善涨,sink api會判斷接收的數(shù)據(jù)是否有污染tag窒盐,并且給出報告。
把污染tag和變量相鄰存儲在內(nèi)存中
ipc的包钢拧、二級存儲蟹漓、數(shù)組都只存儲一個污染tag
aget-op把數(shù)組的污點tag和下標的tag都傳遞給接收的變量