BloodHound使用指南

微信扫一扫,分享到朋友圈

BloodHound使用指南

BloodHound是一种单页的JavaScript的Web应用程序,能显示Active Directory环境中隐藏的和相关联的主机内容。攻击者常使用BloodHound识别高度复杂的攻击路径,防御者亦可借助其识别和防御相同的攻击路径。本文由锦行科技的安全研究团队提供(作者:randall),旨在帮助大家深入了解BloodHound工具的使用。

一、环境配置

Neo4j

BloodHound 使用neo4j数据库,需要配备java环境。

国内的neo4j下载地址,版本建议使用3.5.版本,因为BloodHound-Tools不兼容4.版本,生成测试数据时会报错

neo4j-chs-community-3.5.19下载完之后,进入bin目录下,执行命令

neo4j.bat console

可以看到neo4j成功启动了

有一点需要注意的是,在win7的低版本的powershell中,会出现未能加载Neo4j-Management.psd1模块的情况,所以需要使用desktop版本的neo4j

desktop版本安装好后新建一个local database,设置密码为neo4jj ,版本选择3.5.19 ,创建成功后启动neo4j

BloodHound

去github下载最新版本的bloodhound,如果github下载速度太慢可以用gitee上的镜像仓库加速下载

使用neo4j的账户密码登录,默认账户是neo4j,密码用刚刚我们设置的密码neo4jj

BloodHound-Toools

创建一个随机的数据集,用来测试和分析BloodHound,项目地址在这里

https://github.com/BloodHoundAD/BloodHound-Tools/tree/master/DBCreator

需要python3.7+的版本和neo4j驱动程序,并且需要注意的是,该脚本仅适用于BloodHound 3.0.0及更高版本,且不适配neo4j 4.*版本的数据库

可以使用pip安装neo4j驱动程序:

pip install neo4j-driver

或者

pip install -r requirements.txt

dbconfig - 设置数据库连接信息
connect - 连接到数据库
setnodes - 设置要生成的节点数(默认为500)
setdomain - 设置域的名称
cleardb - 清空数据库并设置正确的模式
generate - 在数据库中创建随机数据
clear_and_generate - 连接数据库,清空数据库,设置模式以及创建随机数据
help - 获取帮助
exit - 退出

dbconfig命令默认的账户密码为neo4j/neo4jj ,如果你的数据库密码不是这个,建议在 DBCreator.py 的第48行将默认密码改为你现在的数据库密码,然后使用 clear_and_generate 一键生成随机数据

二、数据收集

使用BloodHound自带的工具进行数据收集,工具链接在这里:

https://github.com/BloodHoundAD/BloodHound/tree/master/Ingestors

.\SharpHound.exe

按照默认的方式收集Container, Group, LocalGroup, GPOLocalGroup,Session, LoggedOn, ObjectProps, ACL, ComputerOnly, Trusts, Default, RDP, DCOM, DCOnly 的数据,也可以用 -c 参数指定要收集的数据类型,如 -c Session,RDP,ACL

常见用法
循环收集2小时12分23秒,循环间隔20分钟,若不指定Loopduration,则默认循环2个小时
.\SharpHound.exe --Loop --Loopduration 02:12:23 --LoopInterval 00:20:0
指定输出路径为C:test\
.\SharpHound.exe --OutputDirectory C:\test\
指定域
.\SharpHound.exe -d hacklan.com

三、BloodHound

BloodHould界面

BloodHound 的左上角界面

其中 更多信息 页面,包含了数据库信息,节点信息以及查询这几大块。

搜索 可以将搜索范围指定为特定节点类型,如

Group
Domain
Computer
User
OU
GPO

比如我要搜索类型为computer中的00351号,输入 computer:00351 ,其他的也同理

搜索 还有个高级用法,pathfinding路径搜索,这种搜索方式极为强悍,直接搜索该节点到目标节点路径,假设我们拿下了COMP00041.TESTLAB.LOCAL ,想要知道该节点到达高价值目标DOMAIN ADMINS@TESTLAB.LOCAL 的路径,用下面的方式搜索,会自动规划好一条到达目标的最短路线。

