Обнаружение и контроль несанкционированных операций чтения из общей памяти
Мне было интересно - есть ли известные методы для контроля доступа к объекту общей памяти из любой точки, кроме авторизованной программы?
Например, допустим, я создаю сегмент совместно используемой памяти для использования в программе P, к которой должен обращаться Q, и делаю его для чтения-записи. Я могу получить к нему доступ, используя Q, потому что я дал ему (Q) необходимые разрешения для этого (запуск в качестве отдельного пользователя с группами и т. Д.).
Тем не менее, я предполагаю, что есть случаи, когда кто-то потенциально может получить доступ к этой общей памяти из программы R - просто присоединяя ее и изменяя ее. Чтобы остановить это, вы могли бы сделать сегмент памяти только для чтения - но теперь программа R все еще можетread что было в памяти.
Мой вопрос по частям -
Is there a way to,
a) allow only Q to access the shared memory?
b) figure whether a read was done by someone apart from Q - and who did it? [Is this even possible?] For bonus points, could this be done cross-platform? [Probably not, but no harm trying :)]
Under what circumstances could a rogue program attach to the shared memory? I presume one way is if a user is able to exploit OS holes and become the user that started the program. Any others?