Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/falconforceteam/falconhound
渗透测试威胁情报
GitHubfalconforceteam/falconhound

FalconHound

用于蓝队的自动化 BloodHound 图更新器。通过来自 SIEM 的实时会话、组和 CVE 数据丰富 AD 攻击路径,实现持续监控和告警。

查看仓库
82659135个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Maintenance Twitter Discord Shield

FalconHound

logo


注意:

自BloodHound CE 7.0版本发布以来,默认数据库已切换为Postgres。此版本的FalconHound仍然依赖Neo4j作为默认数据库。 如果您想在运行最新BloodHound版本的同时继续使用FalconHound,请在您的bloodhound.config.json文件中添加以下行。```json "graph_driver": "neo4j",

BloodHound 团队将在至少一年内继续支持 Neo4j。在此时间范围内,希望要么有重大的 API 改进,要么我们已为 FalconHound 实现了 PGSQL 支持。

---

FalconHound 是一个蓝队多工具。它允许你以更自动化的方式利用和增强 BloodHound 的能力。它设计用于与 SIEM 或其他日志聚合工具配合使用。

BloodHound 的一个挑战在于它是时间点的快照。FalconHound 包含可用于保持环境图最新状态的功能。这使你能够看到环境当前的状态。这对于持续变化的环境尤其有用。

BloodHound 最难收集的关系之一是本地组成员身份和会话信息。作为蓝队成员,我们在日志中随时可以获得这些信息。FalconHound 可用于收集这些信息并将其添加到图中,供 BloodHound 使用。

这只是 FalconHound 用途的一个例子。它可用于收集日志或安全工具中的任何信息,并将其添加到 BloodHound 图中。

此外,该图还可用于触发警报或生成富化列表。
例如,如果用户被添加到某个组,FalconHound 可用于查询图数据库,找到通往敏感或高特权组的最短路径。如果存在路径,则可以将其记录到 SIEM 或用于触发警报。

其他可以使用 FalconHound 的例子:
- 根据登录和注销事件,在图中添加、删除或超时会话。
- 当用户或计算机在 Sentinel 或 MDE 中有事件时,将其标记为已失陷。
- 将 CVE 信息以及是否存在公开漏洞的信息添加到图中。
- 各种 Azure 活动。
- 当用户被添加到组或拥有新角色时,重新计算通往敏感组的最短路径。
- 向图中添加新用户、组和计算机。
- 为 Sentinel 和 Splunk 生成富化列表,例如可 Kerberoast 的用户或拥有某些实体的所有权的用户。

这里的可能性是无穷的。请向问题跟踪器添加更多想法或提交 PR。

更多关于我们开发原因及一些用例示例的博客文章可[在此](https://medium.com/falconforce/falconhound-attack-path-management-for-blue-teams-42adedc9cae5?source=friends_link&sk=9f64b6b3028c5a2a6087d63b4fd2c82f)找到。

索引:
- [支持的数据源和目标](#supported-data-sources-and-targets)
- [安装](#installation)
- [使用](#usage)
- [操作](#actions)
- [图的扩展](#extensions-to-the-graph)
- [凭据管理](#credential-management)
- [部署](#deployment)
- [许可证](#license)

## 支持的数据源和目标

FalconHound 设计用于与 BloodHound 配合使用。它不是 BloodHound 的替代品。它旨在以自动化的方式利用 BloodHound 及其支持的所有其他数据平台的能力。

目前,FalconHound 支持以下数据源和/或目标:
- Azure Sentinel
- Azure Sentinel 监视列表
- Splunk
- Microsoft Defender for Endpoint
- Neo4j
- MS Graph API(早期阶段)
- CSV 文件
- Azure 数据资源管理器(ADX) - 测试版
- LogScale
- BloodHound CE 和 BHE(早期阶段)
- MarkDown 文件
- Elastic(早期阶段)

未来计划支持更多数据源和目标。

目前,FalconHound 仅支持 BloodHound 的 Neo4j 数据库。对 BH CE 和 BHE API 的支持正在积极开发中。

---

## 安装

由于 FalconHound 用 Go 编写,无需安装。只需从发布部分下载二进制文件并运行即可。
有适用于 Windows、Linux 和 macOS 的编译好的二进制文件。你可以在[发布](https://github.com/FalconForceTeam/FalconHound/releases)部分找到它们。

在运行之前,你需要创建一个配置文件。你可以在根文件夹中找到示例配置文件。关于如何创建所有凭据的说明可[在此](https://github.com/falconforceteam/falconhound/blob/main/docs/required_permissions.md)找到。

推荐以计划任务或 cron 作业的方式运行 FalconHound。这样你可以定期运行它,保持你的图、警报和富化列表处于最新状态。

### 要求

- BloodHound,或者目前至少是 Neo4j 数据库。
- 一个 SIEM 或其他日志聚合工具。目前支持 Azure Sentinel 和 Splunk。
- 每个要通信的端点的凭据,具有[所需的权限](https://github.com/falconforceteam/falconhound/blob/main/docs/required_permissions.md)。

### 配置

FalconHound 使用 YAML 文件进行配置。你可以在根文件夹中找到示例配置文件。
下面将解释配置文件的每个部分。

---

## 使用

#### 默认运行

要运行 FalconHound,只需运行二进制文件并添加 `-go` 参数,以运行操作文件夹中的所有查询。```bash
./falconhound -go

