【问题标题】:Invoking Remoting IPC Channel from Powershell Remoting session从 Powershell Remoting 会话调用 Remoting IPC 通道
【发布时间】:2016-11-08 02:00:35
【问题描述】:

我的环境配置如下:

  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. “呼叫者”机器,从域认证帐户 (DOMAIN\Caller) 远程调用“目标”机器上的 本地(“目标”上的本地)应用程序(我们将其命名为 TargetApp)通过 Powershell 远程处理(WS-Management):

    $session = new-pssession -computerName "$targetHost"
    Invoke-Command -Session $session -Args $application,$arguments -OutVariable output -scriptblock $scriptBlockRemote
    Remove-PSSession $session
    
  3. 在“目标”机器上本地调用的 TargetApp(由于来自“调用者”的 powershell 远程调用)必须在同一“目标”机器(即 IPC服务器在同一台 Target 机器上的 windows 服务下运行)

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

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

观察:

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

    • “C:\Windows\system32\wsmprovhost.exe -Embedding”进程在“Caller”用户凭据(“DOMAIN\Caller”)下的“Target”机器上启动
    • “Target”上的 wsmprovhost.exe 然后调用“Caller”用户凭据(“DOMAIN\Caller”)下的 TargetApp
    • 当应用程序到达调用 IPC 服务器的点时,它会失败
  3. 基本上我可以清楚地看到 powershell 确实在预期凭据下调用“目标”机器上的本地 TargetApp,但是由于某种原因 IPC 调用失败(尽管有两个进程 - 执行 IPC 客户端调用的 TargetApp 和包含 IPC 服务器的 windows 服务 - 在同一台机器上,IPC 调用失败)

  4. 神奇地!如果我直接进入“Target”机器,在 DOMAIN\Caller 帐户凭据下运行“cmd”并以这种方式调用 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 仅限于单台机器内的调用。

【问题讨论】:

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


    【解决方案1】:

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

    1. IPC .NET Remoting 通道使用 NTLM,没有其他功能
    2. 在上述场景中,身份验证是使用 Kerberos 完成的

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-16
      • 2012-02-25
      • 2010-12-01
      • 2011-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多