benny-e/guardd

GitHub: benny-e/guardd

一款基于 eBPF 与孤立森林的 Linux 行为异常检测系统,用于发现未知威胁。

Stars: 10 | Forks: 0

guardd

使用 eBPF + 孤立森林进行 Linux 行为异常检测的机器学习驱动方法

Guardd 收集低级系统事件(进程执行、网络活动),将它们聚合成时间窗口特征向量,并使用机器学习模型检测异常行为。 Guardd 专注于检测 **未知威胁**

### 它如何工作 guardd 作为一个 systemd 服务运行,管理数据收集、训练和检测的全生命周期。 启动时: - 如果没有模型,guardd 开始收集基线行为数据 - 它收集 1 天(默认)的数据用于初始训练 - 一旦训练成功,自动切换到检测模式 运行期间: - 系统活动持续聚合成时间窗口并转换为特征向量 - 每个窗口由训练好的孤立森林模型进行评分 - 异常以 NDJSON 格式输出 持续运行: - 模型每周自动重新训练一次 - 使用更新后的模型重新训练后立即恢复检测 ### 安装 #### 1. 克隆仓库 ``` git clone https://github.com/benny-e/guardd.git cd guardd ``` #### 2. 运行安装脚本 ``` sudo bash install.sh ``` 这将: - 安装系统依赖 - 将项目复制到 /opt/guardd - 创建 Python 虚拟环境 - 安装软件包 - 构建 eBPF 组件 - 安装 systemd 服务 ### 用法 #### 启动服务 ``` sudo systemctl start guardd.service ``` #### 检查状态 ``` systemctl status guardd.service ``` #### 查看日志 ``` journalctl -u guardd.service -f ``` #### 终端 TUI guardd 包含一个终端 UI,用于浏览最近的告警和搜索异常。 要启动:`(在启动 guardd.service 之后)` ``` guardd tui ``` ### 无 systemd 运行 你可以直接从命令行运行 `guardd`,无需安装 systemd 服务。这可以配置为与其他初始化系统一起运行。 #### 运行完整守护进程 ``` sudo guardd daemon ``` #### 单独运行组件 收集数据: ``` sudo guardd collect ``` 训练模型: ``` sudo guardd train ``` 运行检测: ``` sudo guardd detect ``` ### 配置 guardd 支持通过 `config.toml` 文件进行配置。 默认情况下,守护进程查找: ``` /opt/guardd/config.toml ``` #### 示例 ``` [daemon] mode = "auto" bootstrap_retry_seconds = 60 retrain_interval_seconds = 604800 [training] min_training_rows = 1 contamination = 0.01 n_estimators = 200 threshold_percentile = 10.0 [paths] db_path = "/opt/guardd/data/features.db" model_path = "/opt/guardd/data/model.bundle" guardd_path = "/opt/guardd/ebpf/guardd" ``` #### [daemon] 控制 guardd 的生命周期。 mode - `"auto"` → 完整流水线(收集 → 训练 → 检测) - `"collect"` → 仅收集数据 - `"detect"` → 仅运行检测(需要模型) bootstrap_retry_seconds - 当没有模型时,guardd 尝试初始训练的频率 - 在此阶段,guardd 收集数据并定期暂停以尝试训练 retrain_interval_seconds - 模型在初始引导后重新训练的频率 - 默认:7 天(默认) #### [train] 控制模型行为和要求。 min_training_rows - 训练所需的最小特征窗口数 - 如果不满足,训练失败并稍后重试 contamination - 数据中异常的预期比例 - 直接传递给孤立森林 - 典型值:`0.01`–`0.05` n_estimators - 孤立森林中的树数量 - 越高越准确,但训练速度更慢 threshold_percentile - 确定异常截止分数 - 值越低,检测越激进 #### [paths] 控制 guardd 读写数据的位置。 db_path - 存储特征向量和异常的 SQLite 数据库 model_path - 用于检测的序列化模型包 guardd_path - eBPF 收集器二进制文件的路径 #### 注意事项 - 配置值会覆盖 CLI 默认值 - CLI 参数仍可在显式提供时覆盖配置 - 模型准确性高度依赖高质量的训练数据。更长的训练时间将导致更准确的检测器
标签:Apex, Docker镜像, Isolation Forest, NDJSON, systemd服务, 内核级监控, 异常检测, 无监督学习, 日志聚合, 时间序列特征, 时间线生成, 未知威胁检测, 机器学习, 模型更新, 特征向量, 终端检测, 自动训练, 行为检测, 逆向工具, 遥测