PlumHound:BloodHoundAD的报告引擎,助力蓝队分析Active Directory控制路径漏洞

PlumHound是一个基于Python的报告引擎,专为BloodHoundAD设计,能够生成可操作的CSV或HTML报告,帮助蓝队、系统管理员和分析师识别和修复Active Directory中的控制路径漏洞,包含69个默认报告和BlueHound模块。

PlumHound Reporting Engine for BloodHoundAD

Kent Ickler //

距离Jordan和我讨论蓝队对红队工具的看法已经过去两年多了。
蓝队视角看红队黑客工具 – YouTube
网络直播本身涵盖了许多有趣的话题;在讨论结束时,我们谈到了我们编写的一个工具。PlumHound是一个为BloodHoundAD设计的报告引擎,旨在为蓝队、系统管理员和分析师生成可操作报告。我们觉得是时候写这篇博客了。

PlumHound的框架相对简单:利用BloodHoundAD在Neo4j中的控制路径查找能力,为蓝队构建可操作情报,以识别Active Directory问题。
在开发过程中,我们遇到了Mathieu Saulnier(Scoubi),他有一个类似的项目。由于目标相似,我们合并了努力。Mathieu带来了额外的模块,可以识别控制路径漏洞中的最弱环节(AnalyzePath)和首先修复的最重要路径(BusiestPath)以最大化效果——这两个模块来自他的BlueHound项目。
在渗透测试中,当我们发现有趣的控制路径漏洞时,我们会花时间分析情况,如果是新问题,就使用Neo4j cypher编写新的PlumHound报告。同时,其他信息安全团队也开始使用该报告引擎构建自己的报告。
如今,我们打包的“默认”报告中包含69个PlumHound报告,外加Mathieu Saulnier的BlueHound的Busiest Path和Analyze Path功能。
那么,它是如何工作的呢?

首先,我们必须承认我们站在构建Neo4j、BloodHoundAD及其数据收集器的巨人的肩膀上。
PlumHound使用Python在BloodHoundAD摄取和解析数据后连接到Neo4j数据库。然后,PlumHound使用Neo4j的cypher语言查询数据库信息,并将信息输出到CSV或HTML报告(或标准输出)。也就是说,BloodHoundAD的分析可以标准化为报告格式,用于数据驱动的决策,以纠正常见的Active Directory控制路径漏洞。

运行PlumHound报告引擎

运行PlumHound很简单:指定Neo4j数据库连接和要执行的“任务列表”。任务列表是一组cypher查询和元数据,告诉PlumHound运行什么查询以及如何从输出生成报告。PlumHound包含的“默认”任务列表包括69个报告和一个索引。
为了进一步简化,如果您的Neo4j服务器在本地主机上,则无需指定Neo4j连接。
对于仍使用“默认”凭据的Neo4j版本,必须首先更新默认凭据才能使用服务。如果您像我一样,对Neo4j服务进行源过滤,并将凭据更新为一些…简单…懒惰…糟糕?无论如何,我将密码从“neo4j”改为“neo4jj”,因为对服务进行了源过滤。记住,如果您对服务进行了源过滤,则需要从受信任的源运行PlumHound。
如果您的用户名是“neo4j”,更新后的密码是“neo4jj”,则无需指定用户名和密码来连接到Neo4j数据库,因为默认是“neo4jj”。
简单如下:

1
PlumHound.py -x tasks/default.tasks

这将执行默认包含的任务列表。
就这样,69个PlumHound报告 + 一个报告索引已准备好供您审查,很好!

任务文件

任务列表文件允许PlumHound在SharpHound数据集导入Neo4j上的BloodHoundAD后完全通过批处理作业进行脚本化。任务列表文件语法如下。(注意,任何包含双引号的cypher查询必须修改为使用单引号代替双引号。)

1
["Report Title","[Output-Format]","[Output-File]","[CypherQuery]"]

默认列表中包含哪些报告?
“default.tasks”指示PlumHound还生成所有生成报告的索引,index.html。
打开index.html文件显示报告列表。报告一开始相当典型,提供基于报告的Active Directory环境总体图景。

然后是我们第一组有趣的报告。我们使用的测试数据库并不超级有趣,但下面的每个报告都提供信息,作为渗透测试员,我们用它来在网络上找到立足点或提升权限。当然,作为蓝队成员,我们建议批判性思考这些报告中的每个项目。

接下来是报告,告诉我们常见或过度使用的组是否可能被错误地授予了Active Directory委托。在下面的组中,PasswordResetter组让我们知道一个组被委托重置密码,并计算有多少用户被委托到该组。

接下来是关于域GPO的报告和GPO所有者的分析。然后是RDP组,告诉我们RDP访问是否通过组配置,以及哪些组提供对系统数量的访问。

