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

執(zhí)行系統(tǒng)調(diào)用的方法及裝置與流程

文檔序號:11276727閱讀:338來源:國知局
執(zhí)行系統(tǒng)調(diào)用的方法及裝置與流程

本申請涉及系統(tǒng)調(diào)用技術,具體涉及一種執(zhí)行系統(tǒng)調(diào)用的方法及裝置。本申請同時涉及另一種執(zhí)行系統(tǒng)調(diào)用的方法及裝置。



背景技術:

為了保證安全性,操作系統(tǒng)(例如linux)的運行空間通??梢员粍澐譃閮?nèi)核空間與用戶空間,它們各自運行在不同的級別中,邏輯上相互隔離。應用程序在通常情況下不允許訪問內(nèi)核數(shù)據(jù),也無法使用內(nèi)核函數(shù),它們只能在用戶空間操作用戶數(shù)據(jù),調(diào)用用戶空間函數(shù)。當用戶程序需要獲得系統(tǒng)服務或者訪問系統(tǒng)核心功能時,這時就需要執(zhí)行系統(tǒng)調(diào)用(syscall)。

執(zhí)行系統(tǒng)調(diào)用時通常通過軟中斷機制陷入內(nèi)核,即進入內(nèi)核空間,然后才能執(zhí)行相應的系統(tǒng)服務例程。從邏輯上來說,系統(tǒng)調(diào)用可被看成是內(nèi)核與用戶空間交互的接口:把來自用戶空間的請求傳達給內(nèi)核,待內(nèi)核把請求處理完畢后再將處理結果送回給用戶空間。

在具體應用中,操作系統(tǒng)通常提供大量的系統(tǒng)調(diào)用,這些系統(tǒng)調(diào)用都暴露在用戶空間,一方面在大多數(shù)應用程序的整個生命周期內(nèi),很多系統(tǒng)調(diào)用并沒有被調(diào)用,另一方面,暴露在用戶空間的系統(tǒng)調(diào)用有可能存在各種安全漏洞,如果被惡意利用,則可能為整個系統(tǒng)帶來安全隱患,因此有必要對應用程序執(zhí)行系統(tǒng)調(diào)用加以限制。例如,linux系統(tǒng)支持一種簡潔的seccomp(securecomputing—安全計算模式)沙箱機制,提供了一種安全運行模式,在該模式下的應用程序進程只能調(diào)用4種系統(tǒng)調(diào)用,即read、write、exit和sigreturn,否則應用程序便會被終止。

seccomp沙箱機制雖然實現(xiàn)了對系統(tǒng)調(diào)用的限制,但是由于其對所有被控制進程是一視同仁的,不能做到差異化控制;而且由于僅開放了read、write、exit、sigreturn這4個系統(tǒng)調(diào)用,不具有可擴展性,無法滿足用戶空間對系統(tǒng)調(diào)用的合理訪問需求。



技術實現(xiàn)要素:

本申請實施例提供一種執(zhí)行系統(tǒng)調(diào)用的方法及裝置,以解決現(xiàn)有技術在對系統(tǒng)調(diào)用進行限制時無法實現(xiàn)差異化控制、以及開放的系統(tǒng)調(diào)用數(shù)量無法滿足訪問需求的問題。本申請實施例還提供另一種執(zhí)行系統(tǒng)調(diào)用的方法及裝置。

本申請?zhí)峁┮环N執(zhí)行系統(tǒng)調(diào)用的方法,包括:

接收執(zhí)行系統(tǒng)調(diào)用的請求;

判斷所述系統(tǒng)調(diào)用的執(zhí)行者是否具有對所述系統(tǒng)調(diào)用的訪問權限;

若具有,則允許所述執(zhí)行者執(zhí)行所述系統(tǒng)調(diào)用。

可選的,所述判斷所述系統(tǒng)調(diào)用的執(zhí)行者是否具有對所述系統(tǒng)調(diào)用的訪問權限,包括:

獲取所述系統(tǒng)調(diào)用所屬類別;

獲取所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限;

根據(jù)所述獲取的信息,判斷所述執(zhí)行者是否具有對所述系統(tǒng)調(diào)用所屬類別的訪問權限;

其中,所述系統(tǒng)調(diào)用所屬類別、以及所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限是預先設定的。

可選的,在所述接收執(zhí)行系統(tǒng)調(diào)用的請求之前,執(zhí)行下述操作:

根據(jù)預先劃分的系統(tǒng)調(diào)用類別,指定所述系統(tǒng)調(diào)用所屬類別;

設置所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限。

可選的,所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限、以及所述系統(tǒng)調(diào)用所屬類別分別采用二進制比特串描述,其長度分別與系統(tǒng)調(diào)用的類別數(shù)一致,所述兩個二進制比特串中各比特位分別與相同序號的系統(tǒng)調(diào)用類別相對應;其中,描述所述訪問權限的二進制比特串中的每個比特位的值表示所述執(zhí)行者是否具有對相應類別系統(tǒng)調(diào)用的訪問權限,描述所述系統(tǒng)調(diào)用所屬類別的二進制比特串中的每個比特位的值表示所述系統(tǒng)調(diào)用是否屬于相應類別,并且表示具有對相應類別系統(tǒng)調(diào)用的訪問權限的值、與表示所述系統(tǒng)調(diào)用屬于相應類別的值一致;

所述根據(jù)所述獲取的信息,判斷所述執(zhí)行者是否具有對所述系統(tǒng)調(diào)用所屬類別的訪問權限,包括:

將描述所述訪問權限的二進制比特串與描述所述系統(tǒng)調(diào)用所屬類別的二進制比特串,逐位進行位運算;

根據(jù)運算結果判定所述執(zhí)行者是否具有對所述系統(tǒng)調(diào)用所屬類別的訪問權限。

可選的,描述所述訪問權限的二進制比特串中的1,表示所述執(zhí)行者具有對相應類別系統(tǒng)調(diào)用的訪問權限,0表示不具有;描述所述系統(tǒng)調(diào)用所屬類別的二進制比特串中的1,表示所述系統(tǒng)調(diào)用屬于相應類別,0表示不屬于;

所述逐位進行位運算,包括:逐位執(zhí)行按位與操作;

所述根據(jù)運算結果判定所述執(zhí)行者是否具有對所述系統(tǒng)調(diào)用所屬類別的訪問權限,包括:若執(zhí)行結果不全為0,則判定所述執(zhí)行者具有對所述系統(tǒng)調(diào)用所屬類別的訪問權限。

可選的,所述設置所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限,采用如下方式實現(xiàn):將所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限與其身份標識信息對應存儲;

所述獲取所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限,包括:根據(jù)所述執(zhí)行者的身份標識信息獲取所述執(zhí)行者的所述訪問權限。

可選的,所述身份標識信息包括:所述執(zhí)行者的信任狀信息。

可選的,采用如下方式獲取所述身份標識信息:從所述執(zhí)行者的運行上下文信息中獲取其身份標識信息。

可選的,所述設置所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限,包括:

在創(chuàng)建所述執(zhí)行者時,按照預設授權方案設置所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限;或者,用創(chuàng)建者對各類別系統(tǒng)調(diào)用的訪問權限設置所述執(zhí)行者的相應訪問權限。

可選的,所述設置所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限,還包括:

在創(chuàng)建所述執(zhí)行者之后、在運行所述執(zhí)行者之前,按照預設方式降低所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限。

可選的,所述按照預設方式降低所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限,包括:

根據(jù)所述執(zhí)行者的身份類別以及系統(tǒng)配置文件中針對所述身份類別的權限 配置信息,降低所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限;和/或,

根據(jù)所述執(zhí)行者所屬應用程序的配置文件中的權限申明信息,降低所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限。

可選的,所述設置所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限,還包括:

所述執(zhí)行者在運行過程中,在加載運行不可信代碼之前降低其對各類別系統(tǒng)調(diào)用的訪問權限。

可選的,所述設置所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限,還包括:

在所述不可信代碼運行完畢后,恢復所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限。

可選的,所述設置所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限,還包括:

所述執(zhí)行者在運行過程中,在加載運行可信代碼之前提高其對各類別系統(tǒng)調(diào)用的訪問權限。

