十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
Native 代碼是不受TaintDroid監(jiān)控的。理想情況下,我們獲得了相同的傳播語義當(dāng)使用相同的解釋副本時。因此,為了精確的在Java層進行污點監(jiān)控,我們定義了兩個必要的前提條件:1)所有被訪問的外部變量(對于其他方法的類字段引用)根據(jù)數(shù)據(jù)流都被標(biāo)記上了相應(yīng)的污點。2)根據(jù)成數(shù)據(jù)流所有返回值都被分配了一個污點標(biāo)記。TaintDroid完成這些的前提條件是通過各種人工方式,推斷,方法概要,取決于環(huán)境要求。

內(nèi)部虛擬機方法:內(nèi)部虛擬機的方法又叫做直接譯碼法,傳遞一個指向32位數(shù)組的寄存器參數(shù)和一個指向返回值的指針。對于java參數(shù)和返回值堆棧指針增加提供了如圖 4所示的訪問污點標(biāo)記。在不同的版本之間虛擬機內(nèi)部方法有一個相對很小的數(shù)字在頻繁的增加,在污點傳播需要的時候我們將會進行手動檢測和修補。我們鑒定了185個內(nèi)部虛擬機方法在Android的2.1版本;但是,只有5個要求打補丁的:數(shù)組復(fù)制的本地方法System.arraycopy()。執(zhí)行Java反射的幾個本地方法。
JNI 方法:調(diào)用JNI方法通過JNI調(diào)用橋。調(diào)用橋解析Java參數(shù)并且使用方法的描述符字符串給返回值賦值。為了提供污點傳播我們對所有的JNI方法都進行了修補。當(dāng)JNI方法返回時,TaintDroid調(diào)用方法概要標(biāo)簽對污點傳播進行更新。一個方法配置文件是一個列表(from,to)指示流動的變量,這些變量可能是方法參數(shù),類變量或返回值。枚舉出所有的JNI方法的信息里是一個耗時的過程,最好的方法就是使用源代碼完成自動化分析(這個也是我們今后要做的工作)。我們目前包括了一個額外的傳播啟發(fā)式補丁。啟發(fā)式算法是一個JNI方法中一個保守的方法只操作原語和字符串和返回值。他分配了方法參數(shù)污點標(biāo)記標(biāo)簽到污點的返回值的集合。對于調(diào)用方法的對象啟發(fā)式的算法有假陰性,它涵蓋了許多存在的方法。
我們對官方Android版本(2.1)的源碼中包含的JNI方法進行了一個調(diào)查來確定特定的屬性。我們發(fā)現(xiàn)了2844個JNI方法與Java接口和C或者C++的實現(xiàn)。在這些方法中,913個方法沒有對象的引用(作為參數(shù),返回值,或者方法)因此自動被我們的啟發(fā)式算法所覆蓋。剩下的方法可能有或者可能沒有信息流而產(chǎn)生假陰性。目前,我們按需要定義了方法概要。例如,在IBM Native Converter 類中的方法在字符類型和字節(jié)類型數(shù)組之間要求傳播的轉(zhuǎn)換。
當(dāng)APP之間在交換數(shù)據(jù)時污點標(biāo)記必須傳播。跟蹤的粒度直接影響了性能和內(nèi)存開銷。TaintDroid使用信息級的污染跟蹤。一個信息的污染標(biāo)簽代表了信息上一次污點標(biāo)記分配給的變量。我們使用了信息水平級的粒度使得在進程間通訊的性能和存儲開銷達到最小化。
我們選擇在變量水平實現(xiàn)消息級別的污點傳播,因為在一個變量級系統(tǒng),一個狡猾的接收器可能通過為打包的變量在不同方式的方式下獲取沒有污點傳播的變量而戲弄監(jiān)控。例如,如果一個IPC包裹的信息包含一系列的標(biāo)量值,這個接收器可以解包一個字符串,從而獲得沒有污染傳播標(biāo)簽的值在標(biāo)量值的序列里。因此,為了阻止應(yīng)用程序可以使用這種來移除污點標(biāo)記,目前執(zhí)行污點保護都是在信息層級。
對于IPC之間的污點傳播會導(dǎo)致假陽性。類似與數(shù)組,所有的數(shù)據(jù)項為一組分享同一個污點標(biāo)記。例如,第8部分討論了跟蹤IMSI的限制以免部分配置的參數(shù)之在同一個包里。未來將會考慮word級的污點標(biāo)記以及額外的一致性檢查確保解包變量的準(zhǔn)確傳播。然而這種額外的復(fù)雜性將會對IPC性能產(chǎn)生負(fù)面的影響。
當(dāng)數(shù)據(jù)被寫入文件的時候可能會導(dǎo)致污點的丟失。我們設(shè)計了存儲每個文件的污點標(biāo)記。這個污點標(biāo)記將會被更新當(dāng)寫文件或者在讀取文件的時候傳播數(shù)據(jù)。TaintDroid存儲文件污染標(biāo)簽在文件系統(tǒng)的擴展屬性里。為了達到這個目的,我們執(zhí)行了支持Android的熱文件系統(tǒng)擴展屬性(YAFFS2)并且格式化了可移除的SD卡與ext2文件系統(tǒng)。至于數(shù)組和IPC,存儲每個文件的污點標(biāo)記將會導(dǎo)致假陽性并且限制了信息數(shù)據(jù)庫污點標(biāo)記的粒度(見第5節(jié))。或者,我們可以跟蹤污點標(biāo)記在更細(xì)的粒度通過犧牲更多的內(nèi)存和性能開銷。
污點源和污染池定義的虛擬化環(huán)境污染標(biāo)簽必須進行污點交互。我們抽象出污染源和污染池邏輯組成一個單獨的污點接口庫。這個接口執(zhí)行兩個功能:1)增加對變量的污點標(biāo)記;2)從變量檢索污點標(biāo)記。這個庫只能提供添加未設(shè)置或者清除污染標(biāo)簽的功能,這些功能將會被用來對于可以的Java code 移除污點標(biāo)記。
增加污點標(biāo)記數(shù)組和字符串通過內(nèi)部虛擬機方式很簡單,所有的這些都存儲在數(shù)據(jù)對象當(dāng)中。對于基本的數(shù)據(jù)類型,一方面,是存儲在解釋器的內(nèi)部棧當(dāng)方法調(diào)用結(jié)束之后會被銷毀。因此,污點庫使用該方法的返回值作為一種污染原始變量的手段。開發(fā)人員通過一個值或者變量添加進合適的污點方法中(e.g., addTaintInt())返回的變量值有相同的值只是增加了指定的污點標(biāo)記。注意棧存儲在污點標(biāo)記檢索時不會產(chǎn)生并發(fā)。
使用TaintDroid進行隱私分析需要確定操作系統(tǒng)內(nèi)敏感隱私數(shù)據(jù)源和檢測污染源。在以前,動態(tài)污點分析系統(tǒng)假設(shè)污點源和污點池的位置是微不足道的。但是,對于像Android這樣復(fù)雜的操作系統(tǒng)通過各種各樣的方式為應(yīng)用程序提供各種各樣的信息,例如:直接訪問,服務(wù)接口。每一種可能的隱私敏感信息都必須要認(rèn)真研究才能決定定義污染源的最好方式。
污染源只能夠針對TaintDroid提供的存儲標(biāo)簽的內(nèi)存增加污點標(biāo)記。目前,污點池和污點源的位置都被限定在解釋器代碼,IPC消息,文件的變量中。本節(jié)將討論這些有價值的污染源和污染池是怎么實現(xiàn)這些限制的。我們給予信息特征對污染源進行了概括。
低帶寬傳感器:各種各樣的隱私敏感信息是通過低帶寬傳感器獲得的。例如:位置信息和加速器。信息是常常會改變的并且會同時被多個應(yīng)用程序所使用。因此,于智能手機操作系統(tǒng)多路訪問低帶寬傳感器使用一個管理是一個很常見的現(xiàn)象。一個傳感器管理者代表了一個理想的污點HOOK位置。對我們分析而言,我們將鉤子插入到Android的LocationManager和SensorManager的應(yīng)用程序中。
高帶寬傳感器:隱私信息例如麥克風(fēng)和照相機是高帶寬的。它需要傳感器頻繁的返回許多的數(shù)據(jù)量并且這些數(shù)據(jù)都只是一個應(yīng)用程序來使用。因此,智能手機的操作系統(tǒng)可能通過大數(shù)據(jù)緩存,文件或者兩者共享傳感器的信息。當(dāng)傳感器信息通過文件共享,文件必須使用合適的污點便簽標(biāo)記。由于API的靈活性,我們將會對麥克風(fēng)和照相機信息數(shù)據(jù)緩沖區(qū)和文件污點下鉤子。
信息數(shù)據(jù)庫:共享信息例如通訊錄地址和短信息常常存儲在基于文件類型的數(shù)據(jù)庫中。這樣的組織形式提供了有用的明確的污點源類似于硬件傳感器。通過添加一個污點標(biāo)記數(shù)據(jù)庫文件,所有的信息從文件讀取將會自動受到污染。我們使用這種技術(shù)來跟蹤通訊錄信息。值得注意的是雖然TrainDroid對于這些變量是文件級別的粒度值是合適的,但是可能存在一些文件對于他們來說粒度可能太大了。但是,我們還沒有遇到這樣的數(shù)據(jù)源。
設(shè)備標(biāo)識:信息是唯一的標(biāo)識電話或者用戶敏感隱私。并不是所有的個人的可識別信息都可以很容易的被污染。但是,電話標(biāo)識了幾個容易污染的標(biāo)識:電話號碼,SIM卡標(biāo)識(IMSI,ICC-ID)以及IMEI都可以通過定義好的API進行訪問。我們測試了電話號碼的,ICC-ID,IMEI的API。IMSI污染源存在繼承限制我們將在第8節(jié)進行討論。
網(wǎng)絡(luò)污點池:我們的隱私分析確定了污染信息傳送的網(wǎng)絡(luò)接口。VM基于解釋器的方法要求污染池被放置在解釋的代碼中。因此,我們設(shè)置了Java framework層的庫的HOOK點,這些地方將會被native層的socket庫所調(diào)用。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。