共享内存具有不受信任的进程安全吗?

问题描述 投票:0回答:2

我正在尝试创建一个以提升的特权运行的x86 Linux程序,但也可能在子进程中运行潜在的不安全代码,并通过共享内存与其进行通信,这主要是出于性能方面的考虑。我的想法如下:

  • 根进程使用mmapMAP_SHARED|MAP_ANONYMOUS分配内存
  • 它分叉,子进程调用setuid,然后加载用户提供的代码。
  • 子进程不再受信任。

之后访问共享内存的陷阱是什么?显然,子进程可以提供无效的数据并随时对其进行更改,但是它实际上会以其他方式损害父进程吗,例如阻止内存访问,甚至杀死它或其他类似方法?

或者使用例如memcpy()?

原子操作安全吗? sem_timedwait?

linux multithreading security operating-system shared-memory
2个回答
2
投票
如果仅将内存用于简单的操作(如memcpy,则孩子不会直接伤害您,但是如果您真的不信任它们,共享的意义何在?

将信号量放入内存中是一个坏主意;同样,您不能信任他们,这意味着,您不能信任他们。信号量,互斥量,condvars ...仅在高度信任的情况下起作用。消息传递更好,但不需要共享内存。

我能想到的最糟糕的情况是轻微的拒绝服务攻击。在I / O期间,页面通常不可访问。如果您的孩子为自己制作了许多副本,并设法连续控制共享页面,则可能会严重干扰父母的执行进度。

有些人比我的想像力更狡猾。


0
投票
在此答案中,我将尽我所能收集有关敌对过程和对策的共享内存IPC的局限性。

如果发现错误或更好的地方,请纠正我!

将只读映射用于单向通信

http://selinuxsymposium.org/2007/papers/11-SecureIPC.pdf

[本文第3.3节指出,共享内存可以由具有读/写访问权限的进程A创建,并且可以将进程B限制为只读访问权限。

如果根进程希望将数据发送到子进程,而该子进程包含不能由子进程操纵的易碎数据结构,则可以使用只读映射。

但是我不确定以上内容是否仅适用于SELinux,如何实际执行或者是否只能通过mmap完成。

这里有类似的内容:

Shared Memory when it's for read only

同步问题

Linux shared memory only allow read access

“共享内存涉及各种各样的奇数同步问题。]

很遗憾,没有更多细节。

pkeys-内存保护键

https://lwn.net/Articles/466304/

仅适用于Intel Skylake

2011 LWN文章比较各种IPC机制

https://lwn.net/Articles/466304/

© www.soinside.com 2019 - 2024. All rights reserved.