2009-07-14 11 views
3

Je me demandais: existe-t-il des techniques connues pour contrôler l'accès à un objet de mémoire partagée à partir de n'importe quel programme autorisé? Par exemple, disons que je crée un segment de mémoire partagée à utiliser dans un programme P, auquel Q doit accéder, et je le fais en lecture-écriture. Je peux y accéder en utilisant Q parce que je lui ai donné (Q) les permissions nécessaires pour le faire (en tant qu'utilisateur particulier avec des groupes, etc.).Détection et contrôle des lectures de mémoire partagée non autorisées

Cependant, je suppose qu'il existe des cas où quelqu'un pourrait potentiellement accéder à cette mémoire partagée à partir d'un programme R - simplement en y attachant et en le modifiant. Pour arrêter cela, vous pourriez faire en sorte que le segment de mémoire soit seulement lu - mais maintenant le programme R pourrait encore lire ce qui était dans la mémoire.

Ma question est en partie -

  1. est-il un moyen de,

    a) ne permettent que Q d'accéder à la mémoire partagée? B) déterminer si une lecture a été effectuée par quelqu'un en dehors de Q - et qui l'a fait? [Est-ce encore possible?] Pour les points bonus, cela pourrait-il être fait multi-plateforme? [Probablement pas, mais pas de mal à essayer :)]

  2. Dans quelles circonstances un programme malveillant peut-il se connecter à la mémoire partagée? Je suppose que l'one-way est si un utilisateur peut exploiter des trous d'OS et devenir l'utilisateur qui a démarré le programme. D'autres?

Répondre

9

mémoire partagée POSIX a le même système d'autorisations sous forme de fichiers - si vous exécutez ipcs vous verrez les autorisations des segments de mémoire partagée sur votre système:

$ 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 

En réponse à la question 1a) , vous pouvez utiliser le système d'autorisations UNIX normal pour autoriser uniquement l'accès à partir d'un utilisateur et/ou d'un groupe donné. Cela peut être contrôlé à l'aide 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); 

Pour 1b), je ne pense pas que toutes les interfaces d'audit existent pour l'accès à la mémoire partagée. En ce qui concerne votre deuxième question, tout processus exécuté en tant que propriétaire/groupe shm ou en tant que root pourra accéder à votre mémoire - ce n'est pas différent d'accéder à une autre ressource. Root peut toujours accéder à n'importe quoi sur un système * ix; et donc tout exploit qui a escaladé un utilisateur à root permettrait l'accès à n'importe quelle région de mémoire partagée.

+0

Super, merci! Cela aide beaucoup – viksit

Questions connexes