CredDefense 工具包:防御凭证滥用攻击的全面指南

CredDefense 工具包是一套免费开源工具,用于检测和防御凭证滥用攻击,包括密码过滤、密码审计、Kerberoasting 检测、事件日志整合、NBNS 欺骗检测和密码喷洒检测等功能。

CredDefense 工具包

Derek Banks, Beau Bullock, & Brian Fehrman //

我们的客户经常询问如何检测和防止我们在其环境中使用的后利用活动,以获取提升的权限并最终访问敏感数据。大多数情况下,这是通过凭证滥用实现的。
作为渗透测试人员,我们在凭证滥用中利用的主要条件是弱密码。在任何拥有数百个最终用户的环境中,几乎可以保证有人选择了季节和年份(例如 Summer2017)作为密码。这使得使用称为密码喷洒的技术很容易猜测。

解决这个问题的一种方法是更改帐户的最小密码长度,但由于技术和政治原因,并非每个环境都能做到这一点。
还有许多其他凭证滥用攻击利用了协议实现或默认环境配置中的缺陷,例如 Kerberoasting 和 LLMNR 投毒。

如果有一个免费工具集可以保护您的凭证,即使密码长度无法更改,并警告网络中正在进行的其他凭证攻击,那不是很好吗?这就是我们创建 CredDefense 工具包的原因——提供一种免费的方式来检测和防止凭证滥用攻击。

密码过滤器

Windows 域对用户密码强制执行一组标准的复杂性要求。当用户尝试设置新密码时,新密码会根据要求进行检查。默认情况下,以下要求生效:

  • 最少八个字符
  • 必须包含以下四项中的三项:
    • 大写字母
    • 小写字母
    • 特殊字符
    • 数字

此外,用户需要每 90 天设置一个新密码。那么……什么符合这些要求但用户仍然容易选择并记住?只能说大多数渗透测试人员非常清楚当前季节和年份。例如,Fall2017。

如何防止用户选择这些类型的密码?当然,您可以增加最小字符数并强制执行额外的复杂性。在需要 15 个或更多字符的环境中,我们密码喷洒的成功率确实低得多。然而,我们仍然会遇到用户选择像 SummerSummmer2017 这样的东西。此外,我们理解要求这么多字符可能带来的政治反弹。必须有另一种方式……而且有!欢迎:Windows 密码过滤。

Windows 密码过滤功能允许您在用户尝试选择新密码时添加额外的检查。密码首先通过域的密码复杂性检查。通过复杂性检查后,它会通过您的自定义检查。如果您愿意,可以拥有多个检查。下图显示了该过程。

这是如何实现的?整个过程在此处描述:https://msdn.microsoft.com/en-us/library/windows/desktop/ms721766(v=vs.85).aspx

手动操作可能有点繁琐和 overwhelming……这就是我们将其纳入 Cred Defense 界面的原因!我们的工作基于这个开源项目: https://github.com/jephthai/OpenPasswordFilter

如果您打开 Cred Defense 工具,选择密码过滤器选项。然后您将被询问是否要安装/卸载该功能,或者只是更新使用的密码列表。

对于安装/卸载,您将看到两列。程序将获取环境中所有域控制器的列表。然后它将检查每个域控制器(DC),看是否在 HKLM\System\CurrentControlSet\Control\Lsa\Notifications 注册表键中存在 EasyPasswordFilter 值。如果该键不存在,则表示 DC 可能未运行密码过滤器,这些 DC 的名称将放置在未配置的 DC 列中。从未配置的 DC 列表中选择一个 DC 名称并单击安装将:

  • 将 EasyPasswordFilter DLL 部署到目标 DC 的 %SystemRoot%\Windows\System32 目录
  • 将密码列表部署到目标 DC 的 %SystemRoot%\epf 文件夹
  • 将 EasyPasswordFilter 值添加到目标 DC 的 HKLM\System\CurrentControlSet\Control\Lsa\Notifications 注册表键
  • 询问您是否要重新启动 DC,如果您选择这样做,则指示 DC 重新启动

