什么是 Vshadow?
Vshadow(vshadow.exe)是用于管理卷影副本的命令行实用程序。此工具包含在Windows SDK 中,并由微软签名(稍后会详细介绍)。
Vshadow 具有许多功能,包括执行脚本和调用支持卷影子快照管理的命令的功能。毫不奇怪,这些功能可能会被滥用于特权级的防御规避,权限持久性和文件提取。
在这篇博文中,我们将讨论 Vshadow 命令执行,自动启动持久性以及使用 Vshadow 提取敏感文件副本并提取 Active Directory(AD)数据库来进行离线 HASH 转储和密码破解。
命令执行
使用 Vshadow 执行命令取决于与影子复制操作的 " 成功 " 交互(例如,创建快照,移除快照,对快照执行某些操作等)。 Vshadow.exe 支持 -exec 参数,该参数可用于执行二进制文件(.exe)或脚本(.bat/.cmd)。 -exec 参数不支持命令参数,因此有效载荷执行需要在这些限制的上下文中进行包装。
在继续操作之前,让我们考虑一些命令执行的其他要求。 首先,我们需要在机器上拥有一定的权限(例如管理员),因为处理卷快照(并调用卷影服务)被视为敏感操作。 其次,我们需要将 Vshadow 可执行文件放到目标机器上。 如果 Windows SDK 已经安装,那么我们所要做的就是找到磁盘上二进制文件的路径。 否则,我们必须将其上传到目标主机上。 最后,我们需要确保我们的有效载荷如前面所说的那样被封装起来。 在本文的命令执行示例中,我们将简单地使用 notepad.exe 作为我们的有效载荷。
用 vshadow.exe 调用一个有效载荷并不完全是最隐秘的方法,但我们可以通过这种方式来操作该工具,以最大限度地减少我们的入侵痕迹。 我们要执行的命令的基本结构如下:
vshadow.exe -nw -exec=
指定 -nw 允许我们在不调用卷影复制写入的情况下创建卷影副本。 实际上,这是一个非持久性卷影副本,它不会在 " 物理 " 磁盘上留下证据(* 请注意,这并不一定会阻止检测卷影副本的创建,因为我们仍然是在模拟这个过程)。 现在,我们运行以下命令:
vshadow.exe -nw -exec=c:windowssystem32notepad.exe c:
输出的内容可以在下图中看到:
在此上下文中成功执行 Vshadow 将创建一个 ' 假的 ' 影子副本集,然后启动由 -exec 参数指定的有效载荷(notepad.exe)。 在这里发生了一些有趣的事情,可能有助于防御和取证人员……
· 直到子进程完成执行,Vshadow.exe 才会完成执行。
· 有效载荷(notepad.exe)是 vshadow.exe 的子进程。
· Vshadow 的成功执行将启动卷影服务(VSS),如系统事件 ID 7036 所示,并调用 VSSVC.exe 进程。
自动启动持久性和防御逃避
由于 Vshadow 是一个带符号的二进制文件,并具有命令执行能力,因此我们有一个潜在的作为逃避手段的候选人—— AutoRuns(某种程度上)。 例如,让我们通过输入以下命令为我们的 ' 邪恶 ' 的有效载荷添加持久性(通过 Registry Run Key):
reg add HKLMSOFTWAREMicrosoftWindowsCurrentVersionRun /v VSSBackup /t REG_EXPAND_SZ /d "C:Program Files ( x86 ) Windows Kits10bin10.0.16299.0x64vshadow.exe -nw -exec=c:windowssystem32notepad.exe c:"
在 AutoRuns 中,当过滤 "Microsoft Entries" 时,我们不会看到我们的登录记录,如下图所示:
但是,如果我们取消选择 "Microsoft Entries" 并启用 "Windows Entries",我们将看到我们的持久性机制的记录:
这种可见性的原因是由于 vshadow.exe 没有用 Windows 证书签名。 但是,如果 vshadow.exe 被放置到磁盘上某个更好的文件位置并且名称足够迷惑人,那么该 Autoruns 记录仍可能相当好的 " 融入 " 到所有记录中。 将条目展开查看可能会也可能不会迷惑一个安全分析师:
敏感文件提取 – AD 数据库
由于我们可以使用 VSS 创建快照,因此我们使用此实用程序在域控制器(DC)上提取 Active Directory 数据库( ntds.dit ),然后使用 secretsdump.py 离线转储散列。
首先,我们将 vshadow.exe 复制到我们的 DC(本例中为 Windows 2K12),并使用 -p 参数创建 "c:" 的持久性卷影副本(此处无写入),命令如下:
vshadow.exe -p -nw C:
请注意以下屏幕截图中的 Shadow Copy Set ID(UUID)和 Volume Name,因为这些将在后续命令中使用:
其次,我们使用 Volume 名称复制影子副本中的 AD 数据库,如下所示:
copy \?GLOBALROOTDeviceHarddiskVolumeShadowCopy1windowsntdsntds.dit c:ntds.dit.bak
以下输出显示复制操作成功:
第三,我们从注册表中提取 SYSTEM 配置单元。 我们需要这个来转储 AD 数据库的内容:
reg.exe save hklmsystem c:tempsystem.bak
以下输出显示复制操作成功:
接下来,让我们确保按预期提取了我们想要的文件:
dir *.bak
我们的两个文件如下图所示:
为了更好的衡量,我们需要通过指定卷影集 ID 来清理并删除卷影副本:
vshadow -dx={46d3c3ee-2840-4152-ba5c-450ea401869a}
操作如下所示,并提示执行成功:
最后,让我们移动我们的战利品(ntds.dit.bak 和 system.bak)并使用 secretsdump.py 离线转储系统哈希。 使用以下命令:
secretsdump.py -ntds ntds.dit.bak -system system.bak LOCAL
成功执行 ! 我们已经使用 Vshadow 获得了域中的用户哈希值!
其他研究
· 有关自动规避技巧的全面信息,请查看evolved-autoruns演示幻灯片。Huntress 实验室的人们在 DerbyCon 7(2017)上发表了这个精彩的演讲。
·@ PyroTek3维护一个优秀的网站—— ADsecurity.org。这篇文章展示了许多攻击者可以用来检索 / 转储 AD 数据库的方法,包括利用 VSS 的工具(例如 vssadmin,ntdsutil 等)。
结论
除了监视上述特征外,防御者可能需要留意奇怪的卷影服务(VSS)行为,例如随机创建 / 删除以及任何涉及 AD 数据库文件(ntds.dit)的活动。 此外,监视 vshadow.exe 开关的命令调用。 文件散列和名称可能会发生更改,但 "-nw -exec =" 和 "-p -nw" 可能会持续存在。