CredDefense工具包:防御凭证滥用的免费解决方案

CredDefense工具包是一套免费开源的防御工具集,专注于检测和防止凭证滥用攻击,包括密码过滤、密码审计、Kerberoasting检测、事件日志整合、NBNS欺骗检测和密码喷洒检测等功能,帮助组织提升Active Directory环境的安全性。

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秒内完成!

事件日志整合

在我们的 engagements 中,当涉及到日志记录时,我们通常遇到两类环境。第一类是没有任何日志记录,并且真的没有可见性来帮助检测恶意活动发生的任何可用信息。第二类是每个日志事件都进入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。 Set-ADUser honeytoken -ServicePrincipalNames @{Add=”MSSQLSvc/server161:1433″}

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

ResponderGuard

我们作为渗透测试人员执行的常见攻击之一是尝试在网络

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