带有影子快照的远程 Windows 凭据转储:利用和检测

admin 2025年6月13日20:28:41评论8 views字数 8497阅读28分19秒阅读模式
带有影子快照的远程 Windows 凭据转储:利用和检测

2025年6月11日,安全研究者Peter Gabaldon在其X帖子(https://x.com/PedroGabaldon/status/1932698670622806214)中披露了一种创新的网络攻击技术,该技术通过利用Volume Shadow Copy Service(VSS)漏洞,实现在无需执行目标机器代码的情况下远程窃取Windows本地凭据(SAM)。该方法自2024年5月起被整合至Impacket的secretsdump工具,利用GMT时间戳通过SMB协议访问影子快照中的注册表文件(SAM、SYSTEM、SECURITY),巧妙绕过传统检测机制。作者提供的概念验证(PoC)表明,借助ETW提供程序(WMI和SMB-SERVER),可通过特定操作日志识别此类攻击。结合2024年Windows驱动相关攻击激增23%的背景(cybersecuritynews.com,2025-05-02),此技法凸显了凭据窃取风险的加剧,并对主流EDR解决方案的有效性提出了挑战。本文深入探讨了这一技术原理、实践步骤及防御策略,值得安全从业者高度关注。

介绍

本文旨在描述一种利用影子快照远程转储 Windows 本地凭据 (SAM) 的技术。使用影子快照可以直接通过 SMB 访问所需的注册表配置单元 (SAM、SYSTEM 和/或 SECURITY),而无需在目标计算机上执行代码。

从防御者的角度来看,本文还解释了如何检测此类活动。为了演示这一点,我们开发了一个概念验证 (PoC) 工具,展示了如何使用 Windows 事件跟踪 (ETW) 来发现此类恶意行为。

此技术已添加到Impacket 的 secretsdump中,可与选项— use-remoteSSMethod一起使用。

借助 WMI 和 SMB-SERVER 提供程序,可以通过 ETW 进行检测。我们构建了一个 PoC 来演示这种检测方法。检测此技术应是当务之急,因为它允许攻击者远程窃取 Windows 本地凭据,而无需在受害主机上执行任何代码。

理论

首先,需要明确的是,访问 Windows 本地凭据时的一个“问题”是,即使使用最高权限,也无法直接访问磁盘中必要的配置单元。这是因为这些配置单元映射到注册表中,因此它们在 Windows 内部使用。

因此,传统的 Windows 凭据转储工具依赖于注册表来转储这些信息。例如,使用reg save命令从注册表备份,或直接访问注册表中的 SAM。其他一些工具也使用文件系统驱动程序直接访问磁盘上的配置单元,例如pwdump7 ( https://www.openwall.com/passwords/windows-pwdump )。

带有影子快照的远程 Windows 凭据转储:利用和检测

磁盘上的这些配置单元包含以REGF格式映射到注册表结构的数据,Windows 会解析这些数据并将其加载到注册表中。

  • https://github.com/libyal/libregf/blob/main/documentation/Windows%20NT%20Registry%20File%20(REGF)%20format.asciidoc

  • https://github.com/PeterGabaldon/WhatAboutSAM/blob/main/WhatAboutSAM/WhatAboutSAM/shadowMethod.cpp#L168

但是,创建影子快照时会发生什么?

创建影子快照后,所有文件(包括磁盘上包含 Windows 凭据的注册表配置单元)均可访问,但 Windows 不会使用这些文件,因为使用的是“真实”的实时文件。需要特别指出的是,影子快照基于写时复制 (CoW) 技术,因此除非在“实时”分区中进行修改,否则文件内容保持不变。

手动方法

简单测试一下:

创建阴影快照

wmic shadowcopy callcreate Volume='C:'

获取列出它们的路径

vssadmin list shadows[...]Contents of shadow copy setID: {5590bae6-9edc-4012-b58a-5ff54e937cae}Contained 1 shadow copies atcreationtime03/06/202517:12:36Shadow Copy ID: {6efd3825-90a8-465e-8205-f445f2775769}Original Volume: (C:)?Volume{1d680c6d-69f7-4ad4-8177-b8240d0cf94c}Shadow Copy Volume: ?GLOBALROOTDeviceHarddiskVolumeShadowCopy2[...]

访问 Shadow Snapshot 并导航至WindowsSystem32Config。最简单的方法之一是使用 7z,但在最新版本中无法使用。

带有影子快照的远程 Windows 凭据转储:利用和检测

Nirsoft有一个名为ShadowCopyView的工具也可以使用。

  • https://www.nirsoft.net/utils/shadow_copy_view.html

带有影子快照的远程 Windows 凭据转储:利用和检测

这样,就可以访问和泄露这些配置单元并转储凭据。

SMB

这个想法是,如果可以使用影子快照直接访问磁盘中的安全配置单元,那么是否可以通过 SMB 进行远程访问?

答案是肯定的,而且很久以前就有记录了。

  • https://www.4n6k.com/2017/02/forensics-quickie-accessing-copying.html

SMB 支持一种指定过去访问的格式。在之前的版本中,使用“ GMT 格式”的时间戳可以通过 SMB 远程访问文件系统。

  • https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-smb/bffc70f9-b16a-453b-939a-0b6d3c9263af

从正确的 Microsoft 文档中提取:

例如,请求文件 \servermydocsreviewsfeb01.doc 在 2001 年 3 月 30 日下午 2:44:00 UTC 的先前版本, 其 指定格式如下:

\servermydocsreviews@GMT-2001.03.30-14.44.00feb01.doc

因此,使用GMT格式可以远程访问SAM、SYSTEM、SECURITY等。

Impacket 已实现 SMB 调用,以列出过去可用的访问权限:FSCTL_SRV_ENUMERATE_SNAPSHOTS(https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-smb/5a43eb29-50c8-46b6-8319-e793a11f6226)

  • https://github.com/fortra/impacket/blob/master/impacket/smbconnection.py#L798

手册示例

以下是手动利用它的示例。

首先,你必须远程创建影子快照。可以使用wmic 命令来完成。

C:Userspeter>wmic /node:192.168.24.153 /user:peter /password:[***] shadowcopy call create Volume='C:'Executing (Win32_ShadowCopy)->create()Method execution successful.Out Parameters:instance of __PARAMETERS{        ReturnValue = 0;        ShadowID = "{037BE7D1-2915-422A-B961-13065D469BE7}";};C:Userspeter>

在远程系统中,您将看到已创建影子快照。

带有影子快照的远程 Windows 凭据转储:利用和检测

现在,它可以远程访问了。由于此文件创建于 2025 年 6 月 3 日上午 9:02:45(UTC 时间 16:02:45),因此远程 GMT 路径将为 @GMT-2025.06.03-16.02.45。请注意,必须使用 UTC 日期。

带有影子快照的远程 Windows 凭据转储:利用和检测

从这里可以下载 SAM 、SYSTEM 等等。

带有影子快照的远程 Windows 凭据转储:利用和检测

自动化

为了实现自动化,Impacket 的 secretsdump中添加了一个新选项。这些更改已于 2024 年 5 月合并。

  • https://github.com/fortra/impacket/pull/1719

基本上,借助 Impacket,同样的过程可以通过 Python 执行。远程打开WMI Shadow Snapshot,然后执行 create 方法,之后通过 SMB 下载 SAM/SYSTEM/SECURITY,并通过 WMI 删除 Shadow Snapshot。

要使用此方法,只需将–use-remoteSSMethod添加到secretsdump即可。例如:

impacket-secretsdump -use-remoteSSMethod “./Admin:1234@192.168.1.161

您还可以使用–remoteSS-remote- volume 修改正在使用的远程卷(默认为“C:”)。此外,还可以使用–remoteSS-local-path修改本地下载 SAM/SYSTEM/SECURITY 的路径(默认为“.”)。

自从它合并到secretsdump以来,我们一直在攻击练习中使用此选项,而不会在顶级产品和顶级 EDR 中生成任何警报。

与您的安全产品进行测试并与我们分享您的结果。

带有影子快照的远程 Windows 凭据转储:利用和检测

检测

现在的问题是,如何检测它?

为此,我们开发了一个基于 ETW 的 PoC 工具,用于演示如何检测此类恶意行为。或许还有其他方法,但在测试了其他方法(例如 Windows 事件)后,我们决定使用 ETW。

  • https://github.com/I3IT/Detect.Remote.ShadowSnapshot.Dump

IOA

在开发防御工具之前,需要明确的一点是,我们想要检测的恶意行为指标是什么。在本例中,以下行为可以清晰地指示此类攻击:

  • 通过 WMI 创建影子快照(调用 Win32_ShadowCopy::Create 方法)

  • 突然通过 SMB 读取 SAM/SYSTEM/SECURITY

  • 阴影也会被删除。可选指示器,加上另外两个就足够了。

为了获取该日志,可以使用以下 ETW 提供程序:

  • Microsoft-Windows-WMI-活动 {1418EF04-B0B4-4623-BF7E-D74AB47BBDAA}

  • Microsoft-Windows-SMB服务器 {D48CE617-33A2-4BC3-A5C7-11AA4F29619E}

这两个 ETW 提供商提供了足够的信息,以便能够检测上述指标。

关键点在于检测解析这两个 ETW 提供程序所消费的事件后所描述的操作。

if (wcscmp(propertyName, L"Operation") == 0 && wcscmp(value, L"Start IWbemServices::ExecMethod - root\cimv2 : Win32_ShadowCopy::Create") == 0) {std::wcout << "WARNING!!! POSSIBLE REMOTE DUMP USING SHADOW SNAPSHOT. A SHADOW SNAPSHOT HAS BEEN CREATED VIA WMI" << std::endl;                possible_dumping_detected = true;            }if (wcscmp(propertyName, L"FileName") == 0 && (wcscmp(value, L"System32\config\SAM") == 0 || wcscmp(value, L"System32\config\SYSTEM") == 0 || wcscmp(value, L"System32\config\SECURITY") == 0) && possible_dumping_detected) {std::wcout << "CRITICAL WARNING!!! REMOTE DUMP USING SHADOW SNAPSHOT IOA DETECTED. " << value << " DOWNLOADED REMOTELY VIA SMB" << std::endl;                dumping_detected = true;            }if (wcscmp(propertyName, L"Operation") == 0 && wcsstr(value, L"Start IWbemServices::DeleteInstance - root\cimv2 : Win32_ShadowCopy.ID=") != nullptr && dumping_detected) {std::wcout << "CRITICAL WARNING!!! REMOTE DUMP USING SHADOW SNAPSHOT IOA DETECTED. THE SHADOW SNAPSHOT HAS BEEN DELETED" << std::endl;                dumping_detected = false;            }

在此处阅读完整的源代码:https://github.com/I3IT/Detect.Remote.ShadowSnapshot.Dump/blob/main/Detect.Remote.ShadowSnapshot.Dump/Main.cpp

带有影子快照的远程 Windows 凭据转储:利用和检测

现在,当使用此方法时,该工具会检测所描述的指标并发出警报。

带有影子快照的远程 Windows 凭据转储:利用和检测
带有影子快照的远程 Windows 凭据转储:利用和检测

下面显示了一些捕获后解析的完整示例事件。

WMI Method Invoked Event Captured! Event ID: 11Provider ID: 337178372-45236-17955Event Properties:Property: CorrelationId Value: {00000000-0000-0000-0000-000000000000}Property: GroupOperationId Value: 1492Property: OperationId Value: 1495Property: Operation Value: Start IWbemServices::ExecMethod - rootcimv2 : Win32_ShadowCopy::CreateProperty: ClientMachine Value: LocalProperty: ClientMachineFQDN Value:Property: User Value: DESKTOP-81G2RNNpeterProperty: ClientProcessId Value: 2640Property: ClientProcessCreationTime Value: 0Property: NamespaceName Value: \.rootcimv2Property: IsLocal Value: 1WMI Method Invoked Event Captured! Event ID: 11Provider ID: 337178372-45236-17955Event Properties:Property: CorrelationId Value: {00000000-0000-0000-0000-000000000000}Property: GroupOperationId Value: 1500Property: OperationId Value: 1501Property: Operation Value: Start IWbemServices::DeleteInstance - rootcimv2 : Win32_ShadowCopy.ID="{745EBABB-2D5F-486D-89A3-FC1BCCB93121}"Property: ClientMachine Value: LocalProperty: ClientMachineFQDN Value:Property: User Value: DESKTOP-81G2RNNpeterProperty: ClientProcessId Value: 2640Property: ClientProcessCreationTime Value: 0Property: NamespaceName Value: \.rootcimv2Property: IsLocal Value: 1SMB SERVER Provider Event Captured! Event ID: 8Event Properties:Property: SessionId Value: 2c000000001dProperty: ProcessId Value: 0Property: TreeId Value: 1Property: MessageId Value: 9Property: MasterMessageId Value: ffffffffffffffffProperty: Command Value: [Unsupported Type]Property: CreditsRequested Value: [Unsupported Type]Property: Flags Value: 0Property: SecurityFlags Value: [Unsupported Type]Property: RequestedOplockLevel Value: [Unsupported Type]Property: ImpersonationLevel Value: 2Property: CreateFlags Value: 0Property: RootDirectoryFid Value: 0Property: DesiredAccess Value: 1Property: FileAttributes Value: 0Property: ShareAccess Value: 1Property: CreateDisposition Value: 1Property: CreateOptions Value: 40Property: NameLength Value: [Unsupported Type]Property: FileName Value: System32configSAMProperty: CreateContextsCount Value: 1Property: LeaseKey Value: {0-0-0-00-000000}Property: LeaseLevel Value: 0Property: ConnectionGUID Value: {a33e9acb-584e-0-144e-3fa34e58db1}Property: SessionGUID Value: {a33e9acb-584e-0-184e-3fa34e58db1}Property: TreeConnectGUID Value: {a33e9acb-584e-1-7c4e-3fa34e58db1}

结论

在过去一年半的时间里,我们在多次攻击演习中都使用了这种技术。我们鼓励您使用自己的安全产品进行测试,并分享结果。

参考

https://github.com/I3IT/Detect.Remote.ShadowSnapshot.Dump

https://github.com/fortra/impacket/pull/1719

https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-smb/5a43eb29-50c8-46b6-8319-e793a11f6226

https://github.com/fortra/impacket/blob/master/impacket/smbconnection.py#L798

https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-smb/bffc70f9-b16a-453b-939a-0b6d3c9263af

https://www.4n6k.com/2017/02/forensics-quickie-accessing-copying.html

https://www.nirsoft.net/utils/shadow_copy_view.html

https://github.com/libyal/libregf/blob/main/documentation/Windows%20NT%20Registry%20File%20(REGF)%20format.asciidoc

https://github.com/PeterGabaldon/WhatAboutSAM/blob/main/WhatAboutSAM/WhatAboutSAM/shadowMethod.cpp#L168

原文始发于微信公众号(Ots安全):带有影子快照的远程 Windows 凭据转储:利用和检测

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月13日20:28:41
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   带有影子快照的远程 Windows 凭据转储:利用和检测https://cn-sec.com/archives/4162233.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息