2009-07-14 5 views
3

私は、認証されたプログラム以外のどこからでも共有メモリオブジェクトへのアクセスを制御する既知の技術はありますか?許可されていない共有メモリの読み取りを検出して制御する

たとえば、プログラムPで使用する共有メモリセグメントをQでアクセスするために作成し、読み書き可能にします。 Qを使ってアクセスすることができます。なぜなら、グループに所属する特定のユーザーとして実行するために必要な権限をQに与えているからです。

しかし、私は、誰かがこの共有メモリにプログラムRからアクセスする可能性があると推測しています。単にそれに接続して変更するだけです。これを止めるには、メモリセグメントを読み込み専用にすることができますが、プログラムRはまだになりました。メモリ内の内容はとなります。

私の質問は部品である -

  1. はに、

    A)のみQは共有メモリにアクセスすることを可能にする方法はありますか?

    b)読んだことがQとは別の人によって行われたかどうか、誰がそれをしたか? [これは可能ですか?]ボーナスポイントは、これをクロスプラットフォームで行うことができますか? [おそらくないが、害はありません:)]

  2. 不正プログラムはどのような状況で共有メモリに接続できますか?ユーザーがOSのホールを利用してプログラムを開始したユーザーになれるかどうかは、私は考えています。他のもの?

答えて

9

POSIX共有メモリは、ファイルと同じ権限システムを持っている - あなたはipcsを実行する場合は、システム上の共有メモリセグメントのパーミッションが表示されます:1aは質問への答えで

$ 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 

)通常のUNIX権限システムを使用して、特定のユーザーおよび/またはグループからのアクセスのみを許可することができます。これはshmctlを使用して制御することができます:図1b)、私は任意の監査インタフェースは、共有メモリ・アクセスのために存在するとは思わないために

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); 

2番目の質問に関しては、shmの所有者/グループとして実行されているプロセスやルートとして実行されているプロセスはすべてあなたのメモリにアクセスできます。これは他のリソースへのアクセスと同じです。ルートはいつでも* ixシステム上のものにアクセスできます。ユーザーをルートにエスカレートさせたエクスプロイトでは、共有メモリ領域へのアクセスが可能になります。

+0

よろしくお願い致します。それはたくさんの助けになります – viksit

関連する問題