检测和控制未经授权的共享内存读取

vik*_*sit 4 security operating-system shared-memory

我想知道 - 除了授权程序之外,是否有任何已知技术可以控制对共享内存对象的访问?

例如,假设我创建了一个用于程序P的共享内存段,由Q访问,并使其成为读写.我可以使用Q访问它,因为我已经给它(Q)执行此操作所需的权限(作为具有组的特定用户运行等).

但是,我猜测有些人可能会从程序R中访问这个共享内存 - 只需附加到它并修改它.要停止这一点,你可以让内存段只读 - 但现在程序R仍然可以读取内存中的内容.

我的问题是部分 -

  1. 有没有办法,

    a)只允许Q访问共享内存?

    b)确定读取是否由除Q以外的人完成 - 谁做了?[这甚至可能吗?]对于奖励积分,这可以跨平台完成吗?[可能没有,但没有伤害尝试:)]

  2. 在什么情况下流氓程序可以附加到共享内存?我认为一种方法是,如果用户能够利用OS漏洞并成为启动该程序的用户.还有其他人?

Dav*_*veR 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
Run Code Online (Sandbox Code Playgroud)

在回答问题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);
Run Code Online (Sandbox Code Playgroud)

对于1b),我不认为共享内存访问存在任何审计接口.

关于第二个问题,任何以shm所有者/组运行的进程或以root身份运行的进程都将能够访问您的内存 - 这与访问任何其他资源没有什么不同.Root可以随时访问*ix系统上的任何内容; 因此,将用户升级为root的任何漏洞都将允许访问任何共享内存区域.