检测和控制未经授权共享存储器中读取(Detecting and controlling unauth

2019-07-30 05:12发布

我想知道 - 是否有任何已知的技术可以从任何位置控制访问共享内存对象,但经授权的程序?

举例来说,可以说,我创建使用共享内存段在程序P,要由Q访问,并且我让读写。 用品质,因为我已经给它(Q)所需的权限,这样做(如组特定的用户,等运行),我可以访问它。

不过,我猜有时候我们可能会从一个程序R接入这种共享内存的情况下 - 只需连接到它,修改它。 要停止这一点,你可以使存储段只读-但现在计划[R仍然可以什么是在内存中。

我的问题是在部分 -

  1. 有没有一种办法,

    一个)允许仅Q个访问共享存储器?

    B)数字是否读经的人除了自Q做 - 和谁做的? [这甚至可能吗?对于加分,这哪是做跨平台? [大概不会,但没有伤害尝试:)]

  2. 在什么情况下可以一个流氓程序连接到共享内存? 我相信一个方式是,如果用户能够利用OS孔,成为启动该程序的用户。 任何其他方面?

Answer 1:

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身份运行将能够访问你的记忆 - 这是在访问任何其他资源没有什么不同。 根可以总是* IX系统上访问任何内容; 等任何利用该升级用户根将允许访问任何共享存储器区。



文章来源: Detecting and controlling unauthorized shared memory reads