souzomain/wazoo

GitHub: souzomain/wazoo

一个基于 Python 的 Wazuh 协议交互框架及服务器,用于接收 Agent 日志并转发至多种外部输出目标。

Stars: 2 | Forks: 0

Wazoo

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--linux-x86_64`)。 ### 性能 Python 在性能方面并不占优势,但我做出了一些设计决策来调整和提升该服务器的高性能表现。 - **uvloop**:底层使用了 libuv(nodejs 中使用的 C 语言库),这加快了所有异步任务的速度; - **asyncio**:项目从一开始就使用了 asyncio; - **缓存 (caching)**:我在项目中加入了多种缓存选项,这提高了 AES 计算、数据库等的处理速度; - **工作线程 (workers)**:默认包含用于日志解码的 worker。默认情况下它使用所有的 CPU 核心; - **多进程 (multiprocessing)**:默认情况下,我添加了 1 个进程来处理连接,但你可以通过 `--processes` 选项来增加数量; - **nuitka**:编译项目并生成高性能的二进制文件。 - **日志缓冲队列 (log buffering queue)**:接收到的所有日志都会存储在缓冲队列中。当达到 `max_time` 或队列中的日志数量达到 `max_lines` 时,缓冲队列将被刷新。 ## 搭建开发环境 安装 **uv** ``` curl -LsSf https://astral.sh/uv/install.sh | sh ``` 同步项目 ``` uv sync ``` 创建 SSL pem 文件 ``` ./scripts/generate_ssl.sh ``` 现在你可以运行服务器了 ``` uv run wazoo -v ``` # 文档 你可以在 `./docs/` 目录中查看库的文档。 查看 [文档](./docs/) # 测试 你可以使用 docker 运行一个 wazuh agent 来测试服务器。 ``` uv run wazoo -v & docker compose -f docker/agent.yml up ``` # 总结 我投入了大量时间来制作这个项目和教程。 我想在这个项目中实现许多不同的功能,其中之一就是实现一个 HTTP API 来管理服务器,但这只有在项目获得更多关注度的情况下我才会去做。 如果你希望我继续开发这个项目,请考虑给我点个 Star :star: # 联系方式 如果你想联系我,可以使用以下方式。 - **电子邮箱**: me@souzo.me - **Matrix**: @souzo:matrix.org - **Linkedin**: https://www.linkedin.com/in/vinicius-m-a76ba51b5/ - **Twitter/X**: https://x.com/souzomain - **Reddit**: https://www.reddit.com/user/_souzo/
标签:Python, Wazuh, 内核驱动, 子域名变形, 开源安全工具, 无后门, 日志收集, 服务器, 网络协议, 计算机取证, 请求拦截, 逆向工具, 逆向工程平台