后渗透阶段,域管理员权限是最终目标。Windows 中的几乎所有横向移动方式,都与帐户相关联,没有创建或者控制帐户很难移动。而获取凭证是控制帐户的关键。
Windows 中的凭证窃取,从一开始就是一个问题。与 Windows 中的许多其他安全问题一样,糟糕的凭证实现以及向后兼容性需求,一直是微软在操作系统保护方面的克星。
Windows 中存在各种权限认证相关的凭证以及缓解凭证窃取的措施,本文旨在厘清 Windows 中常见的凭证基本概念以及对应的缓解措施。
注:在某些情况下,用户、账户、帐户概念混用,但实际上账户符合规定,帐户符合习惯;凭据与凭证概念同义;票据与票证概念同义;凭证相关的缩写概念混用。由于 Windows 系统沿用帐户,故本文遵照习惯统一描述为帐户、凭证、票据,并标注各类概念的英文全称以及缩写。
1. 缓解措施演变
系统 |
缓解措施 |
Vista/Windows 7 |
用户帐户控制(User Account Control, UAC) 托管服务帐户(Managed Service Accounts) KB2871997 |
Windows 8/8.1 |
安全支持提供程序(Security Support Provider, SSP) 本地远程登录限制(Local admin remote logon restrictions) 受保护进程(Protected Processes) 受限管理员(Restricted Admin) 受保护用户组(Protected Users Security Group) 域保护用户安全组(Domain Protected Users Security Group) 本地安全机构(Local Security Authority, LSA) 组托管服务帐户(Group Managed Service Accounts) |
Windows 10 + |
凭证保护(Credential Guard) 远程凭证保护(Remote Credential Guard) 设备保护(Device Guard) |
Vista/Windows 7/Server 2008R2
Windows XP 几乎没有任何缓解措施,Vista/Windows 7/Server 2008R2 版本中加入了一些缓解措施。通过新功能用户帐户控制(User Account Control, UAC)实现强制访问控制和最小访问权限。
Server 2008R2 发布托管服务帐户(Managed Service Accounts),是为数不多的可用于对抗 Kerberos 票据攻击的缓解措施之一。此功能对使用域帐户权限运行的服务帐户,要求密码更改时间(默认为 30 天)和密码复杂性。而Windows 8 系统的组托管服务帐户(Group Managed Service Accounts),更加灵活和易于管理。
KB2871997 补丁将 Windows 8 中发布的许多缓解措施,反向移植到 Windows 7/Server 2008R2,但某些措施仍需要将活动目录(Active Directory) 功能级别设置为 2012R2。
Windows 8/8.1
凭证窃取攻击缓解是 Windows 8/8.1 发布期间。
默认情况下,CredSSP (Credential Security Support Provider)和其他单点登录 (SSO)凭证,如,TsPkg 和 Wdigest 不再缓存在内存中,这缓解了 Mimikatz 工具从内存中抓取明文凭证的能力。PS:CreadSSP——应用于RDP和WinRM、Powershell会话中,处理其他应用程序身份验证请求的安全提供程序。
限制本地帐户从网络或远程交互式登录到加入域的系统。这缓解了使用本地管理员帐户的传递哈希攻击(Pass the Hash, PtH)、安装远程共享、远程 WMI、PsExec 和远程计划任务。
Windows 8 中新增受保护进程(Protected Processes),受保护的进程只能由其他受保护进程附加。特别是 LSASS 进程被列为受保护进程,以缓解将代码注入到 LSASS 进程以收集凭证的常见凭证转储工具的攻击。但是,默认情况下保护是关闭的,Mimikatz 通过签名的驱动程序绕过了这种保护。
Windows 8 中新增两个新的帐户保护。确保在交互式 RDP 会话期间不会将凭证和票据发送到目标系统(也可以使用组策略强制帐户) 此功能最初在 Server 2012 上默认启用,但由于打开 RDP 会话,导致可以利用传递哈希(Pass the Hash, PtH)进行攻击,随后默认更改为关闭。它已被 Windows 10 中的远程凭证保护(Remote Credential Guard)取代。
域保护用户安全组(Domain Protected Users Security Group)是最重要的安全功能之一,比受限管理员帐户(Restricted Admin)更重要。该组旨在保护高价值(特权)帐户。该组的成员无法通过NTLM、CredSSP 或 Digest 身份验证进行身份验证,这缓解了 Mimikatz 工具攻击。凭证也不会缓存在本地系统和远程服务器上,并且无法委派令牌(消除缓存凭据和令牌窃取的威胁)。Kerberos 票据的生命周期缩短(至 4 小时)并禁用较弱的 RC4 票据加密。
本地安全机构(Local Security Authority, LSA)是Windows 8 后新增的安全子系统的核心组件。本地安全机构( LSA)负责管理系统的交互式登录,当用户尝试在登录对话框(也就是开机进入的登录界面)中输入用户名和密码本地登录到系统之后,系统会自动调用本地安全机构(LSA),将我们输入的凭据传递给安全帐户管理器(SAM)。在 SAM 中存储了相关的管理存储的帐户信息。用户会话终止后,对缓存的凭证进行清理,并发布了一项改进的功能来管理和保护名为组托管服务帐户(Group Managed Service Accounts)的服务帐户。
Windows 10
随着 Windows 10 的发布,微软在几个重要方面改进了之前的安全措施。凭证保护(Credential Guard)是一种改变游戏规则的技术,它使用机器虚拟化强制执行的安全边界来隔离哈希和票据。
虽然它对软件和硬件有要求,但有效地缓解了当前流行的传递票据(PtT)和传递哈希(PtH)攻击。
远程凭证保护(Remote Credential Guard)是在受限管理员帐户(Restricted Admin)基础上的更新,可在 RDP 会话期间保护任何帐户(不仅仅是管理员)。
设备保护(Device Guard),可以防止执行不受信任的程序在系统上运行,如凭证转储实用程序。虽然非常有效,但它似乎很难调优,而且很可能只能在企业中少数非常重要的系统上找到。
reference
-
https://www.microsoftpressstore.com/articles/article.aspx?p=2228450&seqNum=9
-
https://docs.microsoft.com/en-us/previous-versions/technet-magazine/dd822916(v=msdn.10)?redirectedfrom=MSDN
-
https://learn.microsoft.com/en-us/security-updates/SecurityAdvisories/2016/2871997?redirectedfrom=MSDN
-
https://learn.microsoft.com/en-us/windows-server/security/credentials-protection-and-management/configuring-additional-lsa-protection
-
https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/dn466518(v=ws.11)?redirectedfrom=MSDN
-
https://learn.microsoft.com/zh-cn/windows/security/identity-protection/credential-guard/credential-guard
2. 凭证: Hash
Hash
Windows 中每个用户帐户的密码以多种格式存储:LM 和 NT 哈希是最知名的。TsPkg、WDigest、LiveSSP可以破解哈希后提供明文密码(Win8.1之前)。
如何获得和使用的?
Windows 以各种不同的格式存储凭据。最常见的是 LM(已弃用)和 NT 哈希。本地帐户密码哈希在 SAM 注册表配置单元中,域帐户哈希在交互会话期间存在于内存中。
几种常见的攻击手段,允许攻击者获取哈希:
-
直接从 LSASS 进程内存中在线提取
-
转储 LSASS 进程内存进行离线提取
-
从内存或磁盘中的 SAM 配置单元中提取本地帐户哈希。
常用工具
Mimikatz、fgdump、gsecdump、Metasploit、AceHash、PWDumpX、creddump、WCE
暴力破解
所有这些攻击都需要管理员权限。一旦转储哈希,就可以使用 John the Ripper 等工具或通过彩虹表预计算攻击轻松破解它们。
域用户帐户必须以交互方式登录到系统,其哈希值才会出现在内存中,并且哈希值仅在用户登录时可用(除非应用程序或进程在注销后仍在使用它们)。
研究人员还在内存中发现了许多其他类型的密码哈希,其中一些可以很容易地提取和解密,从而产生明文密码。其中一些是 TsPkg 和 Wdigest 等单点登录 (SSO)的密码哈希,而另一种 LiveSSP 则源自新的 Windows 在线云帐户,现在可用于登录。Mimikatz 是第一个将这些漏洞带入主流的工具,现在也可以使用 Windows 凭证编辑器 (WCE)等工具来提取它们。
传递哈希(PtH)
传递哈希(Pass the Hash, PtH)允许攻击者在不知道明文密码的情况下使用窃取的帐户哈希进行身份验证,传递哈希(PtH)仅限于 NTLM 身份验证。
缓解措施
-
防止管理员帐户泄露
-
停止具有高权限帐户的远程交互会话
-
正确终止 RDP 会话
-
Win8.1+ 强制使用受限管理员帐户(Restricted Admin)
-
Win10 远程凭证保护(Remote Credential Guard)
-
升级到 Windows 10
-
凭证保护(Remote Credential Guard)
-
TsPkg、WDigest等,SSO 凭证缓存清理
-
域保护用户安全组(Domain Protected Users Security Group)缓解 传递哈希(PtH) 攻击
默认情况下,Windows 8.1+ 不再存储 WDigest 和 TsPkg 凭据。但是,攻击者可以通过在注册表值UseLogonCredential中将
HKLMSYSTEMCurrentControlSetControlSecurityProvidersWDigest
更新为1来重新启用 WDigest 纯文本凭证。这将是审核任何意外更改或添加的密钥(默认情况下,该值在 Win8.1+ 系统上不存在)。
Windows 8.1 还引入了几种传递哈希(PtH)攻击的缓解措施,包括受限管理员帐户(Restricted Admin)、域保护用户安全组(Domain Protected Users Security Group)和受保护进程(Protected Processes)。
Windows 10 引入凭证保护(Credential Guard)和远程凭证保护(Remote Credential Guard)。启用了 远程凭证保护(Remote Credential Guard)的受限管理员帐户(Restricted Admin)和系统不会在远程系统上提供哈希(或令牌),即使在 RDP 等交互式登录期间也是如此。
域保护用户安全组(Domain Protected Users Security Group)无法通过 NTLM、WDigest 或 SSP 进行身份验证,并且不在缓存凭证。
受保护进程(Protected Processes)将只执行签名的代码,破坏了许多当前用于从 LSASS 转储凭据的代码注入技术。
本地管理员帐户可以很容易地绕过限制,通过网络进行身份验证(包括传递哈希),除非它们是 RID 500 内置管理员帐户。
凭证保护(Credential Guard) 在 Windows 10 中首次亮相,它使用管理程序将域凭证、票据和哈希从 LSASS 移动到可以更好地保护它们的隔离进程LSAISO中。所有这些缓解措施都可以被绕过,但简而言之,现在在 Win8.1以上系统上收集哈希和执行传递哈希攻击(PtH)要困难得多。
注:LSAISO 进程在称为虚拟安全模式的新安全环境中 (VSM) 作为独立用户模式运行。
reference
-
https://learn.microsoft.com/zh-cn/security/compass/privileged-access-access-model
3. 凭证: Tokens
Tokens
令牌(Tokens)是用于 SSO 的身份验证。它们允许攻击者在本地或通过网络冒充用户的安全上下文。
如何获得和使用的?
Selmpersonate Privilege 权限允许从进程中复制令牌。然后可以使用新令牌作为新用户进行身份验证。目标用户或服务必须已登录或正在运行进程。
每个登录 Windows的用户和进程都有一个关联的安全令牌。令牌包含帐户的安全上下文和特权。
常见的令牌(Tokens)类型:
-
主令牌(Primary Token):每一个进程都具有一个唯一的主令牌,进行通过主令牌被开启
-
模拟令牌(Impersonation Token):在默认的情况下,当线程被开启的时候,所在进程的主令牌会自动附加到当前线程上,作为线程的安全上下文。而线程可以运行在另一个非主令牌的访问令牌下执行,而这个令牌被称为模拟令牌。而指定线程的模拟令牌的过程被称为模拟。
-
委托令牌(Delegation Token):允许在本地和远程系统上模拟客户端的安全上下文。
模拟令牌(Impersonation Token) 和 委托令牌(Delegation Token)的特殊令牌,应用于访问控制和单点登录 (SSO)。
模拟令牌(Impersonation Token)允许进程在不同的帐户安全上下文中运行。
委托令牌(Delegation Token)甚至可以跨网络资源促进身份验证。通常出现在交互式登录期间,但某些非交互式 Microsoft 服务也依赖于委托令牌。
常用工具
Incognito、Metasploit、PowerShell、Mimikatz
令牌冒用
Windows 2003SP1 以后仅当帐户登录时才会出现令牌。在管理员通过 RDP 连接但在没有注销的情况下关闭 RDP 客户端,系统中也会缓存令牌。
如果系统上存在令牌,则具有 Selmpersonate Privilege权限(或具有添加它所需的管理员或 SYSTEM 特权)的用户可以提取令牌并重用它来执行各种任务,例如本地权限提升、添加用户或管理组成员身份,映射远程管理员共享或运行 PsExec(仅限委托令牌)。
攻击者通常使用此技术将权限从本地管理员提升到域管理员。该攻击在无法从 LSASS 中提取哈希的情况下特别有用,例如,当在 Win8.1+ 系统时LSASS 为受保护进程时。
缓解措施
委托令牌是最危险的,委托令牌仅在交互式登录会话期间出现,攻击者可以隐藏起来等待高权限帐户登录。
-
防止管理员帐户泄露
-
停止使用高权限帐户的远程交互会话
-
正确终止 RDP 会话
-
Win8.1+ 强制使用受限管理员帐户(Restricted Admin)
-
Win10 远程凭证保护(Remote Credential Guard)
-
域保护用户安全组(Domain Protected Users Security Group)中帐户不会创建委托令牌
-
活动目录(Active Directory)中指定高权限帐户为不可委托
保护敏感令牌的最佳方法是不用高权限帐户以交互方式(控制台登录、RDP 和 Runas )登录系统,并阻止攻击者获得可能允许令牌窃取的本地管理权限。
如果不正确终止的 RDP 会话且未注销,则令牌可以在该会话仍然存在时保留在系统上。可在组策略配置断开连接的会话设置时间限制,有效地终止 RDP 会话,在很大程度上消除了窃取委托令牌的能力。
Windows 8.1+ 中引入强制使用受限管理员帐户(Restricted Admin)可防止哈希和令牌在 RDP 等交互式登录期间用于远程系统上。
高权限帐户也可以在活动目录(Active Directory)中指定为不可委托,此操作会导致这些帐户的某些功能不可用(某些基础架构依赖于令牌)。
Windows 10/Server 2016 中引入远程凭证保护(Remote Credential Guard)旨在修复受限管理员帐户(Restricted Admin)的一些问题,包括第三方资源的委托问题和非管理员帐户的保护。
Windows 8.1+ 中引入域保护用户安全组(Domain Protected Users Security Group)的成员不会创建委托令牌,即使在交互式会话期间也是如此。同样,这些帐户将无法用于所有管理功能,但这个组是通用域管理员级别帐户的好方案。
reference
-
https://dl.packetstormsecurity.net/papers/presentations/mwri_security-implications-of-windows-access-tokens_2008-04-14.pdf
-
https://www.sans.org/blog/protecting-privileged-domain-accounts-safeguarding-access-tokens/
4. 凭证: Cached Credentials
Cached Credentials
存储的域凭证允许在不访问域控制器时登录。大多数系统默认缓存最后 10 个登录哈希。
如何获得和使用的?
缓存的凭证必须破解。哈希是加盐和区分大小写的,这使得解密非常慢。这些哈希不能用于传递哈希(PtH)攻击。
在域环境中,域控制器 (DC) 负责对帐户进行身份验证。但是如果系统离线或无法与域控制器 (DC) 通信会发生什么?为了防止出现用户无法登录系统的情况,Windows 默认缓存最后10个登录哈希(在 Server 2008 中增加到了 25 个)。
一般情况下,应该不到10个帐户登录到工作站。凭证可以在此缓存中保留很长时间。
缓存的域凭证存储在 SECURITYCache 键的安全注册表配置单元中。访问保存的哈希值需要管理员(或系统)权限,Windows 系统,哈希值采用 mscash2 格式。由于数据保存在注册表中,这些哈希值会无限期地保留,即使在重新启动后也是如此。
常用工具
cachedump、Metasploit、PWDumpX、creddump、AceHash
暴力破解
攻击者希望在过去的某个时间,域管理员(或类似的高特权帐户)以交互方式登录系统并无限期地存储他们的凭证。
mscash2 哈希是加密的,因此不能用于传递哈希攻击(PtH)。它们也比 NT 哈希更安全,包括用户名的哈希盐来抵御攻击。John the Ripper 和 hashcat 密码破解工具可以暴力破解这些哈希值,但解密可能会很慢。
注,有很多离线凭证提取工具,包括 Mimikatz,它需要对 LSASS 进程进行转储。Cachedump 和 PWDumpX,在 WinXP 之后的系统上提取缓存凭据时似乎存在问题。
转储本地哈希和缓存凭证之间的区别
Pwdump用于从 SAM 配置单元中提取哈希值,SAM中的哈希值为该系统的本地帐户。
Cachedump用于提取缓存的凭证。这些哈希值为域凭证并且不受本地帐户限制。缓存的凭证与帐户用户名混合在一起,因此必须通过暴力破解。
Cachedump以正确的格式输出,提供给 John the Ripper 密码破解工具(格式名为 mscash2)。虽然缓存凭证需要更长的时间破解,但很有可能提供攻击者高特权域帐户。
缓解措施
-
防止管理员帐户泄露
-
限制缓存登录帐户的数量
-
SOFTWAREMicrosoftWindows NTCurrent VersionWinlogon(缓存登录计数值)
-
要求密码长度和复杂性规则
-
域保护用户安全组(Domain Protected Users Security Group)中的帐户不会缓存凭证
防止攻击者获得管理员权限会直接缓解从安全配置单元中获取缓存凭证的能力,但是提升至管理员权限很容易。
常见缓解措施是减少注册表项 SOFTWAREMicrosoftWindows NTCurrent VersionWinlogon 中缓存登录的默认数量。默认情况下,Windows 工作站操作缓存最后 10 次登录,一些服务器缓存最多 25次,一些组织将此值设置为0或1。
Windows 8.1 引入域受保护用户安全组(Domain Protected Users Security Group)的提供了一些不可配置的凭证保护。其中一项保护措施是不会为该组的成员缓存凭证,该组专为高权限帐户而设计,是减少凭证窃取的重要一步。
reference
-
https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/hh994565(v=ws.11)?redirectedfrom=MSDN
-
https://github.com/CiscoCXSecurity/creddump7
-
https://learn.microsoft.com/en-US/troubleshoot/windows-server/user-profiles-and-logon/cached-domain-logon-information
-
https://www.stigviewer.com/stig/windows_server_20122012_r2_domain_controller/
To be Continue ……
原文始发于微信公众号(TahirSec):Windows | 凭证窃取与缓解措施(一)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论