对于卸载,程序只需从目标 DC 的注册表中删除 EasyPasswordFilter 值,并询问您是否要重新启动计算机。

很简单,对吧?点击几下,您就可以开始了!

如何更新密码列表?如果您选择此选项,将显示已安装密码过滤器的所有 DC 的列表。单击编辑密码按钮,密码列表将在 Notepad.exe 中打开供您编辑。请注意,密码过滤器设置为不区分大小写。此外,它将执行子字符串匹配,因此您不必键入 Winter2017、Winter2018、WinterWinter2017 等,而是可以只键入 winter。还有一个安全检查,不允许您指定少于四个字符的单词。编辑完密码列表后,保存列表并单击部署更新按钮。密码列表将部署到 DC 的运行密码过滤器列表中显示的所有 DC。这不需要您重新启动域控制器。

密码审计

密码过滤对于防止用户选择弱密码非常有效。环境中的当前密码呢?域管理员是否为其普通用户帐户重复使用相同的密码?您是否有不过期的密码?不需要密码的用户帐户呢?多个管理帐户是否使用相同的密码?所有这些都是非常重要的问题,应在威胁行为者找到这些答案之前回答。

Cred Defense 工具包的密码审计功能可以使这个过程变得轻松!这项工作基于 DSInternals 工具包:https://github.com/MichaelGrafnetter/DSInternals

首先,从主菜单中选择密码审计选项。然后您将看到当前林中的域列表。

选择域后,您将看到该域内的域控制器列表。

选择域控制器后,您将被要求选择一个密码列表用于审计的密码破解部分。您还将被要求指定结果保存的位置。

选择选项后,单击运行审计按钮,过程将启动。程序将利用 AD 复制同步功能从目标 DC 获取 Active Directory 信息。信息保存在内存中,不会写入磁盘。程序将执行多项检查并将结果输出到指定的文件。一些检查包括:

  • 密码重用
  • LanMan 哈希
  • 管理员委派
  • 无密码
  • 不需要密码
  • 密码不过期

那么这需要多长时间?我们从一个分配了 8 GB RAM 和 2 个核心的 VM 运行此程序。它使用了人类可读的 Crackstation 密码列表。环境包含 3 个域控制器和超过 30,000 个唯一用户哈希。整个过程在大约 90 秒内完成!

事件日志整合

在我们的参与中,当涉及到日志记录时,我们通常遇到两类环境。第一类是没有任何日志记录,并且真的没有可见性来帮助检测恶意活动正在发生的信息。第二类是每个日志事件都进入 SEIM,但没有人能有效地使用它来发现或警告任何有用的信息。

如果您处于任何一种情况,请设置更有针对性的方法来整合来自 Windows 端点的事件。作为 CredDefense 工具包的一部分,我们编写了本指南来设置将事件日志转发到中央 Windows 事件转发服务器。

Kerberoasting

当我们在环境中获得立足点时,我们尝试的第一个攻击之一称为 Kerberoasting。Microsoft 的 Kerberos 实现很复杂,但攻击的要点是利用旧版 Active Directory 对旧 Windows 客户端的支持,以及用于加密和签名 Kerberos 票证的加密类型和密钥材料。本质上,当域帐户配置为在环境中运行服务(例如 MS SQL)时,域中使用服务主体名称(SPN)将服务与登录帐户关联。当用户希望使用特定资源时,他们会收到一个使用运行服务的帐户的 NTLM 哈希签名的 Kerberos 票证。这有效地允许任何域用户获取网络上服务帐户的可破解哈希——而且通常服务帐户至少在其运行的本地服务器上具有管理员权限。

对 Kerberos 票证的请求会在环境中的域控制器上生成事件 4769。配置了 Windows 事件转发器以整合事件日志后,Kerberos 票证请求集中在一个地方进行分析。

