NTLM 和 Kerberos 入门
将公司所有资源通过网络连接起来以便共享是很有价值的,但你需要一种方法来验证只有获授权的用户和设备才能访问这些资源。认证通过为用户和设备提供证明其身份的方法来实现这一目的。
在 Windows 环境中,使用两种主要的认证协议:NTLM(New Technology LAN Manager)和 Kerberos。
- NTLM 是一种较早的、基于质询-响应(challenge-response)的认证协议,至今仍存在于传统系统以及回退场景中。
- Kerberos 是一种更安全、更高效的认证协议,它通过票据(tickets)和加密来验证 Active Directory (AD) 环境中的身份。
在本文中,我们将讨论 NTLM 与 Kerberos 的区别,并说明为什么在可能的情况下实施 Kerberos 很重要。
申请 Netwrix Threat Manager 免费试用
NTLM 是什么?
NTLM 是 Microsoft 为用户身份验证以及保护数据完整性和保密性而开发的一套安全协议。它曾在较早的 Windows 版本中作为默认身份验证协议,但如今仅限于一些有限的场景,例如工作组环境、本地帐户和旧版(legacy)应用程序。
NTLM 身份验证通过挑战-响应(challenge response)机制运行,如下所示:
- 客户端使用用户名和密码发送登录请求。
- 服务器使用挑战(16 字节的随机数)进行响应。
- 客户端使用用户的哈希密码作为加密密钥对挑战进行加密,然后将其发送回服务器。
- 服务器会将响应与 Security Account Manager (SAM) 数据库中存储的凭据进行比对验证。如果响应正确,则授予认证。
变体:NTLMv1 vs NTLMv2
NTLM 有两个版本。NTLM v1 使用较弱的哈希算法,因此更容易遭受安全漏洞和入侵。其更简单的挑战-响应机制使其同时暴露于 传递哈希(pass-the-hash)攻击和彩虹表(rainbow table)攻击之下。该 1993 年协议的另一个弱点是:客户端无法验证服务器的身份,这使得中间人(man-in-the-middle)攻击成为可能。
NTLMv2 后来作为对 NTLMv1 的升级而开发。它提供更强的加密(128 位而非 56 位),并加入了多项安全增强功能,包括可变长度的挑战以及客户端侧时间戳。尽管有这些改进,Microsoft 正在完全远离 NTLM,并在 2023 年 10 月宣布计划很快停用所有 NTLM 版本(包括 NTLMv2)。
什么是 Kerberos?
Kerberos 是一种网络身份验证协议,旨在通过密钥加密为客户端-服务器应用提供强大的安全性。它并不通过网络发送用户的密码,而是使用有效期有限的加密票据(tickets)。该协议运行在域控制器(domain controller)上,并且自 Windows 2000 起一直是 Windows 域的默认身份验证协议。顺带一提,该协议以希腊神话中哈迪斯(Hades)的三头看门犬刻耳柏洛斯(Cerberus)命名,体现了其在提供稳固安全方面的作用。
Kerberos 以“单点登录”(Single Sign-On,SSO)的原理运行,使用票据发放系统(ticket-granting system)来对用户进行身份验证,使其在无需反复通过网络发送密码的情况下访问资源。身份验证完成后,每当用户希望访问某个资源时,都必须出示其指定的票据。下面是身份验证流程。
- 用户登录后、客户端会向托管在域控制器(DC)上的 Key Distribution Center(KDC)发送 Authentication Service Request(AS-REQ)。
- KDC 会验证用户的身份,并返回包含加密票据授权票据(Ticket Granting Ticket,TGT)的 Authentication Service Response(AS-REP)。
- TGT 使用 KDC 的密钥进行加密,并且有效期有限(通常为 10 小时)。
- 当客户端需要访问某项服务时,它会使用 TGT 向 Ticket Granting Service(TGS)请求服务票据。
- TGS 会为特定服务签发票据,并使用该服务的密钥对票据进行加密。
- 客户端将此票据提交给服务端,以进行身份验证并获得访问权限
如您所见,Key Distribution Center(KDC)是 Kerberos 认证工作机制中不可或缺的一部分。可以把 KDC 想象成一个安全检查点:它会先确认你的身份,然后再为你提供访问不同资源所需的特定通行凭证(passes)。
NTLM 与 Kerberos 的关键差异
虽然 NTLM 和 Kerberos 都是认证协议,但它们的机制和安全特性差异很大,这会影响其安全性与性能。让我们看看它们之间的一些不同之处。
认证机制
NTLM 使用质询-响应系统来在用户每次访问网络资源时检查其身份。Kerberos 则相反,改为使用票据。用户完成一次登录后,会获得 Ticket Granting Ticket(TGT)。当他们需要访问某些内容时,会出示该 TGT 以获取服务票据。随后,他们使用服务票据来访问网络资源,而无需在任何时候发送密码。
安全特性
NTLM 使用 MD4 或 MD5 哈希算法来存储密码哈希,并且不支持相互认证,因为只有客户端向服务器进行认证。NTLM 缺少这类安全功能,使其容易受到多种类型的攻击。Kerberos 可通过以下方式提供更强的安全性:
- 使用 AES 加密以提供更好的保护
- 相互认证:客户端和服务器都要验证对方
- 为抵抗破解尝试而进行密码加盐(salting)
- 具备时间限制的认证令牌,可防止重放攻击
- 由于密码从不在网络上传输,可防御 pass-the-hash 攻击
性能与效率
尽管它存在许多安全弱点,但 NTLM 所需资源比 Kerberos 更少。它通常在初始身份验证时更快,并且在小型、简单的网络环境中通常更高效。虽然它需要更多资源,但 Kerberos 更适合大型复杂环境,因为它能通过使用缓存票据来显著节省后续身份验证所需的时间。
支持委派(delegation)和假冒(impersonation)
NTLM 仅支持假冒(impersonation),允许服务器进程在本地系统上暂时采用客户端的安全上下文。Kerberos 支持假冒(impersonation)和身份验证的委派(delegation)。委派允许服务以域用户的名义访问其他服务。
Windows 环境中的兼容性与实现
请知道:Kerberos 是现代 Windows Active Directory 域中的默认身份验证协议。Microsoft 的意图是让 Kerberos 完全取代 NTLM;而如今,NTLM 仅在 Kerberos 不可用时才被允许使用。
安全影响
NTLM 的漏洞
让我们再深入一点了解 NTLM 的漏洞,以及为什么应当大幅限制其使用。
- NTLM 容易受到“传递哈希”(pass-the-hash)攻击:攻击者可以使用截获到的密码哈希进行身份验证,而无需知道真实密码。
- NTLM(尤其是 NTLMv1)使用 MD4 哈希算法,而该算法被认为较弱,并且容易受到“彩虹表”(rainbow table)攻击。此弱点使攻击者更容易破解密码哈希并获得未授权访问。
- NTLM 的质询-响应(challenge-response)过程是可预测的;如果未实现诸如签名或加密之类的额外安全措施,就会容易受到重放攻击(replay attacks)的影响。
为什么 Kerberos 更安全
Kerberos 是一种更现代的认证协议,具备增强的安全功能,能够弥补其前身的不足。其部分功能包括:
- 基于票据的认证,消除了在网络上传输密码的需求,从而降低密码被截获的风险。
- 高级加密,例如 AES 加密,可增强对诸如暴力破解攻击之类的未授权访问尝试的整体抵抗能力
- 多因素认证(MFA)支持,使 Kerberos 能够使用智能卡或生物特征等额外的认证因素,从而在仅使用密码之外再增加一层安全性
下面的图表总结了 NTLM 和 Kerberos 之间的差异。
Features | NTLM | Kerberos |
|---|---|---|
|
Authentication Mechanism |
Challenge-Response mechanism |
Ticket-based mechanism |
|
Mutual Authentication |
Not supported |
Supported (both client and server authenticate each other) |
|
Delegation Support |
Not supported |
Supports delegation |
|
Single Sign-on (SSO) |
Not supported |
Fully supported |
|
Encryption Algorithms |
MD4 (NTLMv1), HMAC-MD5 (NTLMv2) |
AES (Advanced Encryption Standard) |
|
Primary Use Case |
Local authentication, legacy systems, workgroup environments |
Domain authentication in Active Directory environments |
何时使用 NTLM 与 Kerberos
尽管 Kerberos 是首选的认证方式,但某些场景仍然需要 NTLM。例如,如果服务器与域控制器的连接丢失,就需要使用本地登录认证。在没有集中式域控制器的小型办公室或家庭办公环境中,独立机器上的基本账户安全也会依赖 NTLM。许多旧版(legacy)应用程序仍然依赖 NTLM 认证。可以把 NTLM 视为在特殊情况下的后备选项。如果你在 Windows Active Directory 环境中工作,应尽可能避免使用 NTLM,并强制使用 Kerberos 认证,以提升安全性、支持委派,并实现跨服务的无缝认证。
识别正在使用的协议
Windows 事件查看器(Event Viewer)是调查单个服务器或域环境中认证活动的常用工具。要确定认证类型,请查看“安全(Security)”事件日志。每个事件都有唯一的事件 ID。例如,事件 ID 4776 表示发生了 NTLM 认证。该事件日志条目会提供有关认证尝试的详细信息,例如所使用的账户以及认证来源。下面的截图展示了在独立机器上对本地 Administrator 账户进行 NTLM 认证时的事件 ID 4776。
在域控制器上,你可以查看事件 ID 4768,它表示使用了 Kerberos,如下方针对域控制器的截图所示。
你还可以打开命令提示符并输入“klist”。它会显示是否存在任何 Kerberos 票据(tickets)。如果有,就说明正在使用 Kerberos,如下所示。
您还可以使用 Wireshark 等数据包分析工具来捕获并分析网络流量。Kerberos 流量将使用端口 88,而 NTLM 通常使用 NetBIOS 端口。
从 NTLM 过渡到 Kerberos
在 Windows 计算机上禁用 NTLM 将确保更好的安全性,但只有在您完全确定该操作不会中断您的业务时,才应采取此步骤。请按照上一节所述使用“事件查看器”,以确认 NTLM 的使用方式。如果您确定至少有一些计算机不需要 NTLM,则可以开始禁用流程。
打开 Group Policy Management 控制台,并导航到:计算机配置 > 策略 > Windows 设置 > 安全设置 > 本地策略 > 安全选项。然后修改以下策略:
- 网络安全:限制 NTLM:传入的 NTLM 流量 > 按如下截图所示设置为“拒绝所有账户”。
由于这是一个重要步骤,Windows 会如下面弹出窗口所示提示你确认你的意图:
你还需要再配置两项策略。
- 网络安全:限制 NTLM:此域中的 NTLM 身份验证 > 将其设置为“拒绝所有账户”。
- 网络安全:LAN Manager 身份验证级别 > 将其设置为“仅发送 NTLMv2 响应”。如下面截图所示拒绝 LM & NTLM:
请务必先在测试环境或非生产环境中部署策略,并进行严格测试。不要一次将策略部署到所有计算机。请逐步分批部署,以确保业务运行不会中断。务必监控你的事件日志。
解决迁移过程中的常见挑战
您可能有一些旧版应用程序可能不支持 Kerberos。请进行调研,查看是否有允许 Kerberos 兼容的更新。如果某个应用程序必须使用 NTLM,则将其 NTLM 访问权限限制为特定账户或主机。
请注意,Kerberos 认证要求准确的 DNS 解析以及网络中各设备之间的时间同步。确保所有域控制器、客户端和服务都配置了正确的 DNS 设置,并启用 NTP 时间同步。您可能还需要向用户说明认证流程的变化,尤其是与 Single Sign-On (SSO) 功能相关的部分。
保护认证协议的最佳实践
- 将 NTLM 的使用限制在绝对必要的情况下
- 继续监控日志,查看是否存在异常的身份验证模式或登录失败尝试,并使用诸如 Windows Event Viewer 之类的工具来跟踪与身份验证相关的事件 ID
- 为减轻漏洞,请定期对参与身份验证流程的所有系统应用安全补丁和更新。
- 开展安全评估,以验证 Kerberos 强制执行策略,并检测未经批准的 NTLM 使用情况。
- 通过实施复杂的 密码策略,并结合多因素身份验证来加以完善,从而加强账户安全。
- 定期审计服务主体名称(SPN)
真实世界的用例与示例
随着企业不断扩展并在复杂性方面持续增长,而 Kerberos 也能够在其发展的同时进行扩展。用户可从单点登录(Single Sign-On,SSO)中获益:在完成一次身份验证后,即可访问多个服务。该协议提供相互认证,即客户端与服务器都会验证彼此的身份;同时采用基于票据的系统,从而避免凭据的直接传输。这种做法不仅增强了安全性,还支持服务委派,使复杂的多层应用能够在用户授权下安全访问资源。
Kerberos 与混合环境
Microsoft 已确认混合网络架构的增长趋势,并正在调整 Kerberos,以支持覆盖本地(on-premises)与云基础设施的、更灵活且更复杂的网络环境。对于实施基于云的 SSO 解决方案的组织,Kerberos 可与现代认证协议结合使用,从而为同时访问本地与云资源提供无缝体验。另一个例子是:Windows Hello for Business 允许用户在无需混合设备配置的情况下,通过从已加入云的工作站使用 Kerberos 认证来访问本地资源。
传统应用程序
仍然存在在广泛采用 Kerberos 之前开发的遗留应用,因此需要 NTLM。针对这些应用的一项考虑是:将它们运行在 Windows 2003 或 2008 服务器上,因为这些服务器本身并不能完全支持现代 Kerberos 身份验证。遗留应用的示例包括:
- 部分企业资源规划(ERP)以及人力资源应用,尤其是那些在 2000 年代之前开发的应用
- 在较旧版本的 IIS 或 SMB 上运行、并默认使用 NTLM 的遗留 Windows 文件服务器和内联网门户。
- 不支持 Kerberos delegation
结论
在选择 IT 解决方案时,安全性应当是首要考虑因素;而在 Kerberos 与 NTLM 的对比中,Kerberos 显然是更优的选择。不过,理解在何种特定场景下 NTLM 可能仍然是必需的,对于实现全面的网络管理至关重要。
常见问题(FAQs)
NTLM 和 Kerberos 有什么区别?
NTLM 和 Kerberos 都是 Windows 身份验证协议,但存在显著差异。NTLM 使用简单的“挑战-响应”机制,客户端通过口令哈希向服务器证明身份。它缺乏双向身份验证,并且容易受到多种攻击类型的威胁。相比之下,Kerberos 是一种更复杂的基于票据的系统,可实现双向身份验证,使用强 AES 加密,提供单点登录能力,并防止密码在网络上传输。尽管 NTLM 仍在某些遗留系统中受支持,但由于其卓越的安全特性和性能,Kerberos 已成为现代 Windows Active Directory 域中的标准身份验证协议。
为什么 Microsoft 从 NTLM 切换到 Kerberos?
由于需要更强的安全性、更好的可扩展性以及提升现代企业环境中的效率,Microsoft 从 NTLM 迁移到了 Kerberos。NTLM 的挑战-响应机制使其容易受到诸如传递哈希(pass-the-hash)和中继攻击(relay attacks)之类的攻击;而 Kerberos 引入了更强的加密、双向认证以及基于票据(ticket-based)的认证,从而降低安全风险并提升性能。Kerberos 还支持诸如委派(delegation)、单点登录(Single Sign-On,SSO)以及与多因素认证(MFA)集成等高级功能,而这些是 NTLM 所不具备的。 因此,Kerberos 更适合当今现代化的混合网络。
NTLM 还在使用吗?
尽管如今不太推荐使用 NTLM,但在少数特定场景中仍然是必需的,例如:
- 较旧的 Windows 工作组环境
- 不支持 Kerberos 的旧版应用程序
- 本地计算机认证
- Kerberos 认证失败时的后备认证
- 独立设备
NTLM 用于本地认证吗?
在以下场景中,NTLM 仍然是本地 Windows 计算机登录的主要认证协议:
- 本地计算机登录:对于独立运行的 Windows 系统,或在没有域控制器的工作组环境中,NTLM 仍然是主要的认证协议。
- 工作组环境:在未实现域结构的小型网络或家庭办公室中,NTLM 便于实现机器之间的点对点认证。
- 最小特权场景:组织通常使用通过 NTLM 进行身份验证的本地账户,以 贯彻最小特权原则。这种做法通过将账户的访问权限限制为仅本地计算机,从而降低被攻破账户可能造成的影响。
回退认证:在域环境中,当 Kerberos 认证失败时,NTLM 充当回退机制,以确保对资源的持续访问。
分享到
了解更多
关于作者
Joe Dibley
安全研究员
Netwrix 的安全研究员,并且是 Netwrix Security Research Team 的成员。Joe 是 Active Directory、Windows 以及各类企业软件平台与技术方面的专家;他/她研究新的安全风险、复杂的攻击技术,以及相应的缓解措施与检测方法。