Edge 类型过滤 选择是否显示该 Edge ,默认全部显示,如果你取消了某种Edge,那么在进行新的查询之后将不会显示与该Edge有关的结果

界面右边的控件说明

导出图表 可以导出为 JSON 和 Image 两种格式;

上传数据 主要上传前面收集到的数据,可以通过这个按钮来上传,也可以直接拖数据到主页面上传;

节点崩溃阈值 默认是5,0是关闭;

Edge标签显示 和 节点标签显示 有三种选择,分别是Threshold Display、Always Display、Never Display,而Threshold Display意味着当你放大到临界点时才显示,按CTRL可快速切换不同的节点标签显示方式;

查询Debug模式 转储查询语句并输出到界面正下方Raw Query中;

还有一个空格快捷键,按下空格键将调出Spotlight窗口,

会列出当前绘制的所有节点,单击列表中的一个节点,将放大并简要突出显示该节点。

鼠标右键空白处时,会弹出以下内容

鼠标右键任一节点时,会弹出以下内容

认真看每个节点时,可能会发现有些节点和别的不太一样,有些有钻石图标还有靶子的图标,那些是什么意思呢?

蓝色位置图标意味着这是开始节点 ;

白色骷髅头说明是已拥有节点;

红色靶子图标是目标节点;

钻石图标则是高价值目标;

节点

点击节点时,可以看到 Node Info 处的节点信息

节点又细分为6种,分别是Users用户、Groups组、Computers计算机、Domain域、GPOs组策略对象、OUs组织单位;

而用户的节点部分信息如下:

第一行的SMALLIS00368@TESTLAB.LOCAL中的SMALLIS00368是SAM账户名,TESTLAB.LOCAL是该用户所在域的域名。

Sessions

该用户登录的计算机数量

Reachable High Value Targets

用户可到达高价值目标数量,默认的高价值目标是域管理员,域控制器和其他几个高特权Active Directory组的任何计算机或用户

节点属性

– Object ID

用户的SID

– Password Last Changed

密码上次更改的日期

– Last Logon

用户最后一次登录的时间

– Enabled

是否在活动目录中启用该用户

– Compromised

是否标记为拥有

组成员

– First Degree Group Memberships

此用户所属的组

– Unrolled Group Memberships

用户显式所属的组已添加到这些组

– Foreign Group Memberships

用户所属的其他AD域中的组

本地管理员权限

– First Degree Local Admin

用户被添加到本地管理员组中的计算机数,被添加到N台计算机的本地管理员组中,则数量为N

– Group Delegated Local Admin Rights

用户通过安全组委派从而拥有本地管理员权限的计算机数

– Derivative Local Admin Rights

用户具有派生本地管理员权限的计算机数量

执行特权

– First Degree RDP Privileges

已将此用户添加到本地“远程桌面用户”组的计算机数

– Group Delegated RDP Privileges

该用户通过安全组委派拥有远程桌面登录权限的计算机数

– First Degree DCOM Privileges

已将此用户添加到本地”Distributed COM Users”组的计算机数

– Group Delegated DCOM Privileges

该用户具有组委派DCOM权限的计算机数

– SQL Admin Rights

用户在MSSQL上被授予SA特权的计算机的数量

– Constrained Delegation Privileges

信任此用户执行约束委派的计算机的数量

出站对象控制

– First Degree Object Control

用户可以在不依赖安全组委派的情况下控制的活动目录中的对象数

– Group Delegated Object Control

用户通过安全组委派控制的对象数

– Transitive Object Control

在活动目录中执行仅基于ACL的攻击,此用户可以控制的对象数。也就是说,用户只需操纵目录中的对象,即可获得控制权的最大对象数

入站对象控制

– Explicit Object Controllers

直接控制此用户的用户、组或计算机的数量

– Unrolled Object Controllers

通过安全组委派控制此对象的主体的实际数量

– Transitive Object Controllers

活动目录中可以通过基于ACL的攻击实现对该对象的控制的对象数

