2009-04-09 1 views

답변

2

나는 BCL 전체 제어를 위해 this Process.Start() overload.

를 사용하여 제한된 자격 증명을 가진 사용자 계정으로 프로세스를 시작하는 것입니다으로 알고 최선의 선택, 당신은 (보안 속성을 설정, P/호출을 사용하고 CreateProcess 부를 수 특히 보안 속성의 보안 설명자)을 적절히 사용하여 필요에 따라 프로세스를 제한합니다.

+0

CreateProcess의 보안 특성은 프로세스 및 스레드 핸들에 액세스하는 방식 만 제한합니다. 그들이 차례로 액세스 할 수있는 것은 아닙니다. – JaredPar

+0

SDDL을 사용하여 SECURITY_DESCRIPTOR을 설정하고 보안 속성에 SDDL을 사용하면 ACE 문자열 (SDDL_FILE_WRITE)을 사용하여 파일 쓰기 권한을 제한 할 수 있습니다. - http://msdn.microsoft.com/en-us/library/aa374928(VS.85).aspx –

+0

@ Red하지만 프로세스 및 스레드 핸들에 대한 쓰기가 줄어들 것이라고 믿습니다. 이후에는 핸들이 열리지 않습니다. 이것은 비록 Win32 보안에 대한 나의 지식을 인정하고 있습니다. – JaredPar

2

요약하면 주어진 프로세스를 시작하고 파일을 읽을 수만 있지만 파일을 쓸 수 없도록하는 확실한 방법은 없습니다.

프로세스를 만들 때 파일에 액세스 할 수있는 기능은 실제로 OS에 의해 제어됩니다. 즉, 프로세스 및 각자의 액세스 수준과 관련된 vairous 토큰이 있습니다. 이것은 Win32 보안 개념입니다.

이제 완전히 다른 자격 증명으로 프로세스를 시작할 수 있습니다. 환경에 대한 충분한 통제를 통해 이러한 특정 자격 증명이 디스크의 어느 부분에도 쓸 수는 없지만 매우 극단적이며 필자가 생각하는 것보다 훨씬 많은 작업을 수행 할 수 있습니다.

CLR 보안 모델은 도움이되지 않습니다. 물론 주위를 둘러보고 순수하게 관리되는 프로세스가 파일에 액세스 할 수 없도록 보장 할 수 있습니다. 그러나 Process.Start가 실제로 관리되는 프로세스를 시작하거나 관리되는 프로세스가 결과적으로 파일에 쓰는 원시 코드로 PInvoke하지 않는다고 보장 할 수는 없습니다.

1

올바르게 완료되면 P/Invoke를 통해 새 프로세스를 만드는 데 사용되는 프로세스 토큰에 DenyOnly SID를 추가 할 수 있습니다.