可選的,在所述執(zhí)行者運行之前,在設置所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限時,還相應設置所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問能力;所述執(zhí)行者具有訪問權限的系統(tǒng)調(diào)用類別集合是其具有訪問能力的系統(tǒng)調(diào)用類別集合的子集;

所述提高其對各類別系統(tǒng)調(diào)用的訪問權限,包括:在所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問能力之內(nèi),提高所述執(zhí)行者的訪問權限。

可選的,在所述接收執(zhí)行系統(tǒng)調(diào)用的請求之后,包括:

根據(jù)所述系統(tǒng)調(diào)用的相關信息,確定其是否對應于預設的虛擬系統(tǒng)調(diào)用;

若是,則判斷所述系統(tǒng)調(diào)用的執(zhí)行者是否具有對所述虛擬系統(tǒng)調(diào)用的訪問權限,并在具有時,允許所述執(zhí)行者執(zhí)行所述虛擬系統(tǒng)調(diào)用;

若否,則執(zhí)行所述判斷所述系統(tǒng)調(diào)用的執(zhí)行者是否具有對所述系統(tǒng)調(diào)用的訪問權限的步驟。

可選的,所述系統(tǒng)調(diào)用的相關信息,包括:系統(tǒng)調(diào)用名稱及參數(shù)值。

可選的,所述執(zhí)行者包括:可獨立運行的基本單元;所述可獨立運行的基本單元包括:線程或者進程。

相應的,本申請還提供一種執(zhí)行系統(tǒng)調(diào)用的裝置,包括:

請求接收單元,用于接收執(zhí)行系統(tǒng)調(diào)用的請求;

權限判斷單元,用于判斷所述系統(tǒng)調(diào)用的執(zhí)行者是否具有對所述系統(tǒng)調(diào)用的訪問權限;

執(zhí)行允許單元,用于當所述訪問權限判斷單元的輸出為是時,允許所述執(zhí)行者執(zhí)行所述系統(tǒng)調(diào)用。

可選的,所述權限判斷單元,包括:

類別獲取子單元,用于獲取所述系統(tǒng)調(diào)用所屬類別;

訪問權限獲取子單元,用于獲取所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限;

判斷執(zhí)行子單元,用于根據(jù)所述獲取的信息,判斷所述執(zhí)行者是否具有對所述系統(tǒng)調(diào)用所屬類別的訪問權限。

可選的,所述裝置還包括:

類別指定單元,用于在所述請求接收單元工作之前,根據(jù)預先劃分的系統(tǒng)調(diào)用類別,指定所述系統(tǒng)調(diào)用所屬類別;

權限設置單元,用于設置所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限。

可選的,所述判斷執(zhí)行子單元,具體用于將描述所述訪問權限的二進制比特串與描述所述系統(tǒng)調(diào)用所屬類別的二進制比特串,逐位進行位運算,并根據(jù)運算結果判定所述執(zhí)行者是否具有對所述系統(tǒng)調(diào)用所屬類別的訪問權限。

可選的,所述判斷執(zhí)行子單元,具體用于將描述所述訪問權限的二進制比特串與描述所述系統(tǒng)調(diào)用所屬類別的二進制比特串,逐位執(zhí)行按位與操作,并當執(zhí)行結果不全為0時判定所述執(zhí)行者具有對所述系統(tǒng)調(diào)用所屬類別的訪問權限。

可選的,所述權限設置單元,具體用于將所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限與其身份標識信息對應存儲;

所述訪問權限獲取子單元,具體用于根據(jù)所述執(zhí)行者的身份標識信息獲取所述執(zhí)行者的所述訪問權限。

可選的,所述訪問權限獲取子單元,具體用于從所述執(zhí)行者的運行上下文信息中獲取其身份標識信息,并根據(jù)所述身份標識信息獲取所述執(zhí)行者的所述訪問權限。

可選的,所述權限設置單元包括:

權限繼承子單元,用于在創(chuàng)建所述執(zhí)行者時,按照預設授權方案設置所述 執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限;或者,用創(chuàng)建者對各類別系統(tǒng)調(diào)用的訪問權限設置所述執(zhí)行者的相應訪問權限。

可選的,所述權限設置單元還包括:

運行前權限降低子單元,用于在創(chuàng)建所述執(zhí)行者之后、在運行所述執(zhí)行者之前,按照預設方式降低所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限。

可選的,所述運行前權限降低子單元包括:

第一降低子單元,用于根據(jù)所述執(zhí)行者的身份類別以及系統(tǒng)配置文件中針對所述身份類別的權限配置信息,降低所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限;和/或,

第二降低子單元,用于根據(jù)所述執(zhí)行者所屬應用程序的配置文件中的權限申明信息,降低所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限。

可選的,所述權限設置單元還包括:

運行后權限降低子單元,用于所述執(zhí)行者在運行過程中,在加載運行不可信代碼之前降低其對各類別系統(tǒng)調(diào)用的訪問權限。

可選的,所述權限設置單元還包括:

權限恢復單元,用于在所述不可信代碼運行完畢后,恢復所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限。

可選的,所述權限設置單元還包括:

權限提高子單元,用于所述執(zhí)行者在運行過程中,在加載運行可信代碼之前提高其對各類別系統(tǒng)調(diào)用的訪問權限。

可選的,所述權限降低子單元和所述運行前權限降低子單元,還分別用于相應設置所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問能力;

所述權限提高子單元,具體用于在所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問能力之內(nèi),提高所述執(zhí)行者的訪問權限。

可選的,所述裝置還包括:

虛擬調(diào)用確定單元,用于在所述請求接收單元接收執(zhí)行系統(tǒng)調(diào)用的請求后,根據(jù)所述系統(tǒng)調(diào)用的相關信息,確定其是否對應于虛擬系統(tǒng)調(diào)用,并在不對應時,觸發(fā)所述權限判斷單元工作;

虛擬調(diào)用權限判斷單元,用于當所述虛擬調(diào)用確定單元的輸出為是時,判 斷所述系統(tǒng)調(diào)用的執(zhí)行者是否具有對所述虛擬系統(tǒng)調(diào)用的訪問權限,并在具有時,允許所述執(zhí)行者執(zhí)行所述虛擬系統(tǒng)調(diào)用。

此外,本申請還提供一種執(zhí)行系統(tǒng)調(diào)用的方法,包括:

接收執(zhí)行系統(tǒng)調(diào)用的請求;

根據(jù)所述系統(tǒng)調(diào)用的相關信息,確定待執(zhí)行的目標調(diào)用;

判斷所述系統(tǒng)調(diào)用的執(zhí)行者是否具有對所述目標調(diào)用的訪問權限;

若具有,則允許所述執(zhí)行者執(zhí)行所述目標調(diào)用。

可選的,所述根據(jù)所述系統(tǒng)調(diào)用的相關信息,確定待執(zhí)行的目標調(diào)用,包括:

當所述系統(tǒng)調(diào)用對應于預設的虛擬系統(tǒng)調(diào)用時,將所述虛擬系統(tǒng)調(diào)用作為所述目標調(diào)用,否則將所述系統(tǒng)調(diào)用作為所述目標調(diào)用。

可選的,所述系統(tǒng)調(diào)用的相關信息包括:系統(tǒng)調(diào)用名稱及參數(shù)值。

可選的,所述判斷所述系統(tǒng)調(diào)用的執(zhí)行者是否具有對所述目標調(diào)用的訪問權限,包括:

獲取所述目標調(diào)用所屬類別;

獲取所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限;

根據(jù)所述獲取的信息,判斷所述執(zhí)行者是否具有對所述目標調(diào)用所屬類別的訪問權限;

其中,所述目標調(diào)用所屬類別、以及所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限是預先設定的。

可選的,在所述接收執(zhí)行系統(tǒng)調(diào)用的請求之前,執(zhí)行下述操作:

根據(jù)預先劃分的系統(tǒng)調(diào)用類別,指定所述目標調(diào)用所屬類別;

設置所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限。

相應的,本申請還提供一種執(zhí)行系統(tǒng)調(diào)用的裝置,包括:

請求接收單元,用于接收執(zhí)行系統(tǒng)調(diào)用的請求;

