【问题标题】:Authenticating RPC Server with NTLM使用 NTLM 对 RPC 服务器进行身份验证
【发布时间】:2021-12-22 02:44:57
【问题描述】:

我目前正在尝试改进我负责的 RPC 服务器,服务器和客户端都在本地同一台机器上运行,但是我想限制服务器,使其仅允许管理员(包括内置 /LocalSystem 帐户) 通过命名管道连接到 rpc 服务器。

首先,我使用以下库作为 RPCserverApi/RPCClientApi 的包装器: https://github.com/csharptest/CSharpTest.Net.RpcLibrary

我这样创建服务器:

server = new RpcServerApi(IId, MaxCalls, ushort.MaxValue, true);
server.AddProtocol(RpcProtseq.ncacn_np, Id, MaxCalls);
// Set authentication
server.AddAuthentication(RpcAuthentication.RPC_C_AUTHN_WINNT);

但是,当我检查命名管道的安全性时,它仍然显示它根本不受限制,并且我的客户端仍然可以连接,即使我尚未更改它以指定身份验证。

此外,我可以检查对该命名管道的访问,然后我得到:

\\.\pipe\myNamedPipe
  RW Everyone
  RW NT AUTHORITY\ANONYMOUS LOGON
  RW BUILTIN\Administrators

【问题讨论】:

    标签: c# service rpc


    【解决方案1】:

    好的,所以对于遇到此问题的其他任何人来说,我需要做的一些事情并未在我使用的库中公开。所以我创建了自己的包装器。

    使用 RpcServerRegisterIf2() 注册 Rpc 接口时,我必须通过标志: RPC_IF_ALLOW_SECURE_ONLY

    然后在设置 RpcServer 的协议时:RpcServerUseProtseqEp() 我还必须通过一个 SDDL,来描述对端点的限制。您可以在此处找到 SDDL 的描述: https://docs.microsoft.com/en-us/windows/win32/secauthz/security-descriptor-definition-language

    为此,我创建了一个 Ace 字符串,然后使用 ConvertStringSecurityDescriptorToSecurityDescriptor() 创建正确的对象。然后锁定端点,例如:

    \\.\pipe\myNamedPipe 
      RW BUILTIN\Administrators
    

    但它也在服务器上强制只有经过身份验证的帐户才能访问它

    我最初报告的问题充满了对 RPC 服务器和命名管道的误解,我强烈建议阅读和理解以下文章,因为它们对我很有帮助。

    https://csandker.io/2021/01/10/Offensive-Windows-IPC-1-NamedPipes.html https://csandker.io/2021/02/21/Offensive-Windows-IPC-2-RPC.html

    【讨论】:

      猜你喜欢
      • 2010-12-24
      • 1970-01-01
      • 2018-04-29
      • 1970-01-01
      • 2015-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多