基于机器学习的行为异常检测,适用于 Linux,采用 eBPF + 孤立森林
Guardd 收集底层系统事件(进程执行、网络活动),将其聚合成时间窗口特征向量,并使用机器学习模型检测异常行为。
Guardd 专注于检测未知威胁。
[!WARNING] 该项目仍在开发中 功能和检测准确率正在积极改进 欢迎反馈、建议和贡献
guardd 作为一个单独的 systemd 服务运行,管理数据收集、训练和检测的完整生命周期。
启动时:
如果模型不存在,guardd 开始收集基线行为数据 默认收集 1 天的数据进行初始训练 训练成功后,自动切换到检测模式
运行期间:
系统活动持续聚合成时间窗口并转换为特征向量 每个窗口由训练好的孤立森林模型评分 异常结果以 NDJSON 格式输出
持续:
模型每周自动重新训练一次 更新模型后立即恢复检测
git clone https://github.com/benny-e/guardd.git
cd guardd
sudo bash install.sh
此操作将:
安装系统依赖 将项目复制到 /opt/guardd 创建 Python 虚拟环境 安装包 构建 eBPF 组件 安装 systemd 服务
sudo systemctl start guardd.service
systemctl status guardd.service
journalctl -u guardd.service -f
guardd 包含一个终端界面,用于浏览最近的告警和搜索异常
启动方法:(在启动 guardd.service 后)
guardd tui
你可以直接从命令行运行 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"
控制 guardd 的生命周期。
mode
-- "auto" → 完整流水线(收集 → 训练 → 检测)
-- "collect" → 仅收集数据
-- "detect" → 仅运行检测(需要模型)
bootstrap_retry_seconds -- 当没有模型时,guardd 尝试初始训练的间隔 -- 在此阶段,guardd 收集数据并定期暂停以尝试训练
retrain_interval_seconds -- 初始引导后模型重新训练的间隔 -- 默认值:7 天(默认)
控制模型行为和需求。
min_training_rows -- 训练所需的最少特征窗口数 -- 若未达到,训练失败并稍后重试
contamination
-- 数据中异常的预期比例
-- 直接传递给孤立森林
-- 典型值:0.01–0.05
n_estimators -- 孤立森林中的树数量 -- 值越大,训练越慢但更准确
threshold_percentile -- 确定异常截止分数 -- 值越低,检测越激进
控制 guardd 读取/写入数据的位置。
db_path -- 存储特征向量和异常的 SQLite 数据库
model_path -- 用于检测的序列化模型包
guardd_path -- eBPF 收集器二进制文件的路径
配置值会覆盖 CLI 默认值 如果显式提供,CLI 参数仍然可以覆盖配置 模型准确性在很大程度上取决于良好的训练数据。较长的训练时间将带来更准确的检测器
python3 python3-venv python3-pip clang llvm libbpf-dev libelf-dev bpftool build-essential pkg-config sqlite3