目標調(diào)用確定單元,用于根據(jù)所述系統(tǒng)調(diào)用的相關信息,確定待執(zhí)行的目標調(diào)用;

訪問權限判斷單元,用于判斷所述系統(tǒng)調(diào)用的執(zhí)行者是否具有對所述目標 調(diào)用的訪問權限;

執(zhí)行允許單元,用于當所述訪問權限判斷單元的輸出為是時,允許所述執(zhí)行者執(zhí)行所述目標調(diào)用。

可選的,所述目標調(diào)用確定單元,具體用于當所述系統(tǒng)調(diào)用對應于預設的虛擬系統(tǒng)調(diào)用時,將所述虛擬系統(tǒng)調(diào)用作為所述目標調(diào)用,否則將所述系統(tǒng)調(diào)用作為所述目標調(diào)用。

可選的,所述訪問權限判斷單元,包括:

目標調(diào)用類別獲取子單元,用于獲取所述目標調(diào)用所屬類別;

訪問權限獲取子單元,用于獲取所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限;

目標調(diào)用判斷執(zhí)行子單元,用于根據(jù)所述獲取的信息,判斷所述執(zhí)行者是否具有對所述目標調(diào)用所屬類別的訪問權限。

可選的,所述裝置還包括:

目標調(diào)用類別指定單元,用于在所述請求接收單元工作之前,根據(jù)預先劃分的系統(tǒng)調(diào)用類別,指定所述目標調(diào)用所屬類別;

權限設置單元,用于設置所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限。

與現(xiàn)有技術相比,本申請具有以下優(yōu)點:

本申請的執(zhí)行系統(tǒng)調(diào)用的方法,接收執(zhí)行系統(tǒng)調(diào)用的請求后,判斷所述系統(tǒng)調(diào)用的執(zhí)行者是否具有對所述系統(tǒng)調(diào)用的訪問權限,并在具有時允許執(zhí)行者執(zhí)行所述系統(tǒng)調(diào)用。本申請?zhí)峁┑纳鲜龇椒?,在判斷某一系統(tǒng)調(diào)用能否被執(zhí)行時,是以執(zhí)行者是否具有相應的訪問權限作為依據(jù),即,通過對執(zhí)行者的授權達到限制系統(tǒng)調(diào)用的目的,從而實現(xiàn)了基于執(zhí)行者身份的差異化控制,而且并沒有對開放哪些系統(tǒng)調(diào)用加以限制,因此可以靈活地滿足用戶空間對系統(tǒng)調(diào)用的合理訪問需求。

附圖說明

圖1是本申請的一種執(zhí)行系統(tǒng)調(diào)用的方法的實施例的流程圖;

圖2是本申請實施例提供的判斷執(zhí)行者是否具有對系統(tǒng)調(diào)用的訪問權限的處理流程圖;

圖3是本申請的一種執(zhí)行系統(tǒng)調(diào)用的裝置的實施例的示意圖;

圖4是本申請的另一種執(zhí)行系統(tǒng)調(diào)用的方法的實施例的流程圖;

圖5是本申請的另一種執(zhí)行系統(tǒng)調(diào)用的裝置的實施例的示意圖。

具體實施方式

在下面的描述中闡述了很多具體細節(jié)以便于充分理解本申請。但是,本申請能夠以很多不同于在此描述的其它方式來實施,本領域技術人員可以在不違背本申請內(nèi)涵的情況下做類似推廣,因此,本申請不受下面公開的具體實施的限制。

在本申請中,分別提供了一種執(zhí)行系統(tǒng)調(diào)用的方法及裝置,以及另一種執(zhí)行系統(tǒng)調(diào)用的方法及裝置。在下面的實施例中逐一進行詳細說明。

本申請?zhí)峁┑膱?zhí)行系統(tǒng)調(diào)用的方法,提供了一種對執(zhí)行系統(tǒng)調(diào)用進行權限控制的沙箱機制,其核心在于:在針對接收到的系統(tǒng)調(diào)用請求判斷某一系統(tǒng)調(diào)用能否被執(zhí)行時,是以執(zhí)行者是否具有相應的訪問權限作為依據(jù),即,只有被授權的執(zhí)行者才能執(zhí)行所述系統(tǒng)調(diào)用,從而達到了對執(zhí)行系統(tǒng)調(diào)用加以限制的目的,實現(xiàn)了基于執(zhí)行者身份的差異化控制,而且并沒有對開放哪些系統(tǒng)調(diào)用加以限制,因此可以靈活地滿足用戶空間對系統(tǒng)調(diào)用的合理訪問需求。

需要說明的是,在具體應用中,應用程序的功能可以由進程實現(xiàn),在支持多線程的系統(tǒng)中,應用程序的功能也可以由多線程并發(fā)實現(xiàn),而進程或者線程在運行過程中可以根據(jù)需要執(zhí)行系統(tǒng)調(diào)用(syscall),即調(diào)用syscall。本實施例所述的執(zhí)行者,通常是指能夠獨立運行的基本單元,是可以由操作系統(tǒng)調(diào)度運行的獨立指令流,在具體實施中,可以是進程,也可以是線程。在本文后續(xù)提供的實施例中,將以在linux系統(tǒng)中實施本技術方案為例進行說明,由于在linux中進程和線程是統(tǒng)一的,并沒有線程和進程之分,通常認為線程是共用數(shù)據(jù)空間的輕量級進程,因此在以下實施例的描述中,不加以明確的區(qū)分,主要采用線程的表述方式。

本申請?zhí)峁┑膱?zhí)行系統(tǒng)調(diào)用的方法,在具體實施時,可以在內(nèi)核的統(tǒng)一入口處實施,即由內(nèi)核中的獨立的服務提供方實施,用戶空間發(fā)起的執(zhí)行系統(tǒng)調(diào)用的請求可以先提交給所述服務提供方,由服務提供方判斷是否允許執(zhí)行者執(zhí)行所述系統(tǒng)調(diào)用,如果允許則可以將所述系統(tǒng)調(diào)用請求分發(fā)給相應的系統(tǒng)調(diào)用 服務例程,或者直接觸發(fā)相應的系統(tǒng)調(diào)用服務例程,從而實現(xiàn)相應的系統(tǒng)調(diào)用功能。

本申請?zhí)峁┑膱?zhí)行系統(tǒng)調(diào)用的方法,包括以下步驟:接收執(zhí)行系統(tǒng)調(diào)用的請求;判斷所述系統(tǒng)調(diào)用的執(zhí)行者是否具有對所述系統(tǒng)調(diào)用的訪問權限;若具有,則允許所述執(zhí)行者執(zhí)行所述系統(tǒng)調(diào)用。

實施上述方法時,可以預先設置執(zhí)行者對系統(tǒng)調(diào)用的訪問權限,即:預先進行授權,明確設定執(zhí)行者具有對哪些系統(tǒng)調(diào)用的訪問權限,并將這些系統(tǒng)調(diào)用的名稱或者索引號添加到所述執(zhí)行者的授權集合中;那么在接收到所述執(zhí)行者發(fā)起的系統(tǒng)調(diào)用請求后,可以根據(jù)預先設定的訪問權限,判斷所述執(zhí)行者是否具有對所述系統(tǒng)調(diào)用的訪問權限,即:判斷所述執(zhí)行者的授權集合中是否包含被請求的系統(tǒng)調(diào)用的名稱或者索引號,若包含則說明所述執(zhí)行者具有對所述系統(tǒng)調(diào)用的訪問權限,允許其執(zhí)行所述系統(tǒng)調(diào)用。

考慮到系統(tǒng)調(diào)用的數(shù)目通常比較多,而且大部分系統(tǒng)調(diào)用可以根據(jù)功能或者其他特征進行聚類,因此為了方便授權管理,可以預先對系統(tǒng)調(diào)用進行分類,將系統(tǒng)調(diào)用劃分為預設數(shù)目的類別,并以類別為基本單位為執(zhí)行者設置訪問權限,從而可以減少授權過程的工作量,并提高本技術方案的執(zhí)行效率。在以下提供的實施例中將重點描述基于分類的優(yōu)選實施方式。下面對本申請的實施例進行詳細說明。

