缓存和存储凭据技术概述

一、概述

当用户或服务想要访问计算机资源时,他们必须提供证明其身份的信息。他们的身份通常采用其账户用户名的形式。这可能是用户名,即安全帐户管理器(SAM)帐户名或用户主体名称(UPN)。但是,为了证明自己的身份,他们必须提供秘密信息,称为身份验证者。身份验证器可以采用多种形式,具体取决于身份验证协议和方法。身份和身份验证者的组合称为身份验证凭证。

创建,提交和验证凭据的过程简称为身份验证,它是通过各种身份验证协议(例如Kerberos协议)实现的。身份验证建立用户的身份,但不一定建立用户的访问或更改特定计算资源的权限。该过程称为授权。

通常将凭据创建或转换为计算机上可用的身份验证协议所需的形式。凭据可以存储在本地安全授权子系统服务(LSASS)进程内存中,以供帐户在会话期间使用。凭据还可以存储在权威数据库(例如SAM数据库)和Active Directory域服务(AD DS)使用的数据库中的硬盘驱动器上。

二、常见凭证认证方式

2.1.纯文本凭证

当用户登录到运行Windows的计算机并提供用户名和凭据(例如密码或PIN)时,信息将以纯文本格式提供给计算机。该明文密码用于将用户身份转换为身份验证协议所需的形式,从而对用户身份进行身份验证。Windows的某些版本还保留此密码的加密副本,可以将其解密为纯文本,以与摘要式身份验证等身份验证方法一起使用。

注意:

Windows操作系统永远不会在内存或硬盘驱动器上存储任何纯文本凭据。仅可逆加密的凭据存储在此处。当以后需要访问凭据的纯文本格式时,Windows将以加密形式存储密码,这些密码只能由操作系统解密以在授权情况下提供访问权限。

但是,这些保护措施不能阻止具有系统级访问权限的恶意用户以与操作系统合法使用相同的方式非法提取它们。

2.2.NT哈希

密码的NT哈希是通过使用无盐的MD4哈希算法来计算的。MD4是一种加密的单向函数,可产生密码的数学表示。此哈希函数旨在始终从相同的密码输入中产生相同的结果,并最大程度地减少两个不同的密码可以产生相同结果的冲突。该哈希值的长度始终相同,并且不能直接解密以显示明文密码。由于NT哈希仅在密码更改时才更改,因此NT哈希在验证用户密码之前一直有效。

注意:

为了防止在NT哈希或在线系统上遭受暴力攻击,使用密码进行身份验证的用户应设置强密码或口令短语,其中包括多组字符,并且只要用户可以轻松记住即可。

2.3.LM哈希

LAN Manager(LM)哈希是从用户密码派生的。NTLM协议中保留了对LM哈希和LAN Manager身份验证协议的传统支持。Windows和Microsoft安全指南中的默认配置不鼓励其使用。

LM哈希本质上更容易受到攻击,因为:

  • LM散列要求密码长度少于15个字符,并且仅包含ASCII字符。
  • LM哈希不能区分大写字母和小写字母。

2.4.Windows登录缓存的密码验证程序

这些验证者不是凭据,因为它们无法提供给另一台计算机进行身份验证,并且只能用于本地验证凭据。它们存储在本地计算机上的注册表中,并在用户登录期间加入域的计算机无法连接到AD DS时提供凭据验证。

三、凭证存储

以下各节描述Windows操作系统中凭据存储的位置。Windows凭据由帐户名和身份验证器的组合组成。根据用户会话的状态(可能是活动的或非活动的以及本地的或联网的)从以下位置进行存储和检索。

3.1.安全帐户管理器数据库(SAM)

SAM数据库作为文件存储在本地硬盘驱动器上,并且是每台Windows计算机上本地帐户的权威证书存储。该数据库包含该特定计算机本地的所有凭据,包括内置的本地管理员帐户和该计算机的任何其他本地帐户。

SAM数据库存储有关每个帐户的信息,包括用户名和NT密码哈希。默认情况下,SAM数据库不在当前Windows版本上存储LM哈希。没有密码存储在SAM数据库中,只有密码哈希。NT密码哈希是帐户密码的未加盐的MD4哈希。这意味着,如果两个帐户使用相同的密码,则它们还将具有相同的NT密码哈希。

3.2.本地安全机构子系统服务(LSASS)

本地安全机构子系统服务(LSASS)代表具有活动Windows会话的用户将凭据存储在内存中。这使用户可以无缝访问网络资源,例如文件共享,Exchange Server邮箱和SharePoint网站,而无需为每个远程服务重新输入凭据。

