从Powershell Remoting会话调用Remoting IPC Channel

时间:2016-07-06 05:29:08

标签: c# .net powershell powershell-remoting .net-remoting

我有以下环境配置:

  1. "目标"我的Windows服务在" NT AUTHORITY \ SYSTEM"下运行的机器。此Windows服务具有.NET Remoting安全IPC端口,如下所示:

        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. &#34;来电&#34;机器,来自域认证帐户(DOMAIN \ Caller)远程调用本地(本地&#34; Target&#34;)应用程序(让它命名为TargetApp)& #34;目标&#34;机器通过Powershell Remoting(WS-Management):

    $session = new-pssession -computerName "$targetHost"
    Invoke-Command -Session $session -Args $application,$arguments -OutVariable output -scriptblock $scriptBlockRemote
    Remove-PSSession $session
    
  3. 在&#34; Target&#34;上本地调用的TargetApp机器(由于来自&#34;来电者&#34;的powershell远程呼叫)必须在相同的&#34;目标&#34;上对IPC服务器进行IPC客户端呼叫。机器(IPC服务器在同一台目标机器上的Windows服务下运行)

  4. 在此配置中调用IPC服务器的任何尝试最终都会:

  5.   

    无法连接到IPC端口:访问被拒绝。

    观察:

    1. 将属性[&#34; authorizedGroup&#34;]更改为&#34; Everyone&#34; (&#34; S-1-1-0&#34;)在服务器通道初始化期间没有帮助,我得到相同的错误。完全禁用服务器通道上的安全性会产生相同的结果。
    2. 当&#34;来电&#34;在&#34; Target&#34;上调用TargetApp机器我可以清楚地看到:

      • &#34; C:\ Windows \ system32 \ wsmprovhost.exe -Embedding&#34;过程开始于&#34;目标&#34;机器下&#34;来电&#34;用户凭据(&#34; DOMAIN \ Caller&#34;)
      • wsmprovhost.exe on&#34; Target&#34;然后调用&#34; Caller&#34;下的TargetApp。用户凭据(&#34; DOMAIN \ Caller&#34;)
      • 当应用程序到达调用IPC服务器时,它将失败
    3. 基本上我可以清楚地看到powershell确实在&#34; Target&#34;上调用了本地TargetApp。在预期凭证下的机器,但由于某种原因IPC调用失败(尽管两个进程 - 执行IPC客户端调用的TargetApp和容纳IPC服务器的Windows服务 - 在同一台机器上,IPC调用失败)

    4. 神奇!如果我去&#34;目标&#34;机器直接运行&#34; cmd&#34;在DOMAIN \ Caller帐户凭据下以这种方式调用TargetApp - IPC调用成功!

    5. 我试图找到解决方案,过去似乎有几个人碰到了这个问题,但没有明确的理由/原因/解决方案。

      P.S。经过一番研究后,我怀疑这是与身份验证相关的,因为Powershell Remoting默认使用Kerberos,而IPC频道只适用于NTLM: https://msdn.microsoft.com/en-us/library/azure/ms172351(v=vs.85).aspx

        

      IPC频道始终使用NTLM身份验证。不支持Kerberos,因为IPC仅限于单台计算机内的呼叫。

1 个答案:

答案 0 :(得分:0)

所以,我的调查结果如下:

  1. IPC .NET Remoting频道使用NTLM,没有别的
  2. 在上述方案中,使用Kerberos
  3. 完成身份验证

    所描述方案的潜在解决方案是使用Windows任务计划程序远程安排任务执行。