列出所有已启用的操作

要列出所有已启用的操作,请使用 -actionlist 参数。这将列出 actions 文件夹中配置文件中所有已启用的操作。此参数应与 -go 参数结合使用。```bash ./falconhound -actionlist -go

### 使用选定动作运行
要运行选定的动作集,请使用 `-ids` 参数,后跟一个或多个逗号分隔的动作ID列表。这将运行参数中指定的动作,在测试、故障排除或需要特定、更频繁更新时非常方便。此参数应与 `-go` 参数结合使用。```bash
./falconhound -ids action1,action2,action3 -go

使用不同的配置文件运行

默认情况下,FalconHound会在当前目录中查找配置文件。你也可以使用-config标志指定一个配置文件。这允许你使用不同的配置运行多个FalconHound实例,针对不同的环境。```bash ./falconhound -go -config /path/to/config.yml

#### 使用不同的 actions 文件夹
默认情况下,FalconHound 会在当前目录中查找 actions 文件夹。你也可以使用 `-actions-dir` 标志指定不同的文件夹。这使得测试和故障排除更加容易,同时也允许你使用不同的配置、针对不同的环境或不同的时间间隔运行多个 FalconHound 实例。```bash
./falconhound -go -actions-dir /path/to/actions

使用密钥保管库中的凭据运行

默认情况下,FalconHound 将使用 config.yml(或自定义加载的文件)中的凭据。通过设置 -keyvault 标志,FalconHound 将从配置中获取密钥保管库,并从中检索所有机密。如果密钥保管库中缺少某些项,它将回退到配置文件。如果您希望使用托管标识从 Azure 密钥保管库获取机密,请将 authtype 变量定义为 msi。```bash ./falconhound -go -keyvault

## 动作

动作是FalconHound的核心。它们是FalconHound将执行的查询。动作以源和目标的本机语言编写,并存储在 `actions` 文件夹中。每个动作是一个单独的文件,存储在信息来源的目录(即查询目标目录)中。文件名用作动作的名称。

### 动作文件夹结构

动作文件夹按查询源划分为子目录。所有文件夹将被递归处理,所有YAML文件将按字母顺序执行。

Neo4j动作**应**最后处理,因为其输出依赖于其他数据源先更新图形数据库,以获取最新结果。

### 动作文件

所有文件都是YAML文件。YAML文件包含查询、一些元数据以及查询信息的目标。

根文件夹中有一个模板文件。您可以使用它来创建自己的动作。更多示例请参考 `actions` 文件夹中的动作。

虽然大多数项目一目了然,但关于动作有一些重要事项需要注意:

#### 启用

顾名思义,这用于启用或禁用动作。如果设置为 `false`,该动作将不会运行。```yaml
Enabled: true

调试

此选项用于启用或禁用某个操作的调试模式。若设为 true,该操作将以调试模式运行,查询结果将输出到控制台。这对于测试和故障排查非常有用,但不建议在生产环境中使用。根据结果数量不同,它会减慢操作的处理速度。```yaml Debug: false

#### Query

`Query` 字段是针对源运行的查询。根据你的 `SourcePlatform`,这可以是 KQL 查询、SPL 查询或 Cypher 查询。
重要:尽量保持查询尽可能精确,并且只返回你需要的字段。这将使结果的处理更快、更高效。

另外,在运行 Cypher 查询时,确保结果 `RETURN` 一个 JSON 对象,否则处理将失败。
例如,这将返回 Azure Subscriptions 的 Name、Count、Role 和 Owners:```cypher
MATCH p = (n)-[r:AZOwns|AZUserAccessAdministrator]->(g:AZSubscription) 
  RETURN {Name:g.name , Count:COUNT(g.name), Role:type(r), Owners:COLLECT(n.name)}

