programing

무결성 수준이 일치하지 않는 .NET COM 서버에 대한 연결 허용

kingscode 2021. 1. 16. 10:01
반응형

무결성 수준이 일치하지 않는 .NET COM 서버에 대한 연결 허용


COM 기반 클라이언트-서버 설정에 문제가 있습니다. COM 서버는 C # (. NET 4.0)으로 작성되며 (등록 된) 로컬 서버로 실행됩니다.

서버에 연결하는 응용 프로그램에 따라 다른 클라이언트는 서버 실행 실패 (HRESULT 예외 : 0x80080005 (CO_E_SERVER_EXEC_FAILURE))를 수신합니다.

근본적인 문제는 여기 에 설명되어 있습니다 (COM 섹션에서 무결성 인식) . 내가 이해하는 방식은 상승 된 응용 프로그램이 더 높은 무결성 수준으로 서버를 생성한다는 사실로 인해 발생합니다. 상승되지 않은 다른 애플리케이션이 연결되면 동일한 인스턴스에 연결할 수 없습니다. 상승되지 않은 애플리케이션이 프로세스를 생성하고 상승 된 애플리케이션이 연결되는 경우에도 마찬가지입니다.

페이지에 설명 된 솔루션을 구현하려고 시도했습니다 . 레지스트리를 수정하여 모든 클라이언트의 연결을 허용해야하는 보안 설명자를 설정합니다. 거기에있다 코드 샘플 C ++에서이 있지만, 이것은 .NET에서 효과적으로 같은 일을 :

// Security Descriptor with NO_EXECUTE_UP
var sd = new RawSecurityDescriptor("O:BAG:BAD:(A;;0xb;;;WD)S:(ML;;NX;;;LW)");
byte[] securityDescriptor = new Byte[sd.BinaryLength];
sd.GetBinaryForm(securityDescriptor, 0);

RegistryKey key = Registry.ClassesRoot.OpenSubKey("AppID\\{APP-ID-GUID}", true);
if (key == null)
{
    key = Registry.ClassesRoot.CreateSubKey("AppID\\{APP-ID-GUID}");
}

using (key)
{
    key.SetValue("LaunchPermission", securityDescriptor, RegistryValueKind.Binary);
}

그러나 이것은 원하는 효과가 없습니다. 두 번째 클라이언트가 해당 개체의 인스턴스를 만들려고하면 Windows는 내 COM 서버의 별도 인스턴스를 시작하려고하지만 서버는 두 인스턴스가 동일한 사용자로 실행되지 않도록합니다. 내가 설정 한 권한을 고려할 때 두 번째 인스턴스가 처음에 시작될 것으로 기대하지 않습니다.

클라이언트 응용 프로그램 중 하나는 Medium IL에서 실행되고 다른 하나는 High IL에서 실행되기 때문에 다음과 같은 필수 레이블의 변형을 실험했습니다 .

O:BAG:BAD:(A;;0xb;;;WD)S:(ML;;NX;;;ME)
O:BAG:BAD:(A;;0xb;;;WD)S:(ML;;NX;;;LW)(ML;;NX;;;ME)(ML;;NX;;;HI)

또한 ROTFlags페이지에서 제안한대로 레지스트리 키를 0x1 (ROTFLAGS_ALLOWANYCLIENT)로 설정하려고 시도했지만 여전히 동작에는 변화가 없습니다.

LaunchPermission 레지스트리 값이 어떤 방식 으로든 사용되고 있음을 확인했습니다. 프로세스 모니터를 사용하여 읽은 위치를 찾을 수 없지만 dcomcnfg.exe도구를 사용하여 동일한 키를 설정하면 시작 권한을 거부하여 서버가로드에 실패하도록 할 수 있습니다.

내 서버 프로세스에 권한 상승이 필요하지 않다는 점을 지적하고 싶습니다. 단일 서버 인스턴스에 연결할 수있는 상승 된 프로세스와 상승되지 않은 프로세스를 모두 만들려면 어떻게해야합니까?


Windows Vista 보안 모델 분석 에 따르면 다른 IL 사이를 이동하려면 명명 된 파이프와 같은 공유 개체를 사용해야합니다. 또한 공유 객체에는 사용중인 가장 낮은 IL에 해당하는 IL이 있어야합니다.


디버그 옵션을 VS의 모든 CPU로 설정해야합니다.

참조 URL : https://stackoverflow.com/questions/12039624/allowing-connection-to-net-com-server-with-mismatching-integrity-level

반응형