У меня есть старое приложение, которое мы настроили с помощью Kerberos на основе делегирования.Все с приложением работало нормально, пока мы не попробовали его на одном из наших новых компьютеров с Windows 10.
Через некоторое время мы наконец-то выяснили, что Credential Guard не очень хорошо играет с этим старым приложением.
Согласно https://docs.microsoft.com/en-us/windows/security/identity-protection/credential-guard/credential-guard-considerations
Соображениям Kerberos
Когда вы включаете Защитник учетных данных Windows Defender, вы больше не можете использовать неограниченное делегирование Kerberos или шифрование DES.Неограниченное делегирование может позволить злоумышленникам извлечь ключи Kerberos из изолированного процесса LSA.Вместо этого используйте ограниченное или основанное на ресурсах делегирование Kerberos.
Мы должны переключить нашу реализацию на использование Kerberos на основе ограничений.Я немного растерялся из-за того, как это сделать.
Наш текущий SPN настроен на имя веб-приложения - (Сценарий 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 - причина, по которой -q в обновлении 1 не работала, заключалась в том, чтоДля spn было установлено http / WebsiteName.domain.com, а не http / WebsiteName.abdomain.com (что я и пытался)
Так что все команды -q теперь работают. Но проблема остается
Вот скриншот вкладки делегирования.
Обновление 3 -
Вот новое изображение вкладки делегата. Я попробовал его с «Использовать только Kerberos» и «Использовать любой протокол аутентификации» после выполнения IISReset, я получил ту же проблему.(Я добавил веб-сервер, когда я нажал кнопку «Добавить». На рисунке красные поля, где записи с помощью веб-сервера, обозначают оранжевые поля, где записи с настройкой spn (кроме HTTP - тип сервиса)