一种检测方法是创建一个 HoneyAccount,该帐户将具有注册的服务主体名称,并且通常不会被最终用户请求。Set-ADUser 命令可用于此目的,只需注意不要复制环境中有效的 SPN。

1
Set-ADUser honeytoken -ServicePrincipalNames @{Add=”MSSQLSvc/server161:1433″}

一旦创建了 HoneyAccount,就可以使用 CredDefenseEventParser PowerShell 脚本来解析转发的日志,以检测服务帐户与 HoneyToken 值匹配的事件 ID 4769。这将表明可能有人在环境中进行 Kerberoasting。

ResponderGuard

我们作为渗透测试人员执行的常见攻击之一是尝试在网络上的 NBNS 或 LLMNR 欺骗攻击,希望获取用户的哈希凭证。执行此攻击的一个流行工具是 Laurent Gaffie 编写的“Responder”。另一个执行此攻击的伟大工具是 Kevin Robertson 的“Inveigh”。这些工具可以做很多很棒的事情,但主要功能之一是有效地充当 NBNS 或 LLMNR 欺骗器。

我们使用这些工具成功获取哈希用户凭证是很常见的。那么防御者如何在大规模网络上检测类似 Responder 的活动呢?已经有少数工具可以检测 LAN 上的 Responder。但据我所知,由于它们广播使用的 NBNS 数据包的方式,大多数只能检查单个子网。另一种选择是通过 SMB 向网络上的每个系统发送蜜令牌,但这种方法需要攻击者主动破解 NTLMv2 哈希并尝试登录,然后才能收到 Responder 在网络上的警报。

ResponderGuard 是一个 PowerShell 工具,应该允许跨网络大规模检测类似 Responder 的活动。它能够通过向 CIDR 范围列表中的每个主机发送有针对性的 NBNS 请求来定位外部子网上的 Responder 侦听器。每个 NBNS 请求都会为每个 IP 地址请求一个随机主机名。如果主机响应说它是正确的主机,那么该主机很可能是一个 NBNS 欺骗器。

为了协助提醒此活动,ResponderGuard 在检测到网络上的类似 Responder 侦听器时立即写入 Windows 事件日志。这可以与 CredDefense 或您选择的任何 SIEM 结合使用,以便在发现类似 Responder 的系统时提醒您。只需查找事件 ID 8415。

除了立即提醒 Responder 活动外,ResponderGuard 还能够向 Responder 侦听器提供蜜凭证。如果攻击者尝试登录到指定帐户,这提供了额外的检测机制。在下面的屏幕截图中,防御者启动了 ResponderGuard,并且当前正在扫描提供的 CIDR 范围。它检测到来自 IP 地址 192.168.0.18 的随机主机名的 NBNS 响应。一个事件被写入事件日志,然后一组蜜凭证(HoneyDomain\HoneyUser : Summer2017)通过 SMB 提交给侦听器。

下面的屏幕截图显示了攻击者在其 Responder 输出中会看到的内容。首先,Responder 报告说一个中毒答案被发送到 192.168.0.12(我们的运行 ResponderGuard 的 Windows 服务器,实际上位于完全不同的子网上,经过 NAT)。接下来,Responder 收到了一个 SMB 身份验证请求以及我们蜜用户的 NTLMv2 哈希用户凭证。您可以通过多种方式设置这些蜜令牌。一些选项将在本文后面讨论。

要作为独立脚本运行 ResponderGuard,首先从此处下载。然后,以管理员身份启动新的 PowerShell 进程。

1
C:> powershell.exe -exec bypass

接下来,导入 ResponderGuard PowerShell 脚本。

1
PS C:> Import-Module ResponderGuard.ps1