請參考圖1,其為本申請的一種執(zhí)行系統(tǒng)調(diào)用的方法的實施例的流程圖。在具體實施本方法之前,可以根據(jù)預先劃分的系統(tǒng)調(diào)用類別,為本實施例中的待執(zhí)行系統(tǒng)調(diào)用指定所屬類別,并設置所述執(zhí)行者對各類系統(tǒng)調(diào)用的訪問權限。

(一)根據(jù)預先劃分的系統(tǒng)調(diào)用類別,指定所述系統(tǒng)調(diào)用所屬類別。

可以將內(nèi)核提供的系統(tǒng)調(diào)用預先劃分為預設數(shù)目的類別,具體實施時可以根據(jù)不同的標準進行分類,例如,可以根據(jù)實現(xiàn)的功能劃分為:網(wǎng)絡操作相關的類別、與文件操作相關的類別、與權限設置相關的類別等。所述預設數(shù)目可以根據(jù)需要進行設置,對于32位系統(tǒng)預設數(shù)目n可以為32,對于64位系統(tǒng)n可以為64。劃分好的類別可以分別用1~n加以標識,例如可以用1標識與網(wǎng)絡操作相關的類別,用2標識與文件操作相關的類別。

進行類別劃分后,可以為每個系統(tǒng)調(diào)用指定其所屬類別(在該過程中,自然也為本實施例中的待執(zhí)行系統(tǒng)調(diào)用指定了所屬類別),通常每個系統(tǒng)調(diào)用僅屬 于一個類別。例如:指定系統(tǒng)調(diào)用read()屬于類別2,即屬于與文件操作相關的類別。具體實施時,每個系統(tǒng)調(diào)用通常有與其對應的索引號,因此在為每個系統(tǒng)調(diào)用指定所屬類別后,可以將系統(tǒng)調(diào)用的名稱或者索引號與其所屬類別的標識對應存儲。

優(yōu)選地,為了便于提高進行權限檢查的執(zhí)行效率,本實施例提供采用二進制比特串描述系統(tǒng)調(diào)用所屬類別的優(yōu)選實施方式。用于描述系統(tǒng)調(diào)用所屬類別的二進制比特串的長度與系統(tǒng)調(diào)用的類別數(shù)n一致,每個比特位分別與相同序號的系統(tǒng)調(diào)用類別相對應,即:第1個比特位與類別1相對應,第2個比特位與類別2相對應,......,第n個比特位與類別n相對應,每個比特位的取值則代表系統(tǒng)調(diào)用與相應類別的關系:1表示屬于該類別,0表示不屬于。例如:描述某系統(tǒng)調(diào)用所屬類別的32位二進制比特串為:0100000......0,則代表該系統(tǒng)調(diào)用屬于類別2。

進一步地,可以對可供用戶空間訪問的每個系統(tǒng)調(diào)用都采用上述方式進行描述,如果總共有s個系統(tǒng)調(diào)用(索引號的取值范圍為:0~s-1),則對應于s個二進制比特串。在具體實施時,可以將描述這些系統(tǒng)調(diào)用所屬分類的s個二進制比特串統(tǒng)一采用二維bit數(shù)組進行存儲管理,記為category[n][s],其中category[0][m]~category[n-1][m]存儲的長度為n的二進制比特串,即對應于索引號為m的系統(tǒng)調(diào)用的所屬類別。

在具體實施時,可以預先設定category[n][s],也可以在此基礎上在系統(tǒng)配置文件中提供配置信息,在系統(tǒng)啟動時,通過讀取配置文件中的配置信息進行相應的調(diào)整,例如:配置信息的形式可以為“syscall.classifytypename”,其中syscall.classify為關鍵字,name為syscall名稱,type代表所屬類別標識(1~n),在系統(tǒng)啟動時可以將讀取的配置信息轉(zhuǎn)化成對應的二進制比特串、并更新category[n][s]中的相應比特位的值。采用這種方式,可以基于策略規(guī)則對系統(tǒng)調(diào)用所屬分類進行調(diào)整,具有靈活性。

(二)設置所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限。

本實施例提供基于分類的優(yōu)選實施方式,采用這種優(yōu)選實施方式,可以以類別為單位在內(nèi)核中對執(zhí)行者授權,在執(zhí)行者生命周期的至少一個階段設置所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限,所述生命周期包括以下階段:創(chuàng)建階段、創(chuàng)建之后運行之前階段、運行階段等,即:可以在不同階段按照預設方式 調(diào)整執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限,從而實現(xiàn)對執(zhí)行者訪問權限的動態(tài)調(diào)節(jié),能夠為執(zhí)行系統(tǒng)調(diào)用提供更為靈活的安全保障。

在本實施例中所述執(zhí)行者是指線程,即:為線程設置對各類別系統(tǒng)調(diào)用的訪問權限??傮w說,在運行線程之前的權限設置過程是一個逐步降低權限的過程,以將線程對系統(tǒng)調(diào)用的訪問權限限制在安全范圍中,在線程的運行過程中,則可以根據(jù)運行代碼的可信程度,自行提高、降低或者恢復訪問權限。

作為一種優(yōu)選實施方式,為了避免線程過度提升自身權限,本實施例還引入了訪問能力的概念、并通過在線程運行之前設置其訪問能力來實現(xiàn)對其調(diào)節(jié)訪問權限的限制。所述訪問能力,表示線程擁有的訪問系統(tǒng)調(diào)用的能力范圍。

具體實施時,線程對各類別系統(tǒng)調(diào)用的訪問權限(以下簡稱訪問權限),以及對各類別系統(tǒng)調(diào)用的訪問能力(以下簡稱訪問能力),可以分別用集合來描述,訪問權限集合中包含線程具有訪問權限的類別標識,取值范圍1~n,訪問能力集合中包含線程具有訪問能力的類別標識,取值范圍1~n。對于一個線程來說,訪問權限集合是訪問能力集合的子集。

例如:某線程具有對系統(tǒng)調(diào)用類別1、2、3的訪問能力,那么該線程的訪問能力集合為{1、2、3},該線程的訪問權限集合是{1、2、3}的子集,即可以為以下所列集合之一:{1、2、3},{1、2},{1、3},{2、3},{1},{2},{3}。

優(yōu)選地,與采用二進制比特串描述系統(tǒng)調(diào)用所屬類別的優(yōu)選實施方式相對應,線程的訪問權限、以及訪問能力也可以采用二進制比特串進行描述。所述二進制比特串的長度與系統(tǒng)調(diào)用的類別數(shù)一致,每個比特位分別與相同序號的系統(tǒng)調(diào)用類別相對應,即:第1個比特位與類別1相對應,第2個比特位與類別2相對應,......,第n個比特位與類別n相對應,每個比特位的取值則代表線程是否具有對相應類別系統(tǒng)調(diào)用的訪問權限:1,表示線程具有對相應類別系統(tǒng)調(diào)用的訪問權限,0表示不具有。為了便于描述,本實施例將描述線程對各類別系統(tǒng)調(diào)用的訪問權限的二進制比特串簡稱為訪問權限比特串,將描述線程對各類別系統(tǒng)調(diào)用的訪問能力的二進制比特串簡稱為訪問能力比特串。

在具體實施時,所述線程的訪問權限,通常與線程的身份標識信息對應存儲,其中所述身份標識信息可以是線程的信任狀信息(credential),也可以是其他可以標識線程身份的信息。首次設置時可以將線程的訪問權限與身份標識信息對應存儲,后續(xù)設置時可以先根據(jù)線程的身份標識信息獲取與其對應存儲的 訪問權限,然后對訪問權限進行更新,再將更新后的訪問權限與身份標識信息對應存儲。同理,設置線程的訪問能力,也可以采用將訪問能力與線程的身份標識信息對應存儲的方式。

下面以在32位linux系統(tǒng)中為線程設置訪問權限為例,從線程的創(chuàng)建、線程創(chuàng)建之后運行之前、以及線程運行過程中這三個階段,對其訪問權限的設置作進一步詳細說明,其中,在前兩個階段,也可以對線程的訪問能力進行設置。

1)創(chuàng)建線程時,線程可以繼承創(chuàng)建者的訪問權限。

在創(chuàng)建線程時,可以用創(chuàng)建者的訪問權限設置所述執(zhí)行者的相應訪問權限。