然后是具有最多权限的Kerberoastable用户报告和本地管理员的分析。

然后是计算机对象、操作系统和LAPS部署的报告。

在计算机之后,我们查看用户账户。我们报告所有识别的用户会话和在不同系统上有多个会话的用户。然后我们查看密码旧的用户账户。我们查看具有易受攻击的“userpassword”属性的用户和不需要Kerberos预认证的用户。我们还有报告用户对系统具有直接和间接管理控制。具有“添加到组委托”的用户告诉我们哪些用户被委托更改组成员身份——直接和间接。我们报告从未登录的用户,最后是永远不需要更改密码的用户。

最后,我们有由BloodHoundAD的“Owned”标志用户填充的报告,允许分析师生成详细的后期利用报告,准确定义在参与期间哪些用户和计算机账户被入侵。

包含的Cypher

每个生成的报告都包括用于生成报告的cypher查询。虽然对故障排除和开发报告有用,但它还允许分析师将cypher查询用作其他工具的输入。
在下面的报告“GPO Creators Owners”中,我们看到ASADMIN@ASAZLAB.com是GPO创建者/所有者。报告中包括报告执行的日期和时间,以及用于生成报告的cypher查询。

分析师如何使用这些报告?

渗透测试员可以快速找到信息——例如:哪些用户账户不需要密码更改但曾经是管理员?“User Password Never Expires Exception”报告将通过检查“AdminCount”列告诉我们这一点。

防御或蓝队分析师也可以使用相同的报告,但目标是识别需要修复的易受攻击配置。

单查询

PlumHound与Neo4j的接口还意味着您可以快速轻松地执行cypher查询并直接输出到控制台。在下面的示例中,我们查询永远不需要密码更改的用户。

1
./PlumHound.py -q "MATCH (n:User) WHERE n.pwdneverexpires RETURN n.name as Name,n.displayname as DisplayName,n.enabled as Enabled, n.title as Title, n.pwdneverexpires as PWDNeverExpires, n.passwordnotreqd as PWDNotReqd, n.admincount as AdminCount"

更多任务列表

PlumHound还包括其他更具体于查找特定数据的任务列表。例如,我们将Kerberoasting特定报告捆绑到自己的任务列表中。我们生成了一个任务列表来生成CSV报告而不是HTML。我们还有一个任务列表,用于查找有趣的事物,例如Active Directory对象的描述或注释属性中的密码。

Analyze Path(BlueHound模块)

Analyze path功能允许我们识别要中断的关系以停止控制路径漏洞。命令语法简单:使用标志-ap并指定用户、组、计算机、OU或GPO作为路径分析的起点。

1
./PlumHound.py -ap user

在下面的屏幕截图中,用户DataAnalyst@asazlab.com有一条路径到OU“AdminAccounts”。下面的输出详细说明了路径。

对于那些更熟悉BloodHound GUI的人,这与下面的表示相同,但指示了要中断的特定关系。

AnalyzePath查询将有效地为每个易受攻击的路径(按用户、组、计算机、OU或组)生成一个杀伤链。

Busiest Path(BlueHound模块)

Busiest Path查找给最多用户提供到Domain Admin路径的最短(或所有)路径,并给出受影响用户的数量。最“繁忙的路径”首先列出。这通知负责修复路径漏洞的团队信息,关于首先修复哪些路径以最有效地利用他们的时间和精力。
在下面的情况下,我们搜索前5个最受用户影响的到Domain Admin的最短路径。

1
./PlumHound.py -bp short 5

下面描述的第一条路径影响六个用户,是一条从组USR_Helpdesk@asazlab.com到Domain Admins的路径。

我们可以通过使用控制路径搜索在BloodHoundAD中看到路径。

详细程度作为功能?

这个工具是由一个不以写代码为生的人制作的,或者至少不是全职的。作为不在调试IDE中编写的离合器,我写了一个函数,使PlumHound工具具有非常可配置的调试详细程度。这有助于测试cypher查询和编写任务列表的过程。
PlumHound的详细程度参数是-v(数字)。详细数字可以是0-1000,其中“0”是安静的,1000在PlumHound过程的每个关键步骤产生消息,中间某处就是那样。太详细?减少您的-v设置。不够?增加它。除此之外,详细日志记录还配置为查看工具生成的先前日志。

亲自查看PlumHound

我们邀请您查看PlumHound报告引擎。我们将其构建为开源,以帮助管理员和分析师充分利用BloodHoundAD的控制路径分析。
如果您找到一个有用的cypher查询想要添加,请告诉我们,或提交拉取请求。
GitHub链接:PlumHound (github.com)
文档:PlumHound | Bloodhound for Blue and Purple Teams
有兴趣了解更多关于保护Active Directory和企业环境的信息?查看我们的课程,由AntiSyphon Security呈现,Defending the Enterprise。

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