ResponderGuard 可以在生成事件日志或不生成事件日志的情况下运行。要在每次检测到 Responder 时写入 Windows 事件日志,请将 -LoggingEnabled 标志添加到 Invoke-ResponderGuard。可以使用 -CidrList 选项将 CIDR 范围列表传递给 Invoke-ReponderGuard。如果您还想向 Responder 提交 HoneyToken,请添加 -HoneyTokenSeed 选项。确保手动更改脚本中的蜜令牌凭据,否则 HoneyDomain\HoneyToken 将被提交给 Responder。

1
PS C:> Invoke-ResponderGuard -CidrList C:\temp\cidr-list.txt -LoggingEnabled -HoneyTokenSeed

这个工具仍在开发中,更多功能正在开发中。如果您想帮忙,请查看 CredDefense 存储库上的开放问题。

密码喷洒

密码喷洒是我们在几乎每次渗透测试中使用的攻击,因为它在收集凭证方面非常有效。我们已经多次写过关于它的文章。密码喷洒是一种攻击,攻击者基本上生成一个大的用户名列表,并为每个用户提交一次身份验证尝试以避免帐户锁定。选择的密码通常是用户常用的东西,如“SeasonYear”(例如:“Fall2017”)或“Companyname123”。

密码喷洒可以针对几乎任何身份验证机制执行,但我们通常针对 Active Directory 相关服务。由于外部暴露的与 Active Directory 关联的 Web 门户,它可以在大多数网络的内部和外部执行。我们通常在外部进行密码喷洒的一些例子是 Outlook Web Access (OWA)、ADFS、Exchange Web Services (EWS)、Office 365,甚至 VPN 门户。

在内部,我们在 Black Hills InfoSec 编写的一个名为 DomainPasswordSpray 的 PowerShell 工具可以很好地用于密码喷洒。它从域生成用户帐户列表,并尝试删除任何接近锁定的人。此外,它枚举细粒度密码策略,以避免对不同密码策略限制下的帐户进行锁定。

无论密码喷洒如何执行,它都会生成大量失败的登录事件。许多 SIEM 和产品会警告网络上的帐户凭据暴力破解,但大多数只是查看单个用户帐户的失败登录尝试,并由于每个帐户只有一次尝试而错过了密码喷洒。为了帮助警告密码喷洒,CredDefense 解析事件日志,查找任何在一小时内生成超过十次失败登录尝试的单个 IP 地址。

存储库中包含的 CredDefenseEventParser.ps1 脚本可以独立运行或从 CredDefense 运行。除了在循环中查看给定的 Windows 事件日志文件外,它还可以针对特定事件文件(evtx)执行分析以“狩猎”密码喷洒事件。在循环中运行时,它将持续评估给定日志文件的事件。这可能是您转发的事件日志文件,您正在从环境中的每个系统收集转发的 Windows 事件日志。

结论

CredDefense 工具包旨在成为一套工具和技术的集合,可用于预防和/或检测许多渗透测试人员和真正恶意个体成功的常见攻击。我们三人从事这项工作的人本质上是红队成员。通过 CredDefense,我们试图通过使组织更容易检测我们成功的常见攻击来使我们的生活更艰难。哦……而且它是 100% 免费和开源的!

我们已经在 CredDefense 中包含并在此帖子中讨论的一些内容如下:

  • 域密码过滤器(希望首先防止用户创建坏密码)
  • 密码不过期
  • Kerberoast 检测
  • 事件日志整合(使用内置的 Windows 事件工具)
  • NBNS 欺骗检测和蜜令牌提交给类似 Responder 的系统
  • 密码喷洒检测

如果您想了解更多关于 CredDefense 的信息,我们在 DerbyCon 7.0 的演讲视频可在此处获取:https://www.youtube.com/watch?v=4u5gCoCu88Q。我们还有许多其他项目想要添加,并希望我们也能在这个项目中获得一些社区参与。___ 喜欢您看到的吗?请尽快回来查看我们将很快发布的网络广播!

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计