组节点比用户节点多了个Group Members ,虽然与Group Membership都是组成员的意思,但Group Membership更偏向于组成员之间的一种关系,Group Members则仅仅指成员这一部分。

– Direct Members

添加到该组的成员数量

– Unrolled Members

属于该组的实际用户数

– Foreign Members

属于该组的其他域的用户数

计算机节点则是将 Execution Privileges 细分成了Inbound Execution Privileges 和 Outbound Execution Privileges ,Outbound Execution Privileges 则与原来的 Execution Privileges 相似,

入站执行特权

– First Degree Remote Desktop Users

被添加到本地的远程桌面用户组的主体数量

– Group Delegated Remote Desktop Users

组委派的具有RDP权限的用户数量

– First Degree Distributed COM Users

添加到本地“Distributed COM Users”组的主体数量

– Group Delegated Distributed COM Users

具有嵌套组成员身份访问此系统的DCOM的用户数

– SQL Admins

在此系统运行的MSSQL实例上具有SA特权的用户数

组策略对象GPOs有个Affected Objects

– Directly Affected OUs

GPO连接到域/OU的数量

– Affected OUs

受GPO影响的OU数量

– Computer Objects

适用GPO的计算机数

– User Objects

适用GPO的用户数

组织单位OUs的Extra Properties里有个blocksInheritance,是否阻止组策略实施继承的意思,在未强制执行GPLink的情况下,一旦阻止继承,则GPO不会应用在与其链接的OU和所有的子对象上。

GPOs Directly Affecting This OU 直接链接到这个OU的GPO数
GPOs Affecting This OU 直接或者间接应用于此OU的GPO数量
Total User Objects 此OU包括子OU的所有用户总数
Total Group Objects 此OU的安全组数
Total Computer Objects 此OU下的计算机对象数
Sibling Objects within OU 此OU的同级对象总数

EDGE

默认Edge

MemberOf 此节点是上一节点的成员,由末端指向上的尖端,如图,所有的域管理员属于域管理员组。

HasSession

用户与计算机时进行会话时,凭据会保留在内存中,可用LSASS注入或者凭据转储来获取用户凭据,图中该用户在两台计算机上存在会话。

AdminTo

末端是尖端的本地管理员,本地管理员对这台计算机的管理权限比较大,下面的这个用户组是前一台计算机的本地管理员

ACL Edges

– AllExtendedRights

扩展权限是授予对象的特殊权限,这些对象允许读取特权属性以及执行特殊操作;如果对象是用户,则可以重置用户密码;如果是组,则可以修改组成员;如果是计算机,则可以对该计算机执行基于资源的约束委派

– AddMember

可以向目标安全组添加任意成员

– ForceChangePassword

可以任意重置目标用户密码

– GenericAll

可以完全控制目标对象

– GenericWrite

写入权限,修改目标的属性或者将主体添加入组等

– Owns

保留修改 security descriptors 的能力,会忽略DACL权限的限制

– WriteDacl

可写入目标DACL,修改DACL访问权

– WriteOwner

保留修改 security descriptors 的能力,会忽略DACL权限的限制

– ReadLAPSPassword

读取LAPS上的本地管理员凭证

– ReadGMSAPassword

读取GMSA上的本地管理员凭证

Containers

– Contains

可以在OU上添加一个新的ACE,它将继承到该OU下的所有子对象上,比如说在OU上应用GenericAll ACE ,那么所有子对象都将继承GenericAll属性

– GpLink

将其设置为链接容器中的对象

特殊 Edges

– CanRDP

用远程桌面进行会话

– CanPSRemote

用PowerShell进行会话

– ExecuteDCOM

实例化目标的COM对象并调用其方法,可以在特定条件下执行代码

– AllowedToDelegate

有这个特权的节点可以将任何域主体(包括Domain Admins)模拟到目标主机上的特定服务

– AddAllowedToAct

可以控制任意的安全主体伪装为特定计算机的任何域用户

– AllowedToAct

