【问题标题】:Receive Kerberos ticket for admin account by client from server客户端从服务器接收管理员帐户的 Kerberos 票证
【发布时间】:2022-01-22 22:19:47
【问题描述】:

想象这样一个场景:您希望 WPF 应用程序代表服务台操作员帐户在用户计算机上运行一些 Powershell 脚本。 一种方法是通过 HTTPS 使用您要运行的脚本发送纯文本服务台操作员凭据,并从中创建 NetworkCredentials。不是那么安全但足够简单。

安全审核后新请求的方法是尝试使用 Kerberos 票证而不是纯文本凭据,但我很困惑这将如何工作,因为据我了解 Kerberos 它是客户端、服务器和密钥分发中心之间的多步骤操作所以我不明白服务器如何为服务台操作员创建 Kerberos 票证,然后通过 HTTPS(也许还有其他一些更多的 Kerberosy 方式)将其发送给客户端,客户端会以某种方式使用它而无需任何类型的密钥验证和等等..如果没有密钥验证,哪种方式会更安全?

也许客户端可以发出某种类型的 Kerberos 请求来获取操作员的凭据,但我还是不明白这怎么可能同时又是安全的。

有没有人有这方面的经验或者可以给我举个例子?

顺便说一句。服务器正在运行 ASP.NET Core,如果这有任何帮助或打开了一些可能性,并且所有环境都完全在 Active Directory 控制之下

编辑 1:在发表评论后,我必须澄清 WPF 应用程序是在几乎没有特权的普通最终用户凭据下启动的,它与服务器联系并下载为要运行的脚本和操作员凭据,因此脚本不会在脚本失败正在做一些需要更高权限的事情。

【问题讨论】:

  • 您可以在该用户下运行应用程序,无需模拟用户。无论哪种方式,服务器和客户端都需要信任 KDC,因此要么在同一个域中,要么在它们的域之间具有信任关系
  • 问题是应用程序是由没有任何管理员权限的普通最终用户启动的,应用程序启动后它会下载脚本和凭据以运行。出于技术和流程的原因,它必须是这样的
  • 这听起来不太安全。什么是阻止用户手动下载那些更高的“服务台操作员帐户”凭据并恶意使用它们?相反,您应该首先授予用户所需的权限,或者设置一个系统,例如,他们可以启动可以以更高权限运行的作业。授予用户访问高级凭据的权限是不安全的本质
  • 第一,他们不能自己下载,脚本必须在服务器上等待他们,第二,即使他们可以下载凭据,它们总是与脚本配对,第三,你在同一段告诉我给他们更高的用户权限,我们谈论的是数十万员工,并告诉我在短时间内给他们那些操作员凭据是不安全的,他们不能用于任何其他事情,只能运行脚本
  • 那么最好的办法就是赋予他们启动该工作的权利,该工作将以更高的权限执行。也许机器帐户可以被赋予这些权限,然后任务可以在NETWORK SERVICE 帐户下执行。或者您可能只需要一个组策略登录脚本或类似的东西。您的用例非常清楚:这些脚本实际上做了什么?

标签: c# authentication kerberos


【解决方案1】:

您的问题有点像您已经决定如何做到这一点。如果您对不同的方式感兴趣,这是我的答案:

Kerberos 有多种方法可以delegate permissions,并通过资源限制权限。 “运输”凭证只是高风险,不应该这样做,也不会通过任何安全审核。您可能需要重新构建/更改现有流程的解决方案。

您的服务器将有能力完成这项工作。 (它需要一个具有适当权限的原则,使用密钥表(不是密码),仅对操作员具有委托权限。)您可以使用 spnego 之类的东西通过 HTTPS 使用 kerberos。 (如果这是一个要求,从你的解释中有点不清楚是这个要求还是你过去常做的事情。)

但是,是的,您可以拥有一台服务器,让操作员通过 https 访问服务器并使用 kerberos。这比每次都下载密码要安全得多。实际上,大多数现代浏览器都原生支持 SNEGO 的 kerberos。(意味着您的浏览器将使用您的 windows 用户并将其提供给服务器)

只是让你知道。当您登录时,Kerberos 实际上不会发送您的密码。 (因为运输凭证是一种风险。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-17
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多