Bloodhound

# Description

Bloodhound 是一个活动目录数据分析工具,它可以通过收集器 SharpHound 自动搜集域大量数据,然后通过 BloodHound GUI 将搜集到的数据可视化并加以分析,向我们展示通过分析后的各种攻击捷径

它支持 Windows、OS X、Linux,我这边用 Windows 10 来搭建 Bloodhound 环境

# Install

# Java

  1. 到 Java 官网下载 JDK 安装包并安装

https://www.oracle.com/java/technologies/javase-jdk15-downloads.html

Java

  1. 安装完后添加系统环境变量

Add %PATH%

# Neo4j

  1. 到 Neo4j 官网下载安装包 https://neo4j.com/download-center/#community

Neo4j

  1. 把压缩包解压出来,用管理员权限打开 cmd , 切换到 Neo4j 下的 bin 目录,输入 neo4j.bat install-service 安装服务

neo4j

  1. 安装完后启动用 net start neo4j 启动 neo4j 服务

start

  1. 访问 neo4j 管理界面,打开浏览器访问 http://localhost:7474/ 测试是否正常,用户名和密码为 neo4j , 第一次登录后需要更改密码,改完密码关闭页面即可

web login

# BloodHound GUI

  1. 下载 BloodHound GUI 并解压 https://github.com/BloodHoundAD/BloodHound/
    releases

BloodHound

  1. 进入解压出来的根目录运行 BloodHound.exe , 输入 Neo4j 数据库的用户名和密码连接到数据库

BloodHound

这样我们的 BloodHound 环境就搭建好了,但是因为没有数据,所以打开的界面是空白的

BloodHound

# SharpHound

SharpHoundBloodHound 的数据收集程序,它有编译好的二进制文件和 PS 文件,可根据自己的需求下载对应的文件

GitHub 地址下载
https://github.com/BloodHoundAD/BloodHound/tree/master/Collectors

我这边以二进制文件作为演示,就用我之前搭建好的域环境测试,看看能获取到什么信息

运行方式非常简单,如果运行的机器是域中的成员并且登录的是域账号,直接双击运行或者在命令行中运行,如果是非域中成员或登录的是本地账户,需要先拥有一个域账户,用 runas 命令创建一个该域账号的 shell,然后再运行 SharpHound

h
runas /netonly /user:域\域账号 cmd.exe

我直接在命令行运行,搜集完后会在当前目录生成一个文件名以日期开头的数据压缩文件,这里不需要对其解压,如果需要把数据文件输出到其它目录,可以使用 --outputdirectorty 参数指定输出目录

h
SharpHound.exe --OutputDirectory C:\temp\

SharpHound

运行后, SharpHound 会自动向域控制器搜集相关信息,如安全组成员、域信任关系、活动目录可利用对象、组策略链接、OU 树结构

我们可以打开这个已经收集好的压缩包看看 SharpHound 搜集了哪些数据

data

这里不需要把文件解压出来,直接将该数据包压缩文件托动到 BloodHound GUI 的界面,程序会自动把数据导入到我们的数据库

import

导入数据后,我发现有个非常尴尬的问题,就是我的测试环境数据实在是少得可怜,并没有可分析的地方,我就简单说一下 BloodHound GUI 界面的一些功能吧

# BloodHound GUI

BloodHound GUI 的界面主要有五部分组成

  1. 搜索栏和信息栏

  2. 数据展示界面

  3. 图表控件

  4. 放大缩小控件

  5. 查询语法栏

BloodHound GUI

# 搜索栏和信息栏

我们可以通过搜索栏搜索节点或者路径,通过信息栏查看节点信息和 Bloodhound 已经给我们定义好的常用分析语句

# 搜索栏

search bar

搜索栏主要有四部分组成,搜索栏、路径查找、返回、边缘过滤

  1. 搜索栏和查找路径

搜索栏默认是搜索单个节点,可以通过搜索该节点查看其详细信息,也可以点一下右边的路径查找图标,这样可以查询两个节点之间的一些有关联的信息,一个是开始节点,一个目标节点,如果这两个节点没有相关联的信息,则显示 NO DATA RETURNED FROM QUERY

例如:开始节点是普通的域账号 bob,目标节点是 DC-1,如果 bob DC-1 之间不存在有效访问路径时,这时就会显示 NO DATA RETURNED FROM QUERY ,否则显示对应的访问路径

NO DATA

