导语:这篇文章是本系列博客文章中的第一部分,涵盖了红蓝对抗过程中对手弹性方法论的一个更高层次的策略。在第二部分中,我们将把这种方法付诸于实践,并向您展示如何完成本文所涵盖的所有内容的基本技术细节。
注意:这是本系列博客文章中的第一部分。这篇文章涵盖了红蓝对抗过程中对手弹性方法论的一个更高层次的策略。在第二部分中,我们将把这种方法付诸于实践,并向您展示如何完成本文所涵盖的所有内容的基本技术细节。
背景和介绍
在DEFCON 24,Will Schroeder,Rohan Vazarkar和我发布了BloodHound。从那个时候开始,BloodHound已经被众多的渗透测试人员或红军团队以及部分安全公司使用,并且一个很棒的BloodHound用户社区已经聚集在BloodHound Slack中。该社区成员对它的反馈很不错。如果你不熟悉BloodHound,请查看“ BloodHound介绍 ”博客文章或观看我们的DEFCON演示文稿。
很早的时候,我们就很快意识到,尽管BloodHound对于攻击者来说是一个很好的工具,但潜在的防御应用更加引人注目。社区中的许多人都反馈了这种情绪。UI已经为防御者提供了一些有趣的功能,包括嵌套组成员可视化,出站的本地管理员权限和对象控制统计以及攻击路径发现和分析; 然而,这些功能仅仅是抓住了一些可能的攻击面。
在本文中,我们将介绍企业在尝试保护Active Directory环境时面临的一些当前挑战。然后,我们将详细介绍一种在未公布的使用BloodHound攻击图形功能的新方法,以有效地保护Active Directory,该Active Directory能够抵御最有可能被攻击者发现和执行的大多数攻击。
企业安全的(必然)反应
随着时间的推移,每个Active Directory环境都变成一个笨拙而复杂的用户权限,各种不同等级的权限和行为的网络。攻击者(无论是渗透测试者、红军团队还是真正的攻击者)通常会利用这种复杂性,使用拥有防御者无意给予他们权限的帐户,或者没有意识到他们拥有的这些权限。
约翰兰伯特有一篇精彩的博客文章,题为“防御者在列表中思考,而攻击者用图表思考。只要这是真的,那么攻击者就会赢的攻防战争。”在他的博客文章中,他建议读者学习如何识别“基于列表”的思想。当然,基于列表思想的致命缺陷在于不能识别看似离散的系统之间的联系。比如,从“我的域管理员用户列表”这个名单上来说,只能登录到这个计算机列表中; 因此,如果这些计算机是安全的,那么域管理员也是如此。使用BloodHound,你将很快就会看到基于列表的思维方式的错误。
许多企业发现自己已经陷入了一种看似不可回避的纯粹的保守安全补救措施的循环之中。任何被黑客攻击的组织,无论是经过授权的公司还是真正的攻击者,都会遇到同样的问题:该怎么办?然而,无论是通过查看渗透测试人员的渗透测试报告,还是在执行漫长而彻底的(昂贵的)调查之后,该企业组织都将获得一个网络被突破的结果,结果描述了攻击者为完成目标而采取的分步行动。突破过程的描述可能是这样的:
用户被钓鱼了。该用户在他们自己的系统上拥有本地管理员权限。攻击者窃取了内置的本地管理员密码,密码在每个系统上都是一样的。攻击者发现了一个系统,其中有一个域管理员登录,然后使用Mimikatz从该系统中窃取该域管理员的登录凭证。
然后将这种突破过程叙述变成一份调查结果清单,并为每项调查结果提供相关建议。该列表可能如下图所示:
现在,任何这些建议都没有错,每个企业或组织都应该做这些事情,但是任何一个一直在做企业安全的人都知道,这些控制措施在实践中都不是完美的:
1.用户安全意识培训:无论你进行多少次的培训,总会有一位用户想要点击他们看到的每个链接。
2.有效地审核本地管理员组的成员是很困难的,原因很多:本地管理员组分析工具不足,缺少向新本地管理员组添加本地管理员组时的警告,嵌套安全组模糊了具有本地管理员权限的用户的真实数量系统。
3.LAPS是共享本地管理员帐户密码的有效解决方案,但根据我们作为红军团队的经验,大多数企业的网络上通常都有一组豁免主机。
4.Credential Guard可以有效缓解登录凭证失窃,但至少需要Windows 10才能使用,而大多数企业或组织仍在运行Windows 7,更不用说Credential Guard 的硬件要求了。
更重要的是,在你有机会部署这些控件并实施审计方法和计划时,你下一次定期的渗透测试(或真正的攻击者再次入侵)就是时候了。假设你完美地部署了上述控件,这次的突破过程的叙述可能会是这样的:
猜测用户的密码。攻击者连接到公司VPN,不执行多重身份验证。高特权服务帐户已登录到该系统。攻击者注入到作为服务帐户运行的进程中。该服务帐户在Domain Admins组上具有“添加成员”权限。
再次,这个叙述然后变成一个调查结果列表:
你大概可以看到这是怎么回事。即使在一个完美的世界中,在所有补救措施都被应用的情况下,许多个攻击路径中只有一条攻击路线会被阻止。
所使用的技术和程序随着供应商和维护者添加安全措施而变化,但攻击者依旧能继续获得成功。出于很多原因,企业陷入了对攻击者行为和能力做出回应的无尽循环,几乎没有时间去尝试和争夺对手。从视觉上看,这个周期很简单:
上图:企业通常在对安全事件作出反应的循环中结束。
BloodHound的能力(和限制)
一个典型的渗透测试报告将包括一个攻击路径的叙述,逐步概述团队如何访问他们的目标。这些攻击路径几乎总是包含通过Active Directory的横向移动和特权升级。BloodHound的攻击图不仅追踪一个,而且还追踪所有依赖窃取凭证,显式和委托本地管理权限以及显式和委托安全对象控制的攻击路径。
上图:在这个简单的例子中,KSperling是Desktop21上的一个管理员。在Desktop21上,AntiVirus用户已登录,并且该用户是域管理员。作为攻击者,我们将其解读为:“使用Ksperling用户转到Desktop21,然后使用Mimikatz窃取AntiVirus用户的密码。”
例如,我们可以看到所有针对Domain Admins组的最短攻击路径:
上图:从任何用户到Domain Admins组的所有最短路径。
放大以Domain Admins组结尾的攻击路径的尾端,可以让我们了解攻击者如何执行这些路径:
上图:详细显示攻击路径中的边缘名称。
注意绿色用户图标离Domain Admins组的一个跳跃(巨大的红色箭头指向它)。针对该用户有9个入站边,实际上,渲染图中的许多攻击路径可以遍历该节点。通过将鼠标悬停在该用户上,遍历该节点的所有路径都以蓝色突出显示:
上图:几乎所有可用的最短路径都遍历了“USER99”节点。
你不能认为摆脱那个用户会消除大量的攻击路径而会被指责; 但是,我们只在这里看到Domain Admin 的最短路径,而不是所有路径。无论哪种方式,实际上图表允许我们测试如何有效地禁用或删除该用户。你可以使用以下查询从Neo4j控制台上的攻击图中删除一个节点:
MATCH(u:User {name:'[email protected]'})) DETACH DELETE u
删除用户后,只需右键单击“域管理员”,然后点击“到这里的最短路径”重新计算最短路径。
上图:在删除USER99后,到Domain Admin的新的最短路径。
正如你所看到的,攻击路径在某些地区已经发生了变化,但事实上,之前通往DA的路径的所有用户仍然会这样做——他们只需再走一步即可到达那里。上述路径始终存在,但未显示,因为它们不是最短的路径。
实际上,任何一个稠密的攻击图都将会用这种重击方法消除掉更多的攻击路径。你当然可以尝试查询并呈现所有可能的攻击路径,但查询可能永远不会结束,即使这样做,你的屏幕上也会出现难以理解的混乱。想象一下,例如,一个帮助台用户会被钓鱼。如果该帮助台用户在5,000个系统上拥有本地管理员权限,那么攻击者可能会在转移到域管理员帐户的途中潜入5,000个机器作为起点。为了说明这一点,我们找到了从图中的一个用户到Domain Admins组的所有攻击路径,长度可达5个。这是生成的图形:
上图:从一个用户到Domain Admins组的最大长度为5的所有路径。
正如你所看到的,图形的真实复杂性很快超过了显示界面,并且排除了逐个删除边缘以减少攻击路径的可能性。
弹性方法论
前面回顾了被动企业安全方法的描述。你认为需要多长时间才能通过该方法的一个循环?几个月?还是几年?
任何好的方法都需要有非常明确的目标。弹性方法的目标很简单:
· 找到攻击者在执行攻击之前的所有攻击路径
· 严重减少攻击路径的数量
· 通过减轻我们无法摆脱的攻击路径来阻止对手
· 维护一个Active Directory,对被盗的证书和对象控制攻击具有很强的适应能力
我们可以使用四阶段循环方法来实现这些目标:
上图:Active Directory弹性方法
阶段1:枚举攻击路径
第一步需要收集以下几条信息:
· 所有域中加入系统中的本地管理员组的成员身份
· 用户会话位置
· 安全组成员资格
· 来自安全AD对象(包括用户,组和域对象)的访问控制条目(ACE)。
· Active Directory域信任
这一步非常简单,这些工作可以归功于SharpHound,它是Rohan Vazarkar编写的在当前的BloodHound中用作信息搜集的数据收集器,是一个基于Will Schroeder编写的原始PowerShell收集器。你可以在这里下载最新版本的SharpHound 。SharpHound是用C#编写的,完全免费且开源,因此你可以在将代码运行到网络之前审核代码。还可以在这里查看Rohan写的这篇很不错的博文以及SharpHound的技术细节。