BloodHound是一款开源的AD域分析工具,它以图与线的形式,将域内用户、计算机、组、会话、ACL与域内所有相关用户、组、计算机、登录信息、访问控制策略之间的关系直观展现。利用BloodHound,红队可以便捷地分析域内情况,快速在域内提升自己的权限。蓝队成员可使用BloodHound对己方网络系统进行更好的安全检测以保证域的安全性。BloodHound通过在域内导出相关信息,再将数据采集后,导入在本地安装好的Neo4j数据库中,使域内信息可视化。
Neo4j是一款NoSQL图形数据库,将结构化数据存储在网络上而不是表中。BloodHound正是利用这种特性并加以合理分析,直观地将数据以节点空间的方式进行表达。而Neo4j也是一款非关系型数据库,想要用它查询数据就需要使用其独特的语法。
(1)下载并运行Neo4j
1)准备一台安装有Windows Server操作系统的计算机。为了方便、快捷地使用Neo4j的Web管理界面,推荐安装Chrome或火狐浏览器。
2)Neo4j数据库需要在Java环境下运行。从Oracle官网下载JDK Windows x64安装包并安装,如图2-110所示。
图2-110 下载JDK安装包
3)在Neo4j官网的社区服务版块中选择Windows,并下载最新的Neo4j数据库安装包。
4)启动Neo4j数据库服务端。下载并解压完成后,打开cmd窗口,进入解压后的bin目录,在cmd中执行命令“neo4j.bat console”以启动Neo4j服务,如图2-111所示。
图2-111 启动Neo4j数据库
5)修改Neo4j密码。服务启动后,使用浏览器访问网址http://127.0.0.1:7474/browser/,然后输入账号和密码,如图2-112所示。
图2-112 访问Neo4j数据库
6)默认的Neo4j配置信息如下。
❑Connect URL:127.0.0.1:7687。
❑Username:neo4j。
❑Password:neo4j。
7)输入完成后,页面提示修改密码。这里为了方便演示,将密码修改为Aa123456,如图2-113所示。
图2-113 修改默认密码
8)之后就可以进入Neo4j主界面,如图2-114所示。
图2-114 访问Neo4j主界面
(2)下载并运行BloodHound
在Github上的BloodHound项目中有release版本,我们既可以下载release版本以运行,也可以下载源代码来自己构建。release版本下载地址:https://github.com/BloodHoundAD/BloodHound/releases/download/v4.3.1/BloodHound-win32-x64.zip。
1)下载完成后进行解压,进入目录找到BloodHound.exe,双击以运行,如图2-115所示。
图2-115 运行BloodHound
2)输入如下配置信息。
❑Database URL:bolt://localhost:7687。
❑DB Username:neo4j。
❑DB Password:Aa123456。
3)单击“Login”按钮进入BloodHound主界面。
(1)下载并运行采集器
如果需要使用BloodHound对域进行分析,则需要先使用SharpHound采集器进行数据收集。SharpHound默认收集Active Directory安全组成员资格、域信任、AD对象的可滥用权限、OU树结构,以及计算机、组和用户对象的属性等信息。
BloodHound软件仓库提供了SharpHound.exe工具进行自动的数据收集,如图2-116所示。该工具的下载地址:https://github.com/BloodHoundAD/BloodHound/blob/master/Collectors/SharpHound.exe。
图2-116 访问BloodHound软件仓库
也可以到指定的SharpHound仓库中下载最新版的SharpHound,如图2-117所示。软件下载地址:https://github.com/BloodHoundAD/SharpHound/releases/download/v2.4.1/SharpHound-v2.4.1.zip。
图2-117 从代码仓库中下载最新版SharpHound
将SharpHound.exe复制到目标系统中,使用加入域的计算机运行该程序(普通域用户账户即可)。执行“SharpHound.exe-c all”命令,如图2-118所示。
图2-118 运行SharpHound
同时BloodHound提供了PowerShell脚本以供信息收集时使用。由于微软默认情况下的执行策略为不允许执行任何脚本,所以使用前需要对默认的执行策略进行修改,命令为“set-executionpolicy remotesigned”,如图2-119所示。这一修改操作需要本地管理员权限。
图2-119 修改Windows脚本的执行策略
SharpHound的使用方法如下,结果如图2-120所示。
图2-120 利用SharpHound脚本进行数据收集
除此之外,还可以使用Python版本的采集器。Python版本的采集器支持远程采集数据,可以避免文件落地后被杀毒软件查杀的风险。该版本采集器的下载地址:https://github.com/dirkjanm/BloodHound.py。
Python版本采集器的使用方法如下。
(2)导入数据
SharpHound运行后会生成一个压缩文件。BloodHound界面支持上传单个文件或者ZIP文件,最简单的数据导入方法是将其压缩文件拖到用户界面上的除节点显示选项卡之外的位置。上传成功后,Database Info选项卡下会出现相关信息,如图2-121所示。
图2-121 BloodHound界面的Database Info信息
在BloodHound界面提供了数据库信息(Database Info)、节点信息(Node Info)以及查询信息(Analysis)模块。通过信息展示,我们可以了解相应的连接数据库地址、用户,以及域内的会话数目、关联数目、访问控制表数目、Azure关联数目等信息,并且可以看到域内的用户数目、组数目、计算机数目等。
(1)使用搜索框进行查询
1)通过BloodHound的搜索框,可以对Group、Domain、Computer、User、OU、GPO的节点类型进行搜索。比如,想要查询域内的用户,就可以通过输入相应的用户名进行查询,如图2-122所示,单击对应的节点就会展示相应的节点信息。
2)也可以通过搜索框右边的路径搜索按钮进行从已知节点到目标节点的搜索。例如,我们在成功获取了EX01.KLION.LOCAL的权限之后,想要获得从该节点到高价值目标节点的路径,就可以通过输入两个节点的名称进行搜索,如图2-123所示。
3)可以通过输入框最右侧的过滤选项对结果进行筛选。如果取消勾选了某种类型,则下一次查询时就不会显示与该类型有关的结果,如图2-124所示。
图2-122 展示相应节点信息
图2-123 获得从该节点到高价值目标节点的路径
图2-124 通过过滤选项进行结果筛选
(2)通过功能模块查询
点开Analysis选项卡,可以看到预定义好的25个常用查询条件,如图2-125所示。
通过这些常用查询条件即可进行以下常见场景的查询。
1)查找所有域管理员。单击“Find all Domain Admins”选项,再选择域名,Blood-Hound可以帮助我们查询域中有多少个管理员。从图2-126可以看到域中存在7个域管理员。通过单击Ctrl键可以对节点显示进行设置,分别为“默认阈值”“始终显示”以及“从不显示”。
2)查找到达域管理员的最短路径。点击“Find Shortest Paths to Domain Admins”选项,可以列出数条对域管理员进行快速攻击的路径,如图2-127所示。
通过BloodHound的分析,可以找到域内计算机或者域内用户获得域控制器权限的方式。
图2-125 BloodHound默认查询条件
图2-126 查找所有域管理员
图2-127 查找到达域管理员的最短路径
3)查看指定节点详细信息。这一操作又分为用户、计算机、用户组这三类节点信息。
其一,查看用户节点详细信息:通过单击某个节点,BloodHound将使用该节点的有关信息填充节点信息选项卡。例如,单击任意用户节点可以看到相应的用户名称、显示名称、密码最后修改时间、最后登录时间,以及该用户在哪台计算机存在会话、属于哪些组等信息,如图2-128所示。
图2-128 查看用户节点详细信息
其二,查看计算机节点详细信息:通过单击任意计算机节点,可以看到该计算机的域内名称、操作系统版本、账户是否启用、是否允许无约束委派、该计算机存在多少用户的会话等信息,如图2-129所示。
其三,查看用户组节点详细信息:通过点击任意用户组节点,可以查看该用户组域内会话信息、可达的高价值目标、用户组名称、用户组描述、第一个用户组关系、展开用户组关系、其他域中的用户组关系等信息,如图2-130所示。
图2-129 查看计算机节点详细信息
图2-130 查看用户组节点详细信息
(3)关系解读
右击节点之间的关系名称并单击“help”选项,就会出现对该关系的解读。在Info选项卡中,BloodHound会给出针对该关系的攻击方法和命令,帮助红队快速攻击。
以DCSync为例,BloodHound会在Info选项卡中展示该计算机DC02.KLION.LOCAL具有DS-Replication-Get-Changes和DS-Replication-Get-Changes-All权限,这两个权限都支持执行DCSync攻击。后面的Windows Abuse、Linux Abuse、Opsec以及Refs会提供在Windows以及Linux环境下使用的工具和命令等信息,如图2-131所示。
(4)原始查询
单击右侧菜单栏上的齿轮图标,然后在弹出窗口中勾选“Query Debug Mode”选项,以开启查询调试模式,如图2-132所示。这会在我们查询时将对应的Cypher命令显示在底下的Raw Query模块中,如图2-133所示。例如,当单击“Find all Domain Admins”选项时,在Raw Query模块中会就显示对应的命令,可以修改Raw Query中的命令来达到不同的查询效果。
图2-131 关系解读
图2-132 开启查询调试模式
同时,可以在Raw Query输入框中构建相应的语句进行查询,说明如下。
1)查找具有SPN的所有用户(或查找所有Kerberoastable用户),则可以通过如下命令进行查询,查询结果如图2-134所示。
图2-133 开启查询调试模式后可以看到相应查询语句
图2-134 查找具有SPN的所有用户
2)使用关键字查询相应SPN。例如,以“SQL”为相应关键字进行查询,执行如下命令,查询结果如图2-135所示。
3)筛选相应系统版本的计算机。通过如下命令,可以筛选不在“2000、2003、2008、xp、vista、7、me”列表中的计算机,结果如图2-136所示。
图2-135 利用关键字查询相应SPN
图2-136 筛选相应版本计算机
4)查询上次登录时间超过90天的用户。通过如下命令即可查询上次登录时间超过90天的用户,查询结果如图2-137所示。
图2-137 查询上次登录时间超过90天的用户
5)查询上次密码设置时间大于90天的用户。通过如下命令即可查询上次密码设置时间大于90天的用户,结果如图2-138所示。
6)查询不需要进行Kerberos预身份验证的用户。通过如下命令即可查询不需要进行Kerberos预身份验证的用户,结果如图2-139所示。
7)查找特定域中任何用户所拥有的所有会话。通过如下命令即可查询域KLION.LOCAL中所有用户的会话,结果如图2-140所示。
图2-138 查询上次密码设置时间大于90天的用户
图2-139 查询不需要进行Kerberos预身份验证的用户
图2-140 查找特定域中任何用户所拥有的所有会话
8)查询所有组策略。通过如下命令即可查询所有组策略,结果如图2-141所示。
图2-141 查询所有组策略
9)查询包含关键字的组。通过执行如下命令即可以“ADMIN”为关键字来查询相关的组,结果如图2-142所示。
图2-142 查询包含关键字的组
10)查询高价值组。通过如下命令即可查询高价值组,查询结果如图2-143所示。
11)查询到达域管理员组的最短路径。通过如下命令即可查询计算机节点到达指定域KLION.LOCAL的域管理员组的最短路径,查询结果如图2-144所示。
12)基于“ldap/”和“GC/”的SPN查询从计算机到域管理员组的最短路径。通过如下命令即可查询从计算机到指定域KLION.LOCAL的域管理员组的最短路径,查询结果如图2-145所示。
图2-143 查询高价值组
图2-144 查询计算机节点到达域管理员组的最短路径
图2-145 查询从计算机到域管理员组的最短路径
13)查询从非特权组到域管理员组的最短路径(AdminCount=false)。通过如下命令即可查询从非特权组到域管理员组的最短路径,查询结果如图2-146所示。
14)查找任意无特权用户与其他节点的所有最短路径。通过如下命令即可查询无特权用户到达其他节点的所有最短路径,结果如图2-147所示。
15)查找具有无约束委派的所有计算机。通过如下命令即可查询具有无约束委派的所有计算机,查询结果如图2-148所示。
图2-146 查询从非特权组到域管理员组的最短路径
图2-147 查找任意无特权用户到达其他节点的所有最短路径
图2-148 查找具有无约束委派的所有计算机