亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

用于操作系統(tǒng)的安全系統(tǒng)和方法與流程

文檔序號(hào):12927298閱讀:346來源:國(guó)知局
本說明書涉及用于計(jì)算機(jī)操作系統(tǒng)的安全系統(tǒng)和方法,該操作系統(tǒng)包括但不限于Linux系統(tǒng)或基于Linux的系統(tǒng)。具體地,然而并非排他地,安全系統(tǒng)適于硬件設(shè)備和系統(tǒng),比如移動(dòng)電話、智能電話、平板計(jì)算機(jī)以及其他的便攜式和臺(tái)式的計(jì)算和通信設(shè)備。
背景技術(shù)
::能夠從加利福尼亞州山景城的谷歌公司得到的ANDROIDTM操作系統(tǒng)(安卓(Android))是主要針對(duì)觸屏移動(dòng)設(shè)備(比如智能電話和平板計(jì)算機(jī))設(shè)計(jì)的基于Linux的操作系統(tǒng)。Android在其核心使用Linux內(nèi)核,并且Android還提供軟件開發(fā)者可以用來實(shí)現(xiàn)Android應(yīng)用和服務(wù)的應(yīng)用框架。另外地,Android在Linux內(nèi)核接口與Android應(yīng)用和服務(wù)之間提供本機(jī)中間件層,該Android應(yīng)用和服務(wù)在更高的應(yīng)用層執(zhí)行,以使得能夠?qū)崿F(xiàn)用于跨不同類型的硬件設(shè)備部署相同的應(yīng)用和服務(wù)的較簡(jiǎn)單的跨平臺(tái)開發(fā)。此中間件層包括共享庫(kù)集合,該共享庫(kù)集合提供服務(wù)(比如,數(shù)據(jù)存儲(chǔ)、屏幕顯示或多媒體),并且該共享庫(kù)集合被編譯成機(jī)器語(yǔ)言以使服務(wù)能夠快速執(zhí)行。中間件庫(kù)實(shí)現(xiàn)設(shè)備特定函數(shù)。因此,應(yīng)用和應(yīng)用框架自身不需要關(guān)注Android設(shè)備之間的變化。中間件層還支持Java運(yùn)行時(shí)間的專業(yè)版以簡(jiǎn)化跨平臺(tái)開發(fā)。具體地,中間件層提供Dalvik虛擬機(jī)(DVM)及其核心Java應(yīng)用庫(kù)??梢詫⒂砷_發(fā)者實(shí)現(xiàn)的應(yīng)用或服務(wù)從Java(或其他的支持語(yǔ)言)編譯成可以由DVM運(yùn)行的字節(jié)代碼。雖然中間件層簡(jiǎn)化了應(yīng)用開發(fā),但是中間件層還向總Android操作系統(tǒng)顯著添加了更多的復(fù)雜性。這種添加的復(fù)雜性可以被所編程的應(yīng)用或服務(wù)利用以執(zhí)行惡意的任務(wù)(惡意軟件)或執(zhí)行惡意的代碼(惡意代碼)。通過示例,惡意軟件或惡意代碼可以利用進(jìn)程間通信(IPC,Inter-ProcessCommunication)或組件間通信(ICC,Inter-ComponentCommunication)來攻擊敏感應(yīng)用及其數(shù)據(jù)。參照?qǐng)D1,每個(gè)Android應(yīng)用10、12在相應(yīng)的DVM14、16中被執(zhí)行。當(dāng)每個(gè)應(yīng)用被啟動(dòng)時(shí),每個(gè)應(yīng)用對(duì)應(yīng)于DVM的實(shí)例。每個(gè)DVM14、16被映射成在Linux層24中以用戶模式22運(yùn)行的專用進(jìn)程18、20。在Android中,應(yīng)用可以使用IPC機(jī)制彼此通信。然而,Android中實(shí)現(xiàn)IPC的標(biāo)準(zhǔn)機(jī)制是綁定(Binder)框架。Binder框架易于將函數(shù)和數(shù)據(jù)從一個(gè)進(jìn)程綁定至另一個(gè)進(jìn)程。Android中的Binder框架被提供為三級(jí)。在應(yīng)用層42,存在使應(yīng)用能夠彼此通信的應(yīng)用編程接口(API)26、28。作為此API的一部分的Android接口定義語(yǔ)言允許開發(fā)者針對(duì)Android服務(wù)定義該接口,并且AIDL剖析器生成服務(wù)客戶端可以使用的Java客戶端代碼和開發(fā)者可以用來創(chuàng)建服務(wù)實(shí)現(xiàn)的服務(wù)存根(servicestub)。在本機(jī)中間件層44處,使用C++語(yǔ)言實(shí)現(xiàn)的Binder類30經(jīng)由Java本機(jī)接口(JNI,JavaNativeInterface)提供了便于由應(yīng)用使用的用戶空間,并且該Binder類30與Binder內(nèi)核驅(qū)動(dòng)器32進(jìn)行交互,該Binder內(nèi)核驅(qū)動(dòng)器32是定制的LinuxAndroid內(nèi)核的一部分。Binder內(nèi)核驅(qū)動(dòng)器32執(zhí)行進(jìn)程之間的消息傳遞,并且提供共享存儲(chǔ)器設(shè)施。驅(qū)動(dòng)器位于特定設(shè)備/dev/binder之后,并且可以通過各種系統(tǒng)呼叫比如open(打開)和ioctl來使用,以實(shí)現(xiàn)進(jìn)程能夠彼此通信。如圖1所示,IPC機(jī)制可以被描述為兩層。在Android層46處,當(dāng)如在34所示,應(yīng)用1(10)通過其AIDLAPI(26)發(fā)送IPC時(shí),如在(36)所示,中間件中的binder代碼30會(huì)負(fù)責(zé)將請(qǐng)求遞送至目的地應(yīng)用1(12)。在Linux層,如在(38)所示,此操作被翻譯成由進(jìn)程1(18)(對(duì)應(yīng)于應(yīng)用1)使用binder內(nèi)核驅(qū)動(dòng)器(/dev/binder)32來執(zhí)行的系統(tǒng)呼叫(open和ioctl)的序列。然后,如在(40)所示,該請(qǐng)求被轉(zhuǎn)發(fā)至進(jìn)程2(20)(對(duì)應(yīng)于應(yīng)用2)。在常規(guī)的Unix和Linux操作系統(tǒng)中,已提出了以能夠跟蹤進(jìn)程以加強(qiáng)安全策略的內(nèi)核模塊的形式的安全系統(tǒng),比如SELinux或Linux安全模塊。這涉及重新編譯內(nèi)核圖像,以注冊(cè)模塊并且能夠最終加載該模塊。另外地,當(dāng)用戶經(jīng)由殼(shell)命令行啟動(dòng)新應(yīng)用時(shí),監(jiān)視模塊能夠通過分析命令行變?cè)?argument)將正確的安全策略與新啟動(dòng)的進(jìn)程相鏈接。這樣的安全系統(tǒng)在Android上不能有效地工作,Android使用了顯著不同的啟動(dòng)和管理應(yīng)用的方式。還期望具有不需要重新編譯Linux內(nèi)核的用于Android的安全系統(tǒng)。在以上安全系統(tǒng)中,惡意應(yīng)用可以通過轉(zhuǎn)換成與經(jīng)由殼命令行變?cè)獑?dòng)的應(yīng)用不同的應(yīng)用來欺騙安全系統(tǒng)。這意味著,安全系統(tǒng)認(rèn)為所啟動(dòng)的進(jìn)程是由初始?xì)っ钚凶冊(cè)付ǖ膽?yīng)用而將不正確的安全策略集合與所啟動(dòng)的進(jìn)程相關(guān)聯(lián)。短語(yǔ)“OS虛擬化”指的是允許多個(gè)OS實(shí)例或多個(gè)隔離的用戶空間共享相同的設(shè)備硬件資源的技術(shù)。每個(gè)OS實(shí)例與其他的實(shí)例完全隔離地運(yùn)行。通常,可以使用下述三種可選技術(shù)來實(shí)現(xiàn)虛擬化:使用二進(jìn)制翻譯的全虛擬化、半虛擬化或硬件支持虛擬化。通過自動(dòng)將來自客戶端OS的二進(jìn)制指令翻譯成低級(jí)指令以實(shí)現(xiàn)使硬件虛擬化的效果來實(shí)現(xiàn)全虛擬化。雖然全虛擬化不需要在客戶端OS中的修改,但是全虛擬化的主要缺點(diǎn)是翻譯指令所需要的額外計(jì)算資源。這會(huì)成為電力資源受限的設(shè)備的問題,原因是這減少了單電池充電的操作時(shí)間。半虛擬化指的是以下述這樣的方式修改客戶端OS的技術(shù):客戶端OS并不執(zhí)行標(biāo)準(zhǔn)指令,而是將執(zhí)行特定指令集合來與部署了該客戶端OS的虛擬環(huán)境進(jìn)行通信。半虛擬化提高了性能,然而代價(jià)是對(duì)客戶端OS的大量修改。這意味著,尤其對(duì)于AndroidOS的情況,需要開發(fā)并且保持AndroidOS的具體圖像。硬件支持虛擬化需要CPU完全支持的特定指令集合。以上所有三種虛擬化方法共同存在三個(gè)主要缺點(diǎn)。第一,三種虛擬化方法是粗粒度的,原因是這三種虛擬化方法以整個(gè)OS圖像級(jí)應(yīng)用虛擬化。有時(shí),只需要將單個(gè)進(jìn)程與運(yùn)行的服務(wù)中的其余進(jìn)程而非整個(gè)OS中的其余進(jìn)程隔離。第二,三種虛擬化方法沒有提供增強(qiáng)的安全控制。使客戶端OS虛擬化并不意味著使該客戶端OS更安全。將針對(duì)OS的每個(gè)實(shí)例復(fù)制與簡(jiǎn)單OS中的安全級(jí)相同的安全級(jí)。如果OS實(shí)例受到包含惡意軟件的粗糙應(yīng)用的危害,則OS實(shí)例內(nèi)的所有應(yīng)用和資源將暴露于那個(gè)粗糙應(yīng)用。除非OS本身能夠處理這樣的威脅,否則虛擬化不會(huì)獨(dú)自提供額外級(jí)保護(hù)。第三,以上虛擬化技術(shù)表現(xiàn)出靜態(tài)行為之處是該虛擬化只關(guān)注針對(duì)不同的OS實(shí)例執(zhí)行對(duì)底層硬件分區(qū)的指令。不產(chǎn)生任何動(dòng)態(tài)決定。在本說明書中,參照了專利說明書、其他的外部文獻(xiàn)或其他的信息源,這通常是為了提供用于論述各個(gè)實(shí)施例的特征的語(yǔ)境。除非另有具體說明,否則對(duì)這種外部文獻(xiàn)的參照不應(yīng)當(dāng)解釋為承認(rèn):這種文獻(xiàn)或這種信息源在任何管轄范圍中是現(xiàn)有技術(shù)或構(gòu)成本領(lǐng)域內(nèi)公知常識(shí)的一部分。技術(shù)實(shí)現(xiàn)要素:本文中至少一些實(shí)施例的目的是提供一種用于基于Linux的操作系統(tǒng)的安全系統(tǒng)和方法,其中,針對(duì)每個(gè)應(yīng)用的安全策略可以被配置在應(yīng)用層并且在更低Linux層被執(zhí)行,或者本文中至少一些實(shí)施例的目的是至少向公眾提供有用選擇。本文中至少一些實(shí)施例的目的是提供一種用于使安全策略與應(yīng)用相鏈接的改進(jìn)安全系統(tǒng)和方法,或者本文中至少一些實(shí)施例的目的是至少向公眾提供有用選擇。本文中至少一些實(shí)施例的目的是提供一種用于提供在設(shè)備上操作的多個(gè)隔離的用戶空間實(shí)例的可選虛擬化機(jī)制,或者本文中至少一些實(shí)施例的目的是至少向公眾提供有用選擇。在第一方面,一些實(shí)施例包括用于使在設(shè)備上運(yùn)行的操作系統(tǒng)安全的方法,該操作系統(tǒng)包括基于Linux的內(nèi)核并且包括系統(tǒng)架構(gòu),該系統(tǒng)架構(gòu)由與內(nèi)核相關(guān)聯(lián)的Linux層和包括應(yīng)用的更高應(yīng)用層來定義,該方法包括:監(jiān)視由Linux層中的母進(jìn)程進(jìn)行的向內(nèi)核的系統(tǒng)呼叫,以檢測(cè)與應(yīng)用層中的新應(yīng)用或部分應(yīng)用相對(duì)應(yīng)的在Linux層中的新進(jìn)程的啟動(dòng);以及在由母進(jìn)程創(chuàng)建了Linux層中的新監(jiān)視進(jìn)程時(shí),使該新監(jiān)視進(jìn)程與新啟動(dòng)進(jìn)程相附接(attach),該監(jiān)視進(jìn)程被配置成監(jiān)視由新進(jìn)程進(jìn)行的向內(nèi)核的系統(tǒng)呼叫,并且該監(jiān)視進(jìn)程被配置成基于所檢測(cè)到的系統(tǒng)呼叫的參數(shù)來檢索并且執(zhí)行為新進(jìn)程配置的安全策略。在一個(gè)實(shí)施例中,系統(tǒng)架構(gòu)還通過在Linux層與更高應(yīng)用層之間的中間件層來定義。通過示例,可以由設(shè)備的用戶、操作系統(tǒng)本身或者已運(yùn)行的應(yīng)用或進(jìn)程來啟動(dòng)新應(yīng)用或部分應(yīng)用。應(yīng)用層中的新應(yīng)用或部分應(yīng)用的啟動(dòng)對(duì)應(yīng)于Linux層中進(jìn)程的開始、啟動(dòng)或分叉(fork)。在一些實(shí)施例中,該方法還包括在策略數(shù)據(jù)庫(kù)中為應(yīng)用層中應(yīng)用提供安全策略。在另一些實(shí)施例中,策略數(shù)據(jù)庫(kù)存儲(chǔ)在設(shè)備上,或者該策略數(shù)據(jù)庫(kù)遠(yuǎn)程地進(jìn)行存儲(chǔ)然而能夠被該設(shè)備訪問。在一個(gè)實(shí)施例中,可以采用一個(gè)或更多個(gè)策略配置文件的形式來提供策略數(shù)據(jù)庫(kù)。在一些實(shí)施例中,該方法還包括在策略數(shù)據(jù)庫(kù)中為應(yīng)用層中應(yīng)用定義并且存儲(chǔ)安全策略。在一些實(shí)施例中,操作系統(tǒng)是Android。在另一些實(shí)施例中,母進(jìn)程是Zygote進(jìn)程。使監(jiān)視進(jìn)程與Linux層中新進(jìn)程相附接可以包括:將監(jiān)視進(jìn)程配置為主機(jī)進(jìn)程并且將相關(guān)聯(lián)的新進(jìn)程配置為該監(jiān)視進(jìn)程的目標(biāo)進(jìn)程。另外地,在一些實(shí)施例中,使監(jiān)視進(jìn)程與新進(jìn)程相附接包括:請(qǐng)求內(nèi)核執(zhí)行跟蹤系統(tǒng)呼叫,該跟蹤系統(tǒng)呼叫被配置成攔截由目標(biāo)進(jìn)程執(zhí)行的所有系統(tǒng)呼叫或至少一組系統(tǒng)呼叫,并且被配置成在執(zhí)行這種系統(tǒng)呼叫之前向主機(jī)進(jìn)程報(bào)告這些系統(tǒng)呼叫。通過示例,該跟蹤系統(tǒng)呼叫可以是進(jìn)程跟蹤系統(tǒng)呼叫(ptrace)。在一些這種實(shí)施例中,內(nèi)核被配置成既在執(zhí)行由目標(biāo)進(jìn)程進(jìn)行的系統(tǒng)呼叫之前和之后并且在一些實(shí)施例中在內(nèi)核實(shí)際上恢復(fù)目標(biāo)進(jìn)程執(zhí)行之前向主機(jī)進(jìn)程報(bào)告該系統(tǒng)呼叫。在另外的實(shí)施例中,監(jiān)視進(jìn)程可以被配置成從在應(yīng)用層處的安全系統(tǒng)服務(wù)訪問并且檢索用于該監(jiān)視進(jìn)程的目標(biāo)進(jìn)程的安全策略,該安全系統(tǒng)服務(wù)已訪問了策略配置文件中的用于應(yīng)用層的應(yīng)用的可配置安全策略。在一些這種實(shí)施例中,Linux層處的監(jiān)視進(jìn)程被配置成與應(yīng)用層處的安全系統(tǒng)服務(wù)建立通信鏈接。通過示例,該通信鏈接可以是直接鏈接,比如,傳輸控制協(xié)議(TCP)鏈接或連接、unix套接字、共享存儲(chǔ)器、消息、管或IPC的其他手段。在一些實(shí)施例中,該方法還包括通過下述操作來向新進(jìn)程監(jiān)視器加載用于該新進(jìn)程監(jiān)視器的目標(biāo)進(jìn)程的相關(guān)安全策略:當(dāng)目標(biāo)進(jìn)程專用為預(yù)期的應(yīng)用時(shí)監(jiān)視該目標(biāo)進(jìn)程的專用化進(jìn)程;從專用化進(jìn)程中提取應(yīng)用識(shí)別數(shù)據(jù),該專用化進(jìn)程表示該目標(biāo)進(jìn)程正專用為該應(yīng)用;以及基于所提取的應(yīng)用識(shí)別數(shù)據(jù)來檢索用于該目標(biāo)進(jìn)程的相關(guān)安全策略。通過示例,應(yīng)用識(shí)別數(shù)據(jù)可以是應(yīng)用包名稱。在一種形式下,該方法包括:從在目標(biāo)進(jìn)程進(jìn)行專用化時(shí)由該目標(biāo)進(jìn)程調(diào)用的系統(tǒng)呼叫中提取應(yīng)用識(shí)別數(shù)據(jù)。在另一種形式下,該方法包括:從在專用化進(jìn)程期間寫入了目標(biāo)進(jìn)程的全應(yīng)用包名稱的專用化數(shù)據(jù)文件中提取應(yīng)用識(shí)別數(shù)據(jù)。在其他的實(shí)施例中,可選地,可以通過本地?cái)?shù)據(jù)存儲(chǔ)裝置或遠(yuǎn)程數(shù)據(jù)源來檢索該識(shí)別數(shù)據(jù)?;谒崛〉膽?yīng)用識(shí)別數(shù)據(jù)來檢索用于目標(biāo)進(jìn)程的相關(guān)安全策略可以包括:向應(yīng)用層中的安全系統(tǒng)服務(wù)發(fā)送對(duì)安全策略的請(qǐng)求,該請(qǐng)求包括應(yīng)用識(shí)別數(shù)據(jù)。在另一實(shí)施例中,該方法包括:基于用戶空間控制參數(shù)來檢索用于目標(biāo)進(jìn)程的相關(guān)安全策略,該用戶空間控制參數(shù)指示當(dāng)前在設(shè)備上操作的特定用戶空間實(shí)例。用戶空間控制參數(shù)可以包括識(shí)別或表示從多個(gè)用戶空間實(shí)例中選擇的當(dāng)前操作的用戶空間實(shí)例的數(shù)據(jù)。在一個(gè)實(shí)施例中,用戶空間實(shí)例可以對(duì)應(yīng)于操作域,比如工作域或私人域。在一些實(shí)施例中,監(jiān)視進(jìn)程被配置成通過下述操作來執(zhí)行所檢索到的用于該監(jiān)視進(jìn)程的目標(biāo)進(jìn)程的安全策略:關(guān)于所檢測(cè)到的系統(tǒng)呼叫基于所檢索到的安全策略在Linux層實(shí)現(xiàn)安全動(dòng)作。該安全動(dòng)作可以包括下述動(dòng)作中的任何一種或更多種動(dòng)作:允許系統(tǒng)呼叫進(jìn)行、阻止系統(tǒng)呼叫進(jìn)行、在系統(tǒng)呼叫執(zhí)行之前修改系統(tǒng)呼叫的參數(shù)或在系統(tǒng)呼叫執(zhí)行之后返回由系統(tǒng)呼叫生成的值、或者提示設(shè)備的用戶選擇安全動(dòng)作。通過示例,監(jiān)視進(jìn)程可以通過由相附接的監(jiān)視進(jìn)程來命令并且控制該內(nèi)核關(guān)于內(nèi)核對(duì)所請(qǐng)求的系統(tǒng)呼叫的執(zhí)行,來實(shí)現(xiàn)安全動(dòng)作。每個(gè)進(jìn)程監(jiān)視器可以被配置成基于從所檢測(cè)到的系統(tǒng)呼叫中提取的參數(shù)來執(zhí)行安全策略。針對(duì)顯式系統(tǒng)呼叫,可以直接地基于所提取的系統(tǒng)呼叫參數(shù)來評(píng)價(jià)并且執(zhí)行安全策略。針對(duì)隱式系統(tǒng)呼叫,進(jìn)程監(jiān)視器可以被配置成:在評(píng)價(jià)并且執(zhí)行安全策略之前,從應(yīng)用層中的安全系統(tǒng)服務(wù)檢索與系統(tǒng)呼叫有關(guān)的其他信息。該方法還可以包括:最初暫緩執(zhí)行新進(jìn)程,直到已使監(jiān)視進(jìn)程與新目標(biāo)進(jìn)程相附接為止。這種暫緩執(zhí)行新進(jìn)程可以包括:在目標(biāo)進(jìn)程的代碼中注入斷點(diǎn)以防止目標(biāo)進(jìn)程執(zhí)行,并且隨后當(dāng)已建立了監(jiān)視進(jìn)程并且已使該監(jiān)視進(jìn)程與新進(jìn)程相附接時(shí),去除該斷點(diǎn)以允許新進(jìn)程專用為新應(yīng)用并且執(zhí)行。通過示例,斷點(diǎn)可以是死循環(huán)或斷點(diǎn)機(jī)器指令。監(jiān)視由母進(jìn)程進(jìn)行的至內(nèi)核的系統(tǒng)呼叫可以包括:在母進(jìn)程發(fā)起之前建立主監(jiān)視進(jìn)程,并且通過將主監(jiān)視進(jìn)程配置為主機(jī)進(jìn)程并且將母進(jìn)程配置為該主監(jiān)視進(jìn)程的目標(biāo)進(jìn)程來使主監(jiān)視進(jìn)程與母進(jìn)程相附接。另外,使主監(jiān)視進(jìn)程與母進(jìn)程相附接還可以包括:請(qǐng)求內(nèi)核執(zhí)行跟蹤系統(tǒng)呼叫,該跟蹤系統(tǒng)呼叫被配置成攔截由母進(jìn)程執(zhí)行的所有系統(tǒng)呼叫或至少系統(tǒng)呼叫集合并且在執(zhí)行系統(tǒng)呼叫之前向主監(jiān)視進(jìn)程報(bào)告該系統(tǒng)呼叫。在一些實(shí)施例中,該方法還可以包括:使新單獨(dú)監(jiān)視進(jìn)程與由母進(jìn)程創(chuàng)建的每個(gè)新啟動(dòng)進(jìn)程相附接,每個(gè)獨(dú)立監(jiān)視進(jìn)程被配置成執(zhí)行與針對(duì)該新啟動(dòng)進(jìn)程的相附接的監(jiān)視進(jìn)程的應(yīng)用相對(duì)應(yīng)的安全策略。在第二方面,一些實(shí)施例包括用于在設(shè)備上運(yùn)行(例如執(zhí)行)的操作系統(tǒng)的安全系統(tǒng),該操作系統(tǒng)包括基于Linux的內(nèi)核并且包括系統(tǒng)架構(gòu),該系統(tǒng)架構(gòu)由與內(nèi)核相關(guān)聯(lián)的Linux層和包括應(yīng)用的更高應(yīng)用層來定義,該安全系統(tǒng)包括:在Linux層處運(yùn)行的主監(jiān)視進(jìn)程,該主監(jiān)視進(jìn)程被配置成檢測(cè)通過母進(jìn)程對(duì)Linux層中新進(jìn)程的啟動(dòng),該新進(jìn)程對(duì)應(yīng)于設(shè)備的用戶對(duì)應(yīng)用層中的新應(yīng)用或部分應(yīng)用的啟動(dòng);進(jìn)程監(jiān)視器,該進(jìn)程監(jiān)視器由主監(jiān)視進(jìn)程與由母進(jìn)程創(chuàng)建的每個(gè)新進(jìn)程相附接,并且每個(gè)進(jìn)程監(jiān)視器被配置成監(jiān)視由進(jìn)程監(jiān)視器的附接的進(jìn)程進(jìn)行的向內(nèi)核的系統(tǒng)呼叫;以及在應(yīng)用層處運(yùn)行的安全系統(tǒng)服務(wù),該安全系統(tǒng)服務(wù)能夠操作成訪問所存儲(chǔ)的用于應(yīng)用層的應(yīng)用的可配置安全策略,并且該安全系統(tǒng)服務(wù)能夠與Linux層中的每個(gè)進(jìn)程監(jiān)視器進(jìn)行通信,該安全策略對(duì)應(yīng)于進(jìn)程監(jiān)視器的相附接的進(jìn)程,并且其中,每個(gè)進(jìn)程監(jiān)視器被配置成基于所檢測(cè)到的系統(tǒng)呼叫的參數(shù)來檢索并且執(zhí)行針對(duì)該進(jìn)程監(jiān)視器的相附接的進(jìn)程而配置的安全策略。在一個(gè)實(shí)施例中,系統(tǒng)架構(gòu)還由在Linux層與更高應(yīng)用層之間的中間件層來定義。安全系統(tǒng)還可以包括可訪問策略數(shù)據(jù)庫(kù),該可訪問策略數(shù)據(jù)庫(kù)包括所存儲(chǔ)的用于應(yīng)用層中應(yīng)用的可配置安全策略。策略數(shù)據(jù)庫(kù)可以存儲(chǔ)在設(shè)備上,或者該策略數(shù)據(jù)庫(kù)可以遠(yuǎn)程地進(jìn)行存儲(chǔ)并且能夠被該設(shè)備訪問。在一些實(shí)施例中,操作系統(tǒng)是Android。在一些這種實(shí)施例中,母進(jìn)程是Zygote進(jìn)程。通常使主監(jiān)視進(jìn)程與母進(jìn)程相附接??梢酝ㄟ^進(jìn)程跟蹤系統(tǒng)呼叫來創(chuàng)建該附接,其中,主監(jiān)視器被配置為主機(jī)進(jìn)程并且母進(jìn)程被配置為目標(biāo)進(jìn)程??梢酝ㄟ^進(jìn)程跟蹤系統(tǒng)呼叫來使每個(gè)進(jìn)程監(jiān)視器與該進(jìn)程監(jiān)視器的相應(yīng)進(jìn)程相附接,其中,進(jìn)程監(jiān)視器是主機(jī)進(jìn)程并且該進(jìn)程監(jiān)視器的相附接的相應(yīng)進(jìn)程是目標(biāo)進(jìn)程。每個(gè)進(jìn)程監(jiān)視器可以被配置成:通過從安全系統(tǒng)服務(wù)中檢索安全策略來加載用于該進(jìn)程監(jiān)視器的相附接的目標(biāo)進(jìn)程的安全策略。每個(gè)進(jìn)程監(jiān)視器可以被配置成:監(jiān)視該進(jìn)程監(jiān)視器的目標(biāo)進(jìn)程的專用化進(jìn)程以提取應(yīng)用識(shí)別數(shù)據(jù),該應(yīng)用識(shí)別數(shù)據(jù)表示該目標(biāo)進(jìn)程正專用為應(yīng)用;以及基于所提取的應(yīng)用識(shí)別數(shù)據(jù)從安全系統(tǒng)服務(wù)中檢索用于該目標(biāo)進(jìn)程的相關(guān)安全策略。在一些實(shí)施例中,進(jìn)程監(jiān)視器(多個(gè)進(jìn)程監(jiān)視器)通過Linux層與應(yīng)用層之間的通信鏈接或機(jī)制來與安全系統(tǒng)服務(wù)進(jìn)行通信。通過示例,通信機(jī)制可以是通過TCP鏈接等的客戶端服務(wù)器事務(wù)。這種實(shí)施例的第二方面可以具有關(guān)于以上第一方面的實(shí)施例所提到的任何一種或更多種特征。在第三方面,一些實(shí)施例包括在安全系統(tǒng)中配置與新目標(biāo)進(jìn)程相附接的進(jìn)程監(jiān)視器的方法,該安全系統(tǒng)用于在設(shè)備上運(yùn)行的操作系統(tǒng),該操作系統(tǒng)包括基于Linux的內(nèi)核并且包括系統(tǒng)架構(gòu),該系統(tǒng)架構(gòu)由與內(nèi)核相關(guān)聯(lián)的Linux層和包括應(yīng)用的更高應(yīng)用層來定義,該方法包括:當(dāng)目標(biāo)進(jìn)程專用為其預(yù)期的應(yīng)用時(shí)監(jiān)視該目標(biāo)進(jìn)程的專用化進(jìn)程;從表示目標(biāo)進(jìn)程正專用為應(yīng)用或應(yīng)用類型的專用化進(jìn)程中提取應(yīng)用識(shí)別數(shù)據(jù);基于所提取的應(yīng)用識(shí)別數(shù)據(jù)從策略數(shù)據(jù)庫(kù)中檢索為該目標(biāo)進(jìn)程所特定的安全策略;以及配置進(jìn)程監(jiān)視器以執(zhí)行所檢索到的安全策略。在一個(gè)實(shí)施例中,系統(tǒng)架構(gòu)還由在Linux層與更高應(yīng)用層之間的中間件層來定義。在實(shí)施例中,該方法還包括:基于用戶空間控制參數(shù)來檢索為目標(biāo)進(jìn)程所特定的相關(guān)安全策略,該用戶空間控制參數(shù)指示當(dāng)前在設(shè)備上操作的特定用戶空間實(shí)例。在一些這種實(shí)施例中,用戶空間控制參數(shù)是識(shí)別或表示從所述多個(gè)用戶空間實(shí)例中選擇的當(dāng)前操作的用戶空間實(shí)例的數(shù)據(jù)。在一個(gè)實(shí)施例中,用戶空間實(shí)例可以對(duì)應(yīng)于操作域,比如工作域或私人域。在第四方面,一些實(shí)施例包括在安全系統(tǒng)中使存儲(chǔ)在策略數(shù)據(jù)庫(kù)中的安全策略與Linux層中啟動(dòng)的對(duì)應(yīng)新進(jìn)程相鏈接的方法,該安全策略是為應(yīng)用層中的應(yīng)用特定的,該安全系統(tǒng)用于在設(shè)備上運(yùn)行的操作系統(tǒng),該操作系統(tǒng)包括基于Linux的內(nèi)核并且包括系統(tǒng)架構(gòu),該系統(tǒng)架構(gòu)由與內(nèi)核相關(guān)聯(lián)的Linux層和包括應(yīng)用的更高應(yīng)用層來定義,該方法包括:當(dāng)新進(jìn)程專用為其預(yù)期的應(yīng)用時(shí)監(jiān)視該新進(jìn)程的在Linux層的專用化進(jìn)程;從表示目標(biāo)進(jìn)程正專用為應(yīng)用或應(yīng)用類型的專用化進(jìn)程中提取應(yīng)用識(shí)別數(shù)據(jù);以及基于應(yīng)用識(shí)別數(shù)據(jù)來創(chuàng)建新進(jìn)程與來自策略數(shù)據(jù)庫(kù)的安全策略之間的鏈接。在一個(gè)實(shí)施例中,系統(tǒng)架構(gòu)還由在Linux層與更高應(yīng)用層之間的中間件層來定義。在一種形式下,創(chuàng)建鏈接包括:從策略數(shù)據(jù)庫(kù)中檢索安全策略,并且將該安全策略載入與新進(jìn)程相附接的進(jìn)程監(jiān)視器中以用于執(zhí)行該安全策略。在一種實(shí)施例中,創(chuàng)建鏈接包括:基于用戶空間控制參數(shù)來檢索為新進(jìn)程特定的相關(guān)安全策略,該用戶空間控制參數(shù)指示當(dāng)前在設(shè)備上操作的特定用戶空間實(shí)例。用戶空間控制參數(shù)可以包括識(shí)別或表示從多個(gè)用戶空間實(shí)例中選擇的當(dāng)前操作的用戶空間實(shí)例的數(shù)據(jù)。在一個(gè)實(shí)施例中,用戶空間實(shí)例可以對(duì)應(yīng)于操作域,比如工作域或私人域。在第五方面,一些實(shí)施例包括在Linux層實(shí)現(xiàn)安全策略的方法,針對(duì)應(yīng)用層中的應(yīng)用或應(yīng)用類型來定義該策略,其中,該方法包括:監(jiān)視對(duì)被新Linux進(jìn)程用于專用為其預(yù)期的應(yīng)用的代碼的加載和/或識(shí)別,并且基于所加載或識(shí)別的代碼將用于在Linux層實(shí)現(xiàn)的一個(gè)或更多個(gè)安全策略與新Linux進(jìn)程相鏈接。通過示例,可以針對(duì)每個(gè)應(yīng)用、應(yīng)用類型或應(yīng)用集合來定義安全策略。在一些實(shí)施例中,使安全策略與新Linux進(jìn)程相鏈接包括:根據(jù)被新Linux進(jìn)程用于專用為其預(yù)期的應(yīng)用的代碼來識(shí)別用于新Linux進(jìn)程的安全策略。在一些實(shí)施例中,應(yīng)用層是Android層。上述實(shí)施例的第三方面至第五方面可以包括關(guān)于第一方面實(shí)施例和第二方面實(shí)施例所提到的任何一種或更多種特征。在第六方面,一些實(shí)施例包括使在設(shè)備上運(yùn)行的操作系統(tǒng)安全的方法,該操作系統(tǒng)包括在Linux層中的基于Linux的內(nèi)核,系統(tǒng)架構(gòu)包括在該Linux層以上的應(yīng)用層中的應(yīng)用,該方法包括:將監(jiān)視實(shí)體嵌入Linux層中的與應(yīng)用層中的新應(yīng)用或應(yīng)用組件相對(duì)應(yīng)的每個(gè)新啟動(dòng)進(jìn)程內(nèi);配置每個(gè)新啟動(dòng)進(jìn)程,以將該新啟動(dòng)進(jìn)程的共享的或動(dòng)態(tài)的庫(kù)符號(hào)調(diào)用重定向至該進(jìn)程內(nèi)所嵌入的監(jiān)視實(shí)體;配置每個(gè)所嵌入的監(jiān)視實(shí)體,以分析由該監(jiān)視實(shí)體的相關(guān)聯(lián)的進(jìn)程進(jìn)行的重定向符號(hào)調(diào)用并且基于與該進(jìn)程相關(guān)聯(lián)的安全策略來執(zhí)行安全動(dòng)作。在一些實(shí)施例中,共享的或動(dòng)態(tài)的庫(kù)符號(hào)調(diào)用對(duì)應(yīng)于或表示共享的或動(dòng)態(tài)的庫(kù)中的函數(shù)調(diào)用或函數(shù)呼叫,該函數(shù)調(diào)用或函數(shù)呼叫意圖在內(nèi)核模式下調(diào)用一個(gè)或更多個(gè)系統(tǒng)呼叫。在一個(gè)實(shí)施例中,該方法包括:將由進(jìn)程進(jìn)行的所有符號(hào)調(diào)用重定向至該進(jìn)程內(nèi)所嵌入的監(jiān)視實(shí)體。在另一實(shí)施例中,該方法包括:將由進(jìn)程進(jìn)行的預(yù)定義或預(yù)定的符號(hào)調(diào)用集合重定向至該進(jìn)程內(nèi)所嵌入的監(jiān)視實(shí)體。在一個(gè)實(shí)施例中,該方法還包括:基于用戶空間控制參數(shù)來檢索為進(jìn)程特定的相關(guān)安全策略,該用戶空間控制參數(shù)指示當(dāng)前在設(shè)備上操作的特定用戶空間實(shí)例。用戶空間控制參數(shù)可以包括識(shí)別或表示從多個(gè)用戶空間實(shí)例中選擇的當(dāng)前操作的用戶空間實(shí)例的數(shù)據(jù)。在一個(gè)實(shí)施例中,用戶空間實(shí)例可以對(duì)應(yīng)于操作域,比如工作域或私人域。在一些實(shí)施例中,安全動(dòng)作可以包括下述動(dòng)作中的任何一種或更多種動(dòng)作:●拒絕執(zhí)行由共享的或動(dòng)態(tài)的庫(kù)中的符號(hào)表示的函數(shù)呼叫,以防止函數(shù)呼叫的執(zhí)行和該函數(shù)呼叫可能使用的任何系統(tǒng)呼叫(多個(gè)系統(tǒng)呼叫)的執(zhí)行?!裢ㄟ^向預(yù)期的共享的或動(dòng)態(tài)的庫(kù)發(fā)送用于執(zhí)行的由符號(hào)表示的函數(shù)呼叫來允許執(zhí)行該函數(shù)呼叫,以允許調(diào)用該函數(shù)呼叫和該函數(shù)呼叫可能使用的任何系統(tǒng)呼叫(多個(gè)系統(tǒng)呼叫),或者●通過向預(yù)期的共享的或動(dòng)態(tài)的庫(kù)發(fā)送用于執(zhí)行的修改的函數(shù)呼叫來修改符號(hào)調(diào)用,以允許調(diào)用內(nèi)核中的修改的系統(tǒng)呼叫。將監(jiān)視實(shí)體嵌入每個(gè)新啟動(dòng)進(jìn)程內(nèi)可以包括:將進(jìn)程監(jiān)視方法或函數(shù)嵌入該進(jìn)程內(nèi)。配置每個(gè)新啟動(dòng)進(jìn)程以將共享的或動(dòng)態(tài)的庫(kù)符號(hào)調(diào)用重定向至所嵌入的監(jiān)視實(shí)體內(nèi)可以包括:針對(duì)每個(gè)新啟動(dòng)進(jìn)程配置函數(shù)呼叫插入(FCI)機(jī)制。通過示例,該FCI機(jī)制被配置成攔截符號(hào)調(diào)用并且將該符號(hào)調(diào)用重定向至該進(jìn)程內(nèi)所嵌入的進(jìn)程監(jiān)視器。在一種形式下,F(xiàn)CI機(jī)制包括:在每個(gè)新進(jìn)程中配置或提供代理函數(shù)集合(代理函數(shù)庫(kù)),該代理函數(shù)集合(代理函數(shù)庫(kù))攔截符號(hào)調(diào)用并且將該符號(hào)調(diào)用重定向至每個(gè)進(jìn)程內(nèi)所嵌入的監(jiān)視實(shí)體。在一些這種實(shí)施例中,代理函數(shù)庫(kù)被配置成攔截意圖用于共享的或動(dòng)態(tài)的庫(kù)的符號(hào)調(diào)用。在第一形式下,針對(duì)每個(gè)進(jìn)程配置FCI機(jī)制包括:配置運(yùn)行時(shí)間鏈接器以在任何其他共享的或動(dòng)態(tài)的庫(kù)之前使該進(jìn)程與代理函數(shù)庫(kù)相鏈接。通過示例,該方法可以包括:配置LD_PRELOAD環(huán)境變量,以在進(jìn)程被啟動(dòng)時(shí)命令運(yùn)行時(shí)間鏈接器與代理函數(shù)庫(kù)相鏈接。在第二形式下,針對(duì)每個(gè)進(jìn)程配置FCI機(jī)制包括:修改進(jìn)程圖像來將動(dòng)態(tài)鏈接的符號(hào)調(diào)用重定向至該進(jìn)程的代理函數(shù)庫(kù)。在一些實(shí)施例中,此步驟包括:在該進(jìn)程的全局偏移表(GOT)中修改符號(hào)的地址條目以表明該進(jìn)程的代理函數(shù)庫(kù)中的條目,并且其中,GOT是該進(jìn)程的可執(zhí)行并且可鏈接格式(ELF,ExecutableandLinkableFormat)的一部分。通過示例,代理函數(shù)庫(kù)可以采用代理偏移表(POT)的形式,并且POT中的每個(gè)條目可以被配置成表明該進(jìn)程的所嵌入的監(jiān)視實(shí)體。在第三形式下,針對(duì)每個(gè)進(jìn)程配置FCI機(jī)制可以包括:配置運(yùn)行時(shí)間鏈接器以在任何其他的共享對(duì)象庫(kù)之前使任何母進(jìn)程與代理函數(shù)庫(kù)相鏈接;以及修改由母進(jìn)程啟動(dòng)的任何新進(jìn)程的在存儲(chǔ)器中的進(jìn)程圖像以將共享的或動(dòng)態(tài)的庫(kù)符號(hào)調(diào)用重定向至該進(jìn)程的代理函數(shù)庫(kù)。通過示例,操作系統(tǒng)可以是Android,并且母進(jìn)程是Zygote進(jìn)程。在一些實(shí)施例中,該方法還可以包括:如果進(jìn)程試圖加載和/或執(zhí)行不受信任的本機(jī)代碼,則發(fā)起系統(tǒng)呼叫插入(SCI)機(jī)制,該SCI機(jī)制被配置成攔截由該代碼進(jìn)行的至內(nèi)核的系統(tǒng)呼叫,并且將這些系統(tǒng)呼叫定向至監(jiān)視實(shí)體以實(shí)現(xiàn)安全動(dòng)作。在一些這種實(shí)施例中,僅在不受信任的本機(jī)代碼正執(zhí)行時(shí)臨時(shí)啟用SCI機(jī)制,并且在不受信任的本機(jī)代碼完成執(zhí)行時(shí)禁用該SCI機(jī)制。監(jiān)視實(shí)體可以為該進(jìn)程的所嵌入的監(jiān)視實(shí)體或者與該進(jìn)程相關(guān)聯(lián)的獨(dú)立監(jiān)視實(shí)體。在一個(gè)實(shí)施例中,該方法還可以包括:如果父進(jìn)程啟動(dòng)新子進(jìn)程來執(zhí)行不受信任的本機(jī)代碼,則發(fā)起SCI機(jī)制。在一些這種實(shí)施例中,該方法可以包括:采用進(jìn)程跟蹤系統(tǒng)呼叫的形式來發(fā)起SCI機(jī)制,以使父進(jìn)程(主機(jī)進(jìn)程)與新子進(jìn)程(目標(biāo)進(jìn)程)相附接,使得由新子進(jìn)程調(diào)用的任何系統(tǒng)呼叫被攔截并且被重定向至父進(jìn)程的所嵌入的進(jìn)程監(jiān)視器以實(shí)現(xiàn)安全動(dòng)作。在另一實(shí)施例中,該方法還可以包括:如果進(jìn)程試圖通過動(dòng)態(tài)地加載來自共享庫(kù)的新符號(hào)來執(zhí)行不受信任的本機(jī)代碼,則發(fā)起SCI機(jī)制。在第七方面,一些實(shí)施例包括使在設(shè)備上運(yùn)行的操作系統(tǒng)安全的方法,該操作系統(tǒng)包括在Linux層中的基于Linux的內(nèi)核,系統(tǒng)架構(gòu)包括在該Linux層以上的應(yīng)用層中的應(yīng)用,該方法包括:攔截由進(jìn)程進(jìn)行的意圖調(diào)用內(nèi)核中的系統(tǒng)呼叫的共享的或動(dòng)態(tài)的庫(kù)符號(hào)調(diào)用;以及基于為應(yīng)用而配置的安全策略,針對(duì)所攔截的符號(hào)調(diào)用來發(fā)起安全動(dòng)作,所述應(yīng)用與呼叫所攔截的符號(hào)調(diào)用的進(jìn)程相對(duì)應(yīng)。在第八方面,一些實(shí)施例包括用于在設(shè)備上運(yùn)行的操作系統(tǒng)的安全系統(tǒng),該操作系統(tǒng)包括基于Linux的內(nèi)核并且包括系統(tǒng)架構(gòu),該系統(tǒng)架構(gòu)由與內(nèi)核相關(guān)聯(lián)的Linux層和包括應(yīng)用的更高應(yīng)用層來定義,該安全系統(tǒng)包括:在Linux層中的每個(gè)啟動(dòng)進(jìn)程內(nèi)的嵌入監(jiān)視實(shí)體,每個(gè)啟動(dòng)進(jìn)程對(duì)應(yīng)于應(yīng)用層中的應(yīng)用;與每個(gè)進(jìn)程相關(guān)聯(lián)的攔截器,該攔截器被配置成攔截由該攔截器的相關(guān)聯(lián)的進(jìn)程進(jìn)行的共享的或動(dòng)態(tài)的庫(kù)符號(hào)調(diào)用中的至少一些庫(kù)符號(hào)調(diào)用,并且被配置成將這些庫(kù)符號(hào)調(diào)用重定向至發(fā)起符號(hào)調(diào)用的進(jìn)程內(nèi)所嵌入的監(jiān)視實(shí)體,以及其中,所嵌入的監(jiān)視實(shí)體被配置成分析所攔截的由該監(jiān)視實(shí)體的相關(guān)聯(lián)的進(jìn)程進(jìn)行的符號(hào)調(diào)用,并且被配置成基于與該進(jìn)程相關(guān)聯(lián)的安全策略來執(zhí)行安全動(dòng)作。在一個(gè)實(shí)施例中,系統(tǒng)架構(gòu)還由在Linux層與更高應(yīng)用層之間的中間件層來定義。第八方面的各種實(shí)施例還可以包括相對(duì)于第四方面至第七方面的實(shí)施例所提到的特征中的任何一種或更多種特征。在第九方面,一些實(shí)施例包括用于使在設(shè)備上運(yùn)行的操作系統(tǒng)安全的方法,該操作系統(tǒng)包括基于Linux的內(nèi)核并且包括系統(tǒng)架構(gòu),該系統(tǒng)架構(gòu)由與內(nèi)核相關(guān)聯(lián)的Linux層和包括應(yīng)用的更高應(yīng)用層來定義,該方法包括:創(chuàng)建對(duì)由母進(jìn)程調(diào)用的系統(tǒng)呼叫和/或庫(kù)函數(shù)呼叫進(jìn)行監(jiān)視的監(jiān)視實(shí)體,以檢測(cè)將與應(yīng)用層中新應(yīng)用相對(duì)應(yīng)的新進(jìn)程的創(chuàng)建;以及當(dāng)母進(jìn)程創(chuàng)建新啟動(dòng)進(jìn)程時(shí)創(chuàng)建對(duì)該新啟動(dòng)進(jìn)程進(jìn)行監(jiān)視的新監(jiān)視實(shí)體,該新監(jiān)視實(shí)體被配置成檢測(cè)由新進(jìn)程進(jìn)行的系統(tǒng)呼叫和/或庫(kù)函數(shù)呼叫,并且被配置成基于所檢測(cè)到的系統(tǒng)呼叫和/或庫(kù)函數(shù)呼叫的參數(shù)來檢索并且執(zhí)行為新進(jìn)程配置的安全策略。在一個(gè)實(shí)施例中,系統(tǒng)架構(gòu)還由在Linux層與更高應(yīng)用層之間的中間件層來定義。在一種形式下,監(jiān)視實(shí)體被定義為L(zhǎng)inux進(jìn)程。例如,監(jiān)視實(shí)體可以是與該監(jiān)視實(shí)體正監(jiān)視的目標(biāo)進(jìn)程相鏈接或附接的獨(dú)立監(jiān)視進(jìn)程。在另一種形式下,監(jiān)視實(shí)體可以是正在被監(jiān)視的目標(biāo)進(jìn)程內(nèi)所嵌入的進(jìn)程監(jiān)視方法或函數(shù)。應(yīng)用可以是應(yīng)用程序或應(yīng)用組件,比如但不限于活動(dòng)(Activities)、服務(wù)、內(nèi)容提供者或廣播接收器。在一個(gè)實(shí)施例中,該方法還可以包括:基于用戶空間控制參數(shù)來檢索為新進(jìn)程特定的相關(guān)安全策略,該用戶空間控制參數(shù)指示當(dāng)前在設(shè)備上操作的特定用戶空間實(shí)例。在一些這種實(shí)施例中,用戶空間控制參數(shù)是識(shí)別或表示從多個(gè)用戶空間實(shí)例中選擇的當(dāng)前操作的用戶空間實(shí)例的數(shù)據(jù)。在一個(gè)實(shí)施例中,用戶空間實(shí)例可以對(duì)應(yīng)于操作域,比如工作域或私人域。在第十方面,一些實(shí)施例包括用于使在設(shè)備上運(yùn)行的操作系統(tǒng)安全的方法,該操作系統(tǒng)包括基于Linux的內(nèi)核并且包括系統(tǒng)架構(gòu),該系統(tǒng)架構(gòu)由與內(nèi)核相關(guān)聯(lián)的Linux層和包括應(yīng)用的更高應(yīng)用層來定義,該方法包括:創(chuàng)建對(duì)由母進(jìn)程調(diào)用的系統(tǒng)呼叫進(jìn)行直接地或間接地監(jiān)視的監(jiān)視實(shí)體,以檢測(cè)將與應(yīng)用層中新應(yīng)用相對(duì)應(yīng)的新進(jìn)程的創(chuàng)建;以及當(dāng)母進(jìn)程創(chuàng)建新啟動(dòng)進(jìn)程時(shí)創(chuàng)建對(duì)該新啟動(dòng)進(jìn)程進(jìn)行監(jiān)視的新監(jiān)視實(shí)體,該新監(jiān)視實(shí)體被配置成直接地或間接地檢測(cè)由新進(jìn)程進(jìn)行的系統(tǒng)呼叫調(diào)用,并且被配置成基于所檢測(cè)到的系統(tǒng)呼叫調(diào)用的參數(shù)來檢索并且執(zhí)行為新進(jìn)程配置的安全策略。在一個(gè)實(shí)施例中,系統(tǒng)架構(gòu)還由在Linux層與更高應(yīng)用層之間的中間件層來定義。在一種形式下,監(jiān)視實(shí)體通過攔截至內(nèi)核的系統(tǒng)呼叫調(diào)用來直接地監(jiān)視或檢測(cè)系統(tǒng)呼叫調(diào)用。在另一種形式下,監(jiān)視實(shí)體通過攔截共享的或動(dòng)態(tài)的庫(kù)符號(hào)調(diào)用來間接地監(jiān)視或檢測(cè)系統(tǒng)呼叫調(diào)用,該庫(kù)符號(hào)調(diào)用意圖對(duì)至內(nèi)核的一個(gè)或更多個(gè)系統(tǒng)呼叫進(jìn)行調(diào)用。在一個(gè)實(shí)施例中,該方法還包括:基于用戶空間控制參數(shù)來檢索為新進(jìn)程特定的相關(guān)安全策略,該用戶空間控制參數(shù)指示當(dāng)前在設(shè)備上操作的特定用戶空間實(shí)例。在一些這種實(shí)施例中,用戶空間控制參數(shù)是識(shí)別或表示從多個(gè)用戶空間實(shí)例中選擇的當(dāng)前操作的用戶空間實(shí)例的數(shù)據(jù)。在一個(gè)實(shí)施例中,用戶空間實(shí)例可以對(duì)應(yīng)于操作域,比如工作域或私人域。在第十一方面,一些實(shí)施例包括使在設(shè)備上運(yùn)行的操作系統(tǒng)安全的方法,該操作系統(tǒng)包括在Linux層中的基于Linux的內(nèi)核,系統(tǒng)架構(gòu)包括在該Linux層以上的應(yīng)用層中的應(yīng)用,該方法包括:使用第一監(jiān)視機(jī)制來檢測(cè)由進(jìn)程進(jìn)行的共享的或動(dòng)態(tài)的庫(kù)符號(hào)調(diào)用,并且基于與調(diào)用該符號(hào)調(diào)用的相應(yīng)進(jìn)程相關(guān)聯(lián)的安全策略,針對(duì)所檢測(cè)到的符號(hào)調(diào)用來發(fā)起安全動(dòng)作;檢測(cè)試圖執(zhí)行預(yù)定義的高風(fēng)險(xiǎn)動(dòng)作集合中的一個(gè)高風(fēng)險(xiǎn)動(dòng)作的高風(fēng)險(xiǎn)進(jìn)程;以及發(fā)起第二監(jiān)視機(jī)制來監(jiān)視由所檢測(cè)到的高風(fēng)險(xiǎn)進(jìn)程所調(diào)用的系統(tǒng)呼叫。在一些實(shí)施例中,該方法包括臨時(shí)發(fā)起或啟用第二監(jiān)視機(jī)制。具體地,根據(jù)一些實(shí)施例的方法包括:僅在高風(fēng)險(xiǎn)進(jìn)程正在執(zhí)行時(shí)發(fā)起或啟用第二監(jiān)視機(jī)制。在一個(gè)示例中,該方法包括:一旦高風(fēng)險(xiǎn)進(jìn)程完成執(zhí)行,禁用第二監(jiān)視機(jī)制。在另一示例中,該方法包括:一旦危險(xiǎn)符號(hào)或不受信任的符號(hào)已卸載時(shí),則禁用第二監(jiān)視機(jī)制。在一種形式下,當(dāng)高風(fēng)險(xiǎn)進(jìn)程沒有加載不受信任的符號(hào)時(shí)使用例如dlclose函數(shù)呼叫來停用第二監(jiān)視機(jī)制。在一種形式下,第一監(jiān)視機(jī)制在每個(gè)進(jìn)程中是FCI機(jī)制,該FCI機(jī)制被配置成攔截可能意圖調(diào)用內(nèi)核中的一個(gè)或更多個(gè)系統(tǒng)呼叫的共享的和動(dòng)態(tài)的庫(kù)符號(hào)調(diào)用,并且被配置成將該庫(kù)符號(hào)調(diào)用重定向至與該進(jìn)程相關(guān)聯(lián)的監(jiān)視實(shí)體,該監(jiān)視實(shí)體響應(yīng)于每個(gè)所攔截的符號(hào)調(diào)用來發(fā)起安全動(dòng)作。在一種形式下,第二監(jiān)視機(jī)制是針對(duì)每個(gè)檢測(cè)到的高風(fēng)險(xiǎn)進(jìn)程而配置的SCI機(jī)制。在一些實(shí)施例中,每個(gè)SCI機(jī)制被配置成攔截由高風(fēng)險(xiǎn)進(jìn)程進(jìn)行的至內(nèi)核的系統(tǒng)呼叫,并且被配置成將該系統(tǒng)呼叫重定向至與該進(jìn)程相關(guān)聯(lián)的監(jiān)視實(shí)體,該監(jiān)視實(shí)體響應(yīng)于每個(gè)所攔截的系統(tǒng)呼叫來發(fā)起安全動(dòng)作。通過示例,高風(fēng)險(xiǎn)動(dòng)作可以包括下述動(dòng)作中的任何一種或更多種動(dòng)作:●檢測(cè)試圖加載和/或執(zhí)行不受信任的本機(jī)代碼的進(jìn)程,和/或●檢測(cè)試圖執(zhí)行或調(diào)用代碼的進(jìn)程,該代碼可能會(huì)造成該進(jìn)程或子進(jìn)程繞過第一監(jiān)視機(jī)制調(diào)用系統(tǒng)呼叫,和/或●檢測(cè)調(diào)用ldopen函數(shù)呼叫來加載共享對(duì)象(例如,寫入本機(jī)代碼中)的進(jìn)程。在一種形式中,該方法可以包括:如果父進(jìn)程啟動(dòng)新子進(jìn)程來執(zhí)行不受信任的本機(jī)代碼,則發(fā)起SCI機(jī)制。在一些這種實(shí)施例中,該方法包括:采用進(jìn)程跟蹤系統(tǒng)呼叫的形式來發(fā)起SCI機(jī)制,以使父進(jìn)程(主機(jī)進(jìn)程)與新子進(jìn)程(目標(biāo)進(jìn)程)相附接,使得由新子進(jìn)程調(diào)用的任何系統(tǒng)呼叫被攔截并且被重定向至與父進(jìn)程相關(guān)聯(lián)的監(jiān)視實(shí)體以實(shí)現(xiàn)安全動(dòng)作。在第十二方面,一些實(shí)施例包括使在設(shè)備上運(yùn)行的操作系統(tǒng)安全的方法,該操作系統(tǒng)包括在Linux層中的基于Linux的內(nèi)核,系統(tǒng)架構(gòu)包括在該Linux層以上的應(yīng)用層中應(yīng)用,該方法包括:發(fā)起被配置成對(duì)由進(jìn)程進(jìn)行的至少一些共享的或動(dòng)態(tài)的庫(kù)符號(hào)調(diào)用進(jìn)行檢測(cè)的一次監(jiān)視機(jī)制,并且基于與調(diào)用所檢測(cè)到的符號(hào)調(diào)用的進(jìn)程相關(guān)聯(lián)的安全策略,針對(duì)所檢測(cè)到的符號(hào)調(diào)用來執(zhí)行安全動(dòng)作;檢測(cè)試圖執(zhí)行預(yù)定義的高風(fēng)險(xiǎn)動(dòng)作集合中的一個(gè)高風(fēng)險(xiǎn)動(dòng)作的高風(fēng)險(xiǎn)進(jìn)程,并且切換成二次監(jiān)視機(jī)制來檢測(cè)由所檢測(cè)到的高風(fēng)險(xiǎn)進(jìn)程所調(diào)用的系統(tǒng)呼叫;以及基于與調(diào)用所檢測(cè)到的系統(tǒng)呼叫的所檢測(cè)到的高風(fēng)險(xiǎn)進(jìn)程相關(guān)聯(lián)的安全策略,針對(duì)每個(gè)所檢測(cè)到的系統(tǒng)呼叫來執(zhí)行安全動(dòng)作。在一種形式下,一次監(jiān)視機(jī)制是FCI機(jī)制,該FCI機(jī)制被配置成檢測(cè)可能意圖對(duì)至內(nèi)核的一個(gè)或更多個(gè)系統(tǒng)呼叫進(jìn)行調(diào)用的共享的和動(dòng)態(tài)的庫(kù)符號(hào)調(diào)用,并且二次監(jiān)視機(jī)制是SCI機(jī)制,該SCI機(jī)制被配置成檢測(cè)至內(nèi)核的系統(tǒng)呼叫。在第十三方面,一些實(shí)施例包括使一個(gè)或更多個(gè)應(yīng)用特有安全策略與在設(shè)備的操作系統(tǒng)中的新進(jìn)程相鏈接的方法,該設(shè)備具有:操作系統(tǒng),該操作系統(tǒng)能夠操作成運(yùn)行進(jìn)程;以及中間件,該中間件能夠操作成通過從現(xiàn)有進(jìn)程或母進(jìn)程分裂或分叉出新進(jìn)程來使該操作系統(tǒng)啟動(dòng)新進(jìn)程,并且能夠操作成使用為應(yīng)用特定的代碼來使新進(jìn)程專用為運(yùn)行應(yīng)用,所述方法包括:檢測(cè)新進(jìn)程;在檢測(cè)到新進(jìn)程之后監(jiān)視預(yù)定義事件或預(yù)定義識(shí)別閾值;以及在檢測(cè)到預(yù)定義事件或達(dá)到預(yù)定義識(shí)別閾值時(shí)使一個(gè)或更多個(gè)安全策略與新進(jìn)程相鏈接。在一些實(shí)施例中,檢測(cè)新進(jìn)程包括:檢測(cè)新進(jìn)程的啟動(dòng),并且在檢測(cè)到新進(jìn)程之后監(jiān)視預(yù)定義事件或預(yù)定義識(shí)別閾值。在一種形式下,新進(jìn)程的啟動(dòng)包括:從父進(jìn)程或母進(jìn)程分叉出新進(jìn)程。在實(shí)施例中,操作系統(tǒng)包括在Linux層中的基于Linux的內(nèi)核,并且其中系統(tǒng)架構(gòu)包括在該Linux層以上的應(yīng)用層中的應(yīng)用。在一種形式下,預(yù)定義事件是對(duì)所述新進(jìn)程的分叉完成。在另一種形式下,預(yù)定義事件是使用新進(jìn)程的應(yīng)用特定代碼對(duì)新進(jìn)程的專用化。在另一種形式下,預(yù)定義事件是開始執(zhí)行應(yīng)用特定代碼。在一種形式下,預(yù)定義識(shí)別閾值對(duì)應(yīng)于采集或接收到足夠的下述數(shù)據(jù)或證據(jù):該數(shù)據(jù)或證據(jù)指示或識(shí)別出Linux層中啟動(dòng)的新進(jìn)程對(duì)應(yīng)于用戶意圖啟動(dòng)的在應(yīng)用層中的應(yīng)用。在一種形式下,使一個(gè)或更多個(gè)安全策略與新進(jìn)程相鏈接包括:提取應(yīng)用識(shí)別數(shù)據(jù),該應(yīng)用識(shí)別數(shù)據(jù)表示該進(jìn)程將專用為、正專用為、或已專用為的應(yīng)用或應(yīng)用類型;以及基于應(yīng)用識(shí)別數(shù)據(jù)從策略數(shù)據(jù)庫(kù)中檢索一個(gè)或更多個(gè)安全策略。在另一種形式下,使一個(gè)或更多個(gè)安全策略與新進(jìn)程相鏈接包括:在新進(jìn)程已專用化之后監(jiān)視新進(jìn)程的執(zhí)行;基于新進(jìn)程的執(zhí)行來表征應(yīng)用的類型;以及基于該表征從策略數(shù)據(jù)庫(kù)中檢索一個(gè)或更多個(gè)安全策略。在一些實(shí)施例中,使一個(gè)或更多個(gè)安全策略與新進(jìn)程相鏈接包括:使用一個(gè)或更多個(gè)安全策略來配置與進(jìn)程相關(guān)聯(lián)的監(jiān)視實(shí)體,該監(jiān)視實(shí)體被配置成監(jiān)視該進(jìn)程的執(zhí)行并且執(zhí)行該一個(gè)或更多個(gè)安全策略。在一種形式下,應(yīng)用識(shí)別數(shù)據(jù)是應(yīng)用名稱或程序名稱。在一種形式下,從文件中檢索應(yīng)用名稱。在另一種形式下,從新進(jìn)程的存儲(chǔ)器中檢索應(yīng)用名稱。在另一種形式下,通過IPC通道將應(yīng)用名稱從外部進(jìn)程推送至該進(jìn)程。在另一種形式下,通過IPC通道從外部進(jìn)程請(qǐng)求或拉出應(yīng)用名稱。在一些配置中,監(jiān)視器可以被配置成通過下述操作使所定義的策略與進(jìn)程相鏈接或相關(guān)聯(lián):監(jiān)視對(duì)被該進(jìn)程用于專用為其預(yù)期的應(yīng)用的代碼進(jìn)行的加載和/或識(shí)別,并且基于所加載或識(shí)別的代碼來使一個(gè)或更多個(gè)策略文件與該進(jìn)程相鏈接。在這樣一種配置中,監(jiān)視器被配置成:在進(jìn)程已被開始之后,使所定義的策略與進(jìn)程相鏈接或相關(guān)聯(lián)。在另一個(gè)這種配置中,監(jiān)視器被配置成:根據(jù)用于使進(jìn)程專用為給定的應(yīng)用或應(yīng)用類型的數(shù)據(jù)或代碼,使所定義的策略與進(jìn)程相鏈接或相關(guān)聯(lián)。在一些配置中,監(jiān)視器可以被配置成通過下述操作來使所定義的策略與進(jìn)程相鏈接或相關(guān)聯(lián):當(dāng)進(jìn)程專用為其預(yù)期的應(yīng)用時(shí)監(jiān)視該進(jìn)程的專用化;從專用化進(jìn)程中提取應(yīng)用識(shí)別數(shù)據(jù),該專用化進(jìn)程表示進(jìn)程正專用為應(yīng)用;以及基于所提取的應(yīng)用識(shí)別數(shù)據(jù)使一個(gè)或更多個(gè)策略文件與進(jìn)程相鏈接。在一些配置中,監(jiān)視器可以被配置成通過下述操作使所定義的策略與進(jìn)程相鏈接或相關(guān)聯(lián):檢測(cè)進(jìn)程的啟動(dòng);在檢測(cè)到進(jìn)程的啟動(dòng)之后,監(jiān)視預(yù)定義事件或預(yù)定義識(shí)別閾值;以及一旦檢測(cè)到預(yù)定義事件或達(dá)到預(yù)定義識(shí)別閾值,則使一個(gè)或更多個(gè)策略文件與進(jìn)程相鏈接。在一些配置中,監(jiān)視器可以包括:監(jiān)視實(shí)體,該監(jiān)視實(shí)體直接地或間接地監(jiān)視由母進(jìn)程調(diào)用的系統(tǒng)呼叫,以檢測(cè)對(duì)將與新應(yīng)用相對(duì)應(yīng)的新進(jìn)程的創(chuàng)建,以及其中,該監(jiān)視器被配置成:一旦母進(jìn)程創(chuàng)建了新啟動(dòng)進(jìn)程,則創(chuàng)建新監(jiān)視實(shí)體,以監(jiān)視該新啟動(dòng)進(jìn)程,該新監(jiān)視實(shí)體被配置成直接地或間接地檢測(cè)由新進(jìn)程進(jìn)行的系統(tǒng)呼叫調(diào)用,并且該新監(jiān)視實(shí)體被配置成基于所檢測(cè)到的系統(tǒng)呼叫調(diào)用的參數(shù)來執(zhí)行與新進(jìn)程相鏈接或相關(guān)聯(lián)的策略。在一個(gè)這種配置中,監(jiān)視實(shí)體可以通過攔截至內(nèi)核的系統(tǒng)呼叫調(diào)用來直接地監(jiān)視或檢測(cè)系統(tǒng)呼叫調(diào)用。在另一個(gè)這種配置中,監(jiān)視實(shí)體可以通過攔截共享的或動(dòng)態(tài)的庫(kù)符號(hào)調(diào)用來間接地監(jiān)視或檢測(cè)系統(tǒng)呼叫調(diào)用,該共享的或動(dòng)態(tài)的庫(kù)符號(hào)調(diào)用意圖對(duì)至內(nèi)核的一個(gè)或更多個(gè)系統(tǒng)呼叫進(jìn)行調(diào)用。在一種形式下,監(jiān)視器可以是存儲(chǔ)在設(shè)備上的代碼,并且能夠在代碼被設(shè)備執(zhí)行時(shí)進(jìn)行操作。在另一種形式下,監(jiān)視器可以是設(shè)備的硬件組件。在第十四方面,一些實(shí)施例包括使一個(gè)或更多個(gè)應(yīng)用特定安全策略與操作系統(tǒng)中啟動(dòng)的新進(jìn)程相鏈接的方法:包括:檢測(cè)新進(jìn)程的啟動(dòng);以及至少將一個(gè)或更多個(gè)安全策略與新進(jìn)程的鏈接延遲至該新進(jìn)程使用其應(yīng)用特有代碼開始進(jìn)行專用化以用于執(zhí)行為止。在一些實(shí)施例中,該方法包括:當(dāng)新進(jìn)程已完成專用化時(shí),使一個(gè)或更多個(gè)安全策略與新進(jìn)程相鏈接。在第十五方面,一些實(shí)施例包括一種設(shè)備,該設(shè)備包括運(yùn)行進(jìn)程的操作系統(tǒng)和能夠操作成啟動(dòng)應(yīng)用的中間件層,其中,使用操作系統(tǒng)中的一個(gè)或更多個(gè)進(jìn)程來運(yùn)行由中間件層啟動(dòng)的應(yīng)用,該操作系統(tǒng)具有用戶層和內(nèi)核,其中,進(jìn)程在操作系統(tǒng)的用戶層中運(yùn)行并且通過內(nèi)核與在用戶層中運(yùn)行的其他進(jìn)程進(jìn)行交互,該交互響應(yīng)于由進(jìn)程進(jìn)行的至內(nèi)核的呼叫,該設(shè)備還包括:一個(gè)或更多個(gè)策略文件,該一個(gè)或更多個(gè)策略文件定義用于使進(jìn)程與設(shè)備的內(nèi)核交互的策略;以及監(jiān)視器,該監(jiān)視器被配置成監(jiān)視進(jìn)程與內(nèi)核的交互以使所定義的策略與進(jìn)程相鏈接或相關(guān)聯(lián),并且被配置成讀取在與進(jìn)程相鏈接或相關(guān)聯(lián)的一個(gè)或更多個(gè)策略文件中定義的代碼。在一些配置中,中間件層能夠操作成使進(jìn)程從現(xiàn)有進(jìn)程或母進(jìn)程分裂或分叉,并且能夠操作成使該進(jìn)程使用應(yīng)用特定代碼來專用為運(yùn)行該應(yīng)用。監(jiān)視代碼還能夠操作成執(zhí)行在與進(jìn)程相鏈接或相關(guān)聯(lián)的一個(gè)或更多個(gè)策略文件中定義的策略。操作系統(tǒng)可以是Linux或基于Linux。在一些配置中,監(jiān)視器可以被配置成通過下述操作使所定義的策略與進(jìn)程相鏈接或相關(guān)聯(lián):當(dāng)進(jìn)程專用為其預(yù)期的應(yīng)用時(shí)監(jiān)視該進(jìn)程的專用化;從專用化進(jìn)程中提取應(yīng)用識(shí)別數(shù)據(jù),專用化進(jìn)程表示該進(jìn)程正專用為應(yīng)用;以及基于所提取的應(yīng)用識(shí)別數(shù)據(jù)使一個(gè)或更多個(gè)策略文件與進(jìn)程相鏈接。在一些配置中,監(jiān)視器可以被配置成通過下述操作使所定義的策略與進(jìn)程相鏈接或相關(guān)聯(lián):檢測(cè)進(jìn)程的啟動(dòng);在檢測(cè)到進(jìn)程的啟動(dòng)之后,監(jiān)視預(yù)定義事件或預(yù)定義識(shí)別閾值;以及在檢測(cè)到預(yù)定義事件或達(dá)到預(yù)定義識(shí)別閾值時(shí)使一個(gè)或更多個(gè)策略文件與進(jìn)程相鏈接。在一些配置中,監(jiān)視器還可以被配置成執(zhí)行在與進(jìn)程相鏈接或相關(guān)聯(lián)的一個(gè)或更多個(gè)策略文件中定義的一個(gè)或更多個(gè)策略。監(jiān)視代碼可以被配置成通過監(jiān)視共享的或動(dòng)態(tài)的庫(kù)符號(hào)調(diào)用和/或系統(tǒng)呼叫來監(jiān)視進(jìn)程與內(nèi)核的交互,并且一個(gè)或更多個(gè)策略文件可以定義響應(yīng)于給定的符號(hào)調(diào)用或系統(tǒng)呼叫的動(dòng)作,其中該給定的符號(hào)調(diào)用或系統(tǒng)呼叫由與一個(gè)或更多個(gè)策略文件相鏈接的進(jìn)程來進(jìn)行。該動(dòng)作可以包括下述動(dòng)作中的任何一種或更多種動(dòng)作:阻止符號(hào)調(diào)用或系統(tǒng)呼叫、將符號(hào)調(diào)用重定向至可替換的庫(kù)地址、將符號(hào)調(diào)用或系統(tǒng)呼叫記入日志、終止進(jìn)程和暫停符號(hào)調(diào)用或系統(tǒng)呼叫以允許通過操作員(opertor)對(duì)符號(hào)調(diào)用或系統(tǒng)呼叫進(jìn)行授權(quán)。在一些實(shí)施例中,監(jiān)視器可以被配置成通過下述操作使所定義的策略與進(jìn)程相鏈接或相關(guān)聯(lián):監(jiān)視對(duì)被該進(jìn)程用于專用為其預(yù)期的應(yīng)用的代碼進(jìn)行的加載和/或識(shí)別,并且基于所加載或識(shí)別的代碼來使一個(gè)或更多個(gè)策略文件與該進(jìn)程相鏈接。監(jiān)視代碼能夠在被執(zhí)行時(shí)操作成:在進(jìn)程已開始之后,使所定義的策略與進(jìn)程相鏈接或相關(guān)聯(lián)。監(jiān)視代碼能夠在被執(zhí)行時(shí)操作成:根據(jù)用于使進(jìn)程專用于給定的應(yīng)用或應(yīng)用類型的數(shù)據(jù)或代碼,使所定義的策略與進(jìn)程相鏈接或相關(guān)聯(lián)。監(jiān)視代碼能夠在被執(zhí)行時(shí)操作成:運(yùn)行進(jìn)程內(nèi)的庫(kù)函數(shù)以讀取由與進(jìn)程相鏈接的一個(gè)或更多個(gè)策略定義所定義的代碼。該代碼能夠在被執(zhí)行時(shí)操作成:根據(jù)與進(jìn)程相鏈接的一個(gè)或更多個(gè)策略定義,使能夠操作成監(jiān)視給定應(yīng)用的監(jiān)視進(jìn)程開始。監(jiān)視代碼能夠在被執(zhí)行時(shí)操作成:組合運(yùn)行或者在進(jìn)程內(nèi)的庫(kù)函數(shù)之間進(jìn)行切換,并且使能夠操作成監(jiān)視該進(jìn)程的監(jiān)視進(jìn)程開始。在一些實(shí)施例中,監(jiān)視代碼將根據(jù)正使用給定進(jìn)程來運(yùn)行的應(yīng)用而使一個(gè)或更多個(gè)策略定義與給定進(jìn)程相鏈接,使得為應(yīng)用或應(yīng)用類型特定的策略被應(yīng)用于該進(jìn)程。在一些配置中,監(jiān)視器可以包括:監(jiān)視實(shí)體,該監(jiān)視實(shí)體直接地或間接地監(jiān)視由母進(jìn)程調(diào)用的系統(tǒng)呼叫,以檢測(cè)對(duì)將與新應(yīng)用相對(duì)應(yīng)的新進(jìn)程的創(chuàng)建,以及其中,該監(jiān)視器被配置成:一旦母進(jìn)程創(chuàng)建新啟動(dòng)進(jìn)程,則創(chuàng)建新監(jiān)視實(shí)體來監(jiān)視該新啟動(dòng)進(jìn)程,該新監(jiān)視實(shí)體被配置成直接地或間接地檢測(cè)由新進(jìn)程進(jìn)行的系統(tǒng)呼叫調(diào)用,并且該新監(jiān)視實(shí)體被配置成基于所檢測(cè)到的系統(tǒng)呼叫調(diào)用的參數(shù)來執(zhí)行與新進(jìn)程相鏈接或相關(guān)聯(lián)的策略。在一種形式下,監(jiān)視實(shí)體可以通過攔截至內(nèi)核的系統(tǒng)呼叫調(diào)用來直接地監(jiān)視或檢測(cè)系統(tǒng)呼叫調(diào)用。在另一種形式下,監(jiān)視實(shí)體可以通過攔截共享的或動(dòng)態(tài)的庫(kù)符號(hào)調(diào)用來間接地監(jiān)視或檢測(cè)系統(tǒng)呼叫調(diào)用,該共享的或動(dòng)態(tài)的庫(kù)符號(hào)調(diào)用意圖對(duì)至內(nèi)核的一個(gè)或更多個(gè)系統(tǒng)呼叫進(jìn)行調(diào)用。在一種形式下,監(jiān)視器是存儲(chǔ)在設(shè)備上的代碼,并且能夠在代碼被設(shè)備執(zhí)行時(shí)進(jìn)行操作。在另一種形式下,監(jiān)視器是設(shè)備的硬件組件。在第十六方面,一些實(shí)施例包括使設(shè)備上的操作系統(tǒng)虛擬化以提供能夠在該設(shè)備上操作的多個(gè)隔離的用戶空間實(shí)例的方法,該操作系統(tǒng)包括基于Linux的內(nèi)核并且包括系統(tǒng)架構(gòu),該系統(tǒng)架構(gòu)由與內(nèi)核相關(guān)聯(lián)的Linux層和包括應(yīng)用的更高應(yīng)用層來定義,該方法包括:攔截由進(jìn)程進(jìn)行的系統(tǒng)呼叫和/或庫(kù)函數(shù)呼叫,每個(gè)進(jìn)程對(duì)應(yīng)于應(yīng)用層中的應(yīng)用;以及至少基于用戶空間控制參數(shù)和與進(jìn)程相關(guān)聯(lián)的安全策略,針對(duì)所攔截的系統(tǒng)呼叫和/或庫(kù)函數(shù)呼叫來發(fā)起安全動(dòng)作,該用戶空間控制參數(shù)指示當(dāng)前在該設(shè)備上操作的特定用戶空間實(shí)例。在一個(gè)實(shí)施例中,系統(tǒng)架構(gòu)還由在Linux層與更高應(yīng)用層之間的中間件層來定義。在一些實(shí)施例中,用戶空間控制參數(shù)是識(shí)別或表示從多個(gè)用戶空間實(shí)例中選擇的當(dāng)前操作的用戶空間實(shí)例的數(shù)據(jù)。在一個(gè)這種實(shí)施例中,用戶空間實(shí)例可以對(duì)應(yīng)于操作域,比如工作域或私人域。安全策略可以是為應(yīng)用特定的或者可以是與所有應(yīng)用或應(yīng)用集合相關(guān)的全局策略。在一些實(shí)施例中,每個(gè)安全策略是為用戶空間特定的,使得該安全策略僅應(yīng)用于在具體用戶空間實(shí)例中運(yùn)行的應(yīng)用或應(yīng)用集合。在一些實(shí)施例中,該方法包括:提供策略數(shù)據(jù)庫(kù),該策略數(shù)據(jù)庫(kù)包括多個(gè)安全策略集合,每個(gè)安全策略集合對(duì)應(yīng)于用戶空間實(shí)例中的至少一個(gè)用戶空間實(shí)例。在一些實(shí)施例中,每個(gè)用戶空間實(shí)例可以包括不同的安全策略集合,該不同的安全策略集合應(yīng)用于在應(yīng)用的用戶空間實(shí)例在設(shè)備上的操作期間運(yùn)行的應(yīng)用。在實(shí)施例中,該方法還可以包括:至少基于用戶空間控制參數(shù)從策略數(shù)據(jù)庫(kù)中選擇安全策略或者使該安全策略與進(jìn)程相鏈接。在另一實(shí)施例中,該方法還包括:基于用戶空間控制參數(shù)和應(yīng)用識(shí)別數(shù)據(jù)從策略數(shù)據(jù)庫(kù)中選擇安全策略或者使該安全策略與進(jìn)程相鏈接,該應(yīng)用識(shí)別數(shù)據(jù)指示應(yīng)用對(duì)應(yīng)于調(diào)用系統(tǒng)呼叫的進(jìn)程。在一種形式下,攔截系統(tǒng)呼叫調(diào)用包括:直接地?cái)r截至內(nèi)核的系統(tǒng)呼叫調(diào)用。在另一種形式下,攔截函數(shù)呼叫包括:攔截意圖對(duì)至內(nèi)核的一個(gè)或更多個(gè)系統(tǒng)呼叫進(jìn)行調(diào)用的共享的或動(dòng)態(tài)的庫(kù)符號(hào)調(diào)用在實(shí)施例中,直接地或間接地?cái)r截系統(tǒng)呼叫調(diào)用包括:實(shí)現(xiàn)SCI機(jī)制和/或FCI機(jī)制。安全動(dòng)作可以包括下述動(dòng)作中的任何一種或更多種動(dòng)作:允許系統(tǒng)呼叫進(jìn)行、阻止系統(tǒng)呼叫進(jìn)行、修改系統(tǒng)呼叫在執(zhí)行之前的參數(shù)或由系統(tǒng)呼叫在執(zhí)行之后生成的返回值、或者終止進(jìn)程。在第十七方面,一些實(shí)施例包括用于使在設(shè)備上運(yùn)行的操作系統(tǒng)虛擬化以提供能夠在該設(shè)備上操作的多個(gè)隔離的用戶空間實(shí)例的虛擬化系統(tǒng),該操作系統(tǒng)包括基于Linux的內(nèi)核并且包括系統(tǒng)架構(gòu),該系統(tǒng)架構(gòu)由與內(nèi)核相關(guān)聯(lián)的Linux層和包括應(yīng)用的更高應(yīng)用層來定義,該虛擬化系統(tǒng)包括:與Linux層中每個(gè)啟動(dòng)進(jìn)程相關(guān)聯(lián)的監(jiān)視實(shí)體,每個(gè)啟動(dòng)進(jìn)程對(duì)應(yīng)于應(yīng)用層中的應(yīng)用;與每個(gè)進(jìn)程相關(guān)聯(lián)的攔截器,該攔截器被配置成攔截系統(tǒng)呼叫和/或庫(kù)函數(shù)呼叫,并且被配置成將系統(tǒng)呼叫和/或庫(kù)函數(shù)呼叫重定向至與發(fā)起系統(tǒng)呼叫和/或庫(kù)函數(shù)呼叫的進(jìn)程相關(guān)聯(lián)的監(jiān)視實(shí)體,以及其中,監(jiān)視實(shí)體被配置成分析所攔截的由該監(jiān)視實(shí)體的相關(guān)聯(lián)的進(jìn)程進(jìn)行的系統(tǒng)呼叫和/或庫(kù)函數(shù)呼叫,并且被配置成至少基于用戶空間控制參數(shù)和與該進(jìn)程相關(guān)聯(lián)的安全策略來執(zhí)行安全動(dòng)作,該用戶空間控制參數(shù)指示當(dāng)前在設(shè)備上操作的特定用戶空間實(shí)例。在一個(gè)實(shí)施例中,系統(tǒng)架構(gòu)還由在Linux層與更高應(yīng)用層之間的中間件層來定義。如上所述的第十六方面和第十七方面可以包括相對(duì)于前述方面的實(shí)施例所提到的特征中的任何一種或更多種特征。一些實(shí)施例的功能可以由所接收的功能代碼(比如,網(wǎng)頁(yè)代碼、網(wǎng)頁(yè)應(yīng)用代碼或其他的應(yīng)用代碼)來定義,所接收的功能代碼將在經(jīng)由內(nèi)核訪問設(shè)備資源的進(jìn)程的層處被監(jiān)視,該進(jìn)程執(zhí)行所接收的代碼的功能。一些實(shí)施例使用用于使進(jìn)程專用化以將針對(duì)功能代碼的策略與執(zhí)行以該代碼定義的功能的進(jìn)程相關(guān)聯(lián)的數(shù)據(jù)或代碼,使得可以針對(duì)進(jìn)程執(zhí)行對(duì)所接收的代碼的監(jiān)視。在第十八方面,一些實(shí)施例包括一種設(shè)備,該設(shè)備包括一個(gè)或更多個(gè)資源,該一個(gè)或更多個(gè)資源包括處理器并且用由該設(shè)備接收的功能代碼定義的可配置功能,該設(shè)備還包括操作系統(tǒng),該操作系統(tǒng)包括用戶層和內(nèi)核,該用戶層能夠操作成運(yùn)行進(jìn)程,并且該內(nèi)核能夠操作成給該進(jìn)程提供使用該設(shè)備的一個(gè)或更多個(gè)資源的接口,其中,該設(shè)備存儲(chǔ)啟動(dòng)器代碼,該啟動(dòng)器代碼能夠操作成將所接收的功能代碼作為新進(jìn)程啟動(dòng)并且能夠操作成使新進(jìn)程根據(jù)該功能代碼進(jìn)行專用化,由此,使該新進(jìn)程,經(jīng)由由內(nèi)核提供的接口,使用設(shè)備的資源,執(zhí)行通過該功能代碼針對(duì)設(shè)備定義的功能,其中,所述設(shè)備還存儲(chǔ)策略代碼,該策略代碼定義用于所接收的每個(gè)功能代碼或每個(gè)功能代碼類型的策略,并且其中,設(shè)備包括監(jiān)視代碼,該監(jiān)視代碼能夠操作成使策略代碼的實(shí)例與進(jìn)程相關(guān)聯(lián)并且能夠操作成根據(jù)所關(guān)聯(lián)的策略代碼來監(jiān)視進(jìn)程。在一個(gè)實(shí)施例中,該啟動(dòng)器代碼能夠操作成通過下述操作來將所接收的功能代碼作為新進(jìn)程啟動(dòng):使該新進(jìn)程從另一進(jìn)程分裂或分叉,并且使該新進(jìn)程呼叫功能代碼以通過該功能代碼來專用為功能。在一個(gè)實(shí)施例中,根據(jù)對(duì)功能代碼或該功能代碼符合的類型的識(shí)別來關(guān)聯(lián)策略代碼,由此,能夠使用為所分裂出的進(jìn)程已專用于的功能代碼或代碼類型特定的策略來監(jiān)視執(zhí)行給定的功能的進(jìn)程。在一個(gè)實(shí)施例中,功能代碼可以定義一個(gè)或更多個(gè)應(yīng)用,并且啟動(dòng)器代碼定義中間件層,該中間件層能夠操作成啟動(dòng)該一個(gè)或更多個(gè)應(yīng)用,其中,使用在操作系統(tǒng)的用戶層中的一個(gè)或更多個(gè)進(jìn)程來運(yùn)行由中間件層啟動(dòng)的應(yīng)用,所述一個(gè)或更多個(gè)進(jìn)程通過內(nèi)核與在用戶層中運(yùn)行的其他進(jìn)程進(jìn)行交互,所述交互響應(yīng)于由進(jìn)程進(jìn)行的至內(nèi)核的呼叫,策略代碼定義一個(gè)或更多個(gè)策略文件,該一個(gè)或更多個(gè)策略文件定義用于進(jìn)程與設(shè)備的內(nèi)核進(jìn)行交互的策略,并且其中,監(jiān)視代碼被配置成通過監(jiān)視每個(gè)進(jìn)程與內(nèi)核進(jìn)行的使所定義的策略鏈接至或相關(guān)聯(lián)于該進(jìn)程的交互來使策略代碼與該進(jìn)程相關(guān)聯(lián),并且監(jiān)視代碼還被配置成讀取在與進(jìn)程相鏈接或相關(guān)聯(lián)的一個(gè)或更多個(gè)策略文件中定義的代碼。在一個(gè)配置中,中間件層能夠操作成使進(jìn)程從現(xiàn)有進(jìn)程或母進(jìn)程分裂或分叉,并且能夠操作成使進(jìn)程使用為應(yīng)用特定的功能代碼來專用于運(yùn)行該應(yīng)用。在一個(gè)配置中,監(jiān)視代碼可以被配置成通過下述操作使所定義的策略與進(jìn)程相鏈接或相關(guān)聯(lián):監(jiān)視對(duì)被該進(jìn)程用于專用為其預(yù)期的應(yīng)用的功能代碼的加載和/或識(shí)別,并且基于所加載或識(shí)別的功能代碼或?qū)δ艽a的呼叫來將一個(gè)或更多個(gè)策略文件與該進(jìn)程相鏈接。在一種形式下,監(jiān)視代碼可以被配置成:在進(jìn)程已開始之后,使所定義的策略與進(jìn)程相鏈接或相關(guān)聯(lián)。在另一種形式下,監(jiān)視代碼可以被配置成:根據(jù)用來使進(jìn)程專用為給定的應(yīng)用或應(yīng)用類型的數(shù)據(jù)或代碼,使所定義的策略與進(jìn)程相鏈接或相關(guān)聯(lián)。在一個(gè)配置中,監(jiān)視代碼可以被配置成通過下述操作來使所定義的策略與進(jìn)程相鏈接或相關(guān)聯(lián):當(dāng)進(jìn)程專用為其預(yù)期的應(yīng)用時(shí)監(jiān)視該進(jìn)程的專用化;從表示進(jìn)程正專用為應(yīng)用的專用化進(jìn)程中提取應(yīng)用識(shí)別數(shù)據(jù);以及基于所提取的應(yīng)用識(shí)別數(shù)據(jù)使一個(gè)或更多個(gè)策略文件與進(jìn)程相鏈接。在一個(gè)配置中,監(jiān)視代碼可以被配置成通過下述操作使所定義的策略與進(jìn)程相鏈接或相關(guān)聯(lián):檢測(cè)進(jìn)程的啟動(dòng);在檢測(cè)到進(jìn)程的啟動(dòng)之后,監(jiān)視預(yù)定義事件或預(yù)定義識(shí)別閾值;以及在檢測(cè)到預(yù)定義事件或達(dá)到預(yù)定義識(shí)別閾值時(shí)使一個(gè)或更多個(gè)策略文件與進(jìn)程相鏈接。在一個(gè)配置中,監(jiān)視代碼還可以被配置成執(zhí)行在與進(jìn)程相鏈接或相關(guān)聯(lián)的一個(gè)或更多個(gè)策略文件中定義的一個(gè)或更多個(gè)策略。在一個(gè)配置中,監(jiān)視代碼可以被配置成通過監(jiān)視共享的或動(dòng)態(tài)的庫(kù)符號(hào)調(diào)用和/或系統(tǒng)呼叫來監(jiān)視進(jìn)程與內(nèi)核的交互,并且一個(gè)或更多個(gè)策略文件定義響應(yīng)于給定的符號(hào)調(diào)用或系統(tǒng)呼叫的動(dòng)作,其中該給定的符號(hào)調(diào)用或系統(tǒng)呼叫由與一個(gè)或更多個(gè)策略文件相鏈接的進(jìn)程來進(jìn)行。在一種形式下,該動(dòng)作可以包括下述動(dòng)作中的任何一種或更多種動(dòng)作:阻止符號(hào)調(diào)用或系統(tǒng)呼叫、將符號(hào)調(diào)用重定向至可替換的庫(kù)地址、將符號(hào)調(diào)用或系統(tǒng)呼叫記入日志、終止進(jìn)程和/或暫停符號(hào)調(diào)用或系統(tǒng)呼叫以允許通過操作員對(duì)符號(hào)調(diào)用或系統(tǒng)呼叫進(jìn)行授權(quán)。在一個(gè)配置中,監(jiān)視代碼可以被配置成:攔截由進(jìn)程進(jìn)行的共享的或動(dòng)態(tài)的庫(kù)符號(hào)調(diào)用和/或系統(tǒng)呼叫,并且至少基于用戶空間控制參數(shù)和與進(jìn)程相關(guān)聯(lián)的一個(gè)或更多個(gè)策略文件執(zhí)行動(dòng)作,從而使操作系統(tǒng)虛擬化以提供能夠在設(shè)備上操作的多個(gè)隔離的用戶空間實(shí)例,該用戶空間控制參數(shù)指示當(dāng)前在設(shè)備上操作的特定用戶空間實(shí)例。在一個(gè)配置中,監(jiān)視代碼可以包括:監(jiān)視實(shí)體,該監(jiān)視實(shí)體直接地或間接地監(jiān)視由母進(jìn)程調(diào)用的系統(tǒng)呼叫,以檢測(cè)對(duì)將與新應(yīng)用相對(duì)應(yīng)的新進(jìn)程的創(chuàng)建,以及其中,該監(jiān)視代碼被配置成:一旦母進(jìn)程創(chuàng)建新啟動(dòng)進(jìn)程就創(chuàng)建新監(jiān)視實(shí)體以監(jiān)視該新啟動(dòng)進(jìn)程,該新監(jiān)視實(shí)體被配置成直接地或間接地檢測(cè)由新進(jìn)程進(jìn)行的系統(tǒng)呼叫調(diào)用,并且該新監(jiān)視實(shí)體被配置成基于所檢測(cè)到的系統(tǒng)呼叫調(diào)用的參數(shù)來執(zhí)行與新進(jìn)程相鏈接或相關(guān)聯(lián)的策略。在一種形式下,監(jiān)視實(shí)體通過攔截至內(nèi)核的系統(tǒng)呼叫調(diào)用來直接地監(jiān)視或檢測(cè)該系統(tǒng)呼叫調(diào)用。在另一種形式下,監(jiān)視實(shí)體通過攔截共享的或動(dòng)態(tài)的庫(kù)符號(hào)調(diào)用來間接地監(jiān)視或檢測(cè)系統(tǒng)呼叫調(diào)用,該共享的或動(dòng)態(tài)的庫(kù)符號(hào)調(diào)用意圖對(duì)至內(nèi)核的一個(gè)或更多個(gè)系統(tǒng)呼叫進(jìn)行調(diào)用。在一個(gè)配置中,功能代碼可以定義瀏覽器的渲染器,該渲染器被配置成渲染下載的網(wǎng)頁(yè)。在一個(gè)配置中,設(shè)備可以包括定義下述動(dòng)作的策略代碼:該動(dòng)作用于通過執(zhí)行與策略代碼相關(guān)聯(lián)的功能代碼在訪問之前或之后來操縱存儲(chǔ)在設(shè)備上的數(shù)字資產(chǎn)。監(jiān)視代碼能夠操作成根據(jù)策略采取安全動(dòng)作。安全動(dòng)作可以包括:將由進(jìn)程進(jìn)行的呼叫記入日志以及使該日志條目與關(guān)聯(lián)于進(jìn)程的功能代碼或功能代碼類型相關(guān)聯(lián)。啟動(dòng)器代碼可以定義中間件層,比如Android。啟動(dòng)器代碼可以定義瀏覽器,比如Chrome或ChromeOS。監(jiān)視代碼能夠操作成:根據(jù)用于對(duì)要被用于使進(jìn)程專用化的功能代碼進(jìn)行識(shí)別的代碼或數(shù)據(jù),使功能代碼或功能代碼類型與進(jìn)程相關(guān)聯(lián)。在一些實(shí)施例中,監(jiān)視代碼可以包括和/或指共同執(zhí)行一個(gè)或更多個(gè)功能的代碼或多個(gè)代碼實(shí)例,該一個(gè)或更多個(gè)功能比如但不限于:使策略與進(jìn)程相關(guān)聯(lián)、監(jiān)視新進(jìn)程的啟動(dòng)、根據(jù)相關(guān)聯(lián)的策略來監(jiān)視進(jìn)程、以進(jìn)程內(nèi)所嵌入的監(jiān)視實(shí)體或者與進(jìn)程相附接的獨(dú)立監(jiān)視實(shí)體的形式進(jìn)行實(shí)現(xiàn)和/或其他的監(jiān)視功能,比如啟動(dòng)并且配置監(jiān)視實(shí)體。在第十九方面,一些實(shí)施例包括使在系統(tǒng)上執(zhí)行的應(yīng)用的操作安全的方法,該系統(tǒng)包括linux層和中間件層,該中間件層能夠操作成通過下述操作來啟動(dòng)應(yīng)用:使linux層中的進(jìn)程從其他的進(jìn)程或者從母進(jìn)程分裂,并且使linux層中的進(jìn)程使用為該應(yīng)用特定的代碼進(jìn)行專用化,該方法包括:監(jiān)視母進(jìn)程或現(xiàn)有進(jìn)程以檢測(cè)分裂進(jìn)程;監(jiān)視分裂進(jìn)程執(zhí)行以便于識(shí)別哪個(gè)進(jìn)程進(jìn)行了專用化;以及監(jiān)視由經(jīng)專用化的進(jìn)程進(jìn)行的函數(shù)呼叫以確定相對(duì)于該函數(shù)呼叫執(zhí)行的安全動(dòng)作。在一些配置中,安全動(dòng)作可以包括下述動(dòng)作中的任何動(dòng)作:拒絕執(zhí)行所呼叫的函數(shù),并且將進(jìn)程重定向至可以在獨(dú)立庫(kù)中提供的不同于原始函數(shù)的另一函數(shù);拒絕該函數(shù),將進(jìn)程重定向至另一函數(shù)(其可以包含在獨(dú)立庫(kù)中),該另一函數(shù)執(zhí)行安全檢查,凈化參數(shù),并且然后呼叫原始函數(shù);或者執(zhí)行安全檢查,并且對(duì)由原始函數(shù)返回的參數(shù)執(zhí)行凈化。在第二十方面,一些實(shí)施例包括計(jì)算機(jī)可讀介質(zhì),該計(jì)算機(jī)可讀介質(zhì)上存儲(chǔ)有計(jì)算機(jī)可讀指令,該計(jì)算機(jī)可讀指令在處理設(shè)備上被執(zhí)行時(shí)使該處理設(shè)備執(zhí)行在前述方面的實(shí)施例中限定的方法中的任何一種或更多種方法。在第二十一方面,一些實(shí)施例包括具有處理器的系統(tǒng)或設(shè)備,該處理器被配置成或被編程為實(shí)現(xiàn)或執(zhí)行在前述方面的實(shí)施例中限定的方法中的任何一種或更多種方法。定義如在本說明書和權(quán)利要求中使用的短語(yǔ)“專用化處理”或術(shù)語(yǔ)“專用化”,除非上下文另有說明,否則意思是指下述處理:通過該處理,例如在基于Linux的操作系統(tǒng)的Linux層中的新創(chuàng)建進(jìn)程識(shí)別應(yīng)用層中的與該新創(chuàng)建進(jìn)程相關(guān)的對(duì)應(yīng)應(yīng)用,并且然后該新創(chuàng)建進(jìn)程檢索并且加載用于該應(yīng)用的應(yīng)用特用代碼以用于執(zhí)行,或者意指其他的基于Unix或Linux的操作系統(tǒng)—包括Android、iOS、Chromium和ChromiumOS—中的類似這種進(jìn)程。如在本說明書和權(quán)利要求中使用的術(shù)語(yǔ)“相附接”或“附接”,除非上下文另有說明,否則意思是指創(chuàng)建Linux層中的兩個(gè)進(jìn)程之間的關(guān)系,由此,一個(gè)進(jìn)程被配置成監(jiān)視并且控制在父-子或主機(jī)-目標(biāo)關(guān)系中的另一個(gè)進(jìn)程,并且通過示例,該一個(gè)進(jìn)程包括通過進(jìn)程跟蹤系統(tǒng)呼叫例如ptrace或者任何其他的機(jī)制的附接,該其他機(jī)制在進(jìn)程之間創(chuàng)建使一個(gè)進(jìn)程能夠控制另一個(gè)進(jìn)程的一個(gè)或更多個(gè)方面或功能的鏈接或附接。如在本說明書和權(quán)利要求中使用的術(shù)語(yǔ)“Linux”,除非上下文另有說明,否則意思是指使用Linux、Unix或類似Unix的內(nèi)核的任何基于Linux的操作系統(tǒng)。如在本說明書和權(quán)利要求中使用的短語(yǔ)“Linux層”,除非上下文另有說明,否則意思是指操作系統(tǒng)架構(gòu)中的用于描述在用戶模式下進(jìn)程的操作的層(用戶層)和用于描述在內(nèi)核模式下該進(jìn)程與內(nèi)核的交互的層(內(nèi)核層)。如本說明書和權(quán)利要求中使用的短語(yǔ)“中間件層”,除非上下文另有說明,否則意思是指操作系統(tǒng)架構(gòu)中的用于描述在Linux層與應(yīng)用層中應(yīng)用軟件之間操作的軟件的層。如本說明書和權(quán)利要求中使用的短語(yǔ)“應(yīng)用層”,除非上下文另有說明,否則意思是指操作系統(tǒng)架構(gòu)中的用于描述用戶應(yīng)用軟件和服務(wù)的操作的層。如本說明書和權(quán)利要求中使用的短語(yǔ)“母進(jìn)程”,除非上下文另有說明,否則通常意思是指在操作系統(tǒng)啟動(dòng)之后運(yùn)行的進(jìn)程,該進(jìn)程經(jīng)由與內(nèi)核的交互來控制Linux層處的所有新子進(jìn)程的啟動(dòng)或發(fā)起,并且例如在Android的環(huán)境中,該進(jìn)程等同于Zygote進(jìn)程,該Zygote進(jìn)程通過分叉出自身的新復(fù)制品或圖像來發(fā)起新進(jìn)程,并且例如在Chromium或ChromiumOS的環(huán)境中,該進(jìn)程等同于在瀏覽器上運(yùn)行的主進(jìn)程,該主進(jìn)程通過分叉或分裂出自身的復(fù)制品或圖像來發(fā)起新進(jìn)程,并且該進(jìn)程還可以稱為“父進(jìn)程”。如本說明書和權(quán)利要求中使用的術(shù)語(yǔ)“分叉”、“分叉出”、“被分叉”,除非上下文另有說明,否則意思是指新進(jìn)程的創(chuàng)建或分裂,并且其中,通常在基于Linux的OS中,新進(jìn)程通過母進(jìn)程來創(chuàng)建或分裂出并且作為母進(jìn)程的復(fù)制品或圖像開始,然而該術(shù)語(yǔ)意思是指通過其來發(fā)起或創(chuàng)建新進(jìn)程的任何其他的機(jī)制。如本說明書和權(quán)利要求中使用的術(shù)語(yǔ)“監(jiān)視”,在主機(jī)-目標(biāo)進(jìn)程關(guān)系的環(huán)境中意思是指主機(jī)攔截、控制、修改和/或跟蹤由目標(biāo)進(jìn)程向內(nèi)核進(jìn)行的系統(tǒng)呼叫,并且該術(shù)語(yǔ)“監(jiān)視”還可以包括或者技術(shù)上稱為“插入”和/或“交叉(interleave)”。如本說明書和權(quán)利要求中使用的短語(yǔ)“系統(tǒng)呼叫插入(SCI)”和“SCI機(jī)制”或“SCI配置”,除非上下文另有說明,否則意思是指通過下述操作攔截由進(jìn)程發(fā)起的系統(tǒng)呼叫的方法:直接地檢測(cè)或攔截在Linux層的內(nèi)核模式下進(jìn)行或調(diào)用的系統(tǒng)呼叫,該系統(tǒng)呼叫通過示例包括但不限于共享對(duì)象庫(kù)與內(nèi)核中系統(tǒng)呼叫網(wǎng)關(guān)之間的交互、或者根據(jù)本機(jī)代碼而不使用共享對(duì)象庫(kù)向內(nèi)核中系統(tǒng)呼叫網(wǎng)關(guān)進(jìn)行的直接系統(tǒng)呼叫,并且其中,SCI機(jī)制可以通過使用例如ptrace或任何其他適合的攔截機(jī)制或系統(tǒng)來實(shí)現(xiàn)。如本說明書和權(quán)利要求中使用的短語(yǔ)“系統(tǒng)呼叫網(wǎng)關(guān)”,除非上下文另有說明,否則意思是指將執(zhí)行系統(tǒng)呼叫或執(zhí)行了系統(tǒng)呼叫的進(jìn)入點(diǎn)或內(nèi)核中進(jìn)入點(diǎn)。如本說明書和權(quán)利要求中使用的短語(yǔ)“函數(shù)呼叫插入(FCI)”或“FCI機(jī)制”或“FCI配置”,除非上下文另有說明,否則意思是指檢測(cè)或攔截由進(jìn)程發(fā)起的共享的或動(dòng)態(tài)的庫(kù)符號(hào)調(diào)用的方法,并且其中,符號(hào)調(diào)用表示在Linux層的用戶模式下從進(jìn)程向共享對(duì)象庫(kù)的函數(shù)調(diào)用或函數(shù)呼叫,并且其中,這組監(jiān)視的符號(hào)調(diào)用是可能意圖在Linux層的內(nèi)核模式下調(diào)用一個(gè)或更多個(gè)系統(tǒng)呼叫的符號(hào)調(diào)用。如本說明書和權(quán)利要求中使用的短語(yǔ)“函數(shù)呼叫”、“符號(hào)調(diào)用”、“共享的或動(dòng)態(tài)的庫(kù)符號(hào)調(diào)用”、或“共享對(duì)象庫(kù)函數(shù)呼叫”,除非上下文另有說明,否則意思是指由進(jìn)程向共享的或動(dòng)態(tài)的庫(kù)進(jìn)行的函數(shù)調(diào)用,該函數(shù)調(diào)用可能意圖在內(nèi)核模式下調(diào)用一個(gè)或更多個(gè)系統(tǒng)呼叫。如本說明書和權(quán)利要求中使用的術(shù)語(yǔ)“符號(hào)”,除非上下文另有說明,否則意思是指共享的或動(dòng)態(tài)的庫(kù)的表中的條目,該條目對(duì)應(yīng)于或表示函數(shù)。如本說明書和權(quán)利要求中使用的短語(yǔ)“策略數(shù)據(jù)庫(kù)”,除非上下文另有說明,否則意思是指本地存儲(chǔ)在設(shè)備上或能夠遠(yuǎn)程訪問的任何電子源或源的組合,該任何電子源或源的組合包含表示為設(shè)備上運(yùn)行的應(yīng)用而配置或定義的一個(gè)或更多個(gè)安全策略的數(shù)據(jù),并且該“策略數(shù)據(jù)庫(kù)”可以形式為或包括:包括定義一個(gè)或更多個(gè)安全策略的數(shù)據(jù)的策略配置文件、各自包括定義一個(gè)或更多個(gè)安全策略的數(shù)據(jù)的一組策略配置文件、或者可訪問電子安全策略的任何電子源或形式。如本文中所使用的術(shù)語(yǔ)“和/或”意思是指“和”、“或”或者這二者。如本文中使用的伴隨名詞的“(多個(gè))”意思是指該名詞的復(fù)數(shù)形式和/或單數(shù)形式。在前文,各種實(shí)施例包括并且還想到了下面僅給出了其示例的構(gòu)造。在以下描述中,給出具體細(xì)節(jié)以提供對(duì)實(shí)施例的透徹理解。然而,本領(lǐng)域內(nèi)普通技術(shù)人員將理解的是,即使沒有這些具體細(xì)節(jié)仍可以實(shí)踐實(shí)施例。例如,為了不使實(shí)施例在不必要的細(xì)節(jié)中變得難以理解,在框圖中可以示出軟件模塊、函數(shù)、電路等。換句話說,為了不使實(shí)施例難以理解可以不詳細(xì)示出公知的模塊、結(jié)構(gòu)和技術(shù)。而且,注意的是,實(shí)施例可以被描述為進(jìn)程,該進(jìn)程被描繪為流程圖、流圖、結(jié)構(gòu)圖或框圖。雖然流程圖可能將操作描述為順序進(jìn)程,然而操作中的許多操作可以并行或同時(shí)來執(zhí)行。另外,可以重排操作的順序。進(jìn)程在其操作完成時(shí)被終止。進(jìn)程可以對(duì)應(yīng)于計(jì)算機(jī)程序中的方法、函數(shù)、過程、子例程、子程序等。當(dāng)進(jìn)程對(duì)應(yīng)于函數(shù)時(shí),函數(shù)的終結(jié)對(duì)應(yīng)于函數(shù)返回至呼叫函數(shù)或主函數(shù)。以下描述的系統(tǒng)和方法的各個(gè)方面能夠在運(yùn)行操作系統(tǒng)(OS)的任何類型的設(shè)備上操作,通過示例,該OS例如但不限于AndroidOS、iOS、Chromium、ChromiumOS、或任何其他的基于Linux的OS,并且通過示例,設(shè)備可以是但不限于臺(tái)式設(shè)備、膝上型設(shè)備、筆記本設(shè)備、平板設(shè)備或移動(dòng)設(shè)備。短語(yǔ)“移動(dòng)設(shè)備”包括但不限于無線設(shè)備、移動(dòng)電話、智能電話、移動(dòng)通信設(shè)備、用戶通信設(shè)備、個(gè)人數(shù)字助理、手持移動(dòng)計(jì)算機(jī)、膝上型計(jì)算機(jī)、能夠閱讀電子內(nèi)容的電子書閱讀器和閱讀設(shè)備和/或通常被個(gè)人攜帶和/或具有某種形式的通信能力(例如,無線、紅外、短程無線電等)的其他類型的移動(dòng)設(shè)備。附圖說明將僅通過示例并且參照附圖來描述本文中的各種實(shí)施例,在附圖中:圖1是Android操作系統(tǒng)的示出了IPC機(jī)制的示例的示意圖;圖2是示出Linux層中的共享的庫(kù)函數(shù)呼叫與系統(tǒng)呼叫機(jī)制之間的相互依賴性的示意圖;圖3是根據(jù)基于系統(tǒng)呼叫插入(SCI,SystemCallInterposition)的第一實(shí)施例的安全系統(tǒng)的框架基礎(chǔ)架構(gòu)的示意圖;圖4是示出實(shí)現(xiàn)第一實(shí)施例安全系統(tǒng)的圖1的Android操作系統(tǒng)的示意圖;圖5是由第一實(shí)施例安全系統(tǒng)在創(chuàng)建用于Android設(shè)備上的新啟動(dòng)應(yīng)用的新進(jìn)程監(jiān)視器時(shí)執(zhí)行的系統(tǒng)操作的流程圖;圖6是第一實(shí)施例安全系統(tǒng)中的示例性決定生成進(jìn)程的流程圖;圖7是根據(jù)所配置的安全策略的用于控制應(yīng)用組件之間的進(jìn)程間通信的第一實(shí)施例安全系統(tǒng)的示例性配置和Android操作系統(tǒng)架構(gòu)的示意圖;圖8是根據(jù)基于函數(shù)呼叫插入(FCI,F(xiàn)unctionCallInterposition)的第二實(shí)施例的安全系統(tǒng)的框架基礎(chǔ)架構(gòu)的示意圖;圖9A是Android操作系統(tǒng)中的典型PLT/GOT間接機(jī)制的示意圖;圖9B是根據(jù)用于攔截動(dòng)態(tài)鏈接的符號(hào)調(diào)用的第二實(shí)施例安全系統(tǒng)的修改的PLT/GOT間接FCI機(jī)制的示意圖;圖10是由第二實(shí)施例安全系統(tǒng)在使用嵌入式FCI機(jī)制來啟動(dòng)新進(jìn)程時(shí)執(zhí)行的系統(tǒng)操作的流程圖;圖11是由第二實(shí)施例安全系統(tǒng)動(dòng)態(tài)執(zhí)行的切換至基于如由第一實(shí)施例安全系統(tǒng)所執(zhí)行的SCI機(jī)制的監(jiān)視的系統(tǒng)操作的流程圖;圖12是對(duì)應(yīng)于新應(yīng)用的新進(jìn)程的啟動(dòng)和根據(jù)實(shí)施例的后期安全策略綁定機(jī)制的時(shí)間軸;圖13是第三實(shí)施例中的適于針對(duì)不同用戶空間實(shí)例提供虛擬化的安全系統(tǒng)的示意圖;圖14是示出當(dāng)在第三實(shí)施例安全系統(tǒng)中實(shí)現(xiàn)FCI機(jī)制以提供虛擬化時(shí)執(zhí)行的系統(tǒng)操作的流程圖;圖15是示出當(dāng)在第三實(shí)施例安全系統(tǒng)中實(shí)現(xiàn)SCI機(jī)制以提供虛擬化時(shí)執(zhí)行的系統(tǒng)操作的流程圖;圖16是安全系統(tǒng)可以在其上運(yùn)行的典型智能電話或平板設(shè)備的硬件組件的示意圖;圖17是運(yùn)行操作系統(tǒng)比如Android的設(shè)備中的典型存儲(chǔ)設(shè)備分區(qū)的示意圖;圖18是Chromium的示意圖;以及圖19是在第四實(shí)施例中的應(yīng)用于Chromium的安全系統(tǒng)的示意圖。具體實(shí)施方式1.安全系統(tǒng)的概述在常規(guī)Unix和linux操作系統(tǒng)中,提出了通過攔截對(duì)內(nèi)核的系統(tǒng)呼叫來減輕在應(yīng)用程序之間的惡意軟件IPC攻擊。系統(tǒng)呼叫是需要監(jiān)視的關(guān)鍵機(jī)制,這是因?yàn)榭梢允褂迷撓到y(tǒng)呼叫來訪問操作系統(tǒng)的受內(nèi)核控制的敏感部分,例如,文件系統(tǒng)、共享存儲(chǔ)器和網(wǎng)絡(luò)連接等。為了設(shè)定安全策略,常常需要知道哪個(gè)應(yīng)用調(diào)用了特定系統(tǒng)呼叫。在AndroidOS中,應(yīng)用可以包括一個(gè)或更多個(gè)進(jìn)程。每個(gè)進(jìn)程又可以同時(shí)運(yùn)行一個(gè)或更多個(gè)線程來執(zhí)行指令,該指令中的一些指令可以是與內(nèi)核交互的觸發(fā)系統(tǒng)呼叫。在常規(guī)的Unix和Linux系統(tǒng)中,當(dāng)由用戶經(jīng)由殼啟動(dòng)二進(jìn)制時(shí),進(jìn)程的名稱被內(nèi)核所知。安全系統(tǒng)監(jiān)視所有系統(tǒng)呼叫,并且基于為進(jìn)程特定的相關(guān)策略來允許或阻止該系統(tǒng)呼叫。這防止惡意進(jìn)程執(zhí)行非法系統(tǒng)呼叫,同時(shí)允許正常進(jìn)程執(zhí)行其功能。這樣的安全系統(tǒng)在Android上不能工作,Android使用顯著不同的啟動(dòng)和管理其應(yīng)用的方式。具體地,直到很晚的階段,內(nèi)核才會(huì)意識(shí)到哪些進(jìn)程對(duì)應(yīng)于Android層中的哪個(gè)應(yīng)用,并且因此非常難于斷定的是,確定哪些應(yīng)用可能正在試圖經(jīng)由系統(tǒng)呼叫彼此通信。本主題涉及用于Android操作系統(tǒng)或具有相似結(jié)構(gòu)或配置的其他的計(jì)算機(jī)架構(gòu)的安全系統(tǒng)。安全系統(tǒng)利用了允許監(jiān)視用戶空間代碼而無需修改Android框架或底層Linux內(nèi)核的方法。具體地,安全系統(tǒng)提供了一種被配置成控制應(yīng)用之間的進(jìn)程間通信(IPC)或組件間通信(ICC)以減輕惡意軟件可能對(duì)敏感應(yīng)用及其數(shù)據(jù)執(zhí)行的攻擊的方式。原理上,本文中一些實(shí)施例能夠針對(duì)在AndroidOS上運(yùn)行的任何進(jìn)程來控制并且執(zhí)行安全策略。這包括在常備(stock)Android中提供的系統(tǒng)服務(wù)(比如,SMS服務(wù)、活動(dòng)管理器、服務(wù)管理器等)。在此方式下,各種實(shí)施例減輕存在于Android服務(wù)中的可能被惡意代碼利用的漏洞?;贏ndroid獨(dú)有的特征即稱為Zygote的母進(jìn)程來實(shí)現(xiàn)安全系統(tǒng)。每個(gè)Android應(yīng)用作為從Zygote母進(jìn)程分出的子進(jìn)程來運(yùn)行,并且然后每個(gè)Android應(yīng)用通過下述操作來使自己專用為特定應(yīng)用:加載特定應(yīng)用包及包內(nèi)所有類并且利用最終將通過調(diào)用靜態(tài)主要方法來開始應(yīng)用的Java反射。通常,每當(dāng)啟動(dòng)新應(yīng)用時(shí),安全系統(tǒng)利用Zygote進(jìn)程來配置與Linux層處的新啟動(dòng)進(jìn)程相關(guān)聯(lián)的監(jiān)視實(shí)體。在一種形式下,此監(jiān)視實(shí)體可以是嵌入式進(jìn)程監(jiān)視器方法或函數(shù),比如添加至存儲(chǔ)器中新進(jìn)程圖像的附加代碼,或者可選地,在另一形式下,此監(jiān)視實(shí)體可以是與新啟動(dòng)進(jìn)程相附接并且監(jiān)視該新啟動(dòng)進(jìn)程的單獨(dú)進(jìn)程。安全系統(tǒng)能夠執(zhí)行安全策略集合,可以通過在安全系統(tǒng)本身內(nèi)部或外部的下述源來提供該安全策略集合:比如系統(tǒng)管理員、設(shè)備用戶、第三方服務(wù)或系統(tǒng)、Android應(yīng)用或其組合。安全系統(tǒng)能夠在應(yīng)用層處實(shí)現(xiàn)應(yīng)用特定安全策略的規(guī)范或配置,可以在Linux層執(zhí)行該規(guī)范或配置。將通過特別參考在Android設(shè)備上的Android操作系統(tǒng)的示例來描述安全系統(tǒng)。然而,將理解的是,安全系統(tǒng)可以被配置成在與Android或下述任何其他的操作系統(tǒng)或平臺(tái)具有相似架構(gòu)的任何其他的適合操作系統(tǒng)上進(jìn)行操作:是移動(dòng)的或者否則使用母進(jìn)程來啟動(dòng)Linux層中的新進(jìn)程的任何其他的操作系統(tǒng)或平臺(tái),比如,但不限于,Linux操作系統(tǒng)、Unix操作系統(tǒng)或者像iOS的移動(dòng)操作系統(tǒng)。安全系統(tǒng)可以被配置成監(jiān)視由內(nèi)核代表進(jìn)程執(zhí)行的系統(tǒng)呼叫。具體地,安全系統(tǒng)被配置成基于與進(jìn)程相對(duì)應(yīng)的應(yīng)用的安全策略設(shè)定來監(jiān)視并且實(shí)現(xiàn)針對(duì)由進(jìn)程產(chǎn)生的系統(tǒng)呼叫的安全動(dòng)作。安全動(dòng)作可以包括:防止系統(tǒng)呼叫執(zhí)行、修改系統(tǒng)呼叫參數(shù)、修改系統(tǒng)呼叫的返回值、根據(jù)針對(duì)發(fā)起系統(tǒng)呼叫的進(jìn)程規(guī)定的安全策略來允許系統(tǒng)呼叫執(zhí)行或者強(qiáng)制終結(jié)該進(jìn)程。系統(tǒng)呼叫是由內(nèi)核代表進(jìn)程執(zhí)行的特定函數(shù)。該系統(tǒng)呼叫被視為內(nèi)核執(zhí)行的作為由進(jìn)程提供對(duì)由內(nèi)核管理的服務(wù)進(jìn)行的訪問的服務(wù)的低級(jí)操作。通常通過系統(tǒng)呼叫號(hào)和硬件中斷來使系統(tǒng)呼叫能夠用于用戶模式代碼,并且經(jīng)常通過鏈接至進(jìn)程代碼的庫(kù)函數(shù)來調(diào)用該系統(tǒng)呼叫。在可執(zhí)行并且可鏈接的格式(ELF,ExecutableandLinkableFormat)中,庫(kù)是特定類型的對(duì)象代碼,其提供可以從其他的對(duì)象代碼輸入的可重復(fù)使用的符號(hào)。庫(kù)的特例是共享對(duì)象(或共享庫(kù)),其意在被可執(zhí)行文件和其他的共享對(duì)象來共享??梢造o態(tài)地或動(dòng)態(tài)地鏈接共享對(duì)象。在前一情況下,在鏈接時(shí)間期間將符號(hào)拷貝到對(duì)象文件中,而在后一情況中,在執(zhí)行期間對(duì)符號(hào)進(jìn)行解析??梢栽谶M(jìn)程圖像加載到存儲(chǔ)器中期間或者在動(dòng)態(tài)鏈接符號(hào)被使用的第一時(shí)間對(duì)動(dòng)態(tài)鏈接符號(hào)進(jìn)行解析,這稱為懶惰綁定。libc庫(kù)是所有基于Linux的系統(tǒng)上的常用組件,并且此外,libc庫(kù)提供可以用來根據(jù)用戶模式代碼調(diào)用系統(tǒng)呼叫的函數(shù)集合。Android提供其自己的libc實(shí)現(xiàn),即Bioniclibc。與通常的Linux配置相比,Android的特定特征是:動(dòng)態(tài)地鏈接libc以減小進(jìn)程存儲(chǔ)占用空間。這意指動(dòng)態(tài)地鏈接通常被可執(zhí)行體用來調(diào)用系統(tǒng)呼叫的這些符號(hào)。圖2提供對(duì)此系統(tǒng)呼叫機(jī)制的概述。通過示例,當(dāng)進(jìn)程1執(zhí)行至Binder4的ioctl系統(tǒng)呼叫3時(shí),進(jìn)程1實(shí)際上調(diào)用由libc.so5提供的ioctl函數(shù)(2)。此函數(shù)將調(diào)用內(nèi)核中的ioctl系統(tǒng)呼叫3,并且該操作將在監(jiān)督模式下來執(zhí)行6。安全系統(tǒng)可以使用各種方法或方法的組合來監(jiān)視并且攔截由被監(jiān)視的進(jìn)程產(chǎn)生的系統(tǒng)呼叫,并且可選地在一些實(shí)施例中可以動(dòng)態(tài)地在這些方法之間進(jìn)行切換。在第一示例性配置中,安全系統(tǒng)可以被配置成通過執(zhí)行系統(tǒng)呼叫插入(SCI,SystemCallInterposition)來監(jiān)視系統(tǒng)呼叫,該SCI涉及在Linux層的內(nèi)核模式下直接地?cái)r截共享對(duì)象庫(kù)5與系統(tǒng)呼叫網(wǎng)關(guān)7之間的交互。具體地,安全系統(tǒng)可以實(shí)現(xiàn)SCI機(jī)制,該SCI機(jī)制在Linux層的內(nèi)核模式下通過系統(tǒng)呼叫網(wǎng)關(guān)7監(jiān)視進(jìn)程的執(zhí)行并且直接地檢測(cè)和/或攔截系統(tǒng)呼叫3。可替代地,在第二示例性配置中,安全系統(tǒng)可以被配置成通過執(zhí)行函數(shù)呼叫插入(FCI,F(xiàn)unctionCallInterposition)來監(jiān)視系統(tǒng)呼叫,該FCI涉及在Linux層的用戶模式下攔截從進(jìn)程1至共享對(duì)象庫(kù)5的函數(shù)呼叫2,其中正在被監(jiān)視的函數(shù)呼叫集合涉及用于在內(nèi)核模式下調(diào)用系統(tǒng)呼叫的函數(shù)呼叫集合。具體地,安全系統(tǒng)可以實(shí)現(xiàn)FCI機(jī)制,該FCI機(jī)制在用戶模式下監(jiān)視進(jìn)程的執(zhí)行并且檢測(cè)和/或攔截至共享對(duì)象庫(kù)的函數(shù)呼叫,該函數(shù)呼叫意在在內(nèi)核模式下調(diào)用系統(tǒng)呼叫。參照?qǐng)D3至圖7,將描述利用SCI機(jī)制或配置的安全系統(tǒng)的第一實(shí)施例。參照?qǐng)D8至圖11,將描述利用FCI機(jī)制或配置的安全系統(tǒng)的第二實(shí)施例。參照?qǐng)D13至圖15,將描述使用第一實(shí)施例的SCI機(jī)制和/或第二實(shí)施例的FCI機(jī)制在設(shè)備上針對(duì)不同用戶空間實(shí)例提供虛擬化的安全系統(tǒng)的第三實(shí)施例。2.第一實(shí)施例安全系統(tǒng)—SCI配置概述在此第一實(shí)施例中,安全系統(tǒng)運(yùn)行系統(tǒng)進(jìn)程,該系統(tǒng)進(jìn)程與Zygote進(jìn)程相附接并且攔截其所有分叉系統(tǒng)呼叫調(diào)用,使得無論何時(shí)攔截分叉系統(tǒng)呼叫,安全系統(tǒng)都開始監(jiān)視新進(jìn)程并且執(zhí)行針對(duì)該特定Android應(yīng)用的特定安全策略。在此第一實(shí)施例中,安全系統(tǒng)生成用于監(jiān)視Linux層中每個(gè)新啟動(dòng)進(jìn)程的單獨(dú)進(jìn)程監(jiān)視器(監(jiān)視實(shí)體)。每個(gè)進(jìn)程監(jiān)視器被配置成實(shí)現(xiàn)SCI機(jī)制以監(jiān)視并且攔截由其目標(biāo)進(jìn)程產(chǎn)生的系統(tǒng)呼叫。在此第一實(shí)施例中,安全系統(tǒng)使用系統(tǒng)呼叫網(wǎng)關(guān)的支持來監(jiān)視至內(nèi)核的系統(tǒng)呼叫。安全系統(tǒng)配置或指示系統(tǒng)呼叫網(wǎng)關(guān)以在每當(dāng)目標(biāo)進(jìn)程試圖在內(nèi)核模式下調(diào)用系統(tǒng)呼叫時(shí)就向與該目標(biāo)進(jìn)程相關(guān)聯(lián)的的進(jìn)程監(jiān)視器發(fā)送特定信號(hào)。在一個(gè)示例中,這通過使用ptrace系統(tǒng)呼叫來實(shí)現(xiàn)。當(dāng)進(jìn)程監(jiān)視器調(diào)用ptrace來與目標(biāo)進(jìn)程相附接時(shí),每當(dāng)目標(biāo)進(jìn)程調(diào)用系統(tǒng)呼叫,網(wǎng)關(guān)就將暫停目標(biāo)進(jìn)程并且向其進(jìn)程監(jiān)視器發(fā)送信號(hào),并且然后將等待來自該進(jìn)程監(jiān)視器的安全動(dòng)作。后續(xù)將更詳細(xì)地描述ptrace作為SCI攔截機(jī)制的使用?,F(xiàn)在講參照?qǐng)D3至圖7來更詳細(xì)地描述第一實(shí)施例安全系統(tǒng)。安全系統(tǒng)的主要部件參照?qǐng)D3,第一實(shí)施例安全系統(tǒng)200包括三個(gè)主要部件或模塊,即主要監(jiān)視器202、應(yīng)用或進(jìn)程監(jiān)視器204和安全系統(tǒng)服務(wù)206。監(jiān)視器202、204(監(jiān)視實(shí)體)負(fù)責(zé)執(zhí)行針對(duì)一個(gè)或更多個(gè)進(jìn)程的安全策略集合,并且被實(shí)現(xiàn)為L(zhǎng)inux進(jìn)程。監(jiān)視器包含策略執(zhí)行點(diǎn)以及策略決定點(diǎn),這將在后續(xù)進(jìn)行描述。在此實(shí)施例中,存在單個(gè)主要監(jiān)視器202,其被配置成監(jiān)視Zygote系統(tǒng)進(jìn)程208。從此主要監(jiān)視進(jìn)程分出進(jìn)程監(jiān)視器204的其余部分。可以存在零個(gè)或更多個(gè)應(yīng)用監(jiān)視器204,一個(gè)應(yīng)用監(jiān)視器用于從Zygote進(jìn)程被分叉出來的每個(gè)Android應(yīng)用210。當(dāng)來自Zygote進(jìn)程的分叉系統(tǒng)呼叫被攔截時(shí),創(chuàng)建進(jìn)程監(jiān)視器204作為主要監(jiān)視器202的子代。與被配置成監(jiān)視主要Zygote線程的主要監(jiān)視器202相比較,單獨(dú)進(jìn)程監(jiān)視器204被配置成監(jiān)視屬于與其相附接的應(yīng)用的所有線程和子進(jìn)程。安全系統(tǒng)服務(wù)206被配置為應(yīng)用層中的Android服務(wù),該Android服務(wù)向監(jiān)視器202、204提供對(duì)Android層中的所有Android框架功能的訪問。在此實(shí)施例下,Linux層中的監(jiān)視器202、204使用客戶端服務(wù)器通信配置比如但不限于內(nèi)部Unix套接字來與應(yīng)用層中的安全系統(tǒng)服務(wù)206進(jìn)行通信。示例性配置和操作現(xiàn)在將參照?qǐng)D4至圖6中的示例來描述主要模塊的安全系統(tǒng)配置和功能的進(jìn)一步說明。圖4對(duì)應(yīng)于圖1中描述的架構(gòu),并且相似的附圖標(biāo)記表示相似的組件。簡(jiǎn)要地,屬于Android應(yīng)用10、12的在Linux層中的每個(gè)Linux進(jìn)程18、20具有其自己的分別以52、54示出的所附接的進(jìn)程監(jiān)視器。每個(gè)進(jìn)程監(jiān)視器52、54被配置成攔截所附接的Linux進(jìn)程18、20代表其所附接的應(yīng)用10、12執(zhí)行的系統(tǒng)呼叫的全部或子集合。當(dāng)每個(gè)Linux進(jìn)程執(zhí)行系統(tǒng)呼叫時(shí),所附接的進(jìn)程監(jiān)視器攔截系統(tǒng)呼叫并且基于與該應(yīng)用相關(guān)聯(lián)的安全策略來采取安全動(dòng)作,該安全策略指示Linux進(jìn)程是否獲得了執(zhí)行該系統(tǒng)呼叫的授權(quán)。通過示例,進(jìn)程監(jiān)視器可以被配置成:允許系統(tǒng)呼叫,阻止系統(tǒng)呼叫,修改系統(tǒng)呼叫的參數(shù),修改由系統(tǒng)呼叫或者其他適合的安全動(dòng)作返回的值,或者這些組合。如果Linux進(jìn)程被授權(quán)執(zhí)行系統(tǒng)呼叫,則進(jìn)程監(jiān)視器使得對(duì)系統(tǒng)呼叫的執(zhí)行進(jìn)行??商娲兀M(jìn)程監(jiān)視器可以阻止系統(tǒng)呼叫執(zhí)行,或者另外地修改系統(tǒng)呼叫參數(shù)或者返回值。例如,進(jìn)程監(jiān)視器能夠檢索系統(tǒng)呼叫的參數(shù)以及另外地檢索系統(tǒng)呼叫返回的值。這使進(jìn)程監(jiān)視器能夠例如通過過濾出一個(gè)或更多個(gè)返回值或者在根據(jù)應(yīng)用的所配置的安全策略的執(zhí)行之前改變或修改系統(tǒng)呼叫的一個(gè)或更多個(gè)參數(shù)來修改系統(tǒng)呼叫。另外地,可以根據(jù)系統(tǒng)呼叫的參數(shù)的值來采取安全動(dòng)作。通過示例,進(jìn)程監(jiān)視器可以被配置成:針對(duì)可能由于受阻系統(tǒng)呼叫而崩潰的應(yīng)用,修改系統(tǒng)呼叫而不是阻止該系統(tǒng)呼叫。通過示例,進(jìn)程監(jiān)視器52可以被配置成攔截IPC,該IPC使用系統(tǒng)呼叫34來與Binder子系統(tǒng)30進(jìn)行對(duì)接(interface)。這可以通過攔截open和ioctl系統(tǒng)呼叫38來完成,該open和ioctl系統(tǒng)呼叫38的目的地是binder內(nèi)核驅(qū)動(dòng)器3。然后,如56所示,進(jìn)程監(jiān)視器52基于針對(duì)應(yīng)用層中的關(guān)聯(lián)應(yīng)用10配置的安全策略和從進(jìn)程執(zhí)行狀態(tài)提取的其他參數(shù)來決定是阻止系統(tǒng)呼叫還是另外地允許系統(tǒng)呼叫以其原始狀態(tài)或修改狀態(tài)進(jìn)行。每個(gè)進(jìn)程監(jiān)視器由主要監(jiān)視器來創(chuàng)建,該主要監(jiān)視器是在發(fā)起任何應(yīng)用之前在設(shè)備啟動(dòng)時(shí)創(chuàng)建的Linux進(jìn)程,并且將在以后進(jìn)行更詳細(xì)地說明。指示應(yīng)用的授權(quán)的安全策略安裝在設(shè)備上應(yīng)用層中,并且具體地,哪些應(yīng)用可以彼此通信或者使用彼此的服務(wù)或許可或者存儲(chǔ)的其他的敏感數(shù)據(jù)在應(yīng)用層中由安全系統(tǒng)服務(wù)器可配置并且存儲(chǔ)和/或檢索,這將在以后進(jìn)行更詳細(xì)描述。安全策略可以本地地存儲(chǔ)在設(shè)備上的存儲(chǔ)器中,或者遠(yuǎn)程地存儲(chǔ)在能夠被設(shè)備訪問的外部存儲(chǔ)器、服務(wù)器或網(wǎng)絡(luò)上。通過建立進(jìn)程監(jiān)視器作為主控進(jìn)程并且建立關(guān)聯(lián)Linux進(jìn)程作為其目標(biāo)進(jìn)程并且使用跟蹤系統(tǒng)呼叫,每個(gè)進(jìn)程監(jiān)視器與其對(duì)應(yīng)Linux進(jìn)程相附接,所述跟蹤系統(tǒng)呼叫被配置成使主控進(jìn)程能夠通過檢查其存儲(chǔ)器和寄存器并且攔截其系統(tǒng)呼叫調(diào)用來控制目標(biāo)進(jìn)程。在此實(shí)施例中,跟蹤系統(tǒng)呼叫是進(jìn)程跟蹤系統(tǒng)呼叫(ptrace)。為了使用ptrace,主控進(jìn)程必須作為根用戶或者與目標(biāo)進(jìn)程相同的用戶進(jìn)行運(yùn)行。主控進(jìn)程將成為目標(biāo)進(jìn)程的父代,并且將能夠監(jiān)視并且控制由目標(biāo)進(jìn)程創(chuàng)建的所有子進(jìn)程和線程。如所提到的,安全系統(tǒng)被配置成通過利用AndroidOS的配置特征來監(jiān)視在Android設(shè)備上執(zhí)行的所有應(yīng)用和對(duì)應(yīng)進(jìn)程,該配置特征控制對(duì)應(yīng)用的管理和啟動(dòng)。在Android中,通過稱為Zygote進(jìn)程的特定母進(jìn)程來啟動(dòng)應(yīng)用層中的所有應(yīng)用。Zygote進(jìn)程是有權(quán)創(chuàng)建新Android應(yīng)用及其對(duì)應(yīng)Linux進(jìn)程的唯一進(jìn)程。因此,在Android上執(zhí)行的所有Android應(yīng)用及其對(duì)應(yīng)Linux進(jìn)程實(shí)際上是此Zygote進(jìn)程的子代。現(xiàn)在將更詳細(xì)地描述安全系統(tǒng)的配置和主要模塊的操作。安全系統(tǒng)啟動(dòng)安全系統(tǒng)作為Android操作系統(tǒng)的一部分啟動(dòng)。如所提到的,安全系統(tǒng)控制母進(jìn)程或Zygote進(jìn)程,使得每當(dāng)開始新Linux進(jìn)程(對(duì)應(yīng)于Android應(yīng)用)開始時(shí),可以使新監(jiān)視器與該進(jìn)程相附接。通過修改Android操作系統(tǒng)的引導(dǎo)順序來實(shí)現(xiàn)對(duì)Zygote進(jìn)程進(jìn)行控制。通過示例,修改引導(dǎo)順序,使得安全系統(tǒng)的主要監(jiān)視器置換初始Zygote進(jìn)程。在引導(dǎo)進(jìn)程期間,運(yùn)行初始化腳本并且開始主要監(jiān)視器。然后啟動(dòng)Zygote進(jìn)程作為主要監(jiān)視器的子代。然后主要監(jiān)視器通過攔截由Zygote進(jìn)程產(chǎn)生的至內(nèi)核的系統(tǒng)呼叫來執(zhí)行跟蹤系統(tǒng)呼叫比如ptrace(請(qǐng)求=PTRACE_ATTACH),以與子Zygote進(jìn)程相附接來控制其從其開始的第一時(shí)刻的執(zhí)行。具體地,ptrace(請(qǐng)求=PTRACE_ATTACH)系統(tǒng)呼叫用來通知內(nèi)核:每當(dāng)目標(biāo)Zygote進(jìn)程進(jìn)入系統(tǒng)呼叫或者從系統(tǒng)呼叫退出時(shí),主要監(jiān)視器應(yīng)當(dāng)接收通知。這時(shí),在啟動(dòng)時(shí),主要監(jiān)視器現(xiàn)在與Zygote進(jìn)程相附接并且監(jiān)視該Zygote進(jìn)程。在此實(shí)施例中,還通過Android操作系統(tǒng)在啟動(dòng)進(jìn)程期間開始安全系統(tǒng)服務(wù)。通過示例,安全系統(tǒng)服務(wù)位于系統(tǒng)應(yīng)用的目錄內(nèi),使得該安全系統(tǒng)服務(wù)在用戶可以登錄或者可以在Android設(shè)備上運(yùn)行任何用戶應(yīng)用之前啟動(dòng)。如接下來所更詳細(xì)說明的,當(dāng)安全系統(tǒng)服務(wù)正在運(yùn)行時(shí),每當(dāng)從Zygote分叉出新Android應(yīng)用時(shí),新進(jìn)程監(jiān)視器從主要監(jiān)視器分叉并且與新應(yīng)用進(jìn)程相附接。新啟動(dòng)Android應(yīng)用的進(jìn)程監(jiān)視器的生成概述將描述由安全系統(tǒng)執(zhí)行以生成并且配置新啟動(dòng)Android應(yīng)用的進(jìn)程監(jiān)視器的主要操作的順序。當(dāng)安全系統(tǒng)開始時(shí),僅主要監(jiān)視進(jìn)程連同安全系統(tǒng)服務(wù)一起在運(yùn)行。主要監(jiān)視器與Zygote進(jìn)程相附接并且監(jiān)視該Zygote進(jìn)程。新進(jìn)程監(jiān)視器由于由Zygote進(jìn)程產(chǎn)生的分叉系統(tǒng)呼叫調(diào)用被創(chuàng)建為主要監(jiān)視器的子代,每當(dāng)在Android中啟動(dòng)新應(yīng)用時(shí)呼叫該Zygote進(jìn)程。具體地,主要監(jiān)視器被配置成檢測(cè)由Zygote進(jìn)程產(chǎn)生的分叉系統(tǒng)呼叫調(diào)用,并且創(chuàng)建用于啟動(dòng)的每個(gè)新應(yīng)用的新進(jìn)程監(jiān)視器。參照?qǐng)D5,將通過示例使用用戶在其Android智能電話上啟動(dòng)Skype應(yīng)用的情景。當(dāng)用戶點(diǎn)擊其智能電話上的Skype圖標(biāo)時(shí),向Zygote進(jìn)程62發(fā)送消息或信號(hào)60來分叉出新進(jìn)程74,該新進(jìn)程74在用于Skype應(yīng)用的DVM的復(fù)本中執(zhí)行。每當(dāng)Zygote62調(diào)用分叉系統(tǒng)呼叫64時(shí),將通過內(nèi)核66來暫停65Zygote62,并且將由內(nèi)核經(jīng)由信號(hào)68(例如SIGCHILD)來通知主要監(jiān)視器且使主要監(jiān)視器70喚醒。內(nèi)核分派這些信號(hào),這是因?yàn)橹饕O(jiān)視器70正在通過ptrace系統(tǒng)呼叫來監(jiān)視Zygote62?,F(xiàn)在通過從主要監(jiān)視器70調(diào)用分叉系統(tǒng)呼叫來創(chuàng)建新進(jìn)程監(jiān)視器72,并且當(dāng)新進(jìn)程監(jiān)視器72被分叉時(shí),該新進(jìn)程監(jiān)視器72將與新創(chuàng)建進(jìn)程74相附接。由于通過Linux調(diào)度器執(zhí)行的調(diào)度,無法保障進(jìn)程執(zhí)行命令將允許新進(jìn)程監(jiān)視器72在新Linux進(jìn)程74執(zhí)行任何系統(tǒng)呼叫之前與對(duì)應(yīng)于Skype應(yīng)用的新Linux進(jìn)程74相附接。在一些情況下,新進(jìn)程74能夠開始執(zhí)行其代碼而進(jìn)程監(jiān)視器72卻不能夠?qū)π逻M(jìn)程74進(jìn)行控制,這可能引起安全問題。為了避免這種情況,主要監(jiān)視器被配置成將斷點(diǎn)76(例如死循環(huán)77)注入到Zygote進(jìn)程代碼中,使得當(dāng)其圖像被復(fù)制以創(chuàng)建新進(jìn)程74時(shí),新復(fù)本也將包含此斷點(diǎn)。新進(jìn)程74現(xiàn)在包含初始插入其內(nèi)部的斷點(diǎn)77,所以新進(jìn)程74在由進(jìn)程監(jiān)視器去除斷點(diǎn)之前將不能夠執(zhí)行任何其他代碼。去除斷點(diǎn)在進(jìn)程監(jiān)視器72已借助ptrace與新進(jìn)程74有效地相附接之后立刻執(zhí)行。通過示例,斷點(diǎn)可以是斷點(diǎn)機(jī)器指令、ARM匯編代碼中的無限循環(huán)、或者暫緩在使用其他指令集合的處理器上的程序執(zhí)行的任何其他等同方法。下面將進(jìn)一步描述此實(shí)施例的斷點(diǎn)注入的示例和剩余進(jìn)程監(jiān)視器72生成。斷點(diǎn)注入如以上陳述的,每當(dāng)從Zygote62分叉新Android應(yīng)用74時(shí),安全系統(tǒng)將斷點(diǎn)76注入到Zygote62中,使得當(dāng)Zygote62的圖像被復(fù)制時(shí),新進(jìn)程74也將包含斷點(diǎn),并且新進(jìn)程監(jiān)視器72可以在新進(jìn)程74繼續(xù)其執(zhí)行之前與新進(jìn)程74相附接而不會(huì)漏掉任何系統(tǒng)呼叫。如所提到的,“斷點(diǎn)”76可以例如是ARM匯編代碼中的無限循環(huán)。如下使用下面過程來將斷點(diǎn)注入76在Zygote進(jìn)程存儲(chǔ)器內(nèi)的當(dāng)前程序計(jì)數(shù)器地址(PC)處。首先,為了恢復(fù)Zygote程序執(zhí)行,Zygote寄存器的狀態(tài)以及將被斷點(diǎn)本身置換的Zygote程序代碼應(yīng)當(dāng)在主要監(jiān)視器70的存儲(chǔ)器中進(jìn)行備份。例如,在Zygote的情況下,主要監(jiān)視器70可以使用ptrace(PTRACE_PEEKDATA)來將Zygote進(jìn)程圖像的一部分拷貝到其自己的存儲(chǔ)器中,該ptrace(PTRACE_PEEKDATA)允許從所監(jiān)視的進(jìn)程存儲(chǔ)器中讀取數(shù)據(jù)。主要監(jiān)視器可以使用ptrace(PTRACE_GETREGS)來讀取Zygote進(jìn)程寄存器的狀態(tài)并且將該狀態(tài)存儲(chǔ)在其自己的存儲(chǔ)器中。此后,主要監(jiān)視器70被配置成將PC重設(shè)為其先前地址(后續(xù)將包含斷點(diǎn)),使得主要監(jiān)視器70在所注入的斷點(diǎn)代碼處繼續(xù)執(zhí)行。使用ptrace(PTRACE_SETREGS)來將Zygote62的寄存器R1設(shè)定成零,這樣做使能斷點(diǎn)。接下來,主要監(jiān)視器被配置成將斷點(diǎn)代碼注入到Zygote中。主要監(jiān)視器70包含下述函數(shù):該函數(shù)包含執(zhí)行無限循環(huán)(基于R1的值)的內(nèi)聯(lián)ARM匯編代碼,并且這是注入到Zygote進(jìn)程存儲(chǔ)器中的代碼。從主要監(jiān)視存儲(chǔ)器中的函數(shù)地址獲得作為字節(jié)陣列的斷點(diǎn)函數(shù)機(jī)器代碼。然后,使用ptrace(PTRACE_POKEDATA)從主要監(jiān)視存儲(chǔ)器將斷點(diǎn)代碼拷貝到Zygote存儲(chǔ)器中程序計(jì)數(shù)器地址處,ptrace(PTRACE_POKEDATA)允許跟蹤器將數(shù)據(jù)插入到所監(jiān)視的進(jìn)程存儲(chǔ)空間中。在斷點(diǎn)注入之后的新進(jìn)程創(chuàng)建當(dāng)如上將斷點(diǎn)代碼注入到了Zygote中時(shí),主要監(jiān)視器70調(diào)用ptrace(PTRACE_SYSCALL)78來通知內(nèi)核允許Zygote分叉系統(tǒng)呼叫的內(nèi)核空間代碼執(zhí)行。當(dāng)分叉系統(tǒng)呼叫執(zhí)行80時(shí),創(chuàng)建新進(jìn)程74(在此示例中意在最終是Skype)。新進(jìn)程74是Zygote62的克隆,這意指新進(jìn)程74是存儲(chǔ)器中包括所注入的斷點(diǎn)的Zygote進(jìn)程圖像的復(fù)本。然后,新創(chuàng)建的進(jìn)程74可以運(yùn)行,然而將在斷點(diǎn)循環(huán)77中被暫緩。然后主要監(jiān)視器70被配置成等待,直到該主要監(jiān)視器70接收到分叉系統(tǒng)呼叫退出通知。具體地,主要監(jiān)視器70被配置成針對(duì)退出通知進(jìn)行監(jiān)視并且攔截該退出通知。新進(jìn)程監(jiān)視器創(chuàng)建當(dāng)分叉系統(tǒng)呼叫在Zygote中返回(系統(tǒng)呼叫正在退出)時(shí),將仍然停止66進(jìn)程并且內(nèi)核將經(jīng)由信號(hào)82(例如,SIGCHILD)來通知主要監(jiān)視器70。這時(shí),由于新進(jìn)程的進(jìn)程識(shí)別(PID)作為分叉系統(tǒng)呼叫的返回值被提供,所以也能夠得到新進(jìn)程的進(jìn)程識(shí)別(PID)。每個(gè)進(jìn)程具有允許內(nèi)核識(shí)別運(yùn)行的不同進(jìn)程的唯一PID。主要監(jiān)視器70被配置成從Zygote檢索新進(jìn)程74的如以84所示的PID。例如,主要監(jiān)視器70可以使用ptrace(PTRACE_GETREGS)從Zygote進(jìn)程寄存器R0中檢索PID。然后主要監(jiān)視器70被配置成生成新進(jìn)程監(jiān)視器72,該新進(jìn)程監(jiān)視器72將與該所檢索的PID相附接。主要監(jiān)視器70通過執(zhí)行至內(nèi)核66的分叉系統(tǒng)呼叫88來分叉出新進(jìn)程監(jiān)視器72。當(dāng)主要監(jiān)視器進(jìn)程分叉出90新進(jìn)程時(shí),新創(chuàng)建的進(jìn)程監(jiān)視器72在其執(zhí)行的開始時(shí)是父代主要監(jiān)視進(jìn)程的確切復(fù)制。這意指,當(dāng)主要監(jiān)視器70分叉出新進(jìn)程監(jiān)視器72時(shí),進(jìn)程監(jiān)視器在其存儲(chǔ)器中具有由Zygote62創(chuàng)建并且從Zygote寄存器檢索的新進(jìn)程74(意在最終是Skype)的PID。然后,如以91所示,主要監(jiān)視器70被配置成使用ptrace(PTRACE_POKEDATA)來以原始位置處的原始代碼備份置換Zygote62中的斷點(diǎn)代碼,并且該主要監(jiān)視器70使用ptrace(PTRACE_SETREGS)來將寄存器重設(shè)為其原始存儲(chǔ)值。然后,主要監(jiān)視器借助于ptrace(PTRACE_SYSCALL)來將Zygote的PC重設(shè)為其備份值并且請(qǐng)求內(nèi)核繼續(xù)Zygote進(jìn)程,從而經(jīng)由SIGCONT信號(hào)95來恢復(fù)Zygote進(jìn)程并且等待另外的分叉調(diào)用。新創(chuàng)建的子進(jìn)程監(jiān)視器72使用如以92所示的ptrace(PTRACE_ATTACH)來用其存儲(chǔ)器中的PID使自己與跟蹤新Skype進(jìn)程相附接。進(jìn)程監(jiān)視器72還被配置成用為處理器72正在監(jiān)視的應(yīng)用特定的點(diǎn)來置換來自主要監(jiān)視器的主要虛設(shè)策略決定點(diǎn),如以94所示,這在與所監(jiān)視的新進(jìn)程74相關(guān)聯(lián)的應(yīng)用包名稱(在此情況下為Skype)被知道之前將都不包含任何安全策略。當(dāng)進(jìn)程監(jiān)視器72被附接時(shí),進(jìn)程監(jiān)視器72能夠跟蹤新進(jìn)程74,所以進(jìn)程監(jiān)視器72可以被配置成用原始代碼來置換新進(jìn)程74中的斷點(diǎn)代碼,如以96所示,并且進(jìn)程監(jiān)視器72可以被配置成借助ptrace(PTRACE_SYSCALL)97來發(fā)起對(duì)新進(jìn)程的執(zhí)行,ptrace(PTRACE_SYSCALL)97將向新進(jìn)程74遞送SIGCONT98。這采用與如上所述主監(jiān)視器70置換Zygote進(jìn)程62中的斷點(diǎn)代碼的方式相似的方式來完成。所監(jiān)視的新進(jìn)程74現(xiàn)在可以開始執(zhí)行。當(dāng)進(jìn)程監(jiān)視器72與新進(jìn)程74相附接時(shí),進(jìn)程監(jiān)視器72可以攔截并且控制此進(jìn)程執(zhí)行的所有系統(tǒng)呼叫。新進(jìn)程監(jiān)視器的安全策略的配置這時(shí),將存在跟蹤/監(jiān)視Zygote62的主要監(jiān)視器70和跟蹤/監(jiān)視新創(chuàng)建的Linux進(jìn)程74的新進(jìn)程監(jiān)視器72,該新創(chuàng)建的Linux進(jìn)程74還沒有專用為SkypeAndroid應(yīng)用。新Linux進(jìn)程74尚未執(zhí)行Skype應(yīng)用的代碼,并且在此早期階段,無法知道進(jìn)程將屬于哪個(gè)應(yīng)用。這意味著直到新進(jìn)程74進(jìn)行專用化才能夠加載新進(jìn)程監(jiān)視器72的特定安全策略。安全系統(tǒng)被配置成基于應(yīng)用識(shí)別數(shù)據(jù)來檢索特定安全策略或者策略集合并且將其加載到新進(jìn)程監(jiān)視器72,該應(yīng)用識(shí)別數(shù)據(jù)指示新Linux進(jìn)程74正專用為的Android應(yīng)用。在此實(shí)施例中,應(yīng)用識(shí)別數(shù)據(jù)是應(yīng)用的包名稱,并且進(jìn)程監(jiān)視器72被配置成在其正在監(jiān)視的新進(jìn)程74的專用化期間檢索該應(yīng)用的包名稱。為了專用化,新進(jìn)程74需要檢索對(duì)Skype應(yīng)用包名稱的獲取訪問。使得新進(jìn)程74然后能夠?qū)碜詰?yīng)用數(shù)據(jù)庫(kù)的Skype應(yīng)用特有字節(jié)代碼加載在設(shè)備上以用于執(zhí)行。在專用化進(jìn)程或階段期間,Android框架將應(yīng)用包名稱寫入到專用化文件(例如,/proc偽文件系統(tǒng)內(nèi)的/proc/self/cmdline)中。這恰在分叉出新進(jìn)程74以后并且在使用反射來調(diào)用靜態(tài)主要方法之前發(fā)生,這意指尚未執(zhí)行開發(fā)代碼。Android進(jìn)程Java類(android.os.Process)通過Java本地接口(JNI,JaveNativeInterface)來調(diào)用將包名稱設(shè)定為參數(shù)的函數(shù)android_os_Process_setArgV0。這將內(nèi)部地呼叫重設(shè)進(jìn)程argv[0]的ProcessState::setArgV0()方法,該方法有效地改變專用化數(shù)據(jù)文件(即,以應(yīng)用包名稱來更新專用化數(shù)據(jù)文件),并且然后在這之后通過使用prctl(PR_SET_NAME)系統(tǒng)呼叫來設(shè)定進(jìn)程名稱。可以通過prctl()系統(tǒng)呼叫設(shè)定的進(jìn)程名稱限于16個(gè)字節(jié),這意指,在一些情況下,此系統(tǒng)呼叫中的包名稱將不完整。當(dāng)將argv[0]參數(shù)設(shè)定成專用化數(shù)據(jù)文件時(shí),不存在由監(jiān)視進(jìn)程74生成的系統(tǒng)呼叫,該專用化數(shù)據(jù)文件實(shí)際上包含整包名稱。在此實(shí)施例中,代替檢查由prctl()函數(shù)參數(shù)指定的應(yīng)用名稱,進(jìn)程監(jiān)視器72被配置成讀取在argv[0]被覆蓋時(shí)設(shè)定的專用化數(shù)據(jù)文件的內(nèi)容,該專用化數(shù)據(jù)文件包含全應(yīng)用包名稱。具體地,進(jìn)程監(jiān)視器72被配置成檢測(cè)prctl()系統(tǒng)呼叫何時(shí)正以所設(shè)定的PR_SET_NAME值退出。當(dāng)這被檢測(cè)到時(shí),進(jìn)程監(jiān)視器72知道:全應(yīng)用包名稱現(xiàn)在已被寫入專用化數(shù)據(jù)文件。然后,進(jìn)程監(jiān)視器72被配置成在檢測(cè)到prctl()系統(tǒng)呼叫退出時(shí)從專用化數(shù)據(jù)文件中讀取并且檢索全應(yīng)用包名稱。當(dāng)通過進(jìn)程監(jiān)視器72獲得了包名稱(例如,com.skype.apk)時(shí),然后進(jìn)程監(jiān)視器72可以檢索并且加載為該應(yīng)用特定的一個(gè)或更多個(gè)安全策略。具體地,可以初始化進(jìn)程監(jiān)視策略,并且執(zhí)行為該進(jìn)程特定的策略。包名稱被轉(zhuǎn)發(fā)至進(jìn)程監(jiān)視器的策略決定點(diǎn),該進(jìn)程監(jiān)視器的策略決定點(diǎn)將加載用于所監(jiān)視的進(jìn)程的特定策略。為此,進(jìn)程監(jiān)視器74可以利用應(yīng)用層框架中的稱為安全系統(tǒng)服務(wù)的特定服務(wù),這將在以后來更詳細(xì)地描述。監(jiān)視器的操作概述每個(gè)進(jìn)程監(jiān)視器被配置成:通過基于所檢索的安全策略相對(duì)于所檢測(cè)的系統(tǒng)呼叫來在Linux層中實(shí)現(xiàn)安全動(dòng)作,針對(duì)其附接的新進(jìn)程執(zhí)行所檢索的安全策略。安全動(dòng)作可以包括下述動(dòng)作中的任何一種或更多種動(dòng)作:允許系統(tǒng)呼叫進(jìn)行、阻止系統(tǒng)呼叫進(jìn)行、修改系統(tǒng)呼叫在執(zhí)行之前的參數(shù)或由系統(tǒng)呼叫在執(zhí)行之后生成的返回值。通過示例,監(jiān)視進(jìn)程可以通過控制和指示內(nèi)核關(guān)于內(nèi)核對(duì)所請(qǐng)求的系統(tǒng)呼叫的執(zhí)行借助于相附接的監(jiān)視進(jìn)程來實(shí)現(xiàn)安全動(dòng)作。下面說明執(zhí)行策略的示例性實(shí)現(xiàn),然而將理解,可以使用替換執(zhí)行機(jī)制。在此實(shí)施例中,主要監(jiān)視器和進(jìn)程監(jiān)視器各自包含兩個(gè)組件,即,策略執(zhí)行點(diǎn)和策略決定點(diǎn)。策略執(zhí)行點(diǎn)負(fù)責(zé)通過其系統(tǒng)呼叫來跟蹤所監(jiān)視的進(jìn)程并且負(fù)責(zé)執(zhí)行策略,并且策略執(zhí)行點(diǎn)將來自進(jìn)程狀態(tài)的信息提供至策略決定點(diǎn)。策略決定點(diǎn)基于進(jìn)程狀態(tài)和分配給策略決定點(diǎn)的策略來生成決定。這些決定被發(fā)送至確保這些決定被執(zhí)行的執(zhí)行點(diǎn)。策略決定點(diǎn)使用策略庫(kù),該策略庫(kù)取決于針對(duì)每個(gè)決定點(diǎn)的安全系統(tǒng)配置并且在配置最終被修改的情況下將在運(yùn)行時(shí)變化。根據(jù)監(jiān)視器(例如,主要監(jiān)視器或單獨(dú)進(jìn)程監(jiān)視器)所屬的類型,監(jiān)視器將包含不同類型的策略決定點(diǎn)。主要監(jiān)視器包含虛設(shè)決定點(diǎn),該虛設(shè)決定點(diǎn)被用來攔截fork()系統(tǒng)呼叫并且檢索新進(jìn)程的PID,以生成新應(yīng)用進(jìn)程監(jiān)視器,如先前所說明。相比之下,進(jìn)程監(jiān)視器能夠檢索與其相應(yīng)的目標(biāo)進(jìn)程相關(guān)聯(lián)的應(yīng)用包名稱并且執(zhí)行策略初始化。通過示例,可以存在由進(jìn)程監(jiān)視器支持的各種類型策略,比如:●IPC攔截:攔截從所監(jiān)視的進(jìn)程生成的進(jìn)程間呼叫。為此,進(jìn)程監(jiān)視器攔截目的地是Binder偽設(shè)備(/dev/binder)的這些ioctl()系統(tǒng)呼叫?!衤?lián)網(wǎng):通過在本地或遠(yuǎn)程地運(yùn)行的不同進(jìn)程之間的TCP/IP或者其他的網(wǎng)絡(luò)協(xié)議來控制通信。這包括通過其(例如通過因特網(wǎng))來控制進(jìn)程可以聯(lián)系的外部服務(wù)器、客戶端或?qū)Φ染W(wǎng)絡(luò)。●共享存儲(chǔ):通過共享存儲(chǔ)來阻止進(jìn)程間通信。具體地阻止對(duì)下述各種Android共享存儲(chǔ)服務(wù)的訪問:Android共享存儲(chǔ)器(ashmem)、進(jìn)程存儲(chǔ)分配器(PMEM)和處理器特有變量(CMEM、NVMAP等)和AndroidION存儲(chǔ)分配器。而且,可以防止子進(jìn)程與其父代一起使用共享存儲(chǔ)機(jī)制?!裎募到y(tǒng):阻止某些進(jìn)程訪問、創(chuàng)建、讀取、修改和/或?qū)懭胛募到y(tǒng)中的特定文件或文件夾。針對(duì)給定應(yīng)用建立盤配額,并且可以提供沙箱環(huán)境,使得每個(gè)應(yīng)用訪問其自己的虛擬文件系統(tǒng)?!耠娫?、短消息服務(wù)(SMS,ShortMessageService)和多媒體通訊服務(wù)(MMS):阻止進(jìn)程訪問Android上的電話、SMS和/或MMS服務(wù)。如果需要,則可以設(shè)定策略來防止進(jìn)程發(fā)起電話呼叫或者阻止進(jìn)程發(fā)送SMS或MMS消息至特定號(hào)或聯(lián)系人?!裼啈糇R(shí)別模塊(SIM,SubscriberIdentityModule)訪問:阻止進(jìn)程訪問來自安裝在設(shè)備中的SIM卡的敏感信息;比如集成電路卡標(biāo)識(shí)符(ICCID,IntegratedCircuitCardIdentifier)、國(guó)際移動(dòng)客戶識(shí)別(IMSI,InternationalMobileSubscriberIdentity)、認(rèn)證秘鑰(Ki,Authenticationkey)、位置區(qū)識(shí)別(LAI,LocationAreaIdentity)、存儲(chǔ)的SMS消息、非結(jié)構(gòu)化補(bǔ)充服務(wù)數(shù)據(jù)(USSD,UnstructuredSupplementaryServiceData)碼和聯(lián)系人列表?!駛鞲衅骱推渌挠布L問:阻止進(jìn)程訪問可能存在于設(shè)備中的傳感器和其他類型的輸入或輸出硬件;比如相機(jī)傳感器、麥克風(fēng)、光傳感器、全球定位系統(tǒng)(GPS,GlobalPositioningSystem)接收器、運(yùn)動(dòng)傳感器、加速度計(jì)、陀螺儀、鍵盤、按鈕、顯示器、投影儀、打印機(jī)?!窠鼒?chǎng)通信:阻止進(jìn)程使用近場(chǎng)通信(NFC,NearFieldCommunication)或其他類型的無線通信來建立新連接或監(jiān)視已經(jīng)處于進(jìn)程中的通信會(huì)話?!衿髽I(yè)權(quán)限管理(ERM,EnterpriseRightManagement)策略:用于操縱企業(yè)或數(shù)字資產(chǎn)的策略。數(shù)字資產(chǎn)意思是指在設(shè)備上的存儲(chǔ)器或運(yùn)行存儲(chǔ)器中存儲(chǔ)的文件。該文件可以例如定義應(yīng)用或其他數(shù)據(jù),比如但不限于承載或定義信息的SMS、郵件、圖片或任何其他數(shù)據(jù)項(xiàng)。通過ERM策略下,當(dāng)設(shè)備上的應(yīng)用試圖訪問數(shù)字資產(chǎn)時(shí),擁有數(shù)字資產(chǎn)的實(shí)體(比如企業(yè)或組織)保持對(duì)數(shù)字資產(chǎn)生命周期管理的控制。ERM策略可以被配置并且執(zhí)行成:控制使用數(shù)字資產(chǎn)的方式,或者觸發(fā)對(duì)數(shù)字資產(chǎn)的修改或者從設(shè)備的完整刪除數(shù)字資產(chǎn)。ERM策略可以被配置成在應(yīng)用對(duì)數(shù)字資產(chǎn)執(zhí)行訪問之前、在對(duì)數(shù)字資產(chǎn)的訪問結(jié)束之后、或者在這兩種情況下,執(zhí)行安全動(dòng)作。ERM策略可以被配置成使得對(duì)正在被訪問的文件執(zhí)行安全動(dòng)作,不管ERM策略在存儲(chǔ)器中還是在運(yùn)行時(shí)間存儲(chǔ)器(例如,RAM)中。通過示例,ERM策略可以定義在應(yīng)用訪問數(shù)字資產(chǎn)之前要執(zhí)行的下列安全動(dòng)作中的任何一種或更多種動(dòng)作:○修改數(shù)字資產(chǎn)以去除或添加信息,例如:■清除—去除或?yàn)V除不應(yīng)當(dāng)向訪問數(shù)字資產(chǎn)的應(yīng)用公開的任何信息■版本化—添加與數(shù)字資產(chǎn)的版本相關(guān)的信息■水印/指紋—將防篡改信息添加到數(shù)字資產(chǎn)中■時(shí)間戳—添加訪問數(shù)字資產(chǎn)的定時(shí)信息○如果數(shù)字資產(chǎn)被加密則對(duì)其解密○刪除數(shù)字資產(chǎn)○控制數(shù)字資產(chǎn)可以被讀取和/或修改的次數(shù),例如:■對(duì)讀/寫訪問進(jìn)行計(jì)數(shù)■記錄被讀取和/或被修改的數(shù)據(jù)量○將訪問信息(比如上下文)記入日志通過示例,ERM策略可以定義在應(yīng)用已結(jié)束了其對(duì)數(shù)字資產(chǎn)的訪問之后要執(zhí)行的下列安全動(dòng)作中的任何一種或更多種動(dòng)作:○修改數(shù)字資產(chǎn)以去除或添加信息,例如:以上面一樣的清除、版本化、水印/指紋和/或時(shí)間戳○對(duì)數(shù)字資產(chǎn)進(jìn)行加密○刪除數(shù)字資產(chǎn)這些策略加載有與策略數(shù)據(jù)庫(kù)中的應(yīng)用包名稱相關(guān)聯(lián)的、被存儲(chǔ)在設(shè)備上,或者能夠遠(yuǎn)程得到的特定策略配置。可以在需要時(shí)在應(yīng)用執(zhí)行期間修改并且更新策略。監(jiān)視器內(nèi)的一些策略或任何其他的組件可能需要訪問僅能夠從Android應(yīng)用層而不是從本機(jī)代碼層獲得的功能,比如訪問GUI或不同的Android系統(tǒng)服務(wù),像包管理器和活動(dòng)管理器等。如將在后面進(jìn)一步解釋的,監(jiān)視器可以通過使用事務(wù)(transaction)而詢問在應(yīng)用層中運(yùn)行的安全系統(tǒng)服務(wù)來使用這樣的Android框架功能。策略執(zhí)行機(jī)制如所論述的,主要監(jiān)視器70和進(jìn)程監(jiān)視器分別是附加至Zygote的在Linux層中的進(jìn)程和任何應(yīng)用進(jìn)程。跟蹤系統(tǒng)呼叫用于將主要監(jiān)視器70和進(jìn)程監(jiān)視器附接至其相應(yīng)的目標(biāo)進(jìn)程。在此實(shí)施例中,進(jìn)程跟蹤(ptrace)系統(tǒng)呼叫用于將主要監(jiān)視器70附接至其目標(biāo)進(jìn)程,即Zygote進(jìn)程62,并且將每個(gè)進(jìn)程監(jiān)視器附接至其相應(yīng)的目標(biāo)進(jìn)程。一旦執(zhí)行ptrace系統(tǒng)呼叫以將監(jiān)視器附接至目標(biāo),則目標(biāo)進(jìn)程變成其相應(yīng)監(jiān)視器或父進(jìn)程的子代。關(guān)于進(jìn)程監(jiān)視器,在此實(shí)施例中,ptrace被配置成跟蹤目標(biāo)進(jìn)程主要線程(默認(rèn))并且還跟蹤進(jìn)程線程的剩余部分和子進(jìn)程。在一些實(shí)施例中,這種跟蹤比如相對(duì)于Android應(yīng)用是有幫助的,該Android應(yīng)用通常是多線程應(yīng)用。通過以這種方式配置ptrace,這確保了進(jìn)程監(jiān)視器將接收由每個(gè)單線程和進(jìn)程執(zhí)行的任何系統(tǒng)呼叫的通知,該每個(gè)單線程和進(jìn)程源自根應(yīng)用進(jìn)程。策略執(zhí)行機(jī)制發(fā)生在每個(gè)監(jiān)視器內(nèi)的策略執(zhí)行點(diǎn)中。策略執(zhí)行點(diǎn)通過跟蹤所監(jiān)視的進(jìn)程系統(tǒng)呼叫并且基于可以從所監(jiān)視的進(jìn)程系統(tǒng)呼叫中提取的信息而作出決定來執(zhí)行策略。進(jìn)程監(jiān)視器(使用例如ptrace(PTRACE_ATTACH))與其相應(yīng)的目標(biāo)進(jìn)程附接,然后進(jìn)程監(jiān)視器通知內(nèi)核:每當(dāng)內(nèi)核的目標(biāo)進(jìn)程(使用例如ptrace(PTRACE_SYSCALL))執(zhí)行系統(tǒng)呼叫時(shí)內(nèi)核就應(yīng)當(dāng)通知進(jìn)程監(jiān)視器。當(dāng)執(zhí)行了此設(shè)置時(shí),進(jìn)程監(jiān)視器在與所監(jiān)視的目標(biāo)進(jìn)程附接之后進(jìn)入睡眠(例如,調(diào)用waitpid())。這阻止進(jìn)程監(jiān)視器在系統(tǒng)呼叫之前被所監(jiān)視的目標(biāo)進(jìn)程調(diào)用。當(dāng)通過目標(biāo)進(jìn)程產(chǎn)生系統(tǒng)呼叫時(shí),內(nèi)核將(例如使用SIGCHILD信號(hào))暫停目標(biāo)進(jìn)程執(zhí)行并且將不再阻止進(jìn)程監(jiān)視器。waitpid()函數(shù)將返回生成了系統(tǒng)呼叫的線程的ID(TID)以及用于其他目的的一些另外的進(jìn)程狀態(tài)信息。這時(shí),進(jìn)程監(jiān)視器被配置成檢索所監(jiān)視的進(jìn)程寄存器的狀態(tài),可以從所監(jiān)視的進(jìn)程寄存器獲得系統(tǒng)呼叫號(hào)。線程ID、系統(tǒng)呼叫號(hào)和進(jìn)程寄存器的狀態(tài)被轉(zhuǎn)發(fā)至策略決定點(diǎn),策略決定點(diǎn)將根據(jù)其策略將系統(tǒng)呼叫看作是相關(guān)或不相關(guān)。如果系統(tǒng)呼叫是不相關(guān)的,則系統(tǒng)呼叫將以不作決定的方式立即返回至執(zhí)行點(diǎn)。如果系統(tǒng)呼叫是相關(guān)的,則策略決定點(diǎn)將分析進(jìn)程狀態(tài),并且根據(jù)該進(jìn)程狀態(tài),該策略決定點(diǎn)可以或者可以不向執(zhí)行點(diǎn)返回決定例如要執(zhí)行的安全動(dòng)作。后面更詳細(xì)地說明決定生成機(jī)制。在決定點(diǎn)返回之后,如果決定指示繼續(xù)所監(jiān)視的進(jìn)程則將該執(zhí)行將繼續(xù)所監(jiān)視的進(jìn)程,或者該執(zhí)行將實(shí)現(xiàn)由決定指示的任何其他的安全動(dòng)作,包括阻止系統(tǒng)呼叫、修改系統(tǒng)呼叫的參數(shù)或返回值、請(qǐng)求用于實(shí)現(xiàn)用戶選擇的安全動(dòng)作的用戶輸入、或者甚至完全地終止應(yīng)用進(jìn)程。在允許進(jìn)程繼續(xù)的情況下并且在執(zhí)行決定之后,進(jìn)程監(jiān)視器將通知內(nèi)核繼續(xù)進(jìn)程執(zhí)行(例如,ptrace(PTRACE_SYSCALL))并且返回休眠(例如調(diào)用waitpid()),等待由目標(biāo)監(jiān)視進(jìn)程產(chǎn)生的下一系統(tǒng)呼叫的通知。策略生成機(jī)制決定是必須執(zhí)行以執(zhí)行策略集合的安全動(dòng)作。每個(gè)進(jìn)程監(jiān)視器內(nèi)的策略決定點(diǎn)是負(fù)責(zé)決定生成的組件,每當(dāng)策略執(zhí)行點(diǎn)攔截系統(tǒng)呼叫時(shí)就發(fā)生該決定生成。在此實(shí)施例中,每個(gè)策略決定點(diǎn)包含策略集合,該策略集合取決于用于所監(jiān)視的應(yīng)用的監(jiān)視器類型和安全系統(tǒng)配置。與用戶定義策略(在應(yīng)用層中指定的策略)相比較,這些策略(還被認(rèn)為是低級(jí)策略)被定義在安全系統(tǒng)本身內(nèi)。用戶定義策略可以被翻譯成一個(gè)或更多個(gè)低級(jí)策略,并且可以根據(jù)其語(yǔ)義影響一個(gè)或更多個(gè)監(jiān)視器。執(zhí)行點(diǎn)觸發(fā)決定生成機(jī)制。在攔截系統(tǒng)呼叫之后,執(zhí)行點(diǎn)檢索產(chǎn)生進(jìn)程的用于進(jìn)程的寄存器的狀態(tài),并且檢查這樣的呼叫是進(jìn)入還是退出。策略決定點(diǎn)以及策略具有兩個(gè)條目點(diǎn)(entrypoint),一個(gè)條目點(diǎn)用于進(jìn)入系統(tǒng)呼叫,而另一個(gè)條目點(diǎn)用于退出系統(tǒng)呼叫。這是由于可以在每個(gè)點(diǎn)處檢索的信息不同,所以可以在每個(gè)階段期間作出不同的決定。然后,執(zhí)行點(diǎn)向決定點(diǎn)內(nèi)的特定條目點(diǎn)轉(zhuǎn)發(fā)系統(tǒng)呼叫號(hào)、進(jìn)程寄存器的狀態(tài)和生成了這種系統(tǒng)呼叫的TID(此信息在本文中稱為進(jìn)程狀態(tài))。進(jìn)程狀態(tài)被傳遞至可以返回或可以不返回決定的策略中的每個(gè)策略。在一種形式下,只考慮由策略返回的第一決定,并且丟棄其余決定。在另一形式下,這可以通過對(duì)每個(gè)策略分配不同的優(yōu)先級(jí)或者使用其他的選擇機(jī)制來修改,在此實(shí)施例中,即使已經(jīng)通過策略中的一個(gè)策略生成了決定,在其余策略需要進(jìn)程狀態(tài)來跟蹤進(jìn)程歷史的情況下,仍然向其余策略傳遞進(jìn)程狀態(tài)。在此實(shí)施例中,策略不是整體構(gòu)件,策略不是由可以屬于稱為動(dòng)作模塊的一個(gè)活更多個(gè)策略的可重復(fù)使用模塊來產(chǎn)生。動(dòng)作模塊與唯一系統(tǒng)呼叫相關(guān)聯(lián)并且從進(jìn)程狀態(tài)中提取信息,以提供可以由策略用于生成決定的信息。動(dòng)作模塊,與決定點(diǎn)和策略本身相同,提供兩個(gè)條目點(diǎn),一個(gè)條目點(diǎn)用于進(jìn)入系統(tǒng)呼叫,而另一個(gè)條目點(diǎn)用于退出系統(tǒng)呼叫,然而與決定點(diǎn)和策略本身相比,針對(duì)每個(gè)線程來特定動(dòng)作模塊,所以動(dòng)作模塊除了在其被建立時(shí)之外不需要線程標(biāo)識(shí)符。每個(gè)政策指定針對(duì)每個(gè)線程實(shí)例化并且在所監(jiān)視的Android應(yīng)用(以及子進(jìn)程)內(nèi)運(yùn)行的動(dòng)作模塊列表,這樣使得無論何時(shí)調(diào)用策略條目點(diǎn),如果針對(duì)該線程的動(dòng)作模塊列表不存在,則創(chuàng)建該動(dòng)作模塊列表,并且一旦線程或進(jìn)程退出,則去除該動(dòng)作模塊列表。在此方法下,可以獨(dú)立地跟蹤每個(gè)線程執(zhí)行并且可以執(zhí)行附加的安全檢查。當(dāng)調(diào)用策略條目點(diǎn)時(shí),策略條目點(diǎn)將通過針對(duì)TID的所有動(dòng)作進(jìn)行循環(huán),該TID生成了與該特定系統(tǒng)呼叫相關(guān)聯(lián)的系統(tǒng)呼叫。這些動(dòng)作模塊中的任何模塊應(yīng)當(dāng)認(rèn)為系統(tǒng)呼叫調(diào)用對(duì)其是有意義的(例如,一些特定設(shè)備上的ioctl()或者就在套接字描述符上的open()),該策略將檢查通過這些動(dòng)作模塊收集的數(shù)據(jù)并且生成決定(安全動(dòng)作)。然后將決定返回至策略決定點(diǎn),該策略決定點(diǎn)將根據(jù)其他的策略結(jié)果來決定是否應(yīng)當(dāng)將該決定發(fā)送回到執(zhí)行點(diǎn)。最后,如果決定點(diǎn)已返回了任何決定,則執(zhí)行點(diǎn)將確保作出決定以執(zhí)行生成了該決定的策略。圖6中圖示地示出了此進(jìn)程。安全系統(tǒng)服務(wù)概述安全系統(tǒng)服務(wù)是應(yīng)用層中的Android系統(tǒng)服務(wù),該Android系統(tǒng)服務(wù)向Linux層中的監(jiān)視器暴露所有Android框架功能。安全系統(tǒng)服務(wù)在任何用戶應(yīng)用之前在啟動(dòng)時(shí)運(yùn)行。與向其他的Android應(yīng)用或服務(wù)提供服務(wù)的正常Android服務(wù)相比,在此實(shí)施例中此服務(wù)不通過預(yù)期動(dòng)作過濾器或AIDL接口來暴露其功能。而是,安全系統(tǒng)服務(wù)通過應(yīng)用層與Linux層之間的通信鏈接或進(jìn)程向進(jìn)程監(jiān)視器提供其功能。在此實(shí)施例中,應(yīng)用層中的安全系統(tǒng)服務(wù)與Linux層中的進(jìn)程監(jiān)視器之間的通信經(jīng)由請(qǐng)求Unix套接字而發(fā)生,即安全系統(tǒng)服務(wù)收聽TCP端口上的請(qǐng)求。這些請(qǐng)求稱為事務(wù)。每個(gè)事務(wù)具有唯一ID并且可以包含通過進(jìn)程監(jiān)視器設(shè)定的在服務(wù)中被處理的零個(gè)或更多個(gè)參數(shù),該事務(wù)最終返回向進(jìn)程監(jiān)視器返回的結(jié)果。每個(gè)事務(wù)具有作為進(jìn)程監(jiān)視器的客戶端部分和用安全系統(tǒng)服務(wù)表示的服務(wù)器部分。客戶端部分設(shè)定事務(wù)標(biāo)識(shí)符(事務(wù)ID)和參數(shù),并且將通過套接字串行化的事務(wù)標(biāo)識(shí)符(事務(wù)ID)和參數(shù)發(fā)送至安全系統(tǒng)服務(wù)。事務(wù)是同步的,所以等到已處理了事務(wù)阻止進(jìn)程監(jiān)視器。安全系統(tǒng)服務(wù)被配置成等待對(duì)安全系統(tǒng)服務(wù)套接字的請(qǐng)求。每當(dāng)接收到新事務(wù)時(shí),安全系統(tǒng)服務(wù)檢索事務(wù)ID,并且建立事務(wù)的服務(wù)器部分,該服務(wù)器部分將來自套接字的參數(shù)并行化,并且使新事務(wù)進(jìn)入線程池隊(duì)列中。當(dāng)存在處理事務(wù)的可得到線程時(shí),事務(wù)運(yùn)行并且執(zhí)行其功能。該事務(wù)將返回,并且串行化結(jié)果將被發(fā)送至請(qǐng)求進(jìn)程監(jiān)視器。為了完成此進(jìn)程,進(jìn)程監(jiān)視器接收被并行化的事務(wù)響應(yīng),并且將除去阻止從而繼續(xù)其執(zhí)行。在此實(shí)施例中,通信鏈接可以使用用于保護(hù)安全系統(tǒng)服務(wù)與進(jìn)程監(jiān)視器之間的通信的機(jī)密性的傳輸層安全(TLS,TransportLayerSecurity)。將理解的是,在包括但不限于共享存儲(chǔ)空間等的其他的實(shí)現(xiàn)中,其他的通信鏈接或機(jī)制可以用于實(shí)現(xiàn)安全系統(tǒng)服務(wù)器與進(jìn)程監(jiān)視器之間的通信。在應(yīng)用層中操作以用于訪問Android框架的服務(wù)的安全系統(tǒng)服務(wù)允許通過標(biāo)準(zhǔn)Android接口(比如應(yīng)用)來規(guī)范每個(gè)應(yīng)用策略。而且,安全系統(tǒng)服務(wù)允許進(jìn)程監(jiān)視器處理Android實(shí)現(xiàn)IPC呼叫的特定方式。安全系統(tǒng)服務(wù)向進(jìn)程監(jiān)視器提供至Android服務(wù)的上級(jí)的條目點(diǎn),并且在這樣做時(shí),進(jìn)程監(jiān)視器能夠執(zhí)行其策略。下面進(jìn)一步說明這些方面。示例—設(shè)定安全策略參照?qǐng)D7,將通過示例來描述示出在Android設(shè)備100上的安全系統(tǒng)服務(wù)的功能的安全系統(tǒng)的示例實(shí)現(xiàn)。Android設(shè)備具有在應(yīng)用層42中運(yùn)行的Skype應(yīng)用102和MyBank應(yīng)用104,Skype應(yīng)用102和MyBank應(yīng)用104各自具有分別在Linux層24中的對(duì)應(yīng)Linux進(jìn)程106、108或者被映射至該分別在Linux層24中的對(duì)應(yīng)Linux進(jìn)程106、108。對(duì)應(yīng)進(jìn)程監(jiān)視器110、112分別與每個(gè)Linux進(jìn)程106、108相附接。在Linux層中還示出了Zygote114及其附接的主要監(jiān)視器116。安全系統(tǒng)服務(wù)120被示出作為正常Android服務(wù)在應(yīng)用層42中運(yùn)行。通過示例,示出了在與Skype應(yīng)用相關(guān)聯(lián)的進(jìn)程監(jiān)視器110與安全系統(tǒng)服務(wù)118之間的TCP通信鏈接,并且在任何其他的進(jìn)程監(jiān)視器與安全系統(tǒng)服務(wù)之間還存在或者可以建立相似通信鏈接。與Skype應(yīng)用相附接的進(jìn)程監(jiān)視器110可以使用安全系統(tǒng)服務(wù)120的用于加載為Skype應(yīng)用特定的策略的功能。具體地,當(dāng)進(jìn)程監(jiān)視器110正在進(jìn)行自身配置時(shí),進(jìn)程監(jiān)視器110檢索與(如先前說明的)其所附接的進(jìn)程106相關(guān)聯(lián)的應(yīng)用包名稱,并且然后使用此應(yīng)用識(shí)別數(shù)據(jù)來從安全系統(tǒng)服務(wù)120中請(qǐng)求用于那個(gè)應(yīng)用的一個(gè)或更多個(gè)安全策略,該安全系統(tǒng)服務(wù)120已訪問策略數(shù)據(jù)庫(kù),比如存儲(chǔ)了策略的策略配置文件。針對(duì)應(yīng)用的安全策略可以存儲(chǔ)在設(shè)備永久存儲(chǔ)裝置上的策略配置文件中,在存儲(chǔ)器中,或者可替代地在服務(wù)器或網(wǎng)絡(luò)或能夠通過安全系統(tǒng)服務(wù)訪問的其他設(shè)備上的遠(yuǎn)程位置中。安全策略可以按照各種方式被配置并且被存儲(chǔ)在策略配置文件中。策略可以經(jīng)由定制安全系統(tǒng)應(yīng)用配置有GUI,該GUI可以在應(yīng)用層中進(jìn)行啟動(dòng),并且可以由用戶或者系統(tǒng)管理員來操作,自動(dòng)地在應(yīng)用安裝期間借助應(yīng)用許可來設(shè)定,從通過第三方操作的網(wǎng)絡(luò)或服務(wù)器來檢索,或者可以按照任何其他適合方式來配置。通過示例,MyBank應(yīng)用104是用戶想要保護(hù)的敏感應(yīng)用。用戶不信賴Skype應(yīng)用102以通過IPC呼叫MyBank應(yīng)用。安全管理員可以定義高級(jí)策略比如:Skype不向MyBank授權(quán)IPC。此策略必須被翻譯成進(jìn)程監(jiān)視器110可以執(zhí)行的低級(jí)策略。例如,為了控制應(yīng)用之間的IPC通信,可以實(shí)現(xiàn)低級(jí)策略比如:IPC策略,其拒絕用““CallingAppPackName”表示的應(yīng)用與采用“TargetAppPackName”的應(yīng)用之間的IPC呼叫。策略可能是:拒絕IPC策略(CallingAppPackName、TargetAppPackName、類型)。此策略采取下述量作為變?cè)汉艚袘?yīng)用的包名稱、目標(biāo)應(yīng)用的包名稱和指示目標(biāo)是應(yīng)用還是服務(wù)的參數(shù)。針對(duì)我們的情況,當(dāng)與Skype相附接的進(jìn)程監(jiān)視器110在初始化時(shí)聯(lián)系安全系統(tǒng)服務(wù)120來請(qǐng)求Skype策略時(shí),安全系統(tǒng)服務(wù)將從策略數(shù)據(jù)庫(kù)檢索相關(guān)策略并且代表MyBankapp用為Skype指明包名稱的參數(shù)進(jìn)行答復(fù),并且此MyBank是應(yīng)用。進(jìn)程監(jiān)視器110然后可以加載IPC策略如下:拒絕IPC策略("com.skype.app"、”com.mybank.app”、應(yīng)用)。監(jiān)視IPC系統(tǒng)呼叫在此實(shí)施例中,安全系統(tǒng)服務(wù)的其他主要功能將幫助進(jìn)程監(jiān)視器解析其附接的監(jiān)視進(jìn)程正試圖與其通信的應(yīng)用名稱,使得其然后可以執(zhí)行與該IPC相關(guān)的任何具體策略。在Android中,IPC呼叫機(jī)制使用用于執(zhí)行稱為“意圖(intent)”的遠(yuǎn)程方法調(diào)用的特定類型的消息。意圖表示了遠(yuǎn)程過程呼叫的抽象化,并且是Binder管理不同應(yīng)用之間的IPC所采用的主要方式。在Android中存在兩種被支持的意圖:顯式意圖和隱式意圖。顯式意圖定義哪個(gè)應(yīng)用是意圖的接收器。進(jìn)程監(jiān)視器可以直接地捕捉顯式意圖并且從正在由所監(jiān)視的進(jìn)程執(zhí)行的關(guān)聯(lián)系統(tǒng)呼叫參數(shù)提取目標(biāo)應(yīng)用(或其包名稱)。隱式意圖指示應(yīng)當(dāng)被執(zhí)行但不是目標(biāo)應(yīng)用或服務(wù)的動(dòng)作。然后,直到Android框架才找到意圖的最佳匹配目的地。Android運(yùn)行時(shí)間和具體地活動(dòng)管理器決定哪個(gè)活動(dòng)將是意圖的目標(biāo)。活動(dòng)管理器聯(lián)系包管理器來解析隱式意圖。包管理器是保持與Android設(shè)備上安裝的應(yīng)用和服務(wù)有關(guān)的一些信息的系統(tǒng)服務(wù)之一。從進(jìn)程監(jiān)視器角度看,當(dāng)其監(jiān)視的應(yīng)用正在使用隱式意圖執(zhí)行IPC系統(tǒng)呼叫時(shí),進(jìn)程監(jiān)視器能夠捕捉意圖并且提取其內(nèi)容,然而所提取的信息不足以用于評(píng)價(jià)其安全策略。IPC安全策略需要目標(biāo)應(yīng)用作為參數(shù),但是隱式意圖僅提供對(duì)所請(qǐng)求的服務(wù)的描述。由于包管理器是在Android頂部的應(yīng)用層中運(yùn)行的服務(wù),所以進(jìn)程監(jiān)視器不能夠直接地對(duì)其進(jìn)行訪問。然而,進(jìn)程監(jiān)視器被配置成經(jīng)由Unix套接字與在應(yīng)用層上運(yùn)行的安全系統(tǒng)服務(wù)進(jìn)行交互并且通信,并且該進(jìn)程監(jiān)視器可以向安全系統(tǒng)服務(wù)發(fā)送針對(duì)表示與隱式意圖相關(guān)聯(lián)的目標(biāo)應(yīng)用的信息的請(qǐng)求,使得該進(jìn)程監(jiān)視器可以執(zhí)行與該意圖相關(guān)的相關(guān)安全策略。例如,參照?qǐng)D7,假定:MyBank應(yīng)用104具有方法“myPrecious”,該方法被調(diào)用用于“得到一些珍愛東西”;以及Skype應(yīng)用102想要向具有帶有描述“得到一些珍愛東西”的“myPrecious”方法的應(yīng)用發(fā)送隱式意圖。在Android中(在沒有安裝安全系統(tǒng)的情況下),當(dāng)Skype應(yīng)用102通過Binder發(fā)送意圖時(shí),Binder將詢問包管理器哪個(gè)應(yīng)用具有帶有描述“得到一些珍愛東西”的“myPrecious”方法。包管理器將以MyBank應(yīng)用104進(jìn)行答復(fù)。因此,Binder將向MyBank應(yīng)用發(fā)送意圖,該MyBank應(yīng)用將答復(fù)向Skype應(yīng)用102給出珍愛東西的請(qǐng)求,這可能導(dǎo)致安全問題。當(dāng)在Android設(shè)備上安裝了安全系統(tǒng)時(shí),以上進(jìn)程如下說明地進(jìn)行變化以最小化這種安全風(fēng)險(xiǎn)。當(dāng)在Android設(shè)備上安裝了安全系統(tǒng)使得進(jìn)程監(jiān)視器110與Skype應(yīng)用相附接時(shí),其將攔截在隱式意圖從Skype應(yīng)用發(fā)送至Binder時(shí)生成的系統(tǒng)呼叫。進(jìn)程監(jiān)視器110被配置成檢索意圖內(nèi)信息,但是最初進(jìn)程監(jiān)視器中的策略不能確定目標(biāo)應(yīng)用的尚不知道的包名稱。進(jìn)程監(jiān)視器110不能夠直接地訪問Android層中的包管理器,但是安全系統(tǒng)服務(wù)120能夠如此,這是因?yàn)榘踩到y(tǒng)服務(wù)120是在Android頂部上應(yīng)用層處運(yùn)行的標(biāo)準(zhǔn)Android服務(wù),具有用于進(jìn)程監(jiān)視器的特別通信鏈接即TCP連接。當(dāng)進(jìn)程監(jiān)視器110攔截具有隱式意圖的系統(tǒng)呼叫時(shí),該進(jìn)程監(jiān)視器被配置成拷貝應(yīng)用描述和方法,并且將其與對(duì)目標(biāo)應(yīng)用的包名稱的請(qǐng)求一起通過TCP鏈接118發(fā)送至安全系統(tǒng)服務(wù)120。安全系統(tǒng)服務(wù)120被配置成接收并且處理事務(wù),并且使包管理器提供目標(biāo)應(yīng)用的包名稱,該目標(biāo)應(yīng)用滿足基于其配置的描述。包管理器會(huì)將“com.mybank.app”包名稱返回至安全系統(tǒng)服務(wù),該安全系統(tǒng)服務(wù)會(huì)使用相同的TCP鏈接118將該包名稱轉(zhuǎn)發(fā)至進(jìn)程監(jiān)視器110?,F(xiàn)在,進(jìn)程監(jiān)視器110具有包名稱信息并且能夠評(píng)價(jià)且執(zhí)行其安全策略。在此情況下,上述策略將被評(píng)價(jià),并且由于其是拒絕策略,所以動(dòng)作將被拒絕。3.第二實(shí)施例安全系統(tǒng)—FCI配置概述在此第二實(shí)施例中,安全系統(tǒng)利用Zygote進(jìn)程在每個(gè)新啟動(dòng)進(jìn)程中配置嵌入監(jiān)視實(shí)體,比如嵌入進(jìn)程監(jiān)視方法或函數(shù)。在每個(gè)新進(jìn)程啟動(dòng)期間或者在每個(gè)新進(jìn)程啟動(dòng)之后的某個(gè)時(shí)間,其嵌入監(jiān)視實(shí)體被加載或配置有與應(yīng)用層中應(yīng)用相關(guān)聯(lián)的的安全策略,Linux層中進(jìn)程對(duì)應(yīng)于應(yīng)用層中應(yīng)用。在此實(shí)施例中,安全系統(tǒng)使嵌入監(jiān)視實(shí)體能夠使用FCI機(jī)制或配置來檢測(cè)并且攔截由其進(jìn)程產(chǎn)生的動(dòng)態(tài)鏈接的符號(hào)調(diào)用。如將在后續(xù)更詳細(xì)地說明的,F(xiàn)CI機(jī)制在Linux層的用戶模式下攔截針對(duì)共享對(duì)象庫(kù)的動(dòng)態(tài)鏈接的符號(hào)調(diào)用(其可以意在在Linux層的內(nèi)核模式下調(diào)用一個(gè)或更多個(gè)系統(tǒng)呼叫),并且將該動(dòng)態(tài)鏈接的符號(hào)調(diào)用重新定向至進(jìn)程內(nèi)的嵌入監(jiān)視實(shí)體。嵌入監(jiān)視實(shí)體處理與檢測(cè)的符號(hào)調(diào)用相對(duì)應(yīng)的函數(shù)呼叫,并且基于針對(duì)進(jìn)程而配置的安全策略來實(shí)現(xiàn)安全動(dòng)作。與第一實(shí)施例安全系統(tǒng)一樣,安全動(dòng)作可以根據(jù)下述動(dòng)作而改變:例如,允許函數(shù)呼叫進(jìn)行、修改函數(shù)呼叫的參數(shù)和/或返回值中的任意一個(gè)參數(shù)或返回值、或者停止函數(shù)呼叫,這全部將對(duì)在內(nèi)核模式下執(zhí)行或調(diào)用的任何最終系統(tǒng)呼叫產(chǎn)生相應(yīng)影響或?qū)a(chǎn)生任何其他的側(cè)面影響。參照?qǐng)D8,將說明第二實(shí)施例安全系統(tǒng)300的FCI機(jī)制的總體配置。在此實(shí)施例中,安全系統(tǒng)被配置有代理函數(shù)集合(代理函數(shù)庫(kù))302。代理函數(shù)庫(kù)可以是動(dòng)態(tài)鏈接至每個(gè)進(jìn)程的共享庫(kù),使得每個(gè)進(jìn)程可以被認(rèn)為具有其自己的代理函數(shù)庫(kù),如將在以后所說明,在此實(shí)施例中,該代理函數(shù)庫(kù)采用代理偏移表(POT,ProxyOffsetTable)的形式。當(dāng)進(jìn)程304調(diào)用函數(shù)呼叫306而不是如先前參照?qǐng)D2所述直接進(jìn)入共享庫(kù)308時(shí),由代理函數(shù)庫(kù)305攔截動(dòng)態(tài)鏈接的符號(hào)調(diào)用306。此代理函數(shù)庫(kù)302或者攔截模塊提供動(dòng)態(tài)鏈接的符號(hào)的定制版本,該動(dòng)態(tài)鏈接的符號(hào)的定制版本將調(diào)用或函數(shù)呼叫重新定向至與進(jìn)程304相關(guān)聯(lián)的監(jiān)視實(shí)體310,如以312所示。該動(dòng)態(tài)鏈接的符號(hào)的定制版本與其意在攔截的實(shí)際符號(hào)具有完全相同的簽名(并且可以具有相同的名稱)。圖8為了清楚而示出了相對(duì)于其關(guān)聯(lián)進(jìn)程304為單獨(dú)模塊的監(jiān)視實(shí)體310,然而在此第二實(shí)施例中,監(jiān)視實(shí)體310是在進(jìn)程304內(nèi)提供或操作的嵌入方法或函數(shù)?;谠诒O(jiān)視實(shí)體310中配置的用于進(jìn)程304的一個(gè)或更多個(gè)安全策略,監(jiān)視實(shí)體310對(duì)所檢測(cè)的函數(shù)呼叫實(shí)現(xiàn)安全動(dòng)作或決定。通過示例,監(jiān)視實(shí)體可以允許、拒絕或修改函數(shù)呼叫的執(zhí)行,或者完全終止產(chǎn)生函數(shù)呼叫的被監(jiān)視進(jìn)程304。如果允許執(zhí)行(采用其原始形式或修改形式),那么監(jiān)視實(shí)體將實(shí)際函數(shù)呼叫調(diào)用(采用其原始形式或修改形式)轉(zhuǎn)發(fā)至包含原始符號(hào)308的實(shí)際共享對(duì)象庫(kù),如以314所示。此后,與以往共享對(duì)象庫(kù)308對(duì)系統(tǒng)呼叫網(wǎng)關(guān)316執(zhí)行實(shí)際調(diào)用一樣來執(zhí)行對(duì)實(shí)際共享對(duì)象庫(kù)可以在內(nèi)部調(diào)用的函數(shù)和任何系統(tǒng)呼叫的執(zhí)行,如以318所示,并且如先前參照?qǐng)D2所述。如果拒絕執(zhí)行,則監(jiān)視實(shí)體將禁用對(duì)符號(hào)的調(diào)用以防止函數(shù)呼叫執(zhí)行,并且可以根據(jù)將被調(diào)用的關(guān)聯(lián)系統(tǒng)呼叫的性質(zhì)和/或與進(jìn)程相關(guān)聯(lián)的安全策略來可選地執(zhí)行其他附加的安全動(dòng)作,比如終止整個(gè)進(jìn)程或者將值或錯(cuò)誤代碼返回至進(jìn)程來防止崩潰,如先前相對(duì)于第一實(shí)施例安全系統(tǒng)所論述。以上FCI機(jī)制可以采用各種形式來實(shí)現(xiàn)。具體地,可以利用各種方法將來自實(shí)際共享庫(kù)308的函數(shù)呼叫的執(zhí)行路徑重新定向至由安全系統(tǒng)創(chuàng)建的新代理函數(shù)庫(kù)302,而無需修改Android操作系統(tǒng)和與應(yīng)用層中應(yīng)用相關(guān)聯(lián)的應(yīng)用代碼。現(xiàn)在將更詳細(xì)地描述實(shí)現(xiàn)FCI配置以將執(zhí)行路徑重新定向至代理函數(shù)庫(kù)302的各種形式。第一形式—LD_PRELOAD變量在第一形式下,第二實(shí)施例安全系統(tǒng)使用LD_PRELOAD環(huán)境變量來實(shí)現(xiàn)FCI機(jī)制。LD_PRELOAD是被運(yùn)行時(shí)間鏈接器使用的環(huán)境變量,并且可以用于在可執(zhí)行加載階段在其他庫(kù)之前鏈接用戶特定共享對(duì)象。在此第一形式下,安全系統(tǒng)可以在新進(jìn)程304被啟動(dòng)時(shí)配置LD_PRELOAD變量來告訴運(yùn)行時(shí)間鏈接器鏈接代理函數(shù)庫(kù)302。在此形式下,LD_PRELOAD方法僅在進(jìn)程正在被啟動(dòng)時(shí)才是有效的。當(dāng)在執(zhí)行時(shí),如果進(jìn)程加載來自任何共享對(duì)象的新符號(hào),則LD_PRELOAD設(shè)定不會(huì)影響新加載的符號(hào)。具體地,來自共享對(duì)象的加載代碼可以繞過代理函數(shù)庫(kù)302直接地向共享對(duì)象庫(kù)308調(diào)用函數(shù)呼叫。第二形式—PLT/GOT插入在第二形式下,第二實(shí)施例安全系統(tǒng)可以通過使用PLT/GOT插入來實(shí)現(xiàn)FCI機(jī)制。將參照?qǐng)D9A和9B來更詳細(xì)地描述第二形式。在Android中,使用標(biāo)準(zhǔn)NDK工具鏈編譯的所有二進(jìn)制,具體地負(fù)責(zé)啟動(dòng)Zygote母進(jìn)程(/system/bin/app_process)的二進(jìn)制鏈接至Bioniclibc庫(kù)308(圖8所示)。與正常Linux分布相比,此庫(kù)被動(dòng)態(tài)地鏈接,并且此庫(kù)的代碼在加載于存儲(chǔ)器中時(shí)被所有運(yùn)行應(yīng)用所共享。參照?qǐng)D9A,將進(jìn)一步描述PLT/GOT間接機(jī)制。共享對(duì)象(或共享庫(kù))是特定類型文件,該特定類型文件通過可執(zhí)行且可鏈接格式(ELF)328來定義。在執(zhí)行期間,通過應(yīng)用代碼331對(duì)由共享對(duì)象提供的符號(hào)的調(diào)用被翻譯成至過程鏈接表(PLT)330內(nèi)部的條目的跳指令,數(shù)據(jù)結(jié)構(gòu)被定義為ELF規(guī)范的一部分。此PLT330的條目是存根函數(shù)(stubfunction),該存根函數(shù)在被調(diào)用時(shí)執(zhí)行進(jìn)入全局偏移表(GOT,globaloffsettable)334)內(nèi)條目的跳指令333(還通過ELF規(guī)范來定義)。最后,GOT334中條目是加載在駐存有實(shí)際符號(hào)的存儲(chǔ)器中的共享對(duì)象代碼337內(nèi)的目標(biāo)符號(hào)的真實(shí)地址335。在第二形式下,第二實(shí)施例安全系統(tǒng)300被配置成通過修改如圖9B所示來描述的PLT/GOT間接機(jī)制來實(shí)現(xiàn)FCI機(jī)制。在第二形式下,安全系統(tǒng)被配置成重寫GOT中的條目以將函數(shù)調(diào)用指向新代理偏移表(POT,ProxyOffsetTable)340。340中的每個(gè)條目指向在進(jìn)程中嵌入的嵌入監(jiān)視實(shí)體310,并且調(diào)用監(jiān)視實(shí)體310內(nèi)部的策略執(zhí)行點(diǎn)(PEP,PolicyEnforcementPoint)339。然后,監(jiān)視實(shí)體310對(duì)照為進(jìn)程配置的安全策略來分析正被調(diào)用的符號(hào),并且實(shí)現(xiàn)安全動(dòng)作。如果監(jiān)視實(shí)體310允許符號(hào)調(diào)用,則將通過監(jiān)視實(shí)體來調(diào)用實(shí)際符號(hào)337。在此實(shí)施例中,安全系統(tǒng)被配置成通過用指向POT340中包裹函數(shù)(wrapperfunction)345的地址來改變GOT中原始地址來修改GOT334條目。原始地址作為函數(shù)指針341存儲(chǔ)在POT340中。函數(shù)指針341與原始函數(shù)具有相同的簽名:函數(shù)指針341沒有采用任何變?cè)⑶曳祷卣麛?shù)。POT中的將從GOT334中調(diào)用的條目還與原始函數(shù)具有相同的簽名。當(dāng)應(yīng)用331調(diào)用此函數(shù)func時(shí),POT340中的包裹函數(shù)將執(zhí)行下面步驟。首先,該包裹函數(shù)將調(diào)用監(jiān)視實(shí)體310中的PEP339方法enter343。此enter方法通知PEP339:應(yīng)用331將要執(zhí)行對(duì)函數(shù)func的調(diào)用(注意,尚未執(zhí)行該調(diào)用)。PEP339將獲取函數(shù)的名稱和函數(shù)參數(shù)(在此示例中,func不采用任何參數(shù))。PEP339會(huì)將此信息傳遞至監(jiān)視實(shí)體310中的其他模塊以決定安全動(dòng)作。在對(duì)監(jiān)視實(shí)體內(nèi)部的策略或者被監(jiān)視實(shí)體訪問的策略進(jìn)行評(píng)價(jià)之后,如果PEP339返回343“允許”,那么可以執(zhí)行函數(shù)func347。在此示例中,函數(shù)func返回整數(shù)。在函數(shù)返回之后,安全系統(tǒng)被配置成在函數(shù)完成了其執(zhí)行并且返回了其值之后執(zhí)行二次檢查。這使監(jiān)視實(shí)體能夠在需要時(shí)通過為調(diào)用該函數(shù)的應(yīng)用331而設(shè)定的安全策略來檢查并且修改函數(shù)的返回值。例如,監(jiān)視實(shí)體可以去除一些敏感信息或數(shù)據(jù),或者可以用偽返回值來修改一個(gè)或更多個(gè)返回值。通過調(diào)用監(jiān)視實(shí)體310內(nèi)部的PEP方法exit349并且提供由函數(shù)返回的值作為變?cè)獊韴?zhí)行此二次檢查。如果安全策略指示出不應(yīng)當(dāng)允許應(yīng)用331調(diào)用函數(shù)func,PEP339的enter方法還可以返回“拒絕”值342。在此情況下,將函數(shù)特定錯(cuò)誤代碼344返回至應(yīng)用331??商娲兀琍EP339的enter方法可以返回“終止”346應(yīng)用的決定。在此情況下,包裹函數(shù)345將執(zhí)行終止進(jìn)程及其應(yīng)用的退出。GOT被填充的方式取決于程序的編譯設(shè)定,即,操作系統(tǒng)和/或應(yīng)用。通過默認(rèn)方式,GOT條目使用懶惰加載方法來填充。在進(jìn)程首次調(diào)用動(dòng)態(tài)鏈接的符號(hào)時(shí),函數(shù)的實(shí)際地址被解析并且被插入GOT中。這意指需要GOT的存儲(chǔ)頁(yè)面能夠在運(yùn)行時(shí)間修改。另一選項(xiàng)是重定位只讀(RELRO,RelocationReadOnly)。此選項(xiàng)指示:運(yùn)行時(shí)間鏈接器必須在進(jìn)程的加載時(shí)間期間解析GOT中的所有依賴項(xiàng)。此選項(xiàng)仍包括在運(yùn)行時(shí)間修改GOT存儲(chǔ)頁(yè)面,但是這些修改僅在加載時(shí)間來進(jìn)行。最后,存在與RELRO執(zhí)行相同操作的FULLRELRO選項(xiàng),但是當(dāng)GOT被填充時(shí),存儲(chǔ)頁(yè)被設(shè)定為只讀。這意指僅進(jìn)程本身可以改變這些條目。通過示例,AndroidJellyBean(版本4.1)Google使用用于編譯Android和系統(tǒng)應(yīng)用代碼的FULLRELRO選項(xiàng)。在第二形式下,POT340表示代理函數(shù)庫(kù)302,該代理函數(shù)庫(kù)302攔截來自其關(guān)聯(lián)進(jìn)程的動(dòng)態(tài)鏈接的符號(hào)調(diào)用,并且將該動(dòng)態(tài)鏈接的符號(hào)調(diào)用重定向至嵌入監(jiān)視實(shí)體310。在一個(gè)示例中,安全系統(tǒng)被配置成在每個(gè)新啟動(dòng)進(jìn)程中注入修改GOT條目的代碼。當(dāng)監(jiān)視實(shí)體正在相同進(jìn)程內(nèi)運(yùn)行時(shí),通過使用系統(tǒng)呼叫mprotect(),安全系統(tǒng)可以將GOT334的存儲(chǔ)頁(yè)面設(shè)定為可寫,可以執(zhí)行修改,并且然后可以執(zhí)行mprotect()系統(tǒng)呼叫來設(shè)回如在FULLRELRO中使用的只讀許可。在另一示例中,安全系統(tǒng)可以使用是C庫(kù)的Libhijack以在執(zhí)行時(shí)間期間向每個(gè)新重啟動(dòng)進(jìn)程中注入用于修改GOT條目的代碼。具體地,安全系統(tǒng)可以使用Libhijack來修改目標(biāo)進(jìn)程的GOT條目以重新定向函數(shù)呼叫。Libhijack利用用于修改目標(biāo)進(jìn)程的存儲(chǔ)頁(yè)面的ptrace系統(tǒng)呼叫。然而,當(dāng)Libhijack基于ptrace時(shí),在FULLRELRO被使用時(shí)比如在AndroidJellyBean中不能夠使用Libhijack。第三形式—組合LD_PRELOAD變量和PLT/GOT插入的混合FCI機(jī)制在第三形式下,安全系統(tǒng)實(shí)現(xiàn)將LD_PRELOAD的簡(jiǎn)單與PLT/GOT插入的魯棒性相組合的混合方法來實(shí)現(xiàn)FCI機(jī)制。如以下所進(jìn)一步說明的,在此第三形式下,安全系統(tǒng)利用母進(jìn)程Zygote來配置并且實(shí)現(xiàn)FCI機(jī)制。參照?qǐng)D10,首先,init.rc文件被修改以將針對(duì)母進(jìn)程Zygote的LD_PRELOAD值設(shè)定成指向代理函數(shù)庫(kù)302a。當(dāng)安全系統(tǒng)最初僅關(guān)注Zygote對(duì)fork()系統(tǒng)呼叫的調(diào)用時(shí),安全系統(tǒng)在Zygote進(jìn)程中針對(duì)fork()創(chuàng)建一個(gè)單代理函數(shù)。當(dāng)從Zygote350分叉出進(jìn)程351時(shí),置于代理函數(shù)庫(kù)302a中的與原始fork()函數(shù)具有相同的簽名和名稱的分叉代理函數(shù)將被呼叫。這個(gè)被修改的分叉代理函數(shù)將僅僅將調(diào)用轉(zhuǎn)發(fā)352至libc庫(kù)308中的真實(shí)分叉函數(shù)以分裂出新子進(jìn)程353。當(dāng)子進(jìn)程353被創(chuàng)建時(shí),子進(jìn)程353將是父進(jìn)程Zygote350的準(zhǔn)確拷貝或克隆354。這意指還將在新子進(jìn)程353中拷貝Zygote的庫(kù)。具體地,還將使修改的LD_PRELOAD設(shè)定對(duì)子進(jìn)程有效,使得該修改的LD_PRELOAD設(shè)定指向其自己的代理函數(shù)庫(kù)302b。當(dāng)內(nèi)核308完成分叉時(shí),內(nèi)核308向父Zygote350和子進(jìn)程353二者返回值。然而,在返回實(shí)際進(jìn)程之前,libc庫(kù)308將通過兩個(gè)進(jìn)程的代理函數(shù)庫(kù)302a、302b。用于Zygote進(jìn)程350的fork()代理函數(shù)302a將僅返回355、356而無任何修改。然而,子進(jìn)程353的代理函數(shù)庫(kù)302b將在返回358、359之前使用上述mprotect()系統(tǒng)呼叫方法來執(zhí)行GOT條目357的修改?,F(xiàn)在從自身起,將通過修改的GOT條目來攔截由子進(jìn)程353執(zhí)行的任何函數(shù)呼叫。當(dāng)新進(jìn)程353專用化為預(yù)期應(yīng)用時(shí),嵌入的進(jìn)程監(jiān)視方法(監(jiān)視實(shí)體)將鏈接或加載用于應(yīng)用的適當(dāng)安全策略。如先前指出的,與其中進(jìn)程監(jiān)視器是與其目標(biāo)進(jìn)程相附接的單獨(dú)進(jìn)程的第一實(shí)施例安全系統(tǒng)相比,監(jiān)視實(shí)體被嵌入,或者是其正在監(jiān)視的同一進(jìn)程的一部分。在此第二實(shí)施例中,嵌入的進(jìn)程監(jiān)視方法已訪問新進(jìn)程正專用化成的應(yīng)用的包名稱,并且因此可以按照與先前參照第一實(shí)施例安全系統(tǒng)描述的方式類似的方式來檢索適當(dāng)安全策略。在此方式下,通過PLT/GOT修改來針對(duì)新子進(jìn)程353實(shí)現(xiàn)FCI機(jī)制的主要優(yōu)點(diǎn)是:即使子進(jìn)程加載外部庫(kù)作為共享對(duì)象,PLT/GOT修改也仍將是有效的。但對(duì)于如在第一形式下僅使用LD_PRELOAD而言卻不可能是這樣的。由于系統(tǒng)僅關(guān)注攔截來自主要Zygote可執(zhí)行代碼(而非來自被其使用的其他共享對(duì)象)的fork()符號(hào)調(diào)用,所以使用LD_PRELOADFCI機(jī)制是合適的。如果新進(jìn)程353調(diào)用分叉來開始新子進(jìn)程,則會(huì)將所有GOT修改拷貝至子進(jìn)程存儲(chǔ)器中。因此,子進(jìn)程將具有帶有其自身代理函數(shù)庫(kù)的嵌入FCI機(jī)制,并且也將通過其自身的嵌入進(jìn)程監(jiān)視方法來進(jìn)行監(jiān)視。第三形式混合FCI機(jī)制的部署為了在Android中部署安全系統(tǒng),將在安全系統(tǒng)共享對(duì)象中編譯安全系統(tǒng)代碼。將在是標(biāo)準(zhǔn)文件夾的/system/libor/vendor/lib中部署共享對(duì)象,在Android中庫(kù)位于該標(biāo)準(zhǔn)文件夾中??商娲?,可以在任何其他文件夾中部署安全系統(tǒng)代碼。為了實(shí)現(xiàn)安全系統(tǒng),改變init.rc文件以將環(huán)境變量LD_PRELOAD設(shè)定成指向安全系統(tǒng)共享對(duì)象。當(dāng)在引導(dǎo)時(shí)間開始Zygote時(shí),運(yùn)行時(shí)間鏈接器將在任何其他庫(kù)之前加載安全系統(tǒng)共享對(duì)象。這樣,當(dāng)Zygote執(zhí)行分叉時(shí),將調(diào)用針對(duì)fork()符號(hào)的代理函數(shù)而非由Bioniclibc提供的實(shí)際fork()。安全考慮對(duì)由于使用第三形式的FCI混合機(jī)制引起的幾種安全考慮進(jìn)行論述。首先,通過此方法,安全系統(tǒng)代碼將是目標(biāo)進(jìn)程圖像的一部分。正因如此,目標(biāo)進(jìn)程可能執(zhí)行修改GOT條目的代碼來指向原始存儲(chǔ)地址,從而繞過監(jiān)視實(shí)體。為了避免此問題,一旦修改了GOT條目,安全系統(tǒng)產(chǎn)生借助于mprotect()函數(shù)呼叫只讀的GOT條目的存儲(chǔ)頁(yè)面。這意味著在目標(biāo)進(jìn)程想要改變GOT條目的情況下,首先,目標(biāo)進(jìn)程必須呼叫mprotect()函數(shù)呼叫來使存儲(chǔ)頁(yè)面可寫。然而,安全系統(tǒng)可以被配置成攔截此呼叫(通過其在代理函數(shù)庫(kù)中的mprotect()代理函數(shù)),并且經(jīng)由嵌入監(jiān)視實(shí)體來拒絕其執(zhí)行。作為示例,如果安全系統(tǒng)檢測(cè)到進(jìn)程正在試圖除去對(duì)屬于GOT的存儲(chǔ)頁(yè)面的保護(hù),則可以拒絕執(zhí)行。使用由此實(shí)施例提供的方法,根據(jù)靜態(tài)鏈接庫(kù)使用的代碼作為二進(jìn)制文本區(qū)域的一部分被包括,這意味著該代碼不在安全系統(tǒng)的控制下。然而,此方法假定已被靜態(tài)鏈接的所有代碼是受信任代碼。安全系統(tǒng)的主要關(guān)注是可以在運(yùn)行時(shí)間加載的那些共享對(duì)象??梢越柚谔峁┰谒鑵?shù)之后的系統(tǒng)呼叫號(hào)的syscall()函數(shù)呼叫來調(diào)用系統(tǒng)呼叫。這可以繞過針對(duì)這種系統(tǒng)呼叫的安全系統(tǒng)。為了避免這種情況,安全系統(tǒng)可以被配置成攔截syscall()庫(kù)函數(shù)并且檢索與進(jìn)程想要執(zhí)行的系統(tǒng)呼叫相對(duì)應(yīng)的系統(tǒng)呼叫號(hào)。代替使用來自原始庫(kù)的系統(tǒng)呼叫,監(jiān)視器可以將執(zhí)行重定向至與這種系統(tǒng)呼叫相對(duì)應(yīng)的代理函數(shù)。函數(shù)dlsym()將通過dlopen()返回的動(dòng)態(tài)庫(kù)句柄和符號(hào)名稱串作為參數(shù),并且返回該符號(hào)被加載到存儲(chǔ)器中的地址。作為特定偽句柄,可以向其傳遞RTLD_NEXT常量,以便于在當(dāng)前庫(kù)之后在搜索命令下找到函數(shù)的下次出現(xiàn)。這意味這必須以遞歸方式修改GOT中條目。這還適用于其中共享對(duì)象利用第二共享對(duì)象的情況。為了能夠攔截來自第二共享對(duì)象的函數(shù)呼叫,我們需要執(zhí)行遞歸攔截來避免此問題。動(dòng)態(tài)切換至SCI機(jī)制—Ptrace存在仍有可能繞過第三形式混合FCI機(jī)制的情況。例如,進(jìn)程可能想要借助于dlopen函數(shù)呼叫從隨機(jī)共享對(duì)象加載不受信任符號(hào)。GOT條目的修改針對(duì)此代碼將不是有效的,這是因?yàn)槌绦蚨M(jìn)制沒有鏈接至這種共享對(duì)象,所以對(duì)于這種符號(hào)在PLT/GOT中沒有條目。另一問題是聯(lián)機(jī)匯編代碼,該聯(lián)機(jī)匯編代碼允許應(yīng)用繞過libc庫(kù)以便于通過機(jī)器代碼調(diào)用系統(tǒng)呼叫。在此情況下,代碼被編譯器輸入二進(jìn)制文本區(qū)域內(nèi),并且無庫(kù)呼叫被調(diào)用,這是因?yàn)檎{(diào)用系統(tǒng)呼叫的機(jī)器代碼在編譯時(shí)間被輸入該二進(jìn)制文本區(qū)域內(nèi)。這意指可以使用此機(jī)制來繞過安全系統(tǒng)。然而,安全系統(tǒng)可以被配置成檢測(cè)以上行為。針對(duì)dlopen函數(shù)呼叫的情況,進(jìn)程必須調(diào)用由libdl.so提供并且被動(dòng)態(tài)鏈接的符號(hào)。安全系統(tǒng)提供針對(duì)此符號(hào)的代理函數(shù),這意味著,安全系統(tǒng)在運(yùn)行時(shí)間可以控制加載哪些共享對(duì)象。針對(duì)聯(lián)機(jī)匯編代碼問題,安全系統(tǒng)可以被配置成解析不受信任本機(jī)代碼以檢測(cè)下述指令:該指令生成硬件中斷來改變成監(jiān)督模式(SWI#0onARM)。在以上兩種情況下,當(dāng)針對(duì)第一實(shí)施例安全系統(tǒng)進(jìn)行動(dòng)態(tài)切換時(shí),安全系統(tǒng)可以動(dòng)態(tài)地切換至使用SCI機(jī)制比如ptrace()。通過參照?qǐng)D11的示例,當(dāng)進(jìn)程370調(diào)用dlopen函數(shù)呼叫371時(shí),安全系統(tǒng)使用在其代理函數(shù)庫(kù)372中的dlopen代理函數(shù)來攔截函數(shù)呼叫。dlopen代理函數(shù)將被配置成分叉出新進(jìn)程,該新進(jìn)程是包括代理函數(shù)庫(kù)376的運(yùn)行進(jìn)程370的準(zhǔn)確克隆377。當(dāng)分叉返回378在克隆的進(jìn)程376上時(shí),克隆的代理函數(shù)庫(kù)376將禁用代理函數(shù)庫(kù)并且調(diào)用具有選項(xiàng)PTRACE_TRACEME的ptrace系統(tǒng)呼叫379。此選項(xiàng)告訴內(nèi)核該子進(jìn)程375想要被另一進(jìn)程370監(jiān)視。子進(jìn)程375還提出停止SIGSTOP380,直到父進(jìn)程370允許子進(jìn)程375恢復(fù)其執(zhí)行。當(dāng)子進(jìn)程375恢復(fù)其執(zhí)行時(shí),子進(jìn)程375將繼續(xù)dlopen384操作,并且共享對(duì)象(新本機(jī)代碼)將被加載在其圖像內(nèi),使得共享對(duì)象的符號(hào)將能夠被進(jìn)程訪問。另一方面,監(jiān)視父進(jìn)程還將停用代理函數(shù)庫(kù)372,并且將通過調(diào)用具有選項(xiàng)PTRACE_SYSCALL382的ptrace來遞送信號(hào)383以用于使新進(jìn)程375繼續(xù)其執(zhí)行直到其下一系統(tǒng)呼叫為止。父進(jìn)程中的監(jiān)視實(shí)體然后可以基于與父進(jìn)程相關(guān)聯(lián)的安全策略來執(zhí)行關(guān)于所攔截的系統(tǒng)呼叫的安全動(dòng)作。換句話說,父進(jìn)程370與子進(jìn)程375相附接,使得父進(jìn)程370被配置成如在第一實(shí)施例安全系統(tǒng)中一樣經(jīng)由ptrace監(jiān)視由其目標(biāo)子進(jìn)程375產(chǎn)生的系統(tǒng)呼叫。當(dāng)沒有加載共享對(duì)象時(shí),可以終止克隆進(jìn)程375并且將如在代理函數(shù)的FCI機(jī)制攔截函數(shù)呼叫之前一樣來恢復(fù)主要父進(jìn)程370的執(zhí)行。例如,監(jiān)視實(shí)體可以被配置成檢測(cè)對(duì)dlclose的呼叫,該呼叫通知dlcolse共享對(duì)象未加載。4.定時(shí)(后期/延遲/懶惰)安全策略綁定概述將來自安全策略數(shù)據(jù)庫(kù)或策略配置源的安全策略加載或鏈接至與對(duì)應(yīng)于新啟動(dòng)應(yīng)用的新進(jìn)程相附接或者嵌入在該新進(jìn)程內(nèi)的監(jiān)視實(shí)體涉及獲得正確識(shí)別應(yīng)用(這種進(jìn)程已專用為該應(yīng)用)的信息。如先前論述的,在常規(guī)Unix和Linux操作系統(tǒng)中,已提出了安全系統(tǒng),該安全系統(tǒng)基于它們從殼命令行直接得到的啟動(dòng)信息將安全策略與新進(jìn)程相鏈接,該啟動(dòng)信息包含新啟動(dòng)應(yīng)用的應(yīng)用名稱作為變?cè)?。參照?qǐng)D12,在402處,這種安全系統(tǒng)基于初始啟動(dòng)指令400例如殼命令行變?cè)獊礞溄踊蛘邫z索將一個(gè)或更多個(gè)安全策略與新進(jìn)程相鏈接所需的應(yīng)用識(shí)別數(shù)據(jù)。此早期安全策略綁定機(jī)制意味著安全策略甚至在新進(jìn)程的實(shí)際應(yīng)用代碼開始專用化之前就與新啟動(dòng)應(yīng)用相關(guān)聯(lián)。關(guān)于此方法的主要問題是惡意應(yīng)用可能通過后期專用為與在殼變?cè)惺褂玫膽?yīng)用不同的應(yīng)用來愚弄系統(tǒng):作為結(jié)果,錯(cuò)誤安全策略集合可能與新進(jìn)程相關(guān)聯(lián)。參照?qǐng)D12,在至少一些實(shí)施例中的安全系統(tǒng)使用后期安全策略綁定機(jī)制,其中,一個(gè)或更多個(gè)安全策略與新啟動(dòng)進(jìn)程的鏈接或關(guān)聯(lián)被定時(shí)或者延遲,直到達(dá)到預(yù)定義識(shí)別閾值或者發(fā)生了預(yù)定義事件為止,比如至少直到在通過母進(jìn)程分叉出404新進(jìn)程時(shí)或在這之后為止,如以406所示。例如,直到分叉出404新進(jìn)程時(shí)或在這之后才確定或提取與新進(jìn)程正在專用為的應(yīng)用或應(yīng)用類型相對(duì)應(yīng)的應(yīng)用識(shí)別數(shù)據(jù)(其被用于與一個(gè)或更多個(gè)正確安全策略相鏈接或相關(guān)聯(lián))。在此描述中,安全策略與進(jìn)程相“鏈接”或“關(guān)聯(lián)”的短語(yǔ)意思是指:提取新進(jìn)程將專用為的在應(yīng)用層中的應(yīng)用的應(yīng)用識(shí)別數(shù)據(jù)(例如,應(yīng)用名稱、簽名或者包名稱),使得基于該應(yīng)用識(shí)別數(shù)據(jù)和/或?qū)⒁粋€(gè)或更多個(gè)安全策略配置或加載進(jìn)與新進(jìn)程相附接或者嵌入到新進(jìn)程中的監(jiān)視實(shí)體內(nèi)的實(shí)際配置或加載來確定一個(gè)或更多個(gè)安全策略。在一種形式下,在已分叉出404新子進(jìn)程時(shí)或者就在這之后不久鏈接安全策略。在另一形式下,當(dāng)新子進(jìn)程正在專用化408或者一旦新進(jìn)程已經(jīng)專用化時(shí)將安全策略與應(yīng)用代碼相鏈接。在另一形式下,在新進(jìn)程在專用化之后開始執(zhí)行410加載的應(yīng)用代碼時(shí)或者在這之后鏈接安全策略。在另一形式下,僅在達(dá)到預(yù)定義識(shí)別閾值時(shí)才鏈接安全策略,該預(yù)定義識(shí)別閾值對(duì)應(yīng)于采集或者接收足夠的或充分的數(shù)據(jù)或證據(jù),而該數(shù)據(jù)或證據(jù)指示或確認(rèn):在Linux層中啟動(dòng)的新進(jìn)程對(duì)應(yīng)于用戶打算啟動(dòng)的在應(yīng)用層中的應(yīng)用。以上后期安全策略綁定機(jī)制在Android操作系統(tǒng)的環(huán)境中可以應(yīng)用于或?qū)崿F(xiàn)于以上描述的第一實(shí)施例安全系統(tǒng)或第二實(shí)施例安全系統(tǒng)中任意一個(gè)。另外地,此后期策略綁定機(jī)制可以應(yīng)用于其他的操作系統(tǒng),包括Linux或者Unix操作系統(tǒng)、iOS或者隨著母進(jìn)程一起啟動(dòng)新進(jìn)程的任何其他的操作系統(tǒng),如將在下面僅通過示例所說明。后期安全策略綁定機(jī)制可以實(shí)現(xiàn)在第一實(shí)施例或第二實(shí)施例中描述的安全系統(tǒng)的環(huán)境中,或者可以實(shí)現(xiàn)在需要將一個(gè)或更多個(gè)應(yīng)用特有或一個(gè)或更多個(gè)應(yīng)用類型特有安全策略與執(zhí)行該應(yīng)用的新啟動(dòng)進(jìn)程相關(guān)聯(lián)的任何其他的操作系統(tǒng)安全系統(tǒng)的環(huán)境中。Android操作系統(tǒng)如先前針對(duì)第一實(shí)施例安全系統(tǒng)所說明的,在新分叉子進(jìn)程的專用化進(jìn)程的最后步驟期間檢索應(yīng)用識(shí)別數(shù)據(jù)(例如,全應(yīng)用包名稱)。具體地,當(dāng)安全系統(tǒng)被配置成依賴由專用化408成為應(yīng)用的子進(jìn)程執(zhí)行的最后步驟時(shí),這時(shí),該應(yīng)用將其應(yīng)用名稱設(shè)定至例如/proc文件系統(tǒng)內(nèi)的專用化數(shù)據(jù)文件中。當(dāng)應(yīng)用已專用化時(shí),應(yīng)用會(huì)在prctl系統(tǒng)呼叫退出之后將其名稱設(shè)定到/proc/self/cmdline文件中。這在分叉出404進(jìn)程之后并且在新進(jìn)程開始執(zhí)行410實(shí)際應(yīng)用代碼之前發(fā)生。還可以使用用于提取或者識(shí)別進(jìn)程已專用為或正在專用為的應(yīng)用或者應(yīng)用類型的其他方法,并且將在后續(xù)更詳細(xì)地說明一些其他的示例。Linux操作系統(tǒng)還可以在將安全系統(tǒng)部署或?qū)崿F(xiàn)在Linux操作系統(tǒng)上時(shí)使用后期安全策略綁定機(jī)制。在Linux中,使用/proc文件系統(tǒng)以用于保持關(guān)于運(yùn)行進(jìn)程的信息(如在Android中),就Android而言,在進(jìn)程已專用化之后,與新啟動(dòng)進(jìn)程相關(guān)的應(yīng)用識(shí)別數(shù)據(jù)被設(shè)定在/proc文件系統(tǒng)中,并且可以被檢索以使一個(gè)或更多個(gè)適當(dāng)安全策略能夠與新進(jìn)程相鏈接。iOS—移動(dòng)操作系統(tǒng)還可以在iOS平臺(tái)部署所描述的安全系統(tǒng)。第一實(shí)施例安全系統(tǒng)在iOS上工作的主要要求是:(i)用于跟蹤進(jìn)程執(zhí)行的系統(tǒng)呼叫插入機(jī)制比如ptrace等;以及(ii)用于將進(jìn)程監(jiān)視器與進(jìn)程相附接的機(jī)制。當(dāng)iOS是基于Linux的OS時(shí),存在ptrace工具。然而,在iOS中,ptrace經(jīng)常被應(yīng)用開發(fā)者用來拒絕調(diào)試器與其應(yīng)用相附接。ptrace選擇PT_DENY_ATTACH。此選項(xiàng)是避免與進(jìn)程相附接的保護(hù)機(jī)制。這意味著其他的進(jìn)程不能夠使用在其代碼中此選項(xiàng)與該進(jìn)程相附接。為了繞過此限制并且能夠與進(jìn)程相附接(即使其受PT_DENY_ATTACH選項(xiàng)保護(hù)也如此),存在幾種方案。還可以使進(jìn)程監(jiān)視器與iOS中的應(yīng)用進(jìn)程相附接。用Objective-C(C的超集)來書寫iOS中的應(yīng)用。正如所有C程序一樣,Objective-C程序以主要方法開始。自動(dòng)針對(duì)iOS中的所有應(yīng)用來創(chuàng)建此主要方法,并且該主要方法被置于支持文件組中的單獨(dú)main.m文件中。所有應(yīng)用具有相同的主要方法。每個(gè)主要方法呼叫UIApplicationMain方法,其負(fù)責(zé)加載為正在被啟動(dòng)的應(yīng)用特定的類。為了使進(jìn)程監(jiān)視器與新進(jìn)程相附接,安全系統(tǒng)被配置成修改在運(yùn)行iOS的設(shè)備上安裝的每個(gè)應(yīng)用的主要方法。具體地,安全系統(tǒng)被配置成首先修改iOS來啟動(dòng)安全系統(tǒng)的主要監(jiān)視器,并且然后主要監(jiān)視器將使用UIApplicationMain來啟動(dòng)每個(gè)應(yīng)用。使主要方法代碼的修改自動(dòng)化。安全系統(tǒng)設(shè)置有通過應(yīng)用來部署安全系統(tǒng)的腳本,并且該腳本使得修改所有main.m文件。另外地,腳本被配置成在安裝了安全系統(tǒng)之后修改下載到設(shè)備上的任何應(yīng)用的main.m文件。main.m文件是編譯代碼,并且存在可以按照其用修改版本來修改或者置換main.m文件的各種方式??蛇x地,安全系統(tǒng)可以被配置成使用otool來修補(bǔ)應(yīng)用的可執(zhí)行體以反匯編二進(jìn)制main.m代碼,并且然后用所需ARM代碼來對(duì)其進(jìn)行修補(bǔ)以將呼叫插入到安全系統(tǒng)的主要監(jiān)視代碼。當(dāng)安裝安全系統(tǒng)使得進(jìn)程監(jiān)視器能夠與應(yīng)用相附接并且監(jiān)視應(yīng)用時(shí),可以使用后期安全策略綁定機(jī)制來使一個(gè)或更多個(gè)安全策略與應(yīng)用相鏈接。iOS基于Unix,并且iOS使用其自身的/proc文件系統(tǒng)的版本。然而,為了訪問在/proc文件系統(tǒng)中包含的應(yīng)用識(shí)別數(shù)據(jù)或信息,可以使用sysctl特定系統(tǒng)呼叫。此系統(tǒng)呼叫檢索關(guān)于內(nèi)核狀態(tài)的信息,包括運(yùn)行進(jìn)程的名稱。使用sysctl系統(tǒng)呼叫,安全系統(tǒng)可以等待直到進(jìn)程名稱被設(shè)定為止(到這時(shí),sysctl將能夠檢索該進(jìn)程名稱),并且可以將安全策略加載或鏈接至進(jìn)程。通?;赨nix的系統(tǒng)通常,后期安全策略綁定機(jī)制可以應(yīng)用于任何基于Unix的系統(tǒng)(包括如上指出的Android、Linux和iOS),在該基于Unix的系統(tǒng)中,創(chuàng)建新進(jìn)程,并且在能夠通過附接或嵌入在進(jìn)程中的進(jìn)程監(jiān)視器直接地(關(guān)于例如Android和Linux中的/proc)或者間接地(關(guān)于例如iOS中的sysctl)訪問的單獨(dú)位置中設(shè)定新進(jìn)程的專用化應(yīng)用包名稱。這是因?yàn)?,在基于Unix的系統(tǒng)中,當(dāng)進(jìn)程被啟動(dòng)時(shí),從父進(jìn)程分叉出該進(jìn)程。例如,在LinuxOS的情況下,存在稱為init的特定進(jìn)程,init負(fù)責(zé)通過命令殼來開始任何新進(jìn)程。當(dāng)在Linux中部署安全系統(tǒng)時(shí),主要監(jiān)視器可以與init相附接,并且無論何時(shí)分叉出新進(jìn)程,都將附接新進(jìn)程監(jiān)視器。然后使用后期安全策略綁定機(jī)制來確定要與新進(jìn)程相鏈接并且在所監(jiān)視的進(jìn)程上執(zhí)行的安全策略。進(jìn)程專用化的示例在Unix/Linux操作系統(tǒng)中,進(jìn)程的創(chuàng)建404獨(dú)立于其專用化408,如圖12所示。借助于fork系統(tǒng)呼叫來執(zhí)行進(jìn)程的創(chuàng)建。當(dāng)進(jìn)程呼叫fork時(shí),創(chuàng)建404是父進(jìn)程的準(zhǔn)確拷貝的子進(jìn)程。兩個(gè)進(jìn)程將彼此獨(dú)立地繼續(xù)執(zhí)行。然而,每個(gè)進(jìn)程必須知道其是子進(jìn)程還是父進(jìn)程。這可以通過由fork返回的值來進(jìn)行。在父進(jìn)程中,fork返回新創(chuàng)建子進(jìn)程的進(jìn)程ID(PID)。在子進(jìn)程中,fork返回0。由于PID沒有分配給任何進(jìn)程,所以子進(jìn)程知道其是子進(jìn)程并且其必須進(jìn)行專用化。在Android中,以與Unix/Linux相似的方式來創(chuàng)建進(jìn)程。然而,進(jìn)程專用化的方式不同。在Unix/Linux中,子進(jìn)程借助于呼叫來自exec系列的系統(tǒng)呼叫之一來進(jìn)行專用化。當(dāng)進(jìn)程呼叫exec系統(tǒng)呼叫時(shí),進(jìn)程終止執(zhí)行其當(dāng)前程序并且從新程序的開頭開始執(zhí)行新程序。exec系統(tǒng)呼叫使用要被傳遞至程序的程序名稱和參數(shù)作為變?cè)?。存在幾種方式,其中子進(jìn)程以這些方式得到要執(zhí)行或者為專用為的程序的應(yīng)用名稱,如以下所進(jìn)一步說明。檢索硬編碼至父進(jìn)程中的應(yīng)用名稱在一個(gè)示例中,程序名稱已經(jīng)被硬編碼在父進(jìn)程代碼中。在分叉出新子進(jìn)程之后,子進(jìn)程將使用該名稱以用于通過execvp系統(tǒng)呼叫來執(zhí)行該子進(jìn)程。在此示例中,可以在分叉之后直接地從子進(jìn)程代碼中提取應(yīng)用識(shí)別數(shù)據(jù)。從文件檢索應(yīng)用名稱在另一示例中,父進(jìn)程還可以從其代碼外部檢索程序名稱。例如,父進(jìn)程可以從文件讀取程序名稱。在此示例中,可以直接地從這種文件中提取應(yīng)用識(shí)別數(shù)據(jù)。從與父進(jìn)程進(jìn)行通信的外部進(jìn)程檢索應(yīng)用名稱在另一示例中,父進(jìn)程可以使用進(jìn)程間通信(IPC)通道比如像Unix套接字的套接字來從外部進(jìn)程檢索命令。在此情況下,在分叉的父進(jìn)程分支中打開客戶端套接字。當(dāng)父代通過套接字接收程序名稱,父代分叉出子進(jìn)程。當(dāng)分叉時(shí),程序名稱將被包含在子存儲(chǔ)器中,這是因?yàn)槠淙允歉高M(jìn)程的拷貝。檢索由外部進(jìn)程推送至子進(jìn)程的應(yīng)用名稱在另一示例中,子進(jìn)程可以被配置成打開IPC通道并且等待要通過該IPC通道提供的程序名稱。僅通過示例,子進(jìn)程可以使用套接字來收聽程序名稱。在此示例中,程序名稱被推送至子代。在此情況下,在fork的子分支中打開客戶端套接字。檢索由子進(jìn)程從另一進(jìn)程拉出的應(yīng)用名稱在另一示例中,子進(jìn)程可以被配置成建立與另一進(jìn)程的IPC通道。在此示例中,子進(jìn)程可以被配置成發(fā)送用于從其他進(jìn)程拉出程序名稱的請(qǐng)求。在此情況下,將在fork的子分支中打開客戶端套接字。Android—應(yīng)用名稱檢索在Android中,應(yīng)用通常是編譯成在Dalvik虛擬機(jī)中執(zhí)行的字節(jié)代碼的Java程序,并且可選地可以通過Java本機(jī)接口(JNI)來執(zhí)行置于共享對(duì)象中的本機(jī)代碼。Zygote進(jìn)程是可以創(chuàng)建新應(yīng)用的唯一進(jìn)程。Zygote從內(nèi)部Unix套接字接收分叉新應(yīng)用的命令。命令包含將使用Java反射來加載進(jìn)子進(jìn)程的虛擬機(jī)中的Java類名稱的名稱。該類提供要被運(yùn)行的應(yīng)用的靜態(tài)主要方法。然而,類名稱不表示應(yīng)用的包名稱。將從應(yīng)用的清單文件檢索此信息,并且然后使用prctl系統(tǒng)呼叫來將此信息設(shè)定在/proc文件系統(tǒng)中,如先前所說明。在進(jìn)程執(zhí)行期間鏈接安全策略各種示例證明了可以如何使用后期安全策略綁定機(jī)制在新進(jìn)程的分叉之后并且在進(jìn)程專用為應(yīng)用期間使應(yīng)用特有安全策略與新啟動(dòng)進(jìn)程相鏈接。在其他的形式下,后期安全策略綁定機(jī)制可以延遲鏈接安全策略,直到進(jìn)程已專用化之后并且當(dāng)進(jìn)程正在執(zhí)行應(yīng)用代碼時(shí)為止。在此示例中,后期安全策略綁定機(jī)制被配置成:監(jiān)視應(yīng)用代碼的執(zhí)行,表征正在執(zhí)行的應(yīng)用的類型,并且鏈接適于所確定的應(yīng)用類型的一個(gè)或更多個(gè)安全策略。通過示例,安全系統(tǒng)可以基于包括但不限于下述動(dòng)作的各種進(jìn)程動(dòng)作來表征應(yīng)用的類型:●進(jìn)程正試圖訪問什么硬件資源,例如,相機(jī)、網(wǎng)絡(luò)、存儲(chǔ)裝置、存儲(chǔ)器、GPS傳感器、麥克風(fēng)?!襁M(jìn)程正試圖訪問和/或修改哪種數(shù)據(jù),例如,SMS、郵件、賬號(hào)信息、圖片、視頻、口令。●進(jìn)程正試圖與哪些其他的進(jìn)程進(jìn)行通信:訪問設(shè)備中的其他應(yīng)用、請(qǐng)求對(duì)敏感服務(wù)比如撥號(hào)器或SMS發(fā)送服務(wù)的訪問。安全系統(tǒng)可以阻止進(jìn)程執(zhí)行任何禁止動(dòng)作,直到表征完成并且安全策略被鏈接為止。當(dāng)安全策略與其進(jìn)程監(jiān)視器相鏈接時(shí),允許進(jìn)程繼續(xù)正常執(zhí)行至其進(jìn)程監(jiān)視器基于安全策略允許的程度。5.第三實(shí)施例安全系統(tǒng)—虛擬化以提供隔離的用戶空間實(shí)例概述參照?qǐng)D13至圖15,提供了安全系統(tǒng)第三實(shí)施例,其適于提供光虛擬化機(jī)制,其在相同的OS和設(shè)備內(nèi)提供多個(gè)隔離的用戶空間實(shí)例或域。光虛擬化機(jī)制使用前述實(shí)施例中描述的SCI機(jī)制和FCI機(jī)制中的任一者或二者,以用于攔截函數(shù)呼叫和/或系統(tǒng)呼叫,并且根據(jù)表示當(dāng)前在設(shè)備上操作的指定的或選擇的用戶空間實(shí)例(比如域或用戶配置文件)的一個(gè)或更多個(gè)控制參數(shù)(在本文中為用戶空間控制參數(shù))來產(chǎn)生關(guān)于函數(shù)呼叫或系統(tǒng)呼叫的安全決定/動(dòng)作。例如,控制參數(shù)定義要應(yīng)用于所攔截的函數(shù)呼叫或系統(tǒng)呼叫的安全策略。系統(tǒng)被配置成使得相對(duì)于如通過控制參數(shù)指示的特定用戶空間實(shí)例比如域來監(jiān)視并且執(zhí)行每個(gè)進(jìn)程。通過控制參數(shù)指示的域?qū)⒓s束給定進(jìn)程將如何與其他進(jìn)程進(jìn)行交互并且訪問資源。系統(tǒng)配置參照?qǐng)D13,將描述適于提供虛擬化的第三實(shí)施例安全系統(tǒng)500的功能和主要組件的示例。如在前述實(shí)施例中所說明,OS層504中的進(jìn)程502(對(duì)應(yīng)于應(yīng)用層中的應(yīng)用)通過執(zhí)行受OS支持的系統(tǒng)呼叫來與其他的進(jìn)程進(jìn)行交互,并且訪問設(shè)備(比如文件系統(tǒng)516)中的資源。進(jìn)程502首先在用戶模式508下執(zhí)行如通過函數(shù)呼叫506示出的對(duì)庫(kù)(比如libc)函數(shù)的調(diào)用。通常,然后通過共享庫(kù)(未示出)將函數(shù)呼叫506映射成在內(nèi)核模式510下執(zhí)行的系統(tǒng)呼叫512。然而,在此實(shí)施例中,正如前述實(shí)施例一樣,通過呼叫攔截器514來檢測(cè)并且攔截函數(shù)呼叫506和/或系統(tǒng)呼叫512。呼叫攔截器514被配置成使用先前描述的SCI機(jī)制和/或FCI機(jī)制來攔截函數(shù)呼叫和/或系統(tǒng)呼叫。例如,呼叫攔截器可以被配置成通過將特定函數(shù)掛鉤注入在進(jìn)程ELF中(即,先前描述的FCI機(jī)制)來攔截函數(shù)呼叫并且借助于ptrace(即,先前描述的SCI機(jī)制)來攔截系統(tǒng)呼叫。當(dāng)攔截呼叫506、512時(shí),呼叫攔截器514將呼叫信息轉(zhuǎn)發(fā)至與每個(gè)進(jìn)程相附接和/或嵌入在每個(gè)進(jìn)程內(nèi)的監(jiān)視實(shí)體512。然后,監(jiān)視實(shí)體將基于定義特定用戶空間操作的用戶空間控制參數(shù)或變量519來檢索應(yīng)用于呼叫的適當(dāng)安全策略。然后,監(jiān)視實(shí)體將基于該檢索的安全策略以與前述方式相同的方式來實(shí)現(xiàn)安全動(dòng)作,比如,允許呼叫、拒絕呼叫、終止進(jìn)程、或者修改呼叫的參數(shù)和/或呼叫的返回值。通過基于定義正在操作的用戶空間的用戶空間控制參數(shù)來配置監(jiān)視實(shí)體以選擇要應(yīng)用的安全策略而在此修改的安全系統(tǒng)中提供虛擬化。另外地,策略數(shù)據(jù)庫(kù)中提供的安全策略被擴(kuò)展成滿足可以在設(shè)備上操作的多個(gè)不同用戶空間實(shí)例,如將在下面所更詳細(xì)地說明。在此配置下,安全系統(tǒng)能夠根據(jù)哪個(gè)用戶空間實(shí)例正在操作而將不同的安全策略動(dòng)態(tài)地應(yīng)用于應(yīng)用,以從而控制與應(yīng)用相對(duì)應(yīng)的進(jìn)程執(zhí)行其操作并且訪問設(shè)備資源的方式。此虛擬化機(jī)制實(shí)現(xiàn)細(xì)粒隔離,這是因?yàn)榇颂摂M化機(jī)制能夠約束特定進(jìn)程執(zhí)行而無需控制整個(gè)OS。當(dāng)每個(gè)進(jìn)程沒有意識(shí)到呼叫攔截器時(shí),不需要修改進(jìn)程或OS。另外地,此虛擬化機(jī)制不需要策略硬編碼在系統(tǒng)中,并且因此可以動(dòng)態(tài)地改變策略。策略數(shù)據(jù)庫(kù)正如先前實(shí)施例一樣,提供了包括被監(jiān)視實(shí)體應(yīng)用/執(zhí)行的安全策略的策略數(shù)據(jù)庫(kù)。策略數(shù)據(jù)庫(kù)可以采用例如定義策略的一個(gè)或更多個(gè)策略配置文件的形式。所提供的策略可以包括:應(yīng)用特有策略,一個(gè)應(yīng)用特有策略用于每個(gè)用戶空間實(shí)例或者用戶空間實(shí)例的系列或子集合;和/或適用于所有應(yīng)用或應(yīng)用子集合的全局策略,一個(gè)全局策略用于每個(gè)用戶空間實(shí)例或者用戶空間實(shí)例的系列或子集合。安全策略控制哪些進(jìn)程可以彼此通信,進(jìn)程可以如何利用/訪問設(shè)備資源、數(shù)據(jù)或文件、或者其他的通用應(yīng)用/進(jìn)程權(quán)限和許可,進(jìn)程可以基于該權(quán)限和許可在用戶空間中操作。用戶空間控制參數(shù)用戶空間控制參數(shù)定義在設(shè)備上操作的用戶空間實(shí)例。用戶空間控制參數(shù)的性質(zhì)取決于所提供或用戶可用的不同用戶空間實(shí)例的數(shù)目。在一個(gè)示例中,安全系統(tǒng)可以提供兩個(gè)用戶空間實(shí)例,即私人域與工作域,或者標(biāo)準(zhǔn)用戶與客戶端用戶,并且控制參數(shù)定義哪個(gè)域已被激活,并且因此定義哪些安全策略應(yīng)用于通過操作的進(jìn)程產(chǎn)生的所攔截的呼叫。在另一示例中,安全系統(tǒng)可以提供多個(gè)用戶空間實(shí)例,一個(gè)用戶空間實(shí)例用于登錄設(shè)備的每個(gè)不同用戶或用戶配置文件,并且這些用戶空間實(shí)例中的每個(gè)用戶空間實(shí)例可以進(jìn)一步具有特定私人域與工作域??梢杂稍O(shè)備的用戶經(jīng)由系統(tǒng)配置設(shè)定或者由系統(tǒng)管理員手動(dòng)地設(shè)定用戶空間控制參數(shù),或者可以由安全系統(tǒng)基于登錄到設(shè)備的用戶來自動(dòng)地設(shè)定用戶空間控制參數(shù),或者可以另外通過與設(shè)備進(jìn)行通信的遠(yuǎn)程第三方系統(tǒng)來設(shè)定用戶空間控制參數(shù)。由監(jiān)視實(shí)體采取的安全動(dòng)作針對(duì)所檢測(cè)的函數(shù)呼叫和/或系統(tǒng)呼叫,與每個(gè)進(jìn)程相關(guān)聯(lián)的監(jiān)視實(shí)體被配置成基于針對(duì)用戶空間實(shí)例來配置的安全策略來執(zhí)行安全動(dòng)作,用戶空間實(shí)例如通過用戶空間控制參數(shù)所確定來操作。所采取的安全動(dòng)作可以基于下述策略:應(yīng)用于至少調(diào)用呼叫的進(jìn)程的全局策略、與進(jìn)程相關(guān)聯(lián)的應(yīng)用特有策略、或者這些策略的組合。如果提供了相沖突的策略,則監(jiān)視實(shí)體可以被配置成基于安全系統(tǒng)設(shè)定使全局策略優(yōu)先于應(yīng)用特定策略來解決沖突,或者反之亦然。示例性情形將通過參照?qǐng)D13至圖15的進(jìn)一步說明來描述針對(duì)光虛擬化而配置的安全系統(tǒng)的示例性配置。在此示例中,安全系統(tǒng)被配置成支持兩種單獨(dú)用戶空間,即,工作域(WD,WorkDomain)和私人域(PD,PrivateDomain)。WD指定允許執(zhí)行企業(yè)批準(zhǔn)進(jìn)程并且訪問敏感商業(yè)數(shù)據(jù)的安全策略。PD允許執(zhí)行與設(shè)備用戶的私人范圍相關(guān)的進(jìn)程。設(shè)備上的每個(gè)應(yīng)用/進(jìn)程可能在兩個(gè)域中可操作。因此,安全系統(tǒng)被配置成提供虛擬化提取,該虛擬化提取允許這種應(yīng)用/進(jìn)程執(zhí)行,但是根據(jù)哪個(gè)域執(zhí)行應(yīng)用/進(jìn)程而使用不同的權(quán)限。例如,進(jìn)程中之一可能是Skype應(yīng)用。在WD中針對(duì)Skype配置的安全策略將不同于針對(duì)PD而配置的安全策略。例如,當(dāng)在WD中執(zhí)行Skype時(shí),Skype應(yīng)當(dāng)向用戶提供與工作相關(guān)的聯(lián)系人。而且,如果用戶想要通過Skype發(fā)送商業(yè)數(shù)據(jù),則應(yīng)用將有權(quán)限來訪問敏感數(shù)據(jù)。另一方面,當(dāng)在PD下執(zhí)行Skype時(shí),應(yīng)用應(yīng)當(dāng)僅提供與工作環(huán)境不相關(guān)的聯(lián)系人。而且,應(yīng)用不應(yīng)當(dāng)允許用戶通過聊天來發(fā)送敏感數(shù)據(jù)。為了能夠支持此情形,安全系統(tǒng)被配置成使安全策略的執(zhí)行有區(qū)別,該安全策略在不同的安全域下應(yīng)用于同一應(yīng)用。實(shí)現(xiàn)FCI機(jī)制和SCI機(jī)制中任一者或二者的呼叫攔截器514允許非常細(xì)粒級(jí)的實(shí)現(xiàn),以能夠區(qū)別對(duì)資源的訪問。安全系統(tǒng)被配置成在由OS提供的應(yīng)用的頂部向應(yīng)用提供虛擬化系統(tǒng)呼叫集合。可以使用FCI機(jī)制或者SCI機(jī)制來實(shí)現(xiàn)這種虛擬化機(jī)制。通過示例,將描述安全系統(tǒng)用于控制聯(lián)系人列表的操作,Skype能夠根據(jù)正在其中操作Skype的域來訪問該聯(lián)系人列表。設(shè)備設(shè)置有其中存儲(chǔ)Skype聯(lián)系人的多個(gè)文件(一個(gè)文件針對(duì)每個(gè)域)。針對(duì)WD的聯(lián)系人列表文件存儲(chǔ)在/data/data/WD/skype/contact.ast中。針對(duì)PD的聯(lián)系人列表存儲(chǔ)在/data/data/PD/skype/contact.ast中。這允許系統(tǒng)在應(yīng)用特定文件之間獨(dú)立。當(dāng)Skype執(zhí)行讀取系統(tǒng)呼叫時(shí),應(yīng)用意識(shí)不到多個(gè)聯(lián)系人文件的存在。該應(yīng)用將試圖在是/data/data/app/skype/contact.ast的所使用的標(biāo)準(zhǔn)目錄上打開。然而,如將在以下使用FCI或SCI的呼叫虛擬化機(jī)制來進(jìn)一步說明的,安全系統(tǒng)被配置成攔截此系統(tǒng)呼叫,并且根據(jù)哪個(gè)域是激活的(WD還是PD),與Skype相關(guān)聯(lián)的監(jiān)視實(shí)體可以改變呼叫中參數(shù)來指向正確聯(lián)系人列表文件。如果我們現(xiàn)在假定在WD中部署粗糙應(yīng)用。此粗糙應(yīng)用試圖訪問cotanct.ast文件并且將此cotanct.ast文件發(fā)送至惡意服務(wù)器。安全系統(tǒng)可以基于針對(duì)WD的全局安全策略來執(zhí)行安全策略以阻止粗糙應(yīng)用建立與惡意服務(wù)器的連接,該全局安全策略指定:僅允許WD中的所有應(yīng)用連接至一個(gè)列表中的公知服務(wù)器。通過FCI呼叫虛擬化為了虛擬化呼叫,安全系統(tǒng)可以使用函數(shù)呼叫插入(FCI),以在函數(shù)呼叫被轉(zhuǎn)換成由內(nèi)核執(zhí)行的系統(tǒng)呼叫之前攔截函數(shù)呼叫,并且實(shí)現(xiàn)任何分配的安全動(dòng)作。安全系統(tǒng)被配置成使用GOT/PLT間接機(jī)制并且插入掛鉤代理偏移表(POT,hookproxyoffsettable),該掛鉤代理偏移表(POT)與相對(duì)于圖9B描述的POT類似。圖14提供FCI如何用于虛擬化函數(shù)呼叫的示例,以及與相對(duì)于圖9B的部件類似的附圖標(biāo)記。在此特定示例中,F(xiàn)CI機(jī)制用來虛擬化稱為func的函數(shù)。此函數(shù)采用一個(gè)參數(shù)parl并且返回整數(shù)。GOT334內(nèi)部的函數(shù)指向345POT340中的掛鉤函數(shù)520。當(dāng)POT340中的掛鉤函數(shù)520被執(zhí)行時(shí),掛鉤函數(shù)520會(huì)使用PEP的方法enter來將參數(shù)parl轉(zhuǎn)發(fā)至監(jiān)視實(shí)體310中的PEP339。參數(shù)parl作為參考來進(jìn)行傳遞,意味著監(jiān)視實(shí)體310中的PEP339可以直接地修改其值。當(dāng)參數(shù)的值被修改時(shí),如果需要,則使用修改的參數(shù)524來呼叫原始函數(shù)。通過方法exit526將通過函數(shù)執(zhí)行返回的值提供至監(jiān)視實(shí)體中的PEP339。而且,在此情況下,返回值作為參考來進(jìn)行傳遞。然后,PEP339還可以修改返回值,并且然后將修改的值返回至呼叫進(jìn)程。借助于在監(jiān)視實(shí)體中執(zhí)行的安全策略來控制對(duì)函數(shù)參數(shù)和返回值的實(shí)際修改。如先前論述的,所應(yīng)用的安全策略取決于用戶空間控制參數(shù),該用戶空間控制參數(shù)定義進(jìn)程正在其中操作的用戶空間(例如,域)。通過SCI的呼叫虛擬化為了虛擬化呼叫,安全系統(tǒng)可以可替代地或者附加地在內(nèi)核模式下使用系統(tǒng)呼叫插入(SCI,systemcallinterposition)來攔截系統(tǒng)呼叫。在此情況下,安全系統(tǒng)可以使用如先前關(guān)于SCI機(jī)制描述的系統(tǒng)呼叫ptrace。另一方法可以修改OS來攔截所有系統(tǒng)呼叫。在下面示例中,在使用工具比如ptrace的環(huán)境中描述系統(tǒng)操作。如先前所描述的,在這種工具下,當(dāng)內(nèi)核即將代表進(jìn)程執(zhí)行系統(tǒng)呼叫時(shí),內(nèi)核將通知與進(jìn)程相關(guān)聯(lián)的監(jiān)視實(shí)體兩次:在實(shí)際上執(zhí)行系統(tǒng)呼叫之前(在進(jìn)入時(shí)),和在執(zhí)行了系統(tǒng)呼叫之后但在向呼叫進(jìn)程提供返回值之前(在退出時(shí))。圖15示出了使用SCI時(shí)系統(tǒng)呼叫func的虛擬化的消息序列圖。當(dāng)進(jìn)程550請(qǐng)求551執(zhí)行系統(tǒng)呼叫時(shí),內(nèi)核552停止553系統(tǒng)呼叫的執(zhí)行并且通知555監(jiān)視實(shí)體556。監(jiān)視實(shí)體556從進(jìn)程存儲(chǔ)器檢索557系統(tǒng)呼叫的參數(shù)的值。監(jiān)視實(shí)體556然后可以根據(jù)要被執(zhí)行的安全策略來修改558該值。此后,會(huì)將參數(shù)的值重新插入559進(jìn)程存儲(chǔ)器中。這時(shí),準(zhǔn)備執(zhí)行系統(tǒng)呼叫,并且監(jiān)視實(shí)體556通知560內(nèi)核552讓其運(yùn)行。當(dāng)內(nèi)核552完成執(zhí)行時(shí)但在內(nèi)核將值返回至呼叫進(jìn)程550之前,內(nèi)核又通知561監(jiān)視實(shí)體556。在此情況下,監(jiān)視實(shí)體556檢索返回值并且根據(jù)策略修改562該返回值。當(dāng)返回值被修改時(shí),該返回值被返回563至呼叫進(jìn)程550。與通過FCI方法一樣,借助于在監(jiān)視實(shí)體中執(zhí)行的安全策略來控制對(duì)系統(tǒng)呼叫參數(shù)和返回值的實(shí)際修改,并且所應(yīng)用的安全策略取決于用戶空間控制參數(shù),該用戶空間控制參數(shù)定義進(jìn)程正在其中操作的用戶空間(例如,域)。6.安全系統(tǒng)的設(shè)備硬件配置和安裝如上所闡述的,可以在運(yùn)行AndroidOS或基于Linux的OS等的任何適合硬件設(shè)備或系統(tǒng)上實(shí)現(xiàn)安全系統(tǒng)的實(shí)施例。參照?qǐng)D16和圖17,將描述安全系統(tǒng)可以在其上運(yùn)行的典型智能電話或平板設(shè)備的硬件組件的示例,以及安全系統(tǒng)安裝過程。參照?qǐng)D16,通常,設(shè)備601比如智能電話或平板計(jì)算機(jī)包含以下組件:執(zhí)行在永久存儲(chǔ)設(shè)備603中和/或在易失性存儲(chǔ)器603中存儲(chǔ)的指令的處理器602??梢允褂帽O(jiān)視器/顯示器/觸摸屏606來顯示從處理器輸出的圖像、視頻和其他的多媒體。通過可以嵌入處理器602中的圖形設(shè)備/觸摸屏控制器605來準(zhǔn)備用于顯示器606的顯示數(shù)據(jù)。用戶可以通過觸摸屏605或按鈕609來操作設(shè)備??梢钥蛇x地通過控制器設(shè)備605來向處理器602反饋這種指令??梢酝ㄟ^揚(yáng)聲器608來輸出聲音,可以向該揚(yáng)聲器608通過I/O接口610提供信號(hào),該I/O接口610可以嵌入處理器602中??蛇x地,觸摸屏606可以向用戶提供通過I/O接口610控制的觸覺反饋??蛇x地,使設(shè)備通過由I/O接口610控制的振動(dòng)/轟鳴設(shè)備620進(jìn)行振動(dòng)或者轟鳴以警告用戶。設(shè)備可以配備有幾個(gè)傳感器以使用麥克風(fēng)610記錄聲音并且使用相機(jī)611記錄圖像或視頻。還可以存在位置(比如全球定位系統(tǒng)接收器)、加速度(加速度計(jì))、方位(傾斜&陀螺儀)和環(huán)境(溫度、光、輻射、濕度、氣體、壓力)傳感器617。設(shè)備及其所有組件通過電池613來供電。可替代地,可以通過有線接口614來對(duì)設(shè)備進(jìn)行供電。通過功率管理系統(tǒng)612來調(diào)節(jié)并且分配功率。可以通過有線接口614或者無線接口612來對(duì)電池進(jìn)行充電。為了與外界連接并且傳送數(shù)據(jù),設(shè)備可以使用有線連接614或者其他的(無線)連接615。(無線)連接615可以是基于無線電或光的通信。使用天線來發(fā)送并且接收用于無線通信的無線電信號(hào)616。此天線可以嵌入或可以不嵌入設(shè)備中。有線或無線連接可以提供聯(lián)網(wǎng)能力。針對(duì)電信訂閱信息,設(shè)備可以使用訂戶識(shí)別模塊619,該訂戶識(shí)別模塊619可以是插入設(shè)備中的卡。訂戶識(shí)別模塊619可以通過控制器618與處理器602對(duì)接??梢允褂貌僮飨到y(tǒng)比如Android來使用戶控制設(shè)備中的硬件和軟件二者。操作系統(tǒng)是包括用于處理器602的指令集合的軟件,該處理器602通常安裝在永久存儲(chǔ)設(shè)備603上。當(dāng)設(shè)備正在操作時(shí),操作系統(tǒng)還可以部分地置于易失性存儲(chǔ)器604中。惡意軟件或代碼(指令)可以由(無意識(shí))用戶或者另一方通過有線接口614或者無線連接615/616來置于設(shè)備存儲(chǔ)位置603、604上。惡意軟件或代碼(指令)可以欺騙操作系統(tǒng)來使處理器602執(zhí)行用于惡意目的的指令。為了防止處理器602執(zhí)行惡意指令,前述實(shí)施例中描述的安全系統(tǒng)被安裝在設(shè)備上,并且將與操作系統(tǒng)進(jìn)行交互。安全系統(tǒng)通常安裝在設(shè)備存儲(chǔ)位置603、604上。參照?qǐng)D17,將描述如何將安全系統(tǒng)安裝在存儲(chǔ)設(shè)備603上的示例。通常,具有所安裝的操作系統(tǒng)(OS)比如Android的存儲(chǔ)設(shè)備603包含下面分區(qū):引導(dǎo)702、系統(tǒng)703、恢復(fù)704、數(shù)據(jù)705、緩存706和雜項(xiàng)(misc.)707。第一實(shí)施例安全系統(tǒng)安裝為了使用第一實(shí)施例來部署安全系統(tǒng),應(yīng)當(dāng)修改下面的模塊。應(yīng)當(dāng)將主要監(jiān)視器二進(jìn)制置于設(shè)備的引導(dǎo)702分區(qū)中。而且,應(yīng)當(dāng)修改作為引導(dǎo)702分區(qū)的一部分的init.rc文件708以便于修改“zygote”服務(wù),該“zygote”服務(wù)應(yīng)當(dāng)指向監(jiān)視器二進(jìn)制位置。為了修改設(shè)備的原始引導(dǎo)702分區(qū),應(yīng)當(dāng)從設(shè)備拉出分區(qū)圖像。在第二階段中,應(yīng)當(dāng)拆開二進(jìn)制文件,得到內(nèi)核圖像和引導(dǎo)加載器圖像。然后應(yīng)當(dāng)通過將主要監(jiān)視器二進(jìn)制拷貝到引導(dǎo)加載器圖像中(通常在/sbin文件夾中)并且修改init.rc708文件來對(duì)引導(dǎo)加載器圖像進(jìn)行修補(bǔ)以更新“zygote”服務(wù)。引導(dǎo)加載器一旦被修補(bǔ)可以連同內(nèi)核圖像一起來重新包裹引導(dǎo)加載器以生成引導(dǎo)702分區(qū)的修補(bǔ)版本,其應(yīng)當(dāng)被推送回到物理設(shè)備中。應(yīng)當(dāng)將安全系統(tǒng)置于系統(tǒng)703分區(qū)中。為此,應(yīng)當(dāng)使用書寫許可來重新安裝系統(tǒng)703分區(qū),使得可以將服務(wù)包文件拷貝到系統(tǒng)703分區(qū)中(通常/system/app中)。分區(qū)一旦被拷貝可以將分區(qū)重新安裝回其只讀狀態(tài)??蛇x地,監(jiān)視器二進(jìn)制還可以安裝在系統(tǒng)703分區(qū)內(nèi)(通常/system/bin內(nèi))??蛇x地,安全系統(tǒng)和/或本地策略配置文件(或策略數(shù)據(jù)庫(kù))的備份可以存儲(chǔ)在恢復(fù)分區(qū)704中。在安裝本地策略配置文件(或策略數(shù)據(jù)庫(kù))的情況下,該本地策略配置文件將連同安全系統(tǒng)可能需要使用的任何其他的數(shù)據(jù)文件(這可以包括在OS實(shí)現(xiàn)之后使得重新啟用框架的所有系統(tǒng)組件的拷貝)一起來置于數(shù)據(jù)705分區(qū)中(通常/data/system內(nèi))。當(dāng)已將所有組件部署到設(shè)備中時(shí),應(yīng)當(dāng)重啟設(shè)備以結(jié)束進(jìn)程。當(dāng)設(shè)備已重新引導(dǎo)時(shí),安全系統(tǒng)建立并且運(yùn)行。第二實(shí)施例安全系統(tǒng)安裝為了使用第二實(shí)施例部署安全系統(tǒng),應(yīng)當(dāng)修改下面的模塊。應(yīng)當(dāng)修改作為引導(dǎo)702分區(qū)的一部分的init.rc文件708以便于修改“zygote”服務(wù),該“zygote”服務(wù)環(huán)境應(yīng)當(dāng)被設(shè)定成使得LD_PRELOAD指向代理函數(shù)庫(kù)位置。為了修改設(shè)備的原始引導(dǎo)702分區(qū),應(yīng)當(dāng)從設(shè)備拉出分區(qū)圖像。在第二階段中,應(yīng)當(dāng)拆開二進(jìn)制文件,得到內(nèi)核圖像和引導(dǎo)加載器圖像。然后應(yīng)當(dāng)通過修改init.rc708文件來對(duì)引導(dǎo)加載器圖像進(jìn)行修補(bǔ)以更新“zygote”服務(wù)。引導(dǎo)加載器一旦被修補(bǔ)可以連同內(nèi)核圖像一起來重新包裹引導(dǎo)加載器以生成引導(dǎo)702分區(qū)的修補(bǔ)版本,其應(yīng)當(dāng)被推送回到物理設(shè)備中。應(yīng)當(dāng)將安全系統(tǒng)置于系統(tǒng)703分區(qū)中。為此,應(yīng)當(dāng)使用書寫許可來重新安裝系統(tǒng)703分區(qū),使得可以將服務(wù)包文件拷貝到系統(tǒng)703分區(qū)中(通常/system/app中)。分區(qū)一旦被拷貝可以將分區(qū)重新安裝回其只讀狀態(tài)。代理函數(shù)庫(kù)還應(yīng)當(dāng)安裝在系統(tǒng)703分區(qū)內(nèi)(通常/system/bin內(nèi))。在安裝本地策略配置文件(或策略數(shù)據(jù)庫(kù))的情況下,該本地策略配置文件將連同安全系統(tǒng)可能需要使用的任何其他的數(shù)據(jù)文件(這可以包括在OS實(shí)現(xiàn)之后使得重新啟用框架的所有系統(tǒng)組件的拷貝)一起來置于數(shù)據(jù)705分區(qū)中(通常/data/system內(nèi))??蛇x地,可以在恢復(fù)分區(qū)704中存儲(chǔ)安全系統(tǒng)和/或本地策略配置文件(或策略數(shù)據(jù)庫(kù))的備份。當(dāng)已將所有組件部署到設(shè)備中時(shí),應(yīng)當(dāng)重啟設(shè)備以結(jié)束進(jìn)程。當(dāng)設(shè)備已重新引導(dǎo)時(shí),安全系統(tǒng)建立并且運(yùn)行。7.第四實(shí)施例安全系統(tǒng)—GoogleChromeOS以上安全系統(tǒng)的實(shí)施例還可以適于/適用于基于Linux的其他操作系統(tǒng),比如,GoogleChrome操作系統(tǒng)(OS)。Chromium項(xiàng)目包括作為在GoogleChrome瀏覽器后面的開放源項(xiàng)目的Chromium;以及作為在GoogleChromeOS后面的開放源項(xiàng)目的ChromiumOS。兩個(gè)項(xiàng)目使其代碼庫(kù)的大部分是公共的。具體地,OS/GoogleChromeOS是單獨(dú)執(zhí)行基于網(wǎng)頁(yè)的應(yīng)用的基于Linux的操作系統(tǒng)。此OS采用最低要求的方法,在該方法中,僅駐存在設(shè)備中的應(yīng)用是瀏覽器(其是GoogleChrome)、媒體播放器和文件系統(tǒng)?;旧?,在瀏覽器內(nèi)執(zhí)行基于網(wǎng)頁(yè)的應(yīng)用。考慮(基本上在瀏覽器內(nèi)運(yùn)行應(yīng)用)的常用方法,在下面論述中我們將使用術(shù)語(yǔ)Chromium來指兩個(gè)項(xiàng)目(Chromium和ChromiumOS)。Chromium后面的主要思想是在不同進(jìn)程中運(yùn)行功能的實(shí)例。關(guān)于功能,這里我們指被下載以用于訪問網(wǎng)頁(yè)和執(zhí)行網(wǎng)頁(yè)應(yīng)用的代碼、以及將通過Chromium進(jìn)程來渲染并且執(zhí)行的其他代碼。如圖18所示,Chromium具有負(fù)責(zé)顯示用戶接口(UI)并且管理其中執(zhí)行選項(xiàng)卡和插件的其他進(jìn)程802的主要進(jìn)程800(稱為“瀏覽器”801)。選項(xiàng)卡進(jìn)程稱為“渲染”,并且負(fù)責(zé)使用渲染引擎比如WebKitandBlink來渲染每個(gè)選項(xiàng)卡內(nèi)的功能。在此意義上,選項(xiàng)卡和插件定義用于運(yùn)行ChromeOS的設(shè)備的功能。通過默認(rèn)方式,Chromium針對(duì)用戶訪問的網(wǎng)站的每個(gè)實(shí)例(進(jìn)程每站實(shí)例)創(chuàng)建新渲染器進(jìn)程802。站被定義為注冊(cè)域,比如auckland.ac.nz。這意味著,將在不同進(jìn)程中執(zhí)行指向相同站的多個(gè)選項(xiàng)卡。另一模型是進(jìn)程每站(process-per-site),在該進(jìn)程每站中,將在不同進(jìn)程中運(yùn)行不同站。然而,將通過相同進(jìn)程來運(yùn)行指向相同站的多個(gè)選項(xiàng)卡。進(jìn)程每選項(xiàng)卡是其中通過專用進(jìn)程來渲染每個(gè)選項(xiàng)卡的另一模型。最后,可以在單個(gè)進(jìn)程中執(zhí)行Chromium。圖18示出了針對(duì)每個(gè)功能實(shí)例的不同渲染器進(jìn)程的情況。具體地,在專用渲染器進(jìn)程802內(nèi)執(zhí)行的每個(gè)選項(xiàng)卡803正向用戶提供特定功能。例如,選項(xiàng)卡1使auckland.ac.nz網(wǎng)頁(yè)可視化,選項(xiàng)卡2使facebook.com網(wǎng)頁(yè)可視化,并且使選項(xiàng)卡3執(zhí)行基于網(wǎng)頁(yè)的應(yīng)用。每個(gè)渲染器進(jìn)程802執(zhí)行代碼以向用戶提供某些功能。此功能可以正在加載HTML頁(yè)面或者正在執(zhí)行基于網(wǎng)頁(yè)的應(yīng)用。從OS角度看,每個(gè)進(jìn)程802是主要進(jìn)程800(瀏覽器)的子代,并且意識(shí)不到由每個(gè)渲染器進(jìn)程提供的特定功能。然而,OS不直接查看每個(gè)渲染器進(jìn)程的功能。換句話說,每個(gè)渲染器進(jìn)程是“不透明”進(jìn)程。因此,執(zhí)行為每個(gè)渲染器進(jìn)程的功能特定的安全策略不是直觀的。通過使渲染器執(zhí)行下述動(dòng)作來執(zhí)行將特定功能加載在每個(gè)渲染器進(jìn)程802內(nèi):使主要進(jìn)程800通過進(jìn)程間通信(IPC)呼叫805來從網(wǎng)頁(yè)取得代碼。使用由內(nèi)核提供的接口借助于函數(shù)呼叫和系統(tǒng)呼叫來建立主要進(jìn)程800與所有渲染器802之間的IPC通道。例如,當(dāng)在Linux和MacOSX上部署Chromium時(shí)使用socketpair()函數(shù)/系統(tǒng)呼叫以建立主要進(jìn)程800與渲染器進(jìn)程802之間的通道。可以部署前述實(shí)施例中描述的安全系統(tǒng)以利用此通信通道來攔截指示在每個(gè)渲染器進(jìn)程中加載的功能的消息并且執(zhí)行特定安全策略,如接下來將說明的。圖19示出了可以如何將安全系統(tǒng)監(jiān)視器或監(jiān)視實(shí)體與Chromium內(nèi)的不同進(jìn)程相附接。首先,主要監(jiān)視器810將與主要進(jìn)程800相附接或者主要監(jiān)視器810將嵌入在主要進(jìn)程800內(nèi),并且主要監(jiān)視器810將監(jiān)視其何時(shí)將分裂出新渲染器進(jìn)程802。當(dāng)新渲染器進(jìn)程802被分裂出時(shí),新進(jìn)程監(jiān)視器812(或監(jiān)視實(shí)體)將與新子進(jìn)程802相附接,使得每個(gè)新進(jìn)程具有其自己相應(yīng)的監(jiān)視實(shí)體。Chromium使用與Android中相同的方法以使用Zygote進(jìn)程來分裂出新進(jìn)程,該Zygote進(jìn)程將使自己分叉以創(chuàng)建渲染器進(jìn)程。每個(gè)監(jiān)視實(shí)體812可以攔截其關(guān)聯(lián)渲染器進(jìn)程802產(chǎn)生的系統(tǒng)呼叫以與主要進(jìn)程800進(jìn)行通信并且提取用于識(shí)別每個(gè)渲染器正在執(zhí)行哪個(gè)功能的信息。這允許安全系統(tǒng)將定制的(來自策略數(shù)據(jù)庫(kù)的)特定安全策略與每個(gè)渲染器將執(zhí)行的功能相關(guān)聯(lián),即,每個(gè)監(jiān)視實(shí)體檢索并且執(zhí)行與應(yīng)用的進(jìn)程相對(duì)應(yīng)的應(yīng)用的安全策略。比如,監(jiān)視渲染器進(jìn)程1的監(jiān)視實(shí)體812將執(zhí)行為域Auckland.ac.nz(選項(xiàng)卡1)特定的安全策略,然而,監(jiān)視渲染器進(jìn)程2的監(jiān)視實(shí)體812將執(zhí)行為域Facebook.com(選項(xiàng)卡2)特定的策略。將理解的是,主要監(jiān)視器800和進(jìn)程監(jiān)視器802可以是它們正在監(jiān)視的相應(yīng)進(jìn)程的任一部分(例如,嵌入在該相應(yīng)進(jìn)程內(nèi)),在這種情況下使用FCI技術(shù);或者是附接至它們正在監(jiān)視的相應(yīng)進(jìn)程的獨(dú)立進(jìn)程,在這種情況下使用SCI技術(shù),先前實(shí)施例中描述了這兩種技術(shù)。8.示例下面闡述一些實(shí)施例的各種示例性配置和/或方法。第一示例是用于使在設(shè)備上運(yùn)行的操作系統(tǒng)安全的方法,該操作系統(tǒng)包括基于Linux的內(nèi)核并且包括系統(tǒng)架構(gòu),該系統(tǒng)架構(gòu)由與內(nèi)核相關(guān)聯(lián)的Linux層和包括應(yīng)用的更高應(yīng)用層來定義。該方法包括:監(jiān)視由Linux層中的母進(jìn)程進(jìn)行的向內(nèi)核的系統(tǒng)呼叫,以檢測(cè)Linux層中與應(yīng)用層中的新應(yīng)用或部分應(yīng)用相對(duì)應(yīng)的新進(jìn)程的啟動(dòng)。該方法還包括:在由母進(jìn)程創(chuàng)建了Linux層中的新監(jiān)視進(jìn)程時(shí),使該新監(jiān)視進(jìn)程與新啟動(dòng)進(jìn)程相附接,該監(jiān)視進(jìn)程被配置成監(jiān)視由新進(jìn)程進(jìn)行的向內(nèi)核的系統(tǒng)呼叫,并且該監(jiān)視進(jìn)程被配置成基于所檢測(cè)到的系統(tǒng)呼叫的參數(shù)來檢索并且執(zhí)行為新進(jìn)程配置的安全策略。第二示例是用于在設(shè)備上運(yùn)行的操作系統(tǒng)的安全系統(tǒng),該操作系統(tǒng)包括基于Linux的內(nèi)核并且包括系統(tǒng)架構(gòu),該系統(tǒng)架構(gòu)由與內(nèi)核相關(guān)聯(lián)的Linux層和包括應(yīng)用的更高應(yīng)用層來定義。該系統(tǒng)包括:在Linux層處運(yùn)行的主監(jiān)視進(jìn)程,該主監(jiān)視進(jìn)程被配置成檢測(cè)由母進(jìn)程在Linux層中對(duì)新進(jìn)程的啟動(dòng),該新進(jìn)程對(duì)應(yīng)于由設(shè)備的用戶對(duì)在應(yīng)用層中對(duì)新應(yīng)用或部分應(yīng)用的啟動(dòng)。系統(tǒng)還提供進(jìn)程監(jiān)視器,該進(jìn)程監(jiān)視器由主監(jiān)視進(jìn)程與由母進(jìn)程創(chuàng)建的每個(gè)新進(jìn)程相附接,并且每個(gè)進(jìn)程監(jiān)視器被配置成監(jiān)視由其附接的進(jìn)程向內(nèi)核進(jìn)行的系統(tǒng)呼叫。還提供在應(yīng)用層處運(yùn)行的安全系統(tǒng)服務(wù),該安全系統(tǒng)服務(wù)能夠操作成訪問所存儲(chǔ)的針對(duì)應(yīng)用層的應(yīng)用的可配置安全策略,并且該安全系統(tǒng)服務(wù)能夠與Linux層中的每個(gè)進(jìn)程監(jiān)視器進(jìn)行通信,該安全策略對(duì)應(yīng)于進(jìn)程監(jiān)視器的相附接的進(jìn)程,并且其中,每個(gè)進(jìn)程監(jiān)視器被配置成基于所檢測(cè)到的系統(tǒng)呼叫的參數(shù)來檢索并且執(zhí)行針對(duì)該進(jìn)程監(jiān)視器的相附接的進(jìn)程而配置的安全策略。第三示例是在安全系統(tǒng)中配置與新目標(biāo)進(jìn)程相附接的進(jìn)程監(jiān)視器的方法,該安全系統(tǒng)用于在設(shè)備上運(yùn)行的操作系統(tǒng),該操作系統(tǒng)包括基于Linux的內(nèi)核并且包括系統(tǒng)架構(gòu),該系統(tǒng)架構(gòu)由與內(nèi)核相關(guān)聯(lián)的Linux層和包括應(yīng)用的較高應(yīng)用層來定義。該方法包括:當(dāng)目標(biāo)進(jìn)程專用為其預(yù)期應(yīng)用時(shí)監(jiān)視該目標(biāo)進(jìn)程的專用化進(jìn)程;從專用化進(jìn)程中提取應(yīng)用識(shí)別數(shù)據(jù),該專用化進(jìn)程表示目標(biāo)進(jìn)程正專用為應(yīng)用或應(yīng)用類型;基于所提取的應(yīng)用識(shí)別數(shù)據(jù)從策略數(shù)據(jù)庫(kù)中檢索為該目標(biāo)進(jìn)程特定的安全策略;以及配置進(jìn)程監(jiān)視器以執(zhí)行所檢索到的安全策略。第四示例是在安全系統(tǒng)中使存儲(chǔ)在策略數(shù)據(jù)庫(kù)中的安全策略與Linux層中啟動(dòng)的對(duì)應(yīng)新進(jìn)程相鏈接的方法,該安全策略是為應(yīng)用層中的應(yīng)用所特定的,該安全系統(tǒng)用于在設(shè)備上運(yùn)行的操作系統(tǒng),該操作系統(tǒng)包括基于Linux的內(nèi)核。操作系統(tǒng)具有系統(tǒng)架構(gòu),該系統(tǒng)架構(gòu)由與內(nèi)核相關(guān)聯(lián)的Linux層和包括應(yīng)用的更高應(yīng)用層來定義。該方法包括:當(dāng)新進(jìn)程專用為其預(yù)期的應(yīng)用時(shí)監(jiān)視該新進(jìn)程的在Linux層的專用化進(jìn)程;從表示目標(biāo)進(jìn)程正專用為應(yīng)用或應(yīng)用類型的專用化進(jìn)程提取應(yīng)用識(shí)別數(shù)據(jù);以及基于應(yīng)用識(shí)別數(shù)據(jù)來創(chuàng)建新進(jìn)程與來自策略數(shù)據(jù)庫(kù)的安全策略之間的鏈接。第五示例是在Linux層實(shí)現(xiàn)安全策略的方法,針對(duì)應(yīng)用層中的應(yīng)用或應(yīng)用類型來定義該策略,其中,該方法包括:監(jiān)視對(duì)被新Linux進(jìn)程用于專用為其預(yù)期的應(yīng)用的代碼的加載和/或識(shí)別。該方法還包括:基于所加載或識(shí)別的代碼將用于在Linux層實(shí)現(xiàn)的一個(gè)或更多個(gè)安全策略與新Linux進(jìn)程相鏈接。第六示例是使在設(shè)備上運(yùn)行的操作系統(tǒng)安全的方法,該操作系統(tǒng)包括在Linux層中的基于Linux的內(nèi)核,系統(tǒng)架構(gòu)包括在該Linux層以上的應(yīng)用層中的應(yīng)用。該方法包括:將監(jiān)視實(shí)體嵌入Linux層中的與應(yīng)用層中的新應(yīng)用或應(yīng)用組件相對(duì)應(yīng)的每個(gè)新啟動(dòng)進(jìn)程內(nèi);配置每個(gè)新啟動(dòng)進(jìn)程,以將該新啟動(dòng)進(jìn)程的共享的或動(dòng)態(tài)的庫(kù)符號(hào)調(diào)用重定向至該進(jìn)程內(nèi)所嵌入的監(jiān)視實(shí)體;配置每個(gè)所嵌入的監(jiān)視實(shí)體,以分析由該監(jiān)視實(shí)體的相關(guān)聯(lián)的進(jìn)程進(jìn)行的重定向符號(hào)調(diào)用并且基于與該進(jìn)程相關(guān)聯(lián)的安全策略來執(zhí)行安全動(dòng)作。第七示例是使在設(shè)備上運(yùn)行的操作系統(tǒng)安全的方法,該操作系統(tǒng)包括在Linux層中的基于Linux的內(nèi)核,系統(tǒng)架構(gòu)包括在該Linux層以上的應(yīng)用層中的應(yīng)用。該方法包括:攔截由進(jìn)程進(jìn)行的意圖調(diào)用內(nèi)核中的系統(tǒng)呼叫的共享的或動(dòng)態(tài)的庫(kù)符號(hào)調(diào)用;以及基于為應(yīng)用配置的安全策略,針對(duì)所攔截的符號(hào)調(diào)用來發(fā)起安全動(dòng)作,所述應(yīng)用與呼叫所攔截的符號(hào)調(diào)用的進(jìn)程相對(duì)應(yīng)。第八示例是用于在設(shè)備上運(yùn)行的操作系統(tǒng)的安全系統(tǒng),該操作系統(tǒng)包括基于Linux的內(nèi)核并且包括系統(tǒng)架構(gòu),該系統(tǒng)架構(gòu)由與內(nèi)核相關(guān)聯(lián)的Linux層和包括應(yīng)用的更高應(yīng)用層來定義。該系統(tǒng)包括:在Linux層中的每個(gè)啟動(dòng)進(jìn)程內(nèi)的嵌入監(jiān)視實(shí)體,每個(gè)啟動(dòng)進(jìn)程對(duì)應(yīng)于應(yīng)用層中的應(yīng)用。該系統(tǒng)還包括與每個(gè)進(jìn)程相關(guān)聯(lián)的攔截器,該攔截器被配置成攔截由該攔截器的相關(guān)聯(lián)的進(jìn)程進(jìn)行的共享的或動(dòng)態(tài)的庫(kù)符號(hào)調(diào)用中的至少一些庫(kù)符號(hào)調(diào)用,并且被配置成將這些庫(kù)符號(hào)調(diào)用重定向至發(fā)起符號(hào)調(diào)用的進(jìn)程內(nèi)所嵌入的監(jiān)視實(shí)體。所嵌入的監(jiān)視實(shí)體被配置成分析所攔截的由該監(jiān)視實(shí)體的相關(guān)聯(lián)的進(jìn)程進(jìn)行的符號(hào)調(diào)用,并且被配置成基于與該進(jìn)程相關(guān)聯(lián)的安全策略來執(zhí)行安全動(dòng)作。第九示例是用于使在設(shè)備上運(yùn)行的操作系統(tǒng)安全的方法,該操作系統(tǒng)包括基于Linux的內(nèi)核并且包括系統(tǒng)架構(gòu),該系統(tǒng)架構(gòu)由與內(nèi)核相關(guān)聯(lián)的Linux層和包括應(yīng)用的更高應(yīng)用層來定義。該方法包括:創(chuàng)建對(duì)由母進(jìn)程調(diào)用的系統(tǒng)呼叫和/或庫(kù)函數(shù)呼叫進(jìn)行監(jiān)視的監(jiān)視實(shí)體,以檢測(cè)將與應(yīng)用層中新應(yīng)用相對(duì)應(yīng)的新進(jìn)程的創(chuàng)建;以及當(dāng)母進(jìn)程創(chuàng)建新啟動(dòng)進(jìn)程時(shí)創(chuàng)建對(duì)該新啟動(dòng)進(jìn)程進(jìn)行監(jiān)視的新監(jiān)視實(shí)體,該新監(jiān)視實(shí)體被配置成檢測(cè)由新進(jìn)程進(jìn)行的系統(tǒng)呼叫和/或庫(kù)函數(shù)呼叫,并且被配置成基于所檢測(cè)到的系統(tǒng)呼叫和/或庫(kù)函數(shù)呼叫的參數(shù)來檢索并且執(zhí)行為新進(jìn)程配置的安全策略。第十示例是用于使在設(shè)備上運(yùn)行的操作系統(tǒng)安全的方法,該操作系統(tǒng)包括基于Linux的內(nèi)核并且包括系統(tǒng)架構(gòu),該系統(tǒng)架構(gòu)由與內(nèi)核相關(guān)聯(lián)的Linux層和包括應(yīng)用的更高應(yīng)用層來定義。該方法包括:創(chuàng)建對(duì)由母進(jìn)程調(diào)用的系統(tǒng)呼叫進(jìn)行直接地或間接地監(jiān)視的監(jiān)視實(shí)體,以檢測(cè)將與應(yīng)用層中新應(yīng)用相對(duì)應(yīng)的新進(jìn)程的創(chuàng)建;以及當(dāng)母進(jìn)程創(chuàng)建新啟動(dòng)進(jìn)程時(shí)創(chuàng)建對(duì)該新啟動(dòng)進(jìn)程進(jìn)行監(jiān)視的新監(jiān)視實(shí)體,該新監(jiān)視實(shí)體被配置成直接地或間接地檢測(cè)由新進(jìn)程進(jìn)行的系統(tǒng)呼叫調(diào)用,并且被配置成基于所檢測(cè)到的系統(tǒng)呼叫調(diào)用的參數(shù)來檢索并且執(zhí)行為新進(jìn)程配置的安全策略。第十一示例是使在設(shè)備上運(yùn)行的操作系統(tǒng)安全的方法,該操作系統(tǒng)包括在Linux層中的基于Linux的內(nèi)核,系統(tǒng)架構(gòu)包括在該Linux層以上的應(yīng)用層中的應(yīng)用。該方法包括:使用第一監(jiān)視機(jī)制來檢測(cè)由進(jìn)程進(jìn)行的共享的或動(dòng)態(tài)的庫(kù)符號(hào)調(diào)用,并且基于與調(diào)用該符號(hào)調(diào)用的相應(yīng)進(jìn)程相關(guān)聯(lián)的安全策略,針對(duì)所檢測(cè)到的符號(hào)調(diào)用來發(fā)起安全動(dòng)作;檢測(cè)試圖執(zhí)行預(yù)定義的高風(fēng)險(xiǎn)動(dòng)作集合中的一個(gè)高風(fēng)險(xiǎn)動(dòng)作的高風(fēng)險(xiǎn)進(jìn)程;以及發(fā)起第二監(jiān)視機(jī)制來監(jiān)視由所檢測(cè)到的高風(fēng)險(xiǎn)進(jìn)程所調(diào)用的系統(tǒng)呼叫。第十二示例是使在設(shè)備上運(yùn)行的操作系統(tǒng)安全的方法,該操作系統(tǒng)包括在Linux層中的基于Linux的內(nèi)核,系統(tǒng)架構(gòu)包括在該Linux層以上的應(yīng)用層中的應(yīng)用。該方法包括:發(fā)起被配置成對(duì)由進(jìn)程進(jìn)行的至少一些共享的或動(dòng)態(tài)的庫(kù)符號(hào)調(diào)用進(jìn)行檢測(cè)的一次監(jiān)視機(jī)制,并且基于與調(diào)用所檢測(cè)到的符號(hào)調(diào)用的進(jìn)程相關(guān)聯(lián)的安全策略,針對(duì)所檢測(cè)到的符號(hào)調(diào)用來執(zhí)行安全動(dòng)作;檢測(cè)試圖執(zhí)行預(yù)定義的高風(fēng)險(xiǎn)動(dòng)作集合中的一個(gè)高風(fēng)險(xiǎn)動(dòng)作的高風(fēng)險(xiǎn)進(jìn)程,并且切換成二次監(jiān)視機(jī)制來檢測(cè)由所檢測(cè)到的高風(fēng)險(xiǎn)進(jìn)程所調(diào)用的系統(tǒng)呼叫;以及基于與調(diào)用所檢測(cè)到的系統(tǒng)呼叫的所檢測(cè)到的高風(fēng)險(xiǎn)進(jìn)程相關(guān)聯(lián)的安全策略,針對(duì)每個(gè)所檢測(cè)到的系統(tǒng)呼叫來執(zhí)行安全動(dòng)作。第十三示例是使一個(gè)或更多個(gè)應(yīng)用特定安全策略與在設(shè)備的操作系統(tǒng)中啟動(dòng)的新進(jìn)程相鏈接的方法。該設(shè)備具有:操作系統(tǒng),該操作系統(tǒng)能夠操作成運(yùn)行進(jìn)程;以及中間件,該中間件能夠操作成通過從現(xiàn)有進(jìn)程或母進(jìn)程分裂或分叉出新進(jìn)程來使該操作系統(tǒng)啟動(dòng)新進(jìn)程,并且能夠操作成使用為應(yīng)用所特定的代碼來使新進(jìn)程專用為運(yùn)行應(yīng)用。所述方法包括:檢測(cè)新進(jìn)程;在檢測(cè)到新進(jìn)程之后監(jiān)視預(yù)定義事件或預(yù)定義識(shí)別閾值;以及在檢測(cè)到預(yù)定義事件或達(dá)到預(yù)定義識(shí)別閾值時(shí)使一個(gè)或更多個(gè)安全策略與新進(jìn)程相鏈接。第十四示例是使一個(gè)或更多個(gè)應(yīng)用特有安全策略與操作系統(tǒng)中啟動(dòng)的新進(jìn)程相鏈接的方法。該方法包括:檢測(cè)新進(jìn)程的啟動(dòng);以及至少將一個(gè)或更多個(gè)安全策略與新進(jìn)程的鏈接延遲至該新進(jìn)程使用其應(yīng)用特有代碼開始進(jìn)行專用化以用于執(zhí)行為止。第十五示例是一種設(shè)備,該設(shè)備包括運(yùn)行進(jìn)程的操作系統(tǒng)和能夠操作成啟動(dòng)應(yīng)用的中間件層,其中,使用操作系統(tǒng)中的一個(gè)或更多個(gè)進(jìn)程來運(yùn)行由中間件層啟動(dòng)的應(yīng)用。該操作系統(tǒng)具有用戶層和內(nèi)核,其中,進(jìn)程在操作系統(tǒng)的用戶層中運(yùn)行并且通過內(nèi)核與在用戶層中運(yùn)行的其他進(jìn)程進(jìn)行交互,該交互響應(yīng)于由進(jìn)程進(jìn)行的至內(nèi)核的呼叫。該設(shè)備還包括:一個(gè)或更多個(gè)策略文件,該一個(gè)或更多個(gè)策略文件定義用于使進(jìn)程與設(shè)備的內(nèi)核交互的策略;以及監(jiān)視器,該監(jiān)視器被配置成監(jiān)視進(jìn)程與內(nèi)核的交互以使所定義的策略與進(jìn)程相鏈接或相關(guān)聯(lián),并且被配置成讀取在與進(jìn)程相鏈接或相關(guān)聯(lián)的一個(gè)或更多個(gè)策略文件中定義的代碼。第十六示例是使設(shè)備上的操作系統(tǒng)虛擬化以提供能夠在該設(shè)備上操作的多個(gè)隔離的用戶空間實(shí)例的方法,該操作系統(tǒng)包括基于Linux的內(nèi)核并且包括系統(tǒng)架構(gòu),該系統(tǒng)架構(gòu)由與內(nèi)核相關(guān)聯(lián)的Linux層和包括應(yīng)用的更高應(yīng)用層來定義。該方法包括:攔截由進(jìn)程進(jìn)行的系統(tǒng)呼叫和/或庫(kù)函數(shù)呼叫,每個(gè)進(jìn)程對(duì)應(yīng)于應(yīng)用層中的應(yīng)用;以及至少基于用戶空間控制參數(shù)和與進(jìn)程相關(guān)聯(lián)的安全策略,針對(duì)所攔截的系統(tǒng)呼叫和/或庫(kù)函數(shù)呼叫來發(fā)起安全動(dòng)作,該用戶空間控制參數(shù)指示當(dāng)前在該設(shè)備上操作的特定用戶空間實(shí)例。第十七示例是用于使在設(shè)備上運(yùn)行的操作系統(tǒng)虛擬化以提供能夠在該設(shè)備上操作的多個(gè)隔離的用戶空間實(shí)例的虛擬化系統(tǒng),該操作系統(tǒng)包括基于Linux的內(nèi)核并且包括系統(tǒng)架構(gòu),該系統(tǒng)架構(gòu)由與內(nèi)核相關(guān)聯(lián)的Linux層和包括應(yīng)用的更高應(yīng)用層來定義。該系統(tǒng)包括:與Linux層中每個(gè)啟動(dòng)進(jìn)程相關(guān)聯(lián)的監(jiān)視實(shí)體,每個(gè)啟動(dòng)進(jìn)程對(duì)應(yīng)于應(yīng)用層中的應(yīng)用;以及與每個(gè)進(jìn)程相關(guān)聯(lián)的攔截器,該攔截器被配置成攔截系統(tǒng)呼叫和/或庫(kù)函數(shù)呼叫,并且被配置成將系統(tǒng)呼叫和/或庫(kù)函數(shù)呼叫重定向至與發(fā)起系統(tǒng)呼叫和/或庫(kù)函數(shù)呼叫的進(jìn)程相關(guān)聯(lián)的監(jiān)視實(shí)體。監(jiān)視實(shí)體被配置成分析所攔截的由該監(jiān)視實(shí)體的相關(guān)聯(lián)的進(jìn)程進(jìn)行的系統(tǒng)呼叫和/或庫(kù)函數(shù)呼叫,并且被配置成至少基于用戶空間控制參數(shù)和與該進(jìn)程相關(guān)聯(lián)的安全策略來執(zhí)行安全動(dòng)作,該用戶空間控制參數(shù)指示當(dāng)前在設(shè)備上操作的特定用戶空間實(shí)例。第十八示例是一種設(shè)備,該設(shè)備包括一個(gè)或更多個(gè)資源,該一個(gè)或更多個(gè)資源包括處理器并且能夠配置成以由該設(shè)備接收的功能代碼定義的功能,該設(shè)備還包括操作系統(tǒng),該操作系統(tǒng)包括用戶層和內(nèi)核,該用戶層能夠操作成運(yùn)行進(jìn)程,并且該內(nèi)核能夠操作成給該進(jìn)程提供使用該設(shè)備的一個(gè)或更多個(gè)資源的接口。該設(shè)備存儲(chǔ)啟動(dòng)器代碼,該啟動(dòng)器代碼能夠操作成將所接收的功能代碼作為新進(jìn)程啟動(dòng)并且能夠操作成使新進(jìn)程根據(jù)該功能代碼進(jìn)行專用化,由此,在該新進(jìn)程經(jīng)由通過內(nèi)核提供的接口來使用設(shè)備的資源的情況下,執(zhí)行由該功能代碼針對(duì)設(shè)備定義的功能。所述設(shè)備還存儲(chǔ)策略代碼,該策略代碼定義用于所接收的每個(gè)功能代碼或每個(gè)功能代碼類型的策略,并且其中,設(shè)備包括監(jiān)視代碼,該監(jiān)視代碼能夠操作成使策略代碼實(shí)例與進(jìn)程相關(guān)聯(lián)并且能夠操作成根據(jù)所關(guān)聯(lián)的策略代碼來監(jiān)視進(jìn)程。第十九示例是使在系統(tǒng)上執(zhí)行的應(yīng)用的操作安全的方法,該系統(tǒng)包括linux層和中間件層,該中間件層能夠操作成通過下述操作來啟動(dòng)應(yīng)用:使linux層中的進(jìn)程從其他的進(jìn)程或者從母進(jìn)程分裂,并且使linux層中的進(jìn)程使用為該應(yīng)用所特定的代碼進(jìn)行專用化。該方法包括:監(jiān)視母進(jìn)程或現(xiàn)有進(jìn)程以檢測(cè)分裂進(jìn)程;監(jiān)視分裂進(jìn)程執(zhí)行以便于識(shí)別哪個(gè)進(jìn)程進(jìn)行了專用化;以及監(jiān)視由經(jīng)專用化的進(jìn)程進(jìn)行的函數(shù)呼叫以確定相對(duì)于該函數(shù)呼叫執(zhí)行的安全動(dòng)作。在一些實(shí)施例中,上述示例中的任意示例可以采用計(jì)算機(jī)可讀介質(zhì)的形式,該計(jì)算機(jī)可讀介質(zhì)上存儲(chǔ)有計(jì)算機(jī)可讀指令,該計(jì)算機(jī)可讀指令在處理設(shè)備上被執(zhí)行時(shí),使該處理設(shè)備執(zhí)行在前述示例中描述的方法中的任何一種或更多種方法,或者使該處理設(shè)備實(shí)現(xiàn)該示例中描述的系統(tǒng)中的任何一種或更多種系統(tǒng)。在一些實(shí)施例中,上述示例中任意示例可以實(shí)現(xiàn)在具有處理器和存儲(chǔ)器的設(shè)備或系統(tǒng)上,并且其中,該處理器被配置成或被編程為:實(shí)現(xiàn)或執(zhí)行在示例中描述的方法中的任何一種或更多種方法,或者實(shí)現(xiàn)示例中描述的系統(tǒng)中的任何一種或更多種系統(tǒng)。9.概要安全系統(tǒng)的實(shí)施例可以通過硬件、軟件、固件、中間件、微代碼、或者其任意組合來實(shí)現(xiàn)。執(zhí)行所需任務(wù)的程序代碼或者代碼段當(dāng)在軟件、固件、中間件或微代碼中被實(shí)現(xiàn)時(shí)可以存儲(chǔ)在機(jī)器可讀介質(zhì)比如存儲(chǔ)介質(zhì)或其他存儲(chǔ)裝置中。處理器可以執(zhí)行所需任務(wù)。代碼段可以表示過程、函數(shù)、子程序、程序、例程、子例程、模塊、軟件包、類、或者指令、數(shù)據(jù)結(jié)構(gòu)或程序語(yǔ)句的任意組合。代碼段可以通過傳遞和/或接收信息、數(shù)據(jù)、變?cè)?、參?shù)或存儲(chǔ)內(nèi)容來耦接至另一代碼段或者硬件電路。可以經(jīng)由包括存儲(chǔ)器共享、消息傳遞、令牌傳遞、網(wǎng)絡(luò)傳輸?shù)鹊娜我膺m合手段來傳遞、轉(zhuǎn)發(fā)或者傳輸信息、變?cè)?、參?shù)、數(shù)據(jù)等。在前文中,存儲(chǔ)介質(zhì)可以表示用于存儲(chǔ)數(shù)據(jù)的一個(gè)或更多個(gè)設(shè)備,包括只讀存儲(chǔ)器(ROM)、隨機(jī)訪問存儲(chǔ)器(RAM)、磁盤存儲(chǔ)介質(zhì)、光存儲(chǔ)介質(zhì)、快閃存儲(chǔ)設(shè)備和/或用于存儲(chǔ)信息的其他機(jī)器可讀介質(zhì)。術(shù)語(yǔ)“機(jī)器可讀介質(zhì)”和“計(jì)算機(jī)可讀介質(zhì)”包括但不限于便攜式或固定式存儲(chǔ)設(shè)備、光存儲(chǔ)設(shè)備和/或能夠存儲(chǔ)、包含或載送指令和/或數(shù)據(jù)的各種其他介質(zhì)。使用被設(shè)計(jì)成執(zhí)行本文所述功能的通用處理器、數(shù)字信號(hào)處理器(DSP)、專用集成電路(ASIC)、現(xiàn)場(chǎng)可編程門陣列(FPGA)或者其他的可編程邏輯組件、離散門或晶體管邏輯、離散硬件組件、或者其任意組合可以實(shí)現(xiàn)或者執(zhí)行結(jié)合本文中公開的示例來描述的各種例示性邏輯塊、模塊、電路、元件和/或組件。通用處理器可以是微處理器,但是在替換方案中,處理器可以是任何常規(guī)處理器、控制器、微控制器、電路和/或狀態(tài)機(jī)。處理器還可以實(shí)現(xiàn)為計(jì)算組件的組合,例如,DSP和微處理器的組合、多個(gè)微處理器、與DSP核結(jié)合的一個(gè)活更多個(gè)微處理器、或者任何其他的這種配置。結(jié)合本文中公開的示例來描述的方法或算法可以采用處理單元、編程指令或者其他的指示的形式來直接地實(shí)施為硬件、可由處理器執(zhí)行的軟件模塊、或者這二者的組合,并且該方法或算法可以包含在單個(gè)設(shè)備中或者分布在多個(gè)設(shè)備中。軟件模塊可以駐存在RAM存儲(chǔ)器、快閃存儲(chǔ)器、ROM存儲(chǔ)器、EPROM存儲(chǔ)器、寄存器、硬盤、可移除盤、CD-ROM、或者現(xiàn)有技術(shù)中已知的任何其他形式的存儲(chǔ)介質(zhì)。存儲(chǔ)介質(zhì)可以與處理器耦接,使得處理器可以從存儲(chǔ)介質(zhì)讀取信息并且向存儲(chǔ)介質(zhì)寫入信息。在替換方案中,存儲(chǔ)介質(zhì)可以與處理器集成。圖中圖示出的組件和函數(shù)中的一個(gè)或更多個(gè)可以在不偏離本公開的范圍的情況下重新布置和/或組合成單個(gè)組件或者實(shí)施為幾個(gè)組件。還可以在不偏離本公開的范圍的情況下添加另外的元件或組件。另外地,本文中描述的特征可以以軟件、硬件或者其組合來實(shí)現(xiàn)。在其各個(gè)方面中,本文中各個(gè)實(shí)施例可以實(shí)現(xiàn)為計(jì)算機(jī)實(shí)現(xiàn)的進(jìn)程、機(jī)器(比如,電子設(shè)備、通用計(jì)算機(jī)、或提供能夠執(zhí)行計(jì)算機(jī)程序的平臺(tái)的其他設(shè)備)、由這些機(jī)器執(zhí)行的進(jìn)程、或者制品。這種成品可以包括:計(jì)算機(jī)程序產(chǎn)品或者數(shù)字信息產(chǎn)品,其中,計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)包含計(jì)算機(jī)程序指令或者計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)上存儲(chǔ)由計(jì)算機(jī)可讀數(shù)據(jù);以及創(chuàng)建并且使用這些制品的進(jìn)程和機(jī)器。本主題的前述描述包括其各種形式??梢栽诓黄x本公開的范圍的情況下對(duì)其進(jìn)行修改。當(dāng)前第1頁(yè)1 2 3 當(dāng)前第1頁(yè)1 2 3 
當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1