本文章为Atomic Red Team系列文章,本篇文章内容为T1003-操作系统凭证转储。本文的目的旨在帮助安全团队开展安全测试,发现安全问题,切勿将本文中提到的技术用作攻击行为,请切实遵守国家法律法规。
重要声明: 本文档中的信息和工具仅用于授权的安全测试和研究目的。未经授权使用这些工具进行攻击或数据提取是非法的,并可能导致严重的法律后果。使用本文档中的任何内容时,请确保您遵守所有适用的法律法规,并获得适当的授权。
T1003.005 - 操作系统凭证转储:缓存的域凭证
来自ATT&CK的描述
攻击者可能会尝试访问缓存的域凭证,这些凭证用于在域控制器不可用时进行身份验证。(引用:微软 - 缓存凭证)
在Windows Vista及更新版本中,哈希格式为DCC2(域缓存凭证版本2)哈希,也称为MS - Cache v2哈希。(引用:PassLib mscache)默认缓存的凭证数量因系统而异,并且可以在每个系统上进行更改。这种哈希不支持传递哈希类型的攻击,而是需要通过密码破解来恢复明文密码。(引用:ired mscache)
在Linux系统中,活动目录凭证可以通过诸如系统安全服务守护进程(SSSD)或Quest身份验证服务(以前称为VAS)等软件维护的缓存进行访问。缓存的凭证哈希通常位于/var/lib/sss/db/cache.[domain].ldb
(对于SSSD)或/var/opt/quest/vas/authcache/vas_auth.vdb
(对于Quest)。攻击者可以使用诸如tdbdump
之类的实用工具,对这些数据库文件进行操作,转储缓存的哈希,并通过密码破解来获取明文密码。(引用:将MimiKatz引入Unix)
拥有SYSTEM权限或使用sudo权限时,可以使用Mimikatz、Reg和secretsdump.py(用于Windows系统),或Linikatz(用于Linux系统)等工具来提取缓存的凭证。(引用:将MimiKatz引入Unix)
注意:Windows Vista的缓存凭证是使用PBKDF2派生的。(引用:PassLib mscache)
原子测试
原子测试#1 - 通过Cmdkey转储缓存凭证
通过内置的Windows实用工具cmdkey.exe列出当前存储在主机上的凭证。使用Cmdkey列出的凭证仅与当前用户相关,并且密码在存储后不会显示。
-
参考链接: -
https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/cmdkey -
https://www.peew.pw/blog/2017/11/26/exploring-cmdkey-an-edge-case-for-privilege-escalation - 支持的平台:Windows
- 自动生成的GUID:56506854 - 89d6 - 46a3 - 9804 - b7fde90791f9
- 攻击命令:使用
command_prompt
运行!
cmdkey /list
命令解释
cmdkey /list
是 Windows 操作系统下命令提示符(CMD)或 PowerShell 中可用的一个命令,它属于 cmdkey
工具的一部分。cmdkey
是一个用于管理存储在 Windows 凭据管理器中的凭据的命令行工具,而 /list
是该工具的一个参数,用于列出当前存储在系统中的所有凭据信息。
能得到的内容
运行 cmdkey /list
命令后,会输出一系列存储在 Windows 凭据管理器中的凭据信息,通常包含以下几类内容:
- 目标名称(Target)
表示凭据所关联的目标,这可能是一个服务器名称、共享资源名称、网站 URL 或者其他身份验证目标。例如,可能会显示 Domain:target=contoso.com
,表明该凭据用于访问contoso.com
相关的资源。 - 类型(Type)
说明凭据的类型,常见的类型有: Domain Password
用于域环境的用户名和密码凭据。 Generic Password
通用的用户名和密码凭据,可用于各种应用程序或服务。 Domain Certificate
用于域环境的证书凭据。 - 用户(User)
显示与凭据关联的用户名。
以下是一个示例输出:
列出的目标:
目标: Domain:target=contoso.com
类型: Domain Password
用户: CONTOSOjohndoe
目标: Generic:target=app.example.com
类型: Generic Password
用户: user123
常见用途
cmdkey /list
命令主要有以下几个常见用途:
- 查看凭据信息
可以让用户了解当前系统中存储了哪些凭据,以及这些凭据是用于哪些目标的。这对于管理个人或企业环境中的多组凭据非常有用。 - 故障排除
当在访问某些网络资源、共享文件夹或远程服务器时遇到身份验证问题,通过查看存储的凭据,可以确认是否存在错误的凭据或者是否缺少必要的凭据。 - 安全审计
系统管理员可以使用该命令来审计系统中存储的凭据,确保只有授权的凭据被存储,并且没有不必要的敏感信息被保存。 - 清理凭据
在确认某些凭据不再需要后,可以结合 cmdkey /delete
命令来删除这些凭据,以提高系统的安全性。例如,cmdkey /delete:Domain:target=contoso.com
可以删除与contoso.com
相关的凭据。
T1003.006 - 操作系统凭证转储:DCSync
来自ATT&CK的描述
攻击者可能会尝试通过滥用Windows域控制器的应用程序编程接口(API)来访问凭证和其他敏感信息。(引用:微软DRSR 2017年12月;微软GetNCCChanges;Samba DRSUAPI;Wine API samlib.dll)他们利用一种名为DCSync的技术,模拟从远程域控制器进行的复制过程。
管理员、域管理员和企业管理员组的成员,或者域控制器上的计算机账户,能够运行DCSync从活动目录中提取密码数据。(引用:ADSecurity Mimikatz DCSync)这些数据可能包括诸如KRBTGT和管理员等潜在有用账户的当前和历史哈希值。然后,这些哈希值可用于创建票据,以用于传递票据攻击。(引用:Harmj0y Mimikatz和DCSync)或者如在账户操纵中所述,用于更改账户密码。(引用:InsiderThreat ChangeNTLM 2017年7月)
DCSync功能已包含在Mimikatz的“lsadump”模块中。(引用:GitHub Mimikatz lsadump模块)Lsadump还包括NetSync,它通过一种旧版复制协议执行DCSync。(引用:微软NRPC 2017年12月)
原子测试
原子测试#1 - DCSync(活动目录)
这是一种活动目录攻击方式,允许在不访问内存或检索NTDS数据库的情况下获取账户信息。它通过复制协议对远程Windows域控制器起作用。所需权限:默认情况下为域管理员或域控制器账户,或者具有所需权限的任何其他账户。
- 支持的平台:Windows
- 自动生成的GUID:129efd28 - 8497 - 4c87 - a1b0 - 73b9a870ca3e
- 输入参数:
|
|
|
|
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
- 攻击命令:使用
command_prompt
运行!
"lsadump::dcsync /domain:#{domain} /user:#{user}@#{domain}" "exit" {mimikatz_path}
- 依赖项:使用
powershell
运行! - 描述:Mimikatz执行文件必须存在于磁盘上的指定位置(#{mimikatz_path})
- 检查先决条件命令:
$mimikatz_path = cmd /c echo #{mimikatz_path}
if (Test-Path $mimikatz_path) {exit 0} else {exit 1}
- 获取先决条件命令:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
IEX (iwr "https://raw.githubusercontent.com/redcanaryco/invoke-atomicredteam/master/Public/Invoke-FetchFromZip.ps1" -UseBasicParsing)
$releases = "https://api.github.com/repos/gentilkiwi/mimikatz/releases"
$zipUrl = (Invoke-WebRequest $releases | ConvertFrom-Json)[0].assets.browser_download_url | where-object { $_.endswith(".zip") }
$mimikatz_exe = cmd /c echo #{mimikatz_path}
$basePath = Split-Path $mimikatz_exe | Split-Path
Invoke-FetchFromZip $zipUrl "x64/mimikatz.exe" $basePath
原子测试#2 - 运行DSInternals Get-ADReplAccount
以下原子测试将运行DSInternals中的Get-ADReplAccount。成功执行后,域和凭证将显示在标准输出中。
- 参考资料:CrowdStrike StellarParticle;https://www.dsinternals.com/en/retrieving-active-directory-passwords-remotely/
- 支持的平台:Windows
- 自动生成的GUID:a0bced08 - 3fc5 - 4d8b - 93b7 - e8344739376e
- 输入参数:
|
|
|
|
---|---|---|---|
|
|
|
|
- 攻击命令:使用
powershell
运行!
Get-ADReplAccount -All -Server #{logonserver}
Get-ADReplAccount -All -Server #{logonserver}
是一条 PowerShell 命令,主要用于在 Active Directory(AD)环境中操作,下面为你详细解释该命令:
命令概述
该命令使用了 Get-ADReplAccount
这个 PowerShell cmdlet(命令行工具),其主要功能是从 Active Directory 复制拓扑中检索有关账户复制状态的信息。
参数解释
-All:
-
此参数表明要获取所有账户的复制状态信息。若不使用该参数, Get-ADReplAccount
可能只会返回部分账户或者特定筛选条件下的账户信息。使用-All
能确保返回 Active Directory 中所有账户的相关复制状态数据。 -Server #{logonserver}:
-Server
参数用于指定要连接的 Active Directory 域控制器。 #{logonserver}
是一个占位符,在实际使用时,需要替换为具体的域控制器的名称或者 IP 地址。指定服务器后,该命令就会连接到这个特定的域控制器来执行账户复制状态信息的查询操作。
命令用途
在大型企业的 Active Directory 环境中,账户信息会在多个域控制器之间进行复制,以保证数据的一致性和可用性。不过,由于网络问题、权限问题或者其他因素,账户复制可能会出现故障。Get-ADReplAccount -All -Server #{logonserver}
命令可以帮助管理员:
- 监控复制状态
查看所有账户在指定域控制器上的复制状态,及时发现复制失败或者延迟的账户。 - 故障排查
当出现账户登录问题或者账户信息不一致的情况时,通过查看账户复制状态,有助于定位问题是出在复制环节还是其他方面。 - 维护 Active Directory 健康
定期运行该命令,能确保 Active Directory 中的账户信息在各个域控制器之间准确无误地复制,维持整个 Active Directory 环境的稳定性。
示例代码及输出示例
假设 #{logonserver}
替换为 dc01.contoso.com
,以下是示例代码:
Get-ADReplAccount -All -Server dc01.contoso.com
DistinguishedName : CN=John Doe,OU=Users,DC=contoso,DC=com
Name : John Doe
ObjectClass : user
ObjectGUID : 12345678-1234-1234-1234-123456789012
ReplicationState : Normal
DistinguishedName : CN=Jane Smith,OU=Users,DC=contoso,DC=com
Name : Jane Smith
ObjectClass : user
ObjectGUID : 09876543-4321-4321-4321-098765432109
ReplicationState : Error
Normal
(正常)、Error
(错误)等,方便管理员判断账户复制是否正常。- 依赖项:使用
powershell
运行! - 描述:必须安装DSInternals
- 检查先决条件命令:
$RequiredModule = Get-Module -Name DSInternals -ListAvailable
if (-not $RequiredModule) {exit 1}
if (-not $RequiredModule.ExportedCommands['DSInternals']) {exit 1} else {exit 0}
- 获取先决条件命令:
Install-Module -Name DSInternals -ScopeUserUser -Force
原文始发于微信公众号(网空安全手札):T1003.005、006 - 缓存的域凭证、DCSync
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论