在linux系統(tǒng)的init進程啟動時,其訪問權限(permissoin)比特串和訪問能力(capability)比特串都初始化為0xffffffff,即所有bit位都是1,從而擁有對所有類別系統(tǒng)調(diào)用的訪問權限和訪問能力;隨后,init進程運行負責創(chuàng)建應用進程的特定進程,例如:seed進程;seed進程初始化完畢后,降低其訪問權限和訪問能力,例如:刪除對部分預設系統(tǒng)調(diào)用類別的訪問權限和訪問能力,以達到seed進程的最小權限。具體實施時,可以將seed進程的訪問權限比特串和訪問能力比特串中的相應比特位清除為0,然后用更新后的比特串設置seed進程的訪問權限和訪問能力。

seed進程接收啟動應用程序a的請求后,在內(nèi)核中完成應用程序a的主線程threada的實體創(chuàng)建,并根據(jù)seed的訪問權限設置threada的訪問權限和訪問能力,即:threada可以繼承創(chuàng)建者的訪問權限和訪問能力,設置threada的訪問權限比特串=threada的訪問能力比特串=seed的訪問權限比特串,那么threada就擁有了從seed繼承的訪問權限和訪問能力。

此處給出了線程繼承創(chuàng)建者的訪問權限的實施方式,在具體實施中,也可以按照預設授權方案設置所述線程對各類別系統(tǒng)調(diào)用的訪問權限和訪問能力,即:將線程的訪問權限和訪問能力設置為預設授權方案中指定的值。

2)創(chuàng)建線程之后、運行線程之前,降低線程的訪問權限。

由于threada即將運行的應用代碼,通常是不可信的,為了避免惡意執(zhí)行系統(tǒng)調(diào)用帶來的安全性問題,在創(chuàng)建threada的實體后,在運行該線程之前,即:運行應用a的代碼之前,還可以按照預設方式進一步執(zhí)行降權操作,以將threada對系統(tǒng)調(diào)用的訪問權限和訪問能力限制在安全范圍中。所述進一步執(zhí)行降權操作,包括:根據(jù)系統(tǒng)配置文件降權,和/或根據(jù)應用的配置文件降權,下面分別 進行說明。

a)根據(jù)所述執(zhí)行者的身份類別以及系統(tǒng)配置文件中針對所述身份類別的權限配置信息,降低所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限。

系統(tǒng)配置文件中可以顯示地設定針對各種身份類別的權限配置信息,例如,其配置格式可以為:setcapusercapability,其中user即對應于各種身份類別,如:普通應用、系統(tǒng)應用、特殊應用等,capability是對各類別系統(tǒng)調(diào)用的訪問范圍。在創(chuàng)建threada的實體后,可以根據(jù)應用a的預設特征,例如:簽名信息或者應用名稱、路徑等信息,按照預設的身份轉(zhuǎn)換規(guī)則,生成表征threada的身份類別信息,然后根據(jù)系統(tǒng)配置文件中針對所述身份類別的權限配置信息執(zhí)行降權操作。

例如,threada被創(chuàng)建后,具有與uid/gid設置相關的系統(tǒng)調(diào)用類別的訪問權限和訪問能力,但是系統(tǒng)配置文件中顯示指定的capability中不包含該類別,則可以將threada的訪問權限比特串和訪問能力比特串中,與該類別對應的比特位清除為0,然后用更新后的比特串設置threada的訪問權限和訪問能力。

b)根據(jù)所述執(zhí)行者所屬應用的配置文件中的權限申明信息,降低所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限。

通常應用程序a可以在其配置文件中申明其需要的功能權限,例如:需要收發(fā)短信的功能權限,需要訪問通訊錄的功能權限等,因此運行threada之前,可以根據(jù)應用程序申明的功能權限,選擇實現(xiàn)相應功能的系統(tǒng)調(diào)用,并確定這些系統(tǒng)調(diào)用對應的系統(tǒng)調(diào)用類別,即:確定應用程序a申明的功能權限所涉及的系統(tǒng)調(diào)用類別,然后執(zhí)行相應的降權操作,從threada的訪問權限比特串和訪問能力比特串中,將未涉及的系統(tǒng)調(diào)用類別對應的比特位清除為0,然后用更新后的比特串設置threada的訪問權限和訪問能力。

需要說明的是,threada作為應用程序a的主線程,當其脫離seed后,還可以根據(jù)其功能需求創(chuàng)建其他功能子線程,一方面其創(chuàng)建的子線程可以繼承threada的訪問權限和訪問能力,另一方面在運行子線程之前,還可以降低子線程的訪問權限和訪問能力,例如:刪除與創(chuàng)建線程相關的系統(tǒng)調(diào)用類別的訪問權限和訪問能力。具體實現(xiàn)時,可以將所述子線程的訪問權限比特串和訪問能力比特串中的相應比特位清除為0、然后用更新后的比特串設置子線程的訪問權限和訪問能力。

3)線程運行過程中,自行調(diào)節(jié)訪問權限。

此處所述線程包括應用程序a的主線程threada,也包括threada創(chuàng)建的子線程,這些線程在運行過程中,都可以根據(jù)需要自行調(diào)節(jié)各自的訪問權限,下面以threada為例,進行說明。

threada創(chuàng)建完畢后開始運行相應的應用代碼,在運行過程中,可能需要加載運行不可信代碼,例如:第三方提供的代碼,或者調(diào)用第三方提供的庫中的接口等,這些代碼的安全性通常未得到有效驗證,因此在加載運行不可信代碼之前,threada可以自行降低訪問權限,但是要保留訪問能力,即:將訪問權限比特串中禁止不可信代碼執(zhí)行的系統(tǒng)調(diào)用類別對應的比特位清除為0,并且不修改訪問能力比特串,然后用更新后的訪問權限比特串設置threada的訪問權限。

在所述不可信代碼運行完畢后,threada可以恢復其對各類別系統(tǒng)調(diào)用的訪問權限。threada可以將其訪問權限恢復為在加載上述不可信代碼之前的訪問權限,如果之前降低訪問權限時,未記錄降權前的訪問權限,那么可以在不可信代碼運行完畢后,以threada的訪問能力為上限,對其訪問權限進行恢復,但是不能超出訪問能力的限制。

此外,threada在運行過程中,在加載運行可信代碼之前,可以自行提高訪問權限。例如:為了確保可信代碼實現(xiàn)其功能,可以根據(jù)可信代碼的需求,提高threada的訪問權限,即可以增加其具有訪問權限的系統(tǒng)調(diào)用類別,以保證可信代碼實現(xiàn)其功能。但是threada在提高其訪問權限時,也需要以其訪問能力為上限,在訪問能力的限制之內(nèi)進行權限提升。

在具體實施時,可以為線程提供一個setcap()權限設置接口,當需要設置線程的訪問權限時,可以將待設置的訪問權限信息(例如:訪問權限比特串)作為入口參數(shù)并調(diào)用setcap()接口,由該接口函數(shù)在內(nèi)核中實現(xiàn)所述設置功能。如果需要設置訪問能力,則可以將訪問能力信息(例如:訪問能力比特串)也作為入口參數(shù)傳入,由setcap()函數(shù)在內(nèi)核中實現(xiàn)相應的設置功能。

需要說明的是,上述給出的在各階段設置線程訪問權限的方式,在具體實施時,可以不全部采用,而是根據(jù)需要進行相應的選擇和組合,例如:可以僅在創(chuàng)建時設置線程的訪問權限,或者在創(chuàng)建時設置權限、并在線程運行過程中進行權限調(diào)節(jié)等,都是可以的。

在創(chuàng)建線程及線程運行等各個階段,可以通過以上描述的時機和方式設置 線程的訪問權限(和訪問能力),同時,在線程的運行過程中可能會執(zhí)行系統(tǒng)調(diào)用,此時,可以執(zhí)行本實施例的步驟101-步驟104,根據(jù)線程的訪問權限判斷其是否可以執(zhí)行所述系統(tǒng)調(diào)用,從而實現(xiàn)對系統(tǒng)調(diào)用的訪問限制。下面對各個步驟逐一進行說明。

