souzomain/wazoo
GitHub: souzomain/wazoo
一个基于 Python 的 Wazuh 协议交互框架及服务器,用于接收 Agent 日志并转发至多种外部输出目标。
Stars: 2 | Forks: 0
Wazoo。基于 Python 的 Wazuh 框架
## 什么是 Wazoo Wazoo 是一个基于 Python 的 wazuh 框架,同时也是一个可以处理 wazuh agent 连接和日志记录的 wazuh 服务器。 **wazoo 并不替代 wazuh**。wazoo 是一个用于与 wazuh 协议交互的 Python 框架,并包含一个服务器选项,**它不像 wazuh 那样解码日志,只负责处理 wazuh 协议**。 Wazoo 服务器仅接收来自 wazuh agent 的日志,并解码加密消息,从而允许你扩展 wazuh 的功能。 你可以使用 wazoo 将日志发送到其他平台或进行新的集成。 我制作 wazoo 的初衷是为了研究 wazuh agent 的注册过程,但在这个过程中我产生了浓厚的兴趣,最终完成了这个框架和服务器。 **wazoo 是一个 wazuh 框架和服务器**。wazoo 可以作为你 Python 项目的库来使用,或者你也可以使用 wazoo 服务器来处理 wazuh agent 的连接。 你可以将 wazoo 作为双刃剑使用,**加密** 和 **解密** wazuh 协议。 通过 wazoo 服务器,你可以接收来自 wazuh agent 的日志,并将事件记录到 **TCP、UDP、Unix、TCP+SSL、文件或你自己的回调函数** 中。 # 快速开始 ## 框架 你可以使用 **wazoo** pypi 包来下载该框架。 ### 使用 uv 下载 你可以使用 uv 将 wazoo 作为依赖项添加到你的项目中。 ``` uv add wazoo ``` ### 使用 pip 下载 使用 pip 下载 wazoo 库。 ``` pip install wazoo ``` ## Wazoo 服务器 我使用该框架制作了这个 wazuh 服务器,以展示 wazuh 是如何处理 wazuh agent 连接的。我提供了一些选项来处理 wazuh agent 日志,并通过 TCP、UDP、文件、Unix 等方式进行发送。 用于运行服务器的 CLI 默认在 `./wazoo/__main__.py` 中配置。你可以使用 `wazoo` 工具来运行服务器。 ### 使用 Docker 运行 你可以使用以下方式运行此项目:*docker*、*uv* 或 *预编译二进制文件* 要使用 docker 运行 wazoo,你可以使用 ghcr.io (GitHub) 的 docker 仓库 ``` docker run -p 1515:1515 -p 1514:1514 ghcr.io/souzomain/wazoo:latest ``` ### 使用 uv 运行 同步依赖并运行服务器。`uv` 会自动将项目安装到一个独立的环境中: ``` uv sync uv run wazoo -v ``` `uv run wazoo` 会调用 CLI 入口点。你也可以将其作为模块运行: ``` uv run python -m wazoo -v ``` 使用以下命令列出所有可用选项: ``` uv run wazoo --help ``` ### 服务器配置 你可以配置 `./config.yml` 文件,按照你的偏好发送日志。 日志记录选项: - TCP + SSL (通过带有 SSL 的 TCP 发送); - TCP (通过 TCP 发送): - UDP (通过 UDP 发送); - 文件 (将日志存储在文件中); - Unix (发送到 Unix socket)。 所有你通过 `wazoo` 传递的选项都可以在 `./config.yml` 文件中进行配置。 要运行配置文件,你需要传递 `-c` 选项。 ``` wazoo -c config.yml ``` ### 配置示例 我将向你展示不同类型的配置。 #### 文件输出 这是一个文件输出的示例 ``` log: option: file path: wazoo.log buffer: time_flush: 1 # fush before 1 sec line_flush: -1 # does not have a limit processes: 1 workers: -1 # will use os.cpu_count() ``` #### TCP 输出 这是一个 TCP 输出的示例 ``` log: option: tcp ip: 127.0.0.1 port: 514 ssl: false ``` #### UDP 输出 这是一个 UDP 输出的示例 ``` log: option: udp ip: 127.0.0.1 port: 514 ``` #### Unix 输出 这是一个 Unix 输出的示例 ``` log: option: unix path: /var/wazoo.sock ``` #### 回调输出 (仅限库) `callback` 选项会将每一条日志交给你的自定义 **异步 (async)** 函数处理,而不是发送到 socket 或文件。函数无法在 `config.yml` 中表示,因此此选项仅在使用 wazoo 库时可用: ``` from wazoo import WazooLog async def on_log(log: bytes | deque[bytes]): print("received:", log) log = WazooLog({"callback": on_log}, option="callback") await log.sendLog(b"hello world") ``` 查看 [docs/README.md](docs/README.md#callback-output) 了解更多细节。 ### 预编译二进制文件 如果你想将 wazoo 用作服务器,可以使用预编译的二进制文件。 独立二进制文件(使用 Nuitka 构建,**无需 Python 环境**)会附加在每一个 [GitHub Release](https://github.com/souzomain/wazoo/releases) 中。每个发布版本都提供固定版本的资源,外加一个滚动的 `latest` 别名: | 平台 | `latest` 资源 | | --- | --- | | Linux x86_64 | `wazoo-latest-linux-x86_64` | | Linux arm64 | `wazoo-latest-linux-arm64` | | macOS arm64 (Apple Silicon) | `wazoo-latest-macos-arm64` | 下载后,赋予其可执行权限并运行: ``` curl -L -o wazoo https://github.com/souzomain/wazoo/releases/latest/download/wazoo-latest-linux-x86_64 chmod +x wazoo ./wazoo -v ``` `releases/latest/download/...` URL 将始终解析到最新的发布版本,因此可以安全地用于脚本。为了实现可重现的安装,请从 [releases 页面](https://github.com/souzomain/wazoo/releases) 中选择特定版本(例如 `wazoo-标签:Python, Wazuh, 内核驱动, 子域名变形, 开源安全工具, 无后门, 日志收集, 服务器, 网络协议, 计算机取证, 请求拦截, 逆向工具, 逆向工程平台