8

Поиск по методам и протоколам проверки подлинности Windows, я решил понять точную разницу между Negotiate, Kerberos и NTLM, используемой в простом исполняемом файле, прежде чем полюбить его с помощью IIS и веб-аутентификации.Аутентификация исполняемого файла Windows

Я достиг хороших результатов, НО мне все еще нужно больше информации о переговорах и Kerberos.

Я следующий сценарий:

Я создал очень простой # окно C образует приложение, которое показывает окно сообщения отображается значение:

System.Security.Principal.WindowsIdentity.GetCurrent().AuthenticationType 

Обратите внимание, что я являюсь пользователем домена с администратором привилегии на моей локальной машине, у меня следующие результаты:

  1. Когда я запустить исполняемый файл (двойной щелчок), пока я буду активно подключен к DC, я получил " Согласование».

  2. Когда я запускаю exe-файл (запускаюсь как пользователь differnet/используя локального пользователя), в то время как я активно подключен к DC, я получил «NTLM».

  3. Когда я запускаю exe-файл, используя «Запуск от имени администратора» или «Запуск от имени пользователя», я получил «Kerberos».

  4. Когда я запускаю exe-файл, пока я локально зарегистрирован в локальной учетной записи, я получил «NTLM».

Я понимаю, что LSA будет использовать NTLM для локальных учетных записей. Также я понимаю, что Active Directory использует Kerberos для аутентификации пользователей домена и компьютеров.

Мой вопрос: почему я получаю Согласование Тип аутентификации, когда я запускаю exe, используя мою учетную запись, либо посредством (Double Click), либо «запускается как другой пользователь», используя мою ту же учетную запись?

Обновления: Я заметил следующее:

- Если локального пользователь работает ех то NTLM
- Если пользователь домена запустить ехе, то он Обсудите (Если этот пользователь является локальным администратором), но есть Kerberos (если этот пользователь не является локальным администратором)
- Если домен admin запустить exe, то это Kerberos

Я просто разъяснение об этом поведении.

+0

вопрос остается неясным. Пакет проверки подлинности, используемый для аутентификации пользователя, отличается от протокола, используемого для аутентификации пользователя, и каждый из них отличается от объекта, который выполняет аутентификацию. Не существует взаимно однозначной (взаимной) взаимосвязи. NTLM и Kerberos (и Negotiate) актуальны только при аутентификации на удаленном компьютере. Аутентификация на удаленном компьютере в не-доменной среде будет использовать NTLM, а аутентификация на удаленном компьютере в домене будет использовать либо Kerberos, либо NTLM. Что именно вы пытаетесь выяснить? – conio

+0

Это неправда. Локальный компьютер также использует пакет проверки подлинности для аутентификации учетных данных входа, собранных Winlogon через GINA. Winlogon вызывает LsaLogonUser, который использует пакет проверки подлинности для создания сеанса входа в систему. LSA использует NTLM (Msv1_0.dll) для поиска учетной записи на локальном компьютере SAM в случае локального входа в систему; не требуется удаленный компьютер. – codekaizen

+1

Вы даже не близко. Тот факт, что некоторые страницы (например, связанные с вашим ответом) неправильно описывают MSV1_0 как «NTLM», не означает, что используется протокол NTLM ** - тот, который описан в [MS-NLMP]. (Правильное описание - [Microsoft Authentication] (http://i.stack.imgur.com/k6rdD.png) [Package v1.0] (http://i.stack.imgur.com/313Y3.png), кстати.) Я не знаю, как я могу быть более ясным в этом вопросе. Когда вы выполняете аутентификацию против локального SAM, никто не создает проблему, и никто не создает ответ на этот вызов, основанный на хэшах LM или NT пароля. – conio

ответ

6

Прежде всего, (как вы, кажется, понимаете в вопросе, но только для того, чтобы быть ясным), EXE не имеет аутентификации - это просто исполняемый файл. OS creates a process object, который выполняет его в сеансе входа в систему, идентифицированном директором. Этот принцип аутентифицирован NTLM или Kerberos (или какой-либо другой протокол).

Далее, Negotiate означает, что при создании сеанса входа в систему был использован Negotiate authentication package, чтобы определить, какой пакет проверки подлинности - Kerberos или NTLM - будет использоваться.

Когда вы запрашиваете значение WindowsIdentity.AuthenticationType, вы в конечном счете вызываете функцию в локальном центре безопасности (LSA) под названием LsaGetLogonSessionData. В этом отчете описывается сеанс входа в систему, используемый для запуска процесса, который вы выполняете. Способ создания этого сеанса входа в систему, вероятно, оказывает наибольшее влияние на пакет проверки подлинности, используемый для проверки учетных данных.

When logging into Windows the first time, Winlogon.exe establishes an interactive logon по телефону LsaLogonUser. Он запрашивает пакеты проверки подлинности в HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Authentication Packages, пока не найдет тот, который может аутентифицировать данные учетных данных. После того, как был установлен интерактивный вход в систему, вы можете создавать новые процессы, используя неинтерактивные логины под разными учетными данными, и в этом случае функция LogonUser, вероятно, будет вызвана. Одним из параметров для этой функции dwLogonProvider которая имеет следующий по умолчанию (который, вероятно, один используется):

LOGON32_PROVIDER_DEFAULT 

Use the standard logon provider for the system. 
The default security provider is negotiate, unless you pass NULL 
for the domain name and the user name is not in UPN format. 
In this case, the default provider is NTLM. 

Таким образом, пакет сообщил для сеанса входа в процесс выполняется под зависит от того, как входа в систему сеанс был создан. (Не ясно из вашего вопроса, как именно вы создаете сеансы входа в систему, которые вы тестируете ... во всех случаях выполняете «Запуск от имени»? Выход из системы/Windows Windows для некоторых случаев?) Это также зависит от того, какой пакет Winlogon смог успешно пройти аутентификацию с первого сеанса интерактивного входа в систему. В конечном счете, однако, обратите внимание, что все механизмы аутентификации обращаются к некоторому пакету проверки подлинности, и если используется Negotiate, Kerberos является предпочтительным, хотя сообщение о переговорах - это то, что сообщается.

Вот старый, но по-прежнему актуальна схема, на которой показано, как все проверки подлинности совмещается в Windows:

Windows Authentication Architecture

Source

+0

Re. ваша цитата из документов «LogonUser» - что, если я хочу использовать другой пакет проверки подлинности? 'LsaLogonUser' позволяет это? Я также считаю, что документация вводит в заблуждение в нескольких аспектах: я предполагаю, что для пользователей домена используется MSV1_0, и он MSV1_0, который проверяет кешированные учетные данные и в противном случае использует Negotiate, и это, безусловно, MSV1_0, который используется для локальных пользователей. Я готов поспорить, что использованный пароль был сравнен с тем, который хранится в SAM, а не играл в глупую игру-ответчик-ответ в LSA. – conio

+0

Да, вы можете указать любой пакет аутентификации во время входа в систему (на самом деле это то, что вы можете сделать, используя собственный пакет GINA/authentication). Winlogon получает идентификатор для пакета через 'LsaLookupAuthenticationPackage', а затем передает значение, возвращенное в' LsaLogonUser'. Для пользователей домена вы можете использовать MSV1_0 (хотя сквозной процесс обрабатывается именно этим пакетом, а не LSA), или вы можете использовать Kerberos. Для локального входа в систему, например, в документе, «вы передаете NULL для имени домена и имя пользователя не в формате UPN», чтобы получить NTLM, а затем пакет NTLM (а не LSA) будет использовать SAM. – codekaizen

Смежные вопросы