步驟101、接收執(zhí)行系統(tǒng)調(diào)用的請求。

線程執(zhí)行某一系統(tǒng)調(diào)用后,通常會陷入內(nèi)核,此時位于內(nèi)核入口處的、實施了本方法的處理程序就會接收到執(zhí)行所述系統(tǒng)調(diào)用的請求,所述請求中通常攜帶待執(zhí)行系統(tǒng)調(diào)用的索引號或者名稱,以及執(zhí)行系統(tǒng)調(diào)用的相關參數(shù)。

步驟102、判斷所述系統(tǒng)調(diào)用的執(zhí)行者是否具有對所述系統(tǒng)調(diào)用的訪問權限,若具有,則執(zhí)行步驟103,否則,執(zhí)行步驟104。

在具體實施時,可以包括步驟102-1至102-3,下面結合圖2作進一步說明。

步驟102-1、獲取所述系統(tǒng)調(diào)用所屬類別。

根據(jù)前面的描述,已經(jīng)預先為每個系統(tǒng)調(diào)用指定其所屬的系統(tǒng)調(diào)用類別,其中自然也包括步驟101接收到的待執(zhí)行的系統(tǒng)調(diào)用,此時可以根據(jù)待執(zhí)行的系統(tǒng)調(diào)用的名稱或者索引號,獲取其所屬的系統(tǒng)調(diào)用類別,例如:獲取其所屬的系統(tǒng)調(diào)用類別的標識。

如果在預先指定系統(tǒng)調(diào)用類別時,采取了用二進制比特串描述的優(yōu)選實施方式,并且利用二維bit數(shù)組category[n][s]存儲、管理系統(tǒng)調(diào)用所屬分類,那么本步驟可以通過待執(zhí)行系統(tǒng)調(diào)用的索引號scno查詢數(shù)組category[n][s],從而獲取待執(zhí)行系統(tǒng)調(diào)用所屬的類別信息category[n][scno],將這n個比特組合就得到了該系統(tǒng)調(diào)用所屬類別的二進制比特串,簡稱類別比特串。如果步驟101接收到的請求中攜帶的是系統(tǒng)調(diào)用名稱,則可以先通過查表等操作將名稱轉(zhuǎn)換為索引號。

步驟102-2、獲取所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限。

本實施例中,執(zhí)行者為線程,因此本步驟可以獲取已為所述線程設置的訪問權限,通常可以根據(jù)線程的身份標識信息獲取其訪問權限。例如:可以通過內(nèi)核的線程上下文得到線程的信任狀信息(credential),并根據(jù)信任狀獲取其訪問權限,例如:訪問權限集合。

對于采用二進制比特串描述的優(yōu)選實施方式,本步驟獲取的是所述線程的訪問權限比特串。

步驟102-3、根據(jù)所述獲取的信息,判斷所述執(zhí)行者是否具有對所述系統(tǒng)調(diào)用所屬類別的訪問權限,若具有,則執(zhí)行步驟103,否則,執(zhí)行步驟104。

本步驟根據(jù)步驟102-1獲取的待執(zhí)行系統(tǒng)調(diào)用所屬類別,以及步驟102-2獲取的線程的訪問權限,判斷所述線程是否能夠執(zhí)行所述系統(tǒng)調(diào)用。

如果步驟102-1獲取的是所述系統(tǒng)調(diào)用所屬的系統(tǒng)調(diào)用類別的標識、步驟102-2獲取的是訪問權限集合,即該集合中包含線程具有訪問權限的類別標識,那么本步驟可以判斷該集合中是否包含步驟102-1獲取的類別標識,若包含則說明所述線程具有相應的訪問權限。

優(yōu)選地,如果線程的訪問權限、以及系統(tǒng)調(diào)用所屬類別都是采用二進制比特串描述的,那么本步驟可以采用按位與的優(yōu)選實施方式:將訪問權限比特串permission和類別比特串category[n][scno]進行按位與操作,即permission&category[n][scno],在n=32時,即為一次整數(shù)位與操作,如果結果不全為0,則說明所述線程具有對待執(zhí)行系統(tǒng)調(diào)用所屬類別的訪問權限,可以執(zhí)行步驟103,否則說明所述線程不具有相應的訪問權限,可以向所述線程返回代表“調(diào)用失敗”或者“無調(diào)用權限”等類似的應答結果。采用基于比特位的按位與操作方式進行權限檢查,可以快速地得到檢查結果,具有較高的執(zhí)行效率。

需要說明的是,上面給出的優(yōu)選實施方式中,訪問權限比特串中的1,表示線程具有對相應類別系統(tǒng)調(diào)用的訪問權限,0表示不具有,類別比特串中的1,表示系統(tǒng)調(diào)用屬于相應類別,0表示不屬于,因此在本步驟中采用按位與操作進行判斷。在其他實施方式中,所述訪問權限比特串與所述類別比特串中的比特位的值也可以采用不同的方式設置,只要表示具有對相應類別系統(tǒng)調(diào)用的訪問權限的值、與表示系統(tǒng)調(diào)用屬于相應類別的值一致即可,并且在本步驟中采用相應的運算及判斷方式也同樣可以實現(xiàn)本技術方案,同樣可以取得較高的執(zhí)行效率。

例如:對于權限比特串,可以用0表示線程具有對相應類別系統(tǒng)調(diào)用的訪問權限,用1表示不具有;相應的,對于類別比特串,可以用0表示系統(tǒng)調(diào)用屬于相應類別,1表示不屬于。本步驟將訪問權限比特串permission和類別比特串category[n][scno]執(zhí)行按位或操作,并當執(zhí)行結果不全為1時,判定所述執(zhí)行者具有對所述系統(tǒng)調(diào)用所屬類別的訪問權限。

步驟103、允許所述執(zhí)行者執(zhí)行所述系統(tǒng)調(diào)用。

執(zhí)行到本步驟,說明所述線程具有對待執(zhí)行系統(tǒng)調(diào)用的訪問權限,因此可以允許線程執(zhí)行所述系統(tǒng)調(diào)用。在具體實施時,可以將訪問請求分發(fā)給與所述系統(tǒng)調(diào)用對應的處理程序(也稱系統(tǒng)調(diào)用服務例程),也可以直接觸發(fā)相應的系統(tǒng)調(diào)用服務例程,從而實現(xiàn)相應的系統(tǒng)調(diào)用功能。

步驟104、拒絕所述執(zhí)行者執(zhí)行所述系統(tǒng)調(diào)用。

執(zhí)行到本步驟,說明所述線程不具有對待執(zhí)行系統(tǒng)調(diào)用的訪問權限,因此拒絕執(zhí)行所述系統(tǒng)調(diào)用。在具體實施時,可以向所述線程返回“系統(tǒng)調(diào)用失敗”、或者“沒有調(diào)用權限”等類似的應答。

至此,通過步驟101-步驟104,對本實施例提供的執(zhí)行系統(tǒng)調(diào)用的方法的實施方式作了詳細描述。

需要說明的是,本實施例提供的方法雖然是針對系統(tǒng)調(diào)用提出的,但是并不僅僅適用于系統(tǒng)調(diào)用,也可以用于自定義的、需要陷入內(nèi)核實現(xiàn)的接口函數(shù),為了與前者相區(qū)分,可以將前者稱為原生系統(tǒng)調(diào)用,而將自定義的接口函數(shù)稱為虛擬系統(tǒng)調(diào)用。在需要執(zhí)行虛擬系統(tǒng)調(diào)用時,可以用預先設定的數(shù)值作為入口參數(shù)值、然后調(diào)用某預設的原生系統(tǒng)調(diào)用,例如以本實施例中提及的setcap()作為預設的虛擬系統(tǒng)調(diào)用為例,可以預先設定如果采用預設數(shù)值100作為入口參數(shù)param1的值、并調(diào)用某原生系統(tǒng)調(diào)用syscalla,則其對應的是預設虛擬系統(tǒng)調(diào)用setcap(),即陷入內(nèi)核后真正執(zhí)行的是setcap()調(diào)用。在這種情況下,同樣也可以針對setcap()調(diào)用進行權限檢查,以對線程修改自身權限加以限制。下面對具體實施方式作進一步說明。

