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 )。
磁盘上的这些配置单元包含以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 atcreationtime: 03/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,但在最新版本中无法使用。
Nirsoft有一个名为ShadowCopyView的工具也可以使用。
-
https://www.nirsoft.net/utils/shadow_copy_view.html
这样,就可以访问和泄露这些配置单元并转储凭据。
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>
在远程系统中,您将看到已创建影子快照。
现在,它可以远程访问了。由于此文件创建于 2025 年 6 月 3 日上午 9:02:45(UTC 时间 16:02:45),因此远程 GMT 路径将为 @GMT-2025.06.03-16.02.45。请注意,必须使用 UTC 日期。
从这里可以下载 SAM 、SYSTEM 等等。
自动化
为了实现自动化,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 中生成任何警报。
与您的安全产品进行测试并与我们分享您的结果。
检测
现在的问题是,如何检测它?
为此,我们开发了一个基于 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
现在,当使用此方法时,该工具会检测所描述的指标并发出警报。
下面显示了一些捕获后解析的完整示例事件。
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 凭据转储:利用和检测
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论