【发布时间】:2018-05-25 18:37:35
【问题描述】:
我有一个使用基于委托的 kerberos 设置的旧应用程序。在我们在一台新的 Windows 10 机器上试用之前,该应用程序的一切都运行良好。
一段时间后,我们终于发现 Credential Guard 不能很好地处理这个旧应用程序。
Kerberos 注意事项
启用 Windows Defender Credential Guard 后,您无法再 使用 Kerberos 无约束委派或 DES 加密。不受约束 委托可能允许攻击者从 孤立的 LSA 进程。使用受限或基于资源的 Kerberos 而是委托。
我们必须切换我们的实现以使用基于约束的 Kerberos。我对如何做到这一点有点茫然。
我们当前的 SPN 是根据 Web 应用程序名称设置的 - (来自此链接的场景 2 - https://support.microsoft.com/en-ca/help/929650/how-to-use-spns-when-you-configure-web-applications-that-are-hosted-on)
setspn -a http/WebSiteName webServerName
setspn -a http/WebSiteName.domain.com webServerName
应用程序只与 Active Directory 对话。不涉及数据库。该站点当前正在使用域帐户运行应用程序池。
当我尝试类似的命令时
$comp = Get-ADComputer DcOrAnotherComputer
Set-AdComputer -identity webServerName -PrincipalsAllowedToDelegateToAccount $comp
我收到以下 powershell 错误。
Set-AdComputer : The attribute cannot be modified because it is owned by the system
At line:2 char:1
+ Set-AdComputer -identity hql-dmeds01 -PrincipalsAllowedToDelegateToAccount $comp
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (hql-dmeds01:ADComputer) [Set-ADComputer], ADException
+ FullyQualifiedErrorId : ActiveDirectoryServer:8369,Microsoft.ActiveDirectory.Management.Commands.SetADComputer
我已将应用程序归结为一个适用于 Win7/win2012 但不适用于带有凭据保护的 win10 的示例。
<%@ Language=VBScript %>
<%
' Create the connection the AD
set con = createobject("ADODB.connection")
set Com = createobject("ADODB.command")
con.Provider = "ADsDSOObject"
con.Open "Active Directory Provider"
Set Com.ActiveConnection = con
dim ldapCall
ldapCall = "SELECT ADsPath, distinguishedname, displayName" &_
" FROM '" & "LDAP://DC=mydomain,DC=com' " &_
" WHERE objectClass = 'group' AND name = 'SomeTestGroupName'" & _
" ORDER BY displayName "
'response.write ldapCall
' Execute the search call
Com.CommandText = ldapCall
Set rs = Com.Execute
if not(rs.EOF) then
response.write "SomethingHappended<br />"
else
response.write "Why don't you work???"
end if
%>
更新 1 - 回答 T-Heron 的问题 这是做的结果
setspn -q http/WebSiteName.domain.com -
Checking domain DC=Mydomain
no such SPN found.
如果我这样做了
setspan -q http/WebSiteName- I get the following
Checking domain DC=Mydomain
CN=Webserver,OU=OuLocation,DC=MyDomain
http/WebSite.myDomain
http/WebSite
CmRcService/Webserver
CmRcService/Webserver.myDomain
WSMAN/Webserver.myDomain
TERMSRV/Webserver.myDomain
RestrictedKrbHost/Webserver.myDomain
HOST/Webserver
WSMAN/WSMAN/Webserver
TERMSRV/WSMAN/Webserver
RestrictedKrbHost/WSMAN/Webserver
HOST/Webserver
更新 2- 更新 1 中的 -q 不起作用的原因是设置了 spn 到 http/网站名称.domain.com 而不是 http/WebsiteName.a.b.domain.com (这是我正在尝试的)
所以现在所有的 -q 命令都可以工作了。但是问题依旧
更新 3 -
这是代理选项卡的新图片 在执行 IISReset 后,我尝试了“仅使用 Kerberos”和“使用任何身份验证协议”,我遇到了同样的问题。 (当我按下“添加”按钮时,我添加了网络服务器。 在图片里, 带有 webServername 的条目的红色框 带有 spn 设置的条目的橙色框(在 HTTP - 服务类型旁边)
【问题讨论】:
-
我们在上一个问题上合作过。我们可以看到以下输出: setspn -Q http/Webhostname.domain.com
-
哇,再次收到您的来信真是太棒了!我终于在另一个问题上走得更远了。很棒的是,它不仅不再影响我的旧应用程序(好吧,它不是那么好;)。我们有另一个应用程序不能很好地与 Kerberos 和凭据保护配合使用。
-
请将 http/Webhostname.domain.com 作为 SPN 添加到 Webserver AD 帐户。在你这样做之后,让我们知道它是否有效。如果没有,请将 Webserver 帐户的委派选项卡的屏幕截图添加到问题中。然后需要在此处完成一项违反直觉的操作,以使其使用约束委托工作。
-
按要求添加图片。
-
我看到你有一个公开的代表团,正如你所说。要设置约束委派,请单击仅信任此计算机以委派到指定的服务 > 单击 添加.. > 单击 用户或计算机 > 键入在结果对话框中的 Webhostname > 单击确定。这应该会找到要委派的所有 SPN > 单击 Select All > 单击 OK > 单击 Expanded 复选框 > 截取屏幕截图以在此处发布,然后单击 Apply 和 OK .如果这种受约束的委派不起作用,请告诉我。
标签: powershell asp-classic kerberos kerberos-delegation