2016-07-06 20 views
0

У меня есть следующие конфигурации среды:Вызов Remoting IPC Channel из Powershell Remoting сессии

  1. машина "Target" с моей службой Windows работает под "NT AUTHORITY \ SYSTEM". Эта служба Windows, имеет защищенный порт IPC .NET Remoting открыть следующим образом:

    Dictionary<string, object> properties = new Dictionary<string, object>(); 
        properties["authorizedGroup"] = GetUsersGroupName(); // "S-1-5-32-545" SID, setting to "S-1-1-0" gives the same result 
        properties["name"] = configuration.ServiceShortName + ".Server"; 
        properties["portName"] = configuration.ServiceGuid; 
        BinaryServerFormatterSinkProvider sinkProvider = new BinaryServerFormatterSinkProvider(); 
        sinkProvider.TypeFilterLevel = TypeFilterLevel.Full; 
        Channel = new IpcServerChannel(properties, sinkProvider); 
        Channel.IsSecured = true; 
        ChannelServices.RegisterChannel(Channel, true); 
    
  2. «Caller» машина, что с учетной записью домена, прошедших проверку подлинности (ДОМЕН \ Caller) удаленно вызывает локальный (местный на " Target ") приложение (назовем его TargetApp) на "Target" машины через Powershell Remoting (WS-Management):

    $session = new-pssession -computerName "$targetHost" 
    Invoke-Command -Session $session -Args $application,$arguments -OutVariable output -scriptblock $scriptBlockRemote 
    Remove-PSSession $session 
    
  3. в TargetApp, который вызывается локально на "машине Target"(в связи с Powershell Remoting вызов от «Caller») должен сделать IPC-вызов клиента на IPC-сервер на та же машина «Target» (что IPC-сервер работает под управлением Windows Service на одной целевой машине)

  4. Любые попытки вызова сервера IPC в этой конфигурации в конечном итоге с:

Не удалось подключиться к порт IPC: доступ запрещен.

Наблюдения:

  1. Изменение свойств [ "authorizedGroup"] в "Everyone" ("S-1-1-0") во время инициализации канала сервера не помогает, и я получаю ту же ошибку , Тот же результат полностью отключает безопасность на сервере.
  2. Когда "Caller" вызывает TargetApp на машине "Target" я могу ясно видеть, что:

    • "C: \ Windows \ system32 \ wsmprovhost.exe -вложения" процесс начался "Target" машина под «Caller» учетные данные пользователя («DOMAIN \ Caller»)
    • wsmprovhost.exe на «Target», а затем вызывает метод TargetApp под учетными данными пользователей «Caller» («DOMAIN \ Caller»)
    • Когда приложение достигает точки вызова сервер IPC, он не работает
  3. По существу я могу ясно видеть, что powershell вызывает локальный TargetApp на компьютере «Target» под ожидаемыми учетными данными, однако по какой-либо причине вызов IPC завершается неудачно (хотя два процесса - TargetApp, который выполняет вызов клиента IPC и службу Windows, IPC-сервер - находятся на одной машине, вызов IPC не работает)

  4. Magical! Если я перейду непосредственно к машине «Target», запустите «cmd» под учетными данными учетной записи DOMAIN \ Caller и вызовите TargetApp таким образом - вызов IPC завершается успешно!

Я пытался найти решение, и это выглядит как несколько человек были врезаться в это в прошлом, однако не было установлено никаких четких причин/причина/решение.

P.S. После небольшого исследования у меня есть подозрение, что это связанные с аутентификацией, так как Powershell Remoting использует Kerberos по умолчанию, в то время как канал IPC работает только с NTLM: https://msdn.microsoft.com/en-us/library/azure/ms172351(v=vs.85).aspx

Канал IPC всегда использует проверку подлинности NTLM. Kerberos не поддерживается, поскольку IPC ограничивается вызовами внутри одной машины.

ответ

0

Таким образом, результат моего исследования заключается в следующем:

  1. IPC .NET Remoting канал только использует NTLM, и ничего
  2. В описанном выше сценарии аутентификации делается с помощью Kerberos

Потенциальным решением описанного сценария было бы использовать планировщик задач Windows для планирования выполнения задачи удаленно.