在步驟101接收執(zhí)行系統(tǒng)調(diào)用的請求之后,可以先根據(jù)所述系統(tǒng)調(diào)用的相關信息,確定其是否對應于預設的虛擬系統(tǒng)調(diào)用,若是,則判斷所述系統(tǒng)調(diào)用的執(zhí)行者是否具有對所述虛擬系統(tǒng)調(diào)用的訪問權限,并在具有時允許所述執(zhí)行者執(zhí)行所述虛擬系統(tǒng)調(diào)用;若否,則按照上述實施例中的步驟102進行處理。其中,所述系統(tǒng)調(diào)用的相關信息包括:系統(tǒng)調(diào)用名稱及參數(shù)值,仍采用之前給出的例子,如果系統(tǒng)調(diào)用名稱為syscalla,參數(shù)值為100,則可以確定其對應于預設的虛擬系統(tǒng)調(diào)用setcap()。

如果采用基于分類的優(yōu)選實施方式,在執(zhí)行步驟101之前,可以根據(jù)預先劃分的系統(tǒng)調(diào)用類別、指定每個系統(tǒng)調(diào)用所屬類別,同時也可以指定虛擬系統(tǒng)調(diào)用所屬類別,并同樣設置執(zhí)行者,即本實施例中的線程,對各類別系統(tǒng)調(diào)用 的訪問權限。

以虛擬系統(tǒng)調(diào)用setcap()為例,可以先為虛擬系統(tǒng)調(diào)用setcap()指定對應的系統(tǒng)調(diào)用索引號s1(不能和其他syscall的索引號沖突),然后將category[n][s]表擴展為category[n][s1],其中s1>=s1,并通過系統(tǒng)配置文件中的配置信息指定虛擬系統(tǒng)調(diào)用setcap()所屬類別,例如:“syscall.classifytypesetcap”,其中type代表類別標識(1~n)。那么category[0][s1]~category[n-1][s1]存儲的長度為n的二進制比特串,即為虛擬系統(tǒng)調(diào)用setcap()的類別比特串。

線程在運行過程中,可以根據(jù)需要執(zhí)行系統(tǒng)調(diào)用,在內(nèi)核的統(tǒng)一入口處,如果根據(jù)待執(zhí)行系統(tǒng)調(diào)用的相關信息確定其對應為預設的虛擬系統(tǒng)調(diào)用setcap(),那么在判斷所述系統(tǒng)調(diào)用的執(zhí)行者是否具有對所述虛擬系統(tǒng)調(diào)用的訪問權限時,可以采用基于比特位的按位與操作方式,即將setcap()的類別比特串與所述執(zhí)行者的訪問權限比特串執(zhí)行按位與操作,如果結果不全為零,則說明所述執(zhí)行者具有對setcap()所屬類別的訪問權限,因此可以執(zhí)行setcap(),否則不能執(zhí)行。

采用上述支持虛擬系統(tǒng)調(diào)用的實施方式,可以擴展本實施例提供的沙箱機制的應用場景。對于需要陷入內(nèi)核執(zhí)行的非系統(tǒng)調(diào)用,通過將其虛擬為系統(tǒng)調(diào)用,可以簡化代碼編寫的工作量,而且同樣可以在內(nèi)核入口處檢查執(zhí)行者是否具有對虛擬系統(tǒng)調(diào)用的訪問權限,從而可以在對系統(tǒng)調(diào)用提供訪問控制的基礎上,對虛擬系統(tǒng)調(diào)用也提供訪問控制機制,進一步保障系統(tǒng)的安全性。

綜上所述,本實施例提供的執(zhí)行系統(tǒng)調(diào)用的方法,在判斷某一系統(tǒng)調(diào)用能否被執(zhí)行時,是以執(zhí)行者是否具有相應的訪問權限作為依據(jù),即,通過對執(zhí)行者的授權達到限制系統(tǒng)調(diào)用的目的,從而實現(xiàn)了基于執(zhí)行者身份的差異化控制,而且并沒有對開放哪些系統(tǒng)調(diào)用加以限制,因此可以靈活地滿足用戶空間對系統(tǒng)調(diào)用的合理訪問需求。

在上述的實施例中,提供了一種執(zhí)行系統(tǒng)調(diào)用的方法,與之相對應的,本申請還提供一種執(zhí)行系統(tǒng)調(diào)用的裝置。請參看圖3,其為本申請的一種執(zhí)行系統(tǒng)調(diào)用的裝置實施例的示意圖。由于裝置實施例基本相似于方法實施例,所以描述得比較簡單,相關之處參見方法實施例的部分說明即可。下述描述的裝置實施例僅僅是示意性的。

本實施例的一種執(zhí)行系統(tǒng)調(diào)用的裝置,包括:請求接收單元301,用于接收 執(zhí)行系統(tǒng)調(diào)用的請求;權限判斷單元302,用于判斷所述系統(tǒng)調(diào)用的執(zhí)行者是否具有對所述系統(tǒng)調(diào)用的訪問權限;執(zhí)行允許單元303,用于當所述訪問權限判斷單元的輸出為是時,允許所述執(zhí)行者執(zhí)行所述系統(tǒng)調(diào)用;執(zhí)行拒絕單元304,用于當所述訪問權限判斷單元的輸出為否時,拒絕所述執(zhí)行者執(zhí)行所述系統(tǒng)調(diào)用。

可選的,所述權限判斷單元,包括:

類別獲取子單元,用于獲取所述系統(tǒng)調(diào)用所屬類別;

訪問權限獲取子單元,用于獲取所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限;

判斷執(zhí)行子單元,用于根據(jù)所述獲取的信息,判斷所述執(zhí)行者是否具有對所述系統(tǒng)調(diào)用所屬類別的訪問權限。

可選的,所述裝置還包括:

類別指定單元,用于在所述請求接收單元工作之前,根據(jù)預先劃分的系統(tǒng)調(diào)用類別,指定所述系統(tǒng)調(diào)用所屬類別;

權限設置單元,用于設置所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限。

可選的,所述判斷執(zhí)行子單元,具體用于將描述所述訪問權限的二進制比特串與描述所述系統(tǒng)調(diào)用所屬類別的二進制比特串,逐位進行位運算,并根據(jù)運算結果判定所述執(zhí)行者是否具有對所述系統(tǒng)調(diào)用所屬類別的訪問權限。

可選的,所述判斷執(zhí)行子單元,具體用于將描述所述訪問權限的二進制比特串與描述所述系統(tǒng)調(diào)用所屬類別的二進制比特串,逐位執(zhí)行按位與操作,并當執(zhí)行結果不全為0時判定所述執(zhí)行者具有對所述系統(tǒng)調(diào)用所屬類別的訪問權限。

可選的,所述權限設置單元,具體用于將所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限與其身份標識信息對應存儲;

所述訪問權限獲取子單元,具體用于根據(jù)所述執(zhí)行者的身份標識信息獲取所述執(zhí)行者的所述訪問權限。

可選的,所述訪問權限獲取子單元,具體用于從所述執(zhí)行者的運行上下文信息中獲取其身份標識信息,并根據(jù)所述身份標識信息獲取所述執(zhí)行者的所述訪問權限。

可選的,所述權限設置單元包括:

權限繼承子單元,用于在創(chuàng)建所述執(zhí)行者時,按照預設授權方案設置所述 執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限;或者,用創(chuàng)建者對各類別系統(tǒng)調(diào)用的訪問權限設置所述執(zhí)行者的相應訪問權限。

可選的,所述權限設置單元還包括:

運行前權限降低子單元,用于在創(chuàng)建所述執(zhí)行者之后、在運行所述執(zhí)行者之前,按照預設方式降低所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限。

可選的,所述運行前權限降低子單元包括:

第一降低子單元,用于根據(jù)所述執(zhí)行者的身份類別以及系統(tǒng)配置文件中針對所述身份類別的權限配置信息,降低所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限;和/或,

第二降低子單元,用于根據(jù)所述執(zhí)行者所屬應用程序的配置文件中的權限申明信息,降低所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限。

可選的,所述權限設置單元還包括:

運行后權限降低子單元,用于所述執(zhí)行者在運行過程中,在加載運行不可信代碼之前降低其對各類別系統(tǒng)調(diào)用的訪問權限。

