2009-07-14 32 views
3

我想知道 - 是否有任何已知的技術可以從任何位置控制訪問共享內存對象,但經授權的程序?檢測和控制未經授權的共享內存中讀取

舉例來說,可以說,我創建使用共享內存段在程序P,要由Q訪問,並且我讓讀寫。我可以使用Q來訪問它,因爲我已經給它(Q)所需的權限來執行此操作(作爲具有組的特定用戶運行等)。

然而,我猜有實例,其中有人可能會從一個程序R接入該共享存儲器 - 簡單地附連到它,並修改它。要停止這一點,你可以使內存段只讀 - 但現在編程R仍然可以讀取內存中的內容。

我的問題是在部分 -

  1. 有沒有一種辦法,

    一)只允許訪問共享內存Q?

    b)所示的讀取是否通過自Q的人除了做 - 和誰做的? [這甚至可能嗎?]對於獎勵積分,這可以跨平臺完成嗎? [大概不會,但沒有傷害試圖:)]

  2. 下一個可能方案流氓附加到共享內存什麼情況?我認爲一種方法是,如果用戶能夠利用操作系統漏洞併成爲啓動該程序的用戶。任何其他?

回答

9

POSIX共享內存具有相同的權限系統文件 - 如果運行ipcs您會看到您的系統上共享內存段的權限:

$ ipcs -m 
IPC status from <running system> as of Tue Jul 14 23:21:25 BST 2009 
T  ID  KEY  MODE  OWNER GROUP 
Shared Memory: 
m 65536 0x07021999 --rw-r--r--  root wheel 
m 65537 0x60022006 --rw-r--r--  root wheel 

在回答問題1A) ,您可以使用普通的UNIX權限系統來僅允許來自特定用戶和/或組的訪問。這可以使用shmctl進行控制:

struct ipc_perm perms; 
perms.uid = 100; 
perms.giu = 200; 
perms.mode = 0660; // Allow read/write only by 
        // uid '100' or members of group '200' 
shmctl(shmid, IPC_SET, &perms); 

對於1B),我不認爲對共享內存訪問存在任何審計接口。

至於你的第二個問題,運行在SHM所有者/組,或以root身份運行將能夠訪問存儲的任何進程 - 這是在訪問任何其他資源沒有什麼不同。 Root可以隨時訪問* ix系統上的任何內容;所以任何將用戶升級到root的漏洞都會允許訪問任何共享內存區域。

+0

太好了,謝謝!這有很大幫助 – viksit 2009-07-15 23:34:04