可以使用此用户滥用S4U2self / S4U2proxy进程,将任何域用户模拟到目标计算机系统,并以“该 用户”身份接收有效的服务票证

– SQLAdmin

该用户是目标计算机的MSSQL管理员

– HasSIDHistory

用户的SID历史记录,用户在域迁移后,票据还包含着前域所在组的SID,虽然用户不属于前域,但仍拥有前域的权限

内置查询语句

  • Find all Domain Admins
    找出所有域管理员
  • Find Shortest Paths to Domain Admins
    找出域管理员的最短路径
  • Find Principals with DCSync Rights
    查找具有DCSync权限的主体
  • Users with Foreign Domain Group Membership
    具有外部域组成员资格的用户
  • Groups with Foreign Domain Group Membership
    具有外部域组成员资格的组
  • Map Domain Trusts
    映射域信任关系
  • Shortest Paths to Unconstrained Delegation Systems
    到无约束委托系统的最短路径
  • Shortest Paths from Kerberoastable Users
    到支持kerberos的用户的最短路径
  • Shortest Paths to Domain Admins from Kerberoastable Users
    从支持kerberos的用户到域管理员的最短路径
  • Shortest Path from Owned Principals
    从所属主体获取的最短路径
  • Shortest Paths to Domain Admins from Owned Principals
    从已拥有的主体到域管理员的最短路径
  • Shortest Paths to High Value Targets
    通往高价值目标的最短路径
  • Find Computers where Domain Users are Local Admin
    找出域用户是本地管理员的计算机
  • Shortest Paths from Domain Users to High Value Targets
    从域用户到高值目标的最短路径
  • Find All Paths from Domain Users to High Value Targets
    找出所有从域用户到高价值目标的路径
  • Find Workstations where Domain Users can RDP
    找出域用户使用RDP登录的工作站
  • Find Servers where Domain Users can RDP
    找出域用户使用RDP登录的服务器
  • Find Dangerous Rights for Domain Users Groups
    找出域用户组的高危权限
  • Find Kerberoastable Members of High Value Groups
    找出属于高价值组的可支持kerberos的成员
  • List all Kerberoastable Accounts
    列出所有可支持kerberos的帐户
  • Find Kerberoastable Users with most privileges
    查找具有最多特权的且可支持kerberos的用户
  • Find Domain Admin Logons to non-Domain Controllers
    找出非域控制器的域管理登录
  • Find Computers with Unsupported Operating Systems
    查找不支持操作系统的计算机
  • Find AS-REP Roastable Users (DontReqPreAuth)
    找出支持AS-REP的用户

案例

假设我们已经控制了COMP00311.TESTLAB.LOCAL,目标节点则是DOMAIN ADMINS@TESTLAB.LOCAL,使用预定义的查询语句Shortest Paths to Domain Admins from Owned Principals,查找从已拥有的主体到域管理员的最短路径

从图片上看,我们已经拥有了针对域管的进攻路线,计算机节点COMP00311.TESTLAB.LOCAL与用户SLUHMAN00256@TESTLAB.LOCAL之间存在HasSession的关系,可以使用 PTH哈希传递攻击 获取用户SLUHMAN00256@TESTLAB.LOCAL的权限,而该用户又属于IT00369@TESTLAB.LOCAL组,这个组是计算机COMP00276.TESTLAB.LOCAL的本地管理员组,所以说用户SLUHMAN00256@TESTLAB.LOCAL就是计算机COMP00276.TESTLAB.LOCAL的本地管理员,然而这台计算机上存在用户SMUNDAY00240@TESTLAB.LOCAL的会话,所以使用PTH攻击获取该用户的权限,而这个用户又属于DOMAIN ADMINS@TESTLAB.LOCAL组,所以用户SMUNDAY00240@TESTLAB.LOCAL就是域管理用户,所以我们就拿到了域管理权限。

华为5nm麒麟9000备货量曝光:Mate 40系列且买且珍惜

上一篇

球蟒能当口罩?英男子现身说法

下一篇

你也可能喜欢

BloodHound使用指南

长按储存图像,分享给朋友