可選的,所述權限設置單元還包括:

權限恢復單元,用于在所述不可信代碼運行完畢后,恢復所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限。

可選的,所述權限設置單元還包括:

權限提高子單元,用于所述執(zhí)行者在運行過程中,在加載運行可信代碼之前提高其對各類別系統(tǒng)調(diào)用的訪問權限。

可選的,所述權限降低子單元和所述運行前權限降低子單元,還分別用于相應設置所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問能力;

所述權限提高子單元,具體用于在所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問能力之內(nèi),提高所述執(zhí)行者的訪問權限。

可選的,所述裝置還包括:

虛擬調(diào)用確定單元,用于在所述請求接收單元接收執(zhí)行系統(tǒng)調(diào)用的請求后,根據(jù)所述系統(tǒng)調(diào)用的相關信息,確定其是否對應于虛擬系統(tǒng)調(diào)用,并在不對應時,觸發(fā)所述權限判斷單元工作;

虛擬調(diào)用權限判斷單元,用于當所述虛擬調(diào)用確定單元的輸出為是時,判 斷所述系統(tǒng)調(diào)用的執(zhí)行者是否具有對所述虛擬系統(tǒng)調(diào)用的訪問權限,并在具有時,允許所述執(zhí)行者執(zhí)行所述虛擬系統(tǒng)調(diào)用。

此外,本申請還提供另一種執(zhí)行系統(tǒng)調(diào)用的方法。請參考圖4,其為本申請?zhí)峁┑牧硪环N執(zhí)行系統(tǒng)調(diào)用的方法的實施例的流程圖,本實施例與上述方法實施例步驟相同的部分不再贅述,下面重點描述不同之處。本申請?zhí)峁┑牧硪环N執(zhí)行系統(tǒng)調(diào)用的方法包括:

步驟401、接收執(zhí)行系統(tǒng)調(diào)用的請求。

在執(zhí)行本步驟之前,可以根據(jù)預先劃分的系統(tǒng)調(diào)用類別,指定每個系統(tǒng)調(diào)用以及預設的虛擬系統(tǒng)調(diào)用所屬類別,并設置所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限。

步驟402、根據(jù)所述系統(tǒng)調(diào)用的相關信息,確定待執(zhí)行的目標調(diào)用。

所述系統(tǒng)調(diào)用的相關信息包括:系統(tǒng)調(diào)用名稱及參數(shù)值。

本步驟可以根據(jù)系統(tǒng)調(diào)用名稱及參數(shù)值,判斷所述系統(tǒng)調(diào)用是否對應于預設的虛擬系統(tǒng)調(diào)用,若是,將所述虛擬系統(tǒng)調(diào)用作為所述目標調(diào)用,否則將所述系統(tǒng)調(diào)用作為所述目標調(diào)用。

步驟403、判斷所述系統(tǒng)調(diào)用的執(zhí)行者是否具有對所述目標調(diào)用的訪問權限,若具有,執(zhí)行步驟404,否則,執(zhí)行步驟405。

在執(zhí)行步驟401之前,已經(jīng)為每個系統(tǒng)調(diào)用以及預設的虛擬系統(tǒng)調(diào)用指定了所屬類別,其中自然也包括所述目標調(diào)用,因此本步驟可以獲取所述目標調(diào)用所屬的系統(tǒng)調(diào)用類別,并可以獲取所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限,然后根據(jù)所述獲取的信息,判斷所述執(zhí)行者是否具有對所述目標調(diào)用所屬類別的訪問權限,若具有,則執(zhí)行步驟404。

步驟404、允許所述執(zhí)行者執(zhí)行所述目標調(diào)用。

步驟405、拒絕所述執(zhí)行者執(zhí)行所述目標調(diào)用。

在上述的實施例中,提供了另一種執(zhí)行系統(tǒng)調(diào)用的方法,與之相對應的,本申請還提供另一種執(zhí)行系統(tǒng)調(diào)用的裝置。請參看圖5,其為本申請的另一種執(zhí)行系統(tǒng)調(diào)用的裝置的實施例的示意圖。由于裝置實施例基本相似于方法實施例,所以描述得比較簡單,相關之處參見方法實施例的部分說明即可。下述描述的裝置實施例僅僅是示意性的。

本實施例的一種執(zhí)行系統(tǒng)調(diào)用的裝置,包括:請求接收單元501,用于接收執(zhí)行系統(tǒng)調(diào)用的請求;目標調(diào)用確定單元502,用于根據(jù)所述系統(tǒng)調(diào)用的相關信息,確定待執(zhí)行的目標調(diào)用;訪問權限判斷單元503,用于判斷所述系統(tǒng)調(diào)用的執(zhí)行者是否具有對所述目標調(diào)用的訪問權限;執(zhí)行允許單元504,用于當所述訪問權限判斷單元的輸出為是時,允許所述執(zhí)行者執(zhí)行所述目標調(diào)用;執(zhí)行拒絕單元505,用于當所述訪問權限判斷單元的輸出為否時,拒絕所述執(zhí)行者執(zhí)行所述目標調(diào)用。

可選的,所述目標調(diào)用確定單元,具體用于當所述系統(tǒng)調(diào)用對應于預設的虛擬系統(tǒng)調(diào)用時,將所述虛擬系統(tǒng)調(diào)用作為所述目標調(diào)用,否則將所述系統(tǒng)調(diào)用作為所述目標調(diào)用。

可選的,所述訪問權限判斷單元,包括:

目標調(diào)用類別獲取子單元,用于獲取所述目標調(diào)用所屬類別;

訪問權限獲取子單元,用于獲取所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限;

目標調(diào)用判斷執(zhí)行子單元,用于根據(jù)所述獲取的信息,判斷所述執(zhí)行者是否具有對所述目標調(diào)用所屬類別的訪問權限。

可選的,所述裝置還包括:

目標調(diào)用類別指定單元,用于在所述請求接收單元工作之前,根據(jù)預先劃分的系統(tǒng)調(diào)用類別,指定所述目標調(diào)用所屬類別;

權限設置單元,用于設置所述執(zhí)行者對各類別系統(tǒng)調(diào)用的訪問權限。

本申請雖然以較佳實施例公開如上,但其并不是用來限定本申請,任何本領域技術人員在不脫離本申請的精神和范圍內(nèi),都可以做出可能的變動和修改,因此本申請的保護范圍應當以本申請權利要求所界定的范圍為準。

在一個典型的配置中,計算設備包括一個或多個處理器(cpu)、輸入/輸出接口、網(wǎng)絡接口和內(nèi)存。

內(nèi)存可能包括計算機可讀介質(zhì)中的非永久性存儲器,隨機存取存儲器(ram)和/或非易失性內(nèi)存等形式,如只讀存儲器(rom)或閃存(flashram)。內(nèi)存是計算機可讀介質(zhì)的示例。

1、計算機可讀介質(zhì)包括永久性和非永久性、可移動和非可移動媒體可以由 任何方法或技術來實現(xiàn)信息存儲。信息可以是計算機可讀指令、數(shù)據(jù)結構、程序的模塊或其他數(shù)據(jù)。計算機的存儲介質(zhì)的例子包括,但不限于相變內(nèi)存(pram)、靜態(tài)隨機存取存儲器(sram)、動態(tài)隨機存取存儲器(dram)、其他類型的隨機存取存儲器(ram)、只讀存儲器(rom)、電可擦除可編程只讀存儲器(eeprom)、快閃記憶體或其他內(nèi)存技術、只讀光盤只讀存儲器(cd-rom)、數(shù)字多功能光盤(dvd)或其他光學存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設備或任何其他非傳輸介質(zhì),可用于存儲可以被計算設備訪問的信息。按照本文中的界定,計算機可讀介質(zhì)不包括非暫存電腦可讀媒體(transitorymedia),如調(diào)制的數(shù)據(jù)信號和載波。

2、本領域技術人員應明白,本申請的實施例可提供為方法、系統(tǒng)或計算機程序產(chǎn)品。因此,本申請可采用完全硬件實施例、完全軟件實施例或結合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、cd-rom、光學存儲器等)上實施的計算機程序產(chǎn)品的形式。

當前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1