0x00 前言

之前在《导出当前域内所有用户hash的技术整理》中研究过如何通过Volume Shadow Copy实现对ntds.dit文件的复制, 可用来导出域内所有用户hash。而最近在Carbon Black的博客上面又学到了一些新的利用方法,于是整理成文。

学习链接:

Bit9 + Carbon Black Threat Research Team Unveils Nefarious Intents of “Volume Shadows Copies”

0x01 简介

本文将详细介绍以下两方面内容:

  1. 通过Volume Shadow Copy恢复系统自动还原点内保存的文件
  2. 通过Volume Shadow Copy创建一个无文件的进程流程如下:

0x02 背景知识

Volume Shadow Copy Service

注:

Windows Server 2003和XP系统需要Volume Shadow Copy Service SDK 7.2,下载地址如下:

https://www.microsoft.com/en-us/download/details.aspx?id=23490

Windows Server 2008 R2和Windows 7系统需要对应的SDK版本(该版本Win8也适用),下载地址如下:

https://www.microsoft.com/en-us/download/details.aspx?id=3138

0x03 恢复系统自动还原点内保存的文件

常用命令

通过vssadmin查看卷影镜像:

vssadmin list shadows

注: vssadmin系统自带

如图

Alt text

通过wmic查看卷影镜像:

wmic /NAMESPACE:"\rootCIMV2" PATH Win32_ShadowCopy GET /all /FORMAT:list

如图

Alt text

提取出关键的信息DeviceObject、ID和InstallDate,对应wmic命令如下:

wmic /NAMESPACE:"\rootCIMV2" PATH Win32_ShadowCopy GET DeviceObject,ID,InstallDate /FORMAT:list

如图

Alt text

注:

在删除某个卷影镜像时需要填入该卷影镜像的ID

创建符号链接

将卷影镜像和文件夹建立虚拟关联,类似于通过快捷方式可访问卷影镜像中保存的文件,使用mklink命令,系统自带,需要管理员权限 格式如下:

mklink /d 指定快捷方式路径 [Shadow copy device name]

注:

[Shadow copy device name]后要带一个 如果不小心漏掉,在建立关联后无法对其进行后续操作,可直接删除该关联再重新建立

例如,选取\?GLOBALROOTDeviceHarddiskVolumeShadowCopy4,对应的命令如下:

mklink /d c:testvsc \?GLOBALROOTDeviceHarddiskVolumeShadowCopy4

如图,成功创建

Alt text Alt text

\?GLOBALROOTDeviceHarddiskVolumeShadowCopy4对应的时间点为InstallDate=20160907160419.347805+480,于是c:testvsc中保存的即为此时间点系统中保存的文件

0x04 创建一个无文件的进程

测试系统: Win 8.1 x86

测试exe: Win32Project1.exe

执行后弹框,如图

Alt text

1. 创建卷影镜像

上传Win32Project1.exe和VShadow.exe,为当前系统创建卷影镜像,管理员权限执行如下命令:

vshadow.exe -p c:

如图,为C盘创建卷影镜像,DeviceName为\?GLOBALROOTDeviceHarddiskVolumeShadowCopy5,ID为{10f63e0b-e47d-4121-969f-87fa458c5043}

Alt text

Alt text

2. 创建符号链接

命令行执行:

mklink /d c:vscfiletest \?GLOBALROOTDeviceHarddiskVolumeShadowCopy5

创建文件夹c:vscfiletest,执行其中的测试文件Win32Project1.exe 如图

Alt text

使用Process Explorer查看Win32Project1.exe,路径显示为c:vscfiletesttestWin32Project1.exe

如图

Alt text

3. 删除符号链接

删除快捷方式文件夹就好,命令行参数如下:

rmdir c:vscfiletest

注:

即使文件夹中的Win32Project1.exe正在运行,仍可删除

4、删除卷影镜像

通过wmic找到卷影镜像对应的ID:

wmic /NAMESPACE:"\rootCIMV2" PATH Win32_ShadowCopy GET DeviceObject,ID,InstallDate /FORMAT:list

\?GLOBALROOTDeviceHarddiskVolumeShadowCopy5对应的ID为{10f63e0b-e47d-4121-969f-87fa458c5043}

完整的删除代码为:

vssadmin delete shadows /shadow={10f63e0b-e47d-4121-969f-87fa458c5043} /quiet

注:

加入/quiet是为了强制删除,省去输入Y确认

如图

Alt text

补充: 删除所有卷影镜像的命令为:

vssadmin delete shadows /all /quiet

此时,Win32Project1.exe仍在后台运行,而源文件c:vscfiletesttestWin32Project1.exe已经不存在

如图

Alt text

0x05 防御

Search by hashes:

process_md5:3e1360a23ea5f9caf4987ccf35f2fcaf OR process_md5:576b379a59d094fb7b06c261a96034a6 OR process_md5:d0cd7ad91b2ff568275d497214ff185c OR process_md5:97fd0f3c05f1707544a9a6a0c896b43e OR process_md5:d560c155b68121d98f8370e7deafbc4d OR process_md5:c5d2992c8cba0771f71fe4d7625a0b8b OR process_md5:53d3e33ad31af6716559f29e889aca49

Search for Vshadow being executed:

modload:vss_ps.dll cmdline:”-p C:”

modload:vss_ps.dll cmdline:”-p” -path:System32werfault.exe

Search for mklink being executed via a shell out:

cmdline:””C:Windowssystem32cmd.exe” /c mklink /D”

Search for processes being executed from the volume shadow copy locations:

path:device/harddiskvolumeshadowcopy*

path:device/harddiskvolume*

以上引用自https://www.carbonblack.com/2015/08/05/bit9-carbon-black-threat-research-team-unveils-nefarious-intents-of-volume-shadows-copies/

0x06 小结

总结一下渗透测试中Volume Shadow Copy的作用:

  1. 通过Volume Shadow Copy恢复系统自动还原点内保存的文件
  2. 通过Volume Shadow Copy创建一个无文件的进程
  3. 复制正被程序占用的文件,如ntds.dit,当然powershell版的NinjaCopy也能实现相同的功能,可参照https://github.com/3gstudent/NinjaCopy

更多学习资料:

https://www.carbonblack.com/2015/08/03/new-crypto-ransomware-lurks-in-the-shadows/

http://securityweekly.com/2012/10/15/volume-shadow-copies-the-los/

https://technet.microsoft.com/en-us/library/ee923636.aspx

源链接

Hacking more

...