문제

저는 궁금합니다. 승인된 프로그램이 아닌 곳에서 공유 메모리 개체에 대한 액세스를 제어하는 ​​알려진 기술이 있습니까?

예를 들어, 프로그램 P에서 사용하고 Q에서 액세스할 수 있는 공유 메모리 세그먼트를 생성하고 이를 읽기-쓰기로 만든다고 가정해 보겠습니다.필요한 권한(그룹을 사용하여 특정 사용자로 실행 등)을 부여했기 때문에 Q를 사용하여 액세스할 수 있습니다.

그러나 누군가가 프로그램 R에서 이 공유 메모리에 잠재적으로 액세스할 수 있는 경우가 있다고 추측합니다. 간단히 연결하고 수정하면 됩니다.이를 중지하려면 메모리 세그먼트를 읽기 전용으로 만들 수 있습니다. 하지만 이제 프로그램 R은 여전히 읽다 기억 속에 있던 것.

내 질문은 부분적으로 있습니다 -

  1. 방법이 있나요?

    a) Q만 공유 메모리에 액세스하도록 허용합니까?

    b) Q 이외의 누군가가 읽기를 수행했는지 여부와 누가 수행했는지 파악합니다.[이게 가능할까요?] 보너스 포인트도 크로스 플랫폼에서 할 수 있나요?[아마 아닐 수도 있지만 시도해도 해가 되지는 않습니다 :)]

  2. 어떤 상황에서 악성 프로그램이 공유 메모리에 연결될 수 있습니까?한 가지 방법은 사용자가 OS 허점을 악용하여 프로그램을 시작한 사용자가 되는 것입니다.다른 사람도 있나요?

도움이 되었습니까?

해결책

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 소유자/그룹으로 실행 중이거나 루트로 실행 중인 모든 프로세스는 메모리에 액세스할 수 있습니다. 이는 다른 리소스에 액세스하는 것과 다르지 않습니다.루트는 *ix 시스템의 모든 항목에 항상 액세스할 수 있습니다.따라서 사용자를 루트로 승격시키는 모든 공격은 모든 공유 메모리 영역에 대한 액세스를 허용합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top