TheHive-Project/TheHive4py

GitHub: TheHive-Project/TheHive4py

TheHive4py 是用于与 TheHive 5 交互的 Python 客户端库,解决安全事件管理中的 API 调用与数据编排问题。

Stars: 237 | Forks: 149

TheHive Logo

thehive4py

the de facto Python API client of TheHive

release build codecov pypi license discord

**文档**:https://thehive-project.github.io/TheHive4py **源代码**:https://github.com/TheHive-Project/TheHive4py # 简介 **最新动态:** 这是一个为 TheHive 5 量身重建的 `thehive4py` 版本。敬请期待,我们还有更多令人兴奋的更新! 欢迎使用 `thehive4py`,这是一个旨在简化与 TheHive 5.x 交互的 Python 库。无论您是网络安全爱好者,还是希望将 TheHive 集成到 Python 项目中的开发者,本库都能为您提供全面支持。 请自由探索该库的功能,并为它的发展贡献力量。我们感谢您对使 Python 中的 TheHive 集成更加便捷高效的支持。 # 快速入门 ## 系统要求 `thehive4py` 兼容所有当前受支持的 Python 版本。您可以[点击此处](https://devguide.python.org/versions/)查看官方版本支持与生命周期状态。 ## 安装 `thehive4py` 可通过 pip 安装,如下所示: ``` pip install thehive4py ``` ## 创建客户端 您可以通过两种不同的方式创建 `thehive4py` 客户端实例,具体取决于您的认证方式: **方法 1:用户名/密码认证** 如果您使用用户名和密码进行认证,可以按如下方式创建客户端: ``` from thehive4py import TheHiveApi hive = TheHiveApi( url="https://thehive.example.com", username="analyst@example.com", password="supersecret", ) ``` **方法 2:API 密钥认证** 或者,如果您更倾向于使用 API 密钥进行认证,请使用以下方法: ``` from thehive4py import TheHiveApi hive = TheHiveApi( url="https://thehive.example.com", apikey="h1v3b33", ) ``` 请选择最适合您需求和安全要求的认证方式。 ## 创建告警 要创建一个新告警,您可以使用客户端的 `alert.create` 方法,并传入以下必需字段: - `type`:告警类型。 - `source`:告警来源。 - `sourceRef`:告警的唯一引用。 - `title`:描述性标题。 - `description`:描述告警的附加信息。 以下示例演示了如何使用这些必需字段创建新告警: ``` my_alert = hive.alert.create( alert={ "type": "my-alert", "source": "my-source", "sourceRef": "my-reference", "title": "My test alert", "description": "Just a description", } ) ``` 上述代码片段将创建一个仅包含必需字段的新告警,并将返回的告警对象存储在 `my_alert` 变量中。 ## 添加告警可观测对象 为了让告警更具信息量和可操作性,您可以为其添加可观测对象。可观测对象是与告警相关的特定数据。在本例中,我们将为之前的告警添加两个可观测对象:一个 IP 地址 `93.184.216.34` 和一个域名 `example.com`。 **方法 1:逐个添加可观测对象** 您可以使用 `alert.create_observable` 方法将可观测对象添加到现有告警,如下所示: ``` hive.alert.create_observable( alert_id=my_alert["_id"], observable={"dataType": "ip", "data": "93.184.216.34"}, ) hive.alert.create_observable( alert_id=my_alert["_id"], observable={"dataType": "domain", "data": "example.com"}, ) ``` 此方法适用于在告警创建后添加可观测对象。 **方法 2:在创建告警时添加可观测对象** 或者,如果您在创建告警时已知这些可观测对象,可以直接在告警创建方法中使用 `observables` 字段,以更简洁的方式完成: ``` my_alert = hive.alert.create( alert={ "type": "my-alert", "source": "my-source", "sourceRef": "my-reference", "title": "My test alert", "description": "Just a description", "observables": [ {"dataType": "ip", "data": "93.184.216.34"}, {"dataType": "domain", "data": "example.com"}, ], } ) ``` 这种方法不仅能减少额外的网络请求,还能降低出错概率,使代码更高效、更可靠。 通过将可观测对象纳入告警,您为进一步的分析和事件响应提供了有价值的信息和上下文。 ## 更新告警 如果您需要向现有告警添加或修改字段,可以轻松使用客户端的 `alert.update` 方法。在此示例中,我们将添加标签 `my-tag` 并修改告警标题: ``` hive.alert.update( alert_id=my_alert["_id"], fields={ "title": "My updated alert", "tags": ["my-tag"], }, ) ``` 上述代码会更新告警标题并向 TheHive 添加新标签。 需要注意的是,Python 代码中的 `my_alert` 对象不会自动反映这些更改。`thehive4py` 不提供对象关系映射功能。要获取修改后的最新告警信息,您需要重新获取: ``` my_alert = hive.alert.get(alert_id=my_alert["_id"]) ``` 完成此请求后,`my_alert["title"]` 将变为 `"My Updated Alert"`,`my_alert["tags"]` 将包含 `"my-tag"`。这样可以确保您的 Python 代码拥有最新的信息。 ## 创建案件 在 `thehive4py` 中,您有两种方式创建案件:要么将现有告警提升为案件,要么创建一个全新的空案件。 **方法 1:将现有告警提升为案件** 您可以使用 `alert.promote_to_case` 方法将现有告警转换为案件,并将其与该告警关联: ``` my_case = hive.alert.promote_to_case(alert_id=my_alert["_id"]) ``` 此方法会基于现有告警创建一个案件,并自动将告警分配给该案件。告警中的所有可观测对象也会被复制为案件可观测对象。 **方法 2:创建空案件** 或者,您可以使用 `case.create` 方法创建一个全新的空案件: ``` my_case = hive.case.create( case={"title": "My First Case", "description": "Just a description"} ) ``` 此方法会创建一个没有任何告警或可观测对象的新案件。 若之后需要将现有告警合并到新案件中,可以使用 `alert.merge_into_case` 方法: ``` hive.alert.merge_into_case(alert_id=my_alert["_id"], case_id=my_case["_id"]) ``` 通过选择适合您工作流程的方法,您可以高效地在 TheHive 中管理案件和告警。 ## 查询案件可观测对象 要从案件中检索可观测对象,可以使用 `thehive4py` 提供的 `case.find_observables` 方法。该方法支持多种过滤和查询选项,让您能够检索特定或全部与案件关联的可观测对象。 ### 检索案件的所有可观测对象 要检索案件的所有可观测对象,请使用以下代码: ``` case_observables = hive.case.find_observables(case_id=my_case["_id"]) ``` ### 检索特定可观测对象 如果您希望基于特定条件检索可观测对象,可以利用 TheHive 强大的查询功能。更多细节请参考官方 [查询 API 文档][query-api-docs]。 以下是如何检索 IP 类型可观测对象的示例: ``` ip_observable = hive.case.find_observables( case_id=my_case["_id"], filters=Eq("dataType", "ip") & Like("data", "93.184.216.34") ) ``` 在此示例中,我们使用 `Eq`、`Like` 以及 `&` 运算符来指定查询条件。您也可以使用基于字典的方法进行过滤: ``` ip_observable = hive.case.find_observables( case_id=my_case["_id"], filters={ "_and": [ {"_field": "dataType", "_value": "ip"}, {"_like": {"_field": "data", "_value": "93.184.216.34"}}, ] } ) ``` 基于字典的方法可行,但我们推荐使用内置的过滤类来构建查询表达式,因其更易用。 目前,过滤类支持以下运算符: - `&`:用于查询 API 的 `_and` 构造。 - `|`:用于查询 API 的 `_or` 构造。 - `~`:用于查询 API 的 `_not` 构造。 这些运算符提供了一种便捷且直观的方式来构建复杂查询。 # 开发 ## 设置虚拟环境(可选) 强烈建议使用虚拟环境进行干净且隔离的 Python 开发。它可以帮助您管理项目特定依赖项,并避免与其他项目产生冲突。如果您不了解虚拟环境的使用方法,请[点击此处](https://docs.python.org/3/library/venv.html#module-venv)了解更多。 ## 安装开发包 如果您是首次向 GitHub 项目贡献代码,请先熟悉[贡献指南](https://docs.github.com/en/get-started/quickstart/contributing-to-projects)。 导航到克隆的仓库目录,并使用 pip 安装带有开发依赖的包: ``` pip install -e .[dev] ``` 此命令将以可编辑模式(`-e`)安装该包,并包含额外的开发依赖项。 现在,您已在该开发环境中安装 `thehive4py` 包,准备好进行贡献。 ## 贡献 要向 `thehive4py` 贡献代码,请遵循以下步骤: 1. **创建问题**:首先创建一个问题,描述您希望解决或添加的功能。这有助于讨论和协调与其他贡献者的工作。 2. **创建分支**:一旦问题确定,请为其创建一个分支。命名约定为:`-title-of-branch`。例如,如果您正在处理问题 #1 并更新 README,请将分支命名为 `1-update-readme`。 ## 在推送更改前运行 CI 检查 该项目使用 [nox] 库来定义和运行自动化开发脚本。 为确保更改的完整性并维护代码质量,您可以使用本地 `noxfile.py` 提供的会话。 例如,您可以在推送更改到仓库前运行 CI 检查: ``` nox ``` 这将触发除测试之外的所有 CI 检查(默认情况下 `noxfile.py` 已配置为如此)。 要单独运行某个检查,可以列出所有可用的会话: ``` nox --list ``` **方法 2:使用预提交钩子(实验性)** 为了更流畅的工作流程,您可以安装该仓库提供的预提交钩子。这些钩子将在每次提交前自动执行检查。安装方法如下: ``` pre-commit install ``` 启用预提交钩子后,您的将在每次提交时自动验证是否符合编码标准和其他质量检查。这有助于在早期发现问题并确保贡献流程顺畅。 ## 测试 `thehive4py` 主要依赖集成测试,这些测试针对真实的 TheHive 5.x 实例执行,以确保库在接近真实使用环境中的功能正确性。 ### 测试要求 由于测试套件依赖本地运行的 TheHive 5.x 容器,因此必须安装本地 Docker 引擎。 如果您不熟悉 Docker,请查阅[官方文档][get-docker]。 ### 测试设置 测试套件使用官方的 [thehive-image] 创建本地名为 `thehive4py-integration-tester` 的容器,该容器将作为唯一标识符。 该容器会随机暴露 TheHive 端口,以避免与其他容器冲突。 测试套件可以通过查询容器信息来识别该随机端口。 一旦 TheHive 可用,套件将初始化实例并设置测试所需的内容(例如测试用户、组织等)。 请注意,由于初始设置,首次运行测试可能需要较长时间等待所有服务启动。后续运行的启动时间会显著缩短。 ### 本地测试执行 要本地执行整个测试套件,可以使用 `noxfile.py` 提供的 `test` 会话,如下所示: ``` nox --session=test ``` 或 ``` nox -s test ``` 简写形式。 请注意,以上命令将执行完整的测试套件,可能需要几分钟才能完成。 如果只想执行部分测试套件,可以通过在会话后添加额外参数来实现,例如: ``` nox -s test -- tests/test_observable_endpoint.py -v ``` 该 nox 命令会将 `--` 之后的参数传递给底层的 `pytest` 命令。
标签:API 客户端, CIDR查询, Discord 社区, PyPI, Python, Python API 客户端, Python SDK, REST API, SOAR, TheHive, TheHive4py, TheHive 项目, 代码覆盖率, 威胁情报, 安全运营, 开发者工具, 开源客户端, 扫描框架, 文档站点, 无后门, 逆向工具