搜索栏支持模糊搜索和节点类型搜索,模糊搜索可以通过你输入的关键字对整个数据库进行关键字匹配搜索,把匹配到的数据实时显示在下方

如果你并不清楚自己的具体目标,我们还可以通过节点类型查询具体的数据,例如用户、用户组、设备名称、组织、组策略等,查询方法如下:

  • user:

user

  • group:

group

  • computer:

upload successful

  • ou:

ou

  • gpo:

gpo

  1. 返回

点击返回键,可以让我们返回到上一次查看的数据结果,可以一直返回,但是无法前进

  1. 边缘过滤

边缘过滤是配合路径查找一起使用的,这里可以过滤掉一些你不需要查看的边缘权限,有时我们需要查看的节点关联的数据比较多时,会影响我们的分析,此时我们就可以通过边缘过滤,把我们不关心的数据给筛选掉,这样就可以更加直观的查看我们想要的结果

Filter

# 信息栏

点击搜索栏左边的更多信息图标,点击后可以显示我们的信息栏,在信息栏里,我们可以查看数据库信息、节点信息和系统定义好的常用数据分析语法

  1. 数据库信息

database info

DB STATS 显示数据库地址、当前数据库用户、会话、存在关系、控制访问列表、Azure 关系 数量信息

DB STATS

ON-PREM OBJECTS 显示当前数据存在的用户、用户组、设备、组织、策略、域 数量信息

OBJECTS

AZURE OBJECTS 显示的是微软 Azure 云的信息,我这环境不涉及到 Azure,所以显示都是 Zero

upload successful

最后一部分是数据库的操作,Refresh Database Stats 更新数据库状态,Warm UP Database 将数据库预加载到内存,可加速查询,Clear Sessions 清除会话,Clear Database 清除当前数据库
DB Operation

  1. 节点信息

我们通过搜索栏搜索域管理员账户 Administrator@demo.c,然后通过节点信息查看该账户的一些详细信息

Node info

OVERVIEW 显示用户会话、相同组织里的同级对象、可获取的高价值目标、有效入站策略、用户域 / 组织树结构,这里的 Reachable High Value Targets 的数量是比较重要的

OVERVIEW

NODE PROPERTIES 显示账户名、SID、上一次修改密码时间、最后一次登录时间、账户是否启用、账户邮箱、账户描述信息、是否管理员、密码永不过期、不能被委派、是否 AS-REP Roasting 账户 属性信息

NODE PROPERTIES

AS-REP Roasting 账户是指域账户在账户属性里启用了不要求 Kerberos 预身份验证的选项,可以利用 ASREPRoast 工具对其爆破

EXTRA PROPERTIES 显示 LDAP 可分辨的名称、域名、账户名、密码不是必须的、无约束委派 额外属性

EXTRA	PROPERTIES

GROUP MEMBERSHIP 显示第一级用户组关系、展开用户组关系 (除了显示第一级的用户组关系还显示用户组和其它用户组的关系)、其它域中的用户组关系 的数量

Membership

Local Admin Rights 显示拥有本地管理员组特权计算机、通过安全组委派拥有本地管理员权限的计算机、衍生本地管理员权限的计算机 的数量

Admin Rights

EXECUTION RIGHTS 显示该用户添加本地远程桌面特权、通过安全组委派拥有远程桌面登录特权、此用户添加到本地 “Distributed COM Users” 组特权、通过安全组委派拥有 “Distributed COM Users” 组特权、MSSQL 上被授予 SA 特权、执行约束委派特权 数量信息

EXECUTION RIGHTS

OUTBOUND CONTROL RIGHTS 显示 一级对象控制、通过组委派控制对象、传递对象控制 的出站数量

OUTBOUND

INBOUND CONTROL RIGHTS 显示直接控制此用户的用户、组或计算机、通过安全组委派控制此对象的主体、活动目录中可以通过基于 ACL 的攻击实现对该对象的控制 的入站数量

INBOUND

  1. 分析

程序自带常用的数据查询语句,语句的具体作用直接参照下图

Analysis

# 数据展示界面

在数据展示界面空白处,鼠标右键可以弹出图表选项,这里可以添加节点、添加边缘、刷新布局、重新加载查询、更改布局、导入图表、导出图表

  • 添加节点

添加节点我们需要输入节点名节点类型,节点类型有用户、用户组、计算机、域、组织、组策略,节点名这里除了计算机的后缀是 .domain.com 结尾,其它节点均以 @domain.com 结尾