LSASS可以多种形式存储凭据,包括:

  • 可逆加密的纯文本
  • Kerberos票证(TGT,服务票证)
  • NT哈希
  • LM哈希

如果用户使用智能卡登录Windows,则LSASS不会存储明文密码,但会存储该帐户的相应NT哈希值和智能卡的明文PIN。如果为交互式登录所需的智能卡启用了帐户属性,则会自动为该帐户生成一个随机的NT哈希值,而不是原始的密码哈希。设置属性时自动生成的密码哈希不会更改。

从Windows Server 2008 R2和Windows 7开始,即使禁用了需要纯文本凭据的凭据提供程序,也无法禁用它们在内存中的存储。

存储的凭据直接与自上次重启以来已启动但尚未关闭的LSASS登录会话相关联。例如,当用户执行以下任一操作时,将创建具有存储的LSA凭据的LSA会话:

  • 登录到计算机上的本地会话或RDP会话
  • 使用RunAs选项运行任务
  • 在计算机上运行活动的Windows服务
  • 运行计划的任务或批处理任务
  • 使用远程管理工具在本地计算机上运行任务

3.3.硬盘驱动器上的LSA密码

本地安全机构(LSA)是重要数据,仅SYSTEM帐户进程可以访问。这些密码中的某些是在重新启动后必须保留的凭据,它们以加密形式存储在硬盘驱动器上。存储为LSA密码的凭据可能包括:

  • 计算机的AD DS帐户的帐户密码
  • 在计算机上配置的Windows服务的帐户密码
  • 配置的计划任务的帐户密码
  • IIS应用程序池和网站的帐户密码

3.4.AD DS数据库(NTDS.DIT)

Active Directory域服务(AD DS)数据库是AD DS域中所有用户帐户和计算机帐户的凭据的权威存储。AD DS中两种不同的凭据管理类型是:

每个可写域控制器都包含域的AD DS数据库的完整副本,包括域中所有帐户的帐户凭据。

只读域控制器(RODC)包含部分本地副本,其中包含域中帐户的选定子集的凭据。默认情况下,RODC没有特权域帐户的副本。

数据库为每个帐户存储许多属性,包括用户名类型和以下属性:

  • 当前密码的NT哈希
  • NT哈希用于密码历史记录(如果已配置)

NT哈希值也保留在AD DS中,用于以前的密码,以在密码更改操作期间强制执行密码历史记录。保留的密码历史记录NT哈希值的数量等于密码历史记录实施策略中配置的密码数量。

LM哈希也可能存储在AD DS数据库中,具体取决于域控制器操作系统版本,配置设置和密码更改频率。

3.5.凭证管理器

用户可以选择使用应用程序或“凭据管理器控制面板”小程序在Windows中保存密码。这些凭据存储在硬盘驱动器上,并使用数据保护应用程序编程接口(DPAPI)进行保护。以该用户身份运行的任何程序都将能够访问此存储中的凭据。

凭据管理器可以通过两种方式获取其信息:

显式创建 当用户输入目标计算机或域的用户名和密码时,该信息将在用户尝试登录到适当的计算机时被存储和使用。如果没有可用的存储信息,并且用户提供了用户名和密码,则可以保存该信息。如果用户决定保存信息,则凭据管理器将接收并存储该信息。

系统填充 操作系统尝试连接到网络上的新计算机时,它将为计算机提供当前的用户名和密码。如果这不足以提供访问权限,则Credential Manager尝试提供必要的用户名和密码。检查所有存储的用户名和密码(从最具体到最不具体),视资源而定,并按照这些用户名和密码的顺序尝试连接。由于用户名和密码是按从高到低的顺序读取和应用的,因此每个单独的目标或域最多只能存储一个用户名和密码。

Credential Manager使用Credential Locker(以前称为Windows Vault)来安全存储用户名和密码。

小结

最近正在写关于凭证转储的一些文档报告,无意中找到了微软官方关于缓存和凭证存储概述的文章,感觉还不错,顺便做个机翻并记录到博客站。如果有问题,请以原文表达意思为准。

简单说一下想法吧,其中安全帐户管理器数据库(SAM)、本地安全机构子系统服务(LSASS)、硬盘驱动器上的LSA密码 、AD DS数据库(NTDS.DIT)这四部分在MITER ATT&CK中被放到了T1003(凭证转储)中,凭证管理器被放到了T1083(文件和目录发现)中。

其次在记录一下今天遇到的问题吧。如何理解有盐与无盐加密?

盐(Salt)

在密码学中,是指通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为“加盐”。大概懂什么意思了吧(手动滑稽)。关于具体有盐加密你可以参考这篇文章https://libuchao.com/2013/07/05/password-salt。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值