目标

每个目标都有几个可以配置的选项。根据目标的不同,有些可能需要比其他目标更多的配置。 所有目标都有 Name 和 Enabled 字段。Name 字段用于标识目标。Enabled 字段用于启用或禁用目标。如果此项设置为 false,则该目标将被忽略。

CSV

CSV 支持 {{date}} 变量,该变量将被替换为格式为 YYYY-MM-DD 的当前日期。这可以用于创建每日报告。 此变量可用于文件夹或文件名中(例如 path/to/filename-{{date}}.csv)或文件夹名称本身。```yaml

  • Name: CSV Enabled: true Path: path/to/filename.csv
#### Markdown

Markdown 支持 {{date}} 变量,它将被当前日期替换,格式为 `YYYY-MM-DD`。这可用于创建每日报告。
这可以用于文件夹或文件名中(例如 `path/to/filename-{{date}}.md`),或者用于文件夹名称本身。```yaml
  - Name: Markdown
    Enabled: true
    Path: path/to/filename.md

示例输出:```markdown

Results for query: N4J_REPORT_DomainAdmins

Get a list of Domain Admins

Description: Get a list of Domain Admins. Date: 2024-02-19

NameObjectID
[email protected]S-1-5-21-1122334455-112233445-1112223334-11223344
#### Neo4j

Neo4j 目标会将查询结果写入 Neo4j 数据库。该输出是按行进行的,因此需要额外配置。由于我们可以在各个方向传输各种数据,FalconHound 需要理解如何处理这些数据。这可以通过在 Cypher 查询的第一行使用替换变量来实现。这些变量会作为参数传递给 Neo4j,并可在查询中使用。
`ReplacementFields` 字段配置如下。```yaml
  - Name: Neo4j
    Enabled: true
    Query: |
      MATCH (x:Computer {name:$Computer}) MATCH (y:User {objectid:$TargetUserSid}) MERGE (x)-[r:HasSession]->(y) SET r.since=$Timestamp SET r.source='falconhound'
    Parameters:
      Computer: Computer
      TargetUserSid: TargetUserSid
      Timestamp: Timestamp

参数部分定义了一组参数,这些参数将被查询结果中的值替换。可以使用 $parameter_name 语法将其引用为 Neo4j 参数。

Sentinel

Sentinel 目标会将查询结果写入 Sentinel 表。如果表不存在,则会创建该表。该表将在配置文件中指定的工作区内创建。查询中的数据将被添加到 EventData 字段中。EventID 将是操作 ID,Description 将是操作名称。

这也是为什么需要控制查询输出的原因,否则可能会淹没你的目标。```yaml

  • Name: Sentinel Enabled: true
#### Sentinel Watchlists

Sentinel Watchlists 目标会将查询结果写入 Sentinel 监视列表。如果监视列表不存在,则会创建该列表。监视列表将在配置文件中指定的工作区中创建。查询返回的所有列都将添加到监视列表中。```yaml
 - Name: Watchlist
    Enabled: true
    WatchlistName: FH_MDE_Exploitable_Machines
    DisplayName: MDE Exploitable Machines
    SearchKey: DeviceName
    Overwrite: true

WatchlistName 字段是观察名单的名称。DisplayName 字段是观察名单的显示名称。

SearchKey 字段是作为搜索键使用的列。

Overwrite 字段用于确定观察名单是被覆盖还是追加。如果设置为 false,查询结果将追加到观察名单中。如果设置为 true,观察名单将被删除并以查询结果重新创建。

Splunk

与 Sentinel 类似,Splunk 将查询结果写入 Splunk 索引。需要创建索引并将其与 HEC 端点关联。查询数据将被添加到 EventData 字段中。EventID 将是操作 ID,Description 将是操作名称。```yaml

  • Name: Splunk Enabled: true
#### Azure Data Explorer

类似于 Sentinel,Splunk 会将查询结果写入 ADX 表。查询数据将被添加到 EventData 字段中。EventID 将对应操作 ID,Description 将对应操作名称。```yaml
  - Name: ADX
    Enabled: true
    Table: "name"

要在 ADX 中创建表,你可以使用以下命令:```kql .create table FalconHound (Name: string, Description: string, EventID: string, BHQuery: string, EventData: dynamic, Timestamp: datetime)

### 图的扩展

#### 关系:HadSession
下载工具