add nodes

  • 添加边缘

添加边缘我们需要输入源节点边缘类型目标节点,这里的边缘类型有点多,后面再说如何查看这些类型信息

add edge

  • 刷新布局、重新加载查询、更改布局这三个就是字面上的意思,没什么好说的

  • 导入图表可以将之前导出的 JSON 图表文件导入 BloodHound 查看,只支持导入 JSON 文件

  • 导出图表可以将当前的图表数据导出为 JSON 文件或 PNG 图片文件

# 图表控件

Graph

图表控件的功能和我们直接在图形界面对节点操作菜单几乎一样,这里只谈一下设置里主要功能 Query Debug Mode,其它功能并不重要

setting

在设置里的 Query Debug Mode 默认是不启用的,启用后它可以把我们的平时查询的语句显示在 Raw Query,如果需要查看对应数据查询语句,就把它勾选上

# 放大缩小控件

ActiveX

这个可以对数据图表进行放大、缩小和恢复预设的控件,其实并没有什么作用,因为可以直接通过鼠标的滚轮对数据图表进行放大、缩小操作。。。哈哈哈哈哈哈哈哈哈

# 查询语法栏

Raw Query

这里可以直接执行 Neo4j 的语法对数据库进行自定义的查询,这个我是没有学过啦,但是有时会启用 Query Debug Mode 查看对应数据的查询语句,然后再改成自己想要查看的对象值,不过启用了 Query Debug Mode 查询数据的时候会很卡,不知道是不是因为我虚拟机的问题,但是平时用的不多,所以也不去折腾了

# Example

这里拿个简单的例子说明一下,我搜从 Exchange 这台服务器到域账号 Bob 的路径,这时 Bloodhound GUI 就会把分析后的有效路径展现出来

ex to bob

由于我的测试环境非常简单,并没什么复杂路径,开始节点 Exchange 这台服务器属于 Exchange Trusted Subsystem 安全组,这个安全组又属于 Exchange Windows Permissions 安全组,同时它也有添加成员的权限,Exchange Windows Permissions 安全组可以通过强制更改密码获取到 Bob 这个账户,同时还可以通过写入或修改 DACL 访问权,授予自己获取到 Bob 这个账户任意权限,由此可见,我们可以通过 Exchange 这台服务器就可以直接控制 Bob 这个账户

我们可以先登录到 DC 验证一下这个结果,首先登录到 DC,然后打开 Active Directory 用户和计算机EXCHANGE 这台计算机在 Computers 这个容器里,找到后右键查看其属性,在隶属于选项里可以看到 EXCHANGE 确实是属于 Exchange Trusted Subsystem 安全组,Exchange Trusted Subsystem 安全组在 demo.c/Microsoft Exchange Security Group 目录下,这个 OU 默认是隐藏的,必须在 Active Directory 用户和计算机查看选项里勾选上高级功能才能查看,这里通过 Exchange Windows Permissions 安全组的描述可以知道,隶属于这个安全组的成员可以读取和修改所有的 Windows 账户和组
Exchange

advance

这里可能会有大部分人对这些边缘权限并不太了解,不知道它的作用是什么,要怎么利用,其实 BloodHound 已经提供了非常完善的帮助信息给我们,我们只需要鼠标右键选中边缘类型,就会弹出该边缘的菜单,选择 Help 查看该权限帮助信息

help

帮助信息分为四个部分,info 描述该权限的基本信息,Abuse info 描述该权限如何利用,Opsec Considerations 描述了利用该权限的注意事项,References 提供了该权限一些参考文档、利用软件、视频教程等链接,这个可以说是非常贴心了

# Closing

好了,BloodHound 的功能和用法我基本把自己知道的全部汇总出来了,总体来说并没有太过于复杂的功能,主要是需要学习边缘权限利用的知识,它自身也提供很完善的知识库,不过都是英文文档,如果英文好的朋友学习起来并没什么困难,对我这种学渣而言就只能靠翻译了🙃

BloodHound 官网文档:https://bloodhound.readthedocs.io/en/latest/
Github 项目地址:https://github.com/BloodHoundAD/BloodHound

Edited on Views times

Give me a cup of [coffee]~( ̄▽ ̄)~*

Bob WeChat Pay

WeChat Pay

Bob PayPal

PayPal

Bob Alipay

Alipay