2

我为 Windows-7 登录创建了一个子身份验证包。它成功地用于本地帐户登录。然后我尝试在 Windows server 2008 r2 中为活动目录实现相同的子身份验证包。我将我的 DLL 放在Windows\System32\文件夹中,并修改了 Kerberos 的注册表值,因为这个Microsoft 文档解释了子身份验证 dll。

我设置的值在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\KerberosValue:中Auth0设置为C:\Windows\System32\SubAuth.dll(我在这里吗?)。

但是在进行身份验证时,我注意到我的子身份验证包没有被调用,因为在针对 AD 对客户端计算机上的用户进行身份验证时,我没有被要求提供第二个因素。

我是否在设置中遗漏了某些内容,或者我的子身份验证包中必须更改某些内容。

如果我错过了这里的任何信息,请告诉我。

PS:子身份验证包是根据 Microsoft 的凭据提供程序文档开发的(在 Msv1_0SubAuthenticationFilter 例程中)。

4

2 回答 2

0

为了实现我所提出的问题,我需要破解微软的身份验证包。

这就是我所做的。

为了与活动目录通信并进行 AD 身份验证,我必须在凭据提供程序之前完成。

因此,我的解决方案控制流程在凭据提供程序中如下所示:

  1. 检查用户是否连接到网络。
  2. 如果是,则与预定义的 AD 服务器通信并针对 AD 条目验证用户。
  3. 如果用户已通过验证,则仅在凭据提供程序中询问第二个因素,然后在成功验证后,将用户传递给 sub-auth 模块并绕过 sub-auth 中的第二个因素。
  4. 如果用户未连接到网络,则使用 sub-auth 模块进行验证。

所以基本上,如果用户需要验证 AD 并稍后在 sub-auth 模块中执行密码身份验证,我必须首先执行 2nd FA。

于 2018-05-16T06:51:35.723 回答
0

看起来这是设计使然 - 不会调用 kerberos\ssv1_0 subauth 包中的 Msv1_0SubAuthenticationFilter 例程来进行缓存的域交互式登录。

对于交互式登录,调用链将类似于:

LsaApLogonUserEx2->MsvSamValidate->MsvpSamValidate->MsvpPasswordValidate
LsaApLogonUserEx2->MsvSamValidate->MsvpSamValidate->Msv1_0SubAuthenticationRoutine

但是对于缓存的交互式登录,所有链看起来像:

LsaApLogonUserEx2->MsvpPasswordValidate 
<and there is no call to Msv1_0SubAuthenticationRoutine here>
于 2017-09-06T07:41:31.917 回答