AtharvaG109/sysguard

GitHub: AtharvaG109/sysguard

一个基于 Rust 与 eBPF 的 Linux 活动监控工具,通过 YAML 策略实现对进程与网络行为的观测与部分内核级出站连接阻断。

Stars: 0 | Forks: 0

# sysguard `sysguard` 是一个 Rust + eBPF 原型系统,用于监控 Linux 进程、文件和网络活动,并提供一个用于出站 IPv4 连接的第一阶段强制执行路径。 状态:公开原型,优先支持 Linux,在 Ubuntu 虚拟机工作流程中测试通过。 它被设计为对当前范围保持诚实: - Linux 是主要支持的平台。 - macOS 支持仅用于开发时的回退进程轮询模式。 - 内核级阻塞目前仅适用于 `connect` 规则的子集。 ## 当前能力 - 使用 eBPF 在 Linux 上跟踪 `execve`、`openat` 和 `connect` 事件。 - 应用 YAML 策略规则将活动分类为 `ALLOW`、`LOG`、`ALERT` 或 `BLOCK`。 - 抑制嘈杂的系统事件,对重复输出进行去重,并在需要时输出 JSON。 - 通过 cgroup `connect4` 钩子在内核级别强制执行出站 IPv4 `connect` 阻塞规则。 ## 示例策略 - [`policy.yaml`](./policy.yaml):默认示例策略,供辅助脚本使用 - [`examples/alert-only-policy.yaml`](./examples/alert-only-policy.yaml):仅监控和告警,不进行内核阻塞 - [`examples/block-https-for-user.yaml`](./examples/block-https-for-user.yaml):针对 uid `1000` 的出站 HTTPS 阻塞最小示例 ## 快速开始 在 Linux 虚拟机上: ``` ./scripts/linux-vm-setup.sh ./scripts/build-release.sh sudo ./scripts/run.sh --uid 1000 ``` ## 当前限制 - `execve` 和 `openat` 被监控并分类,但不在内核中阻塞。 - 连接强制执行目前仅支持精确的 IPv4 地址和/或端口匹配。 - 该项目优先在 Linux 虚拟机工作流程中测试,尤其是在 Ubuntu 上。 ## 架构 - **内核空间(eBPF)**:Linux 跟踪点挂钩 `execve`、`openat` 和 `connect`,解析系统调用参数,并通过 eBPF 环形缓冲区流式传输结构化事件。 - **用户空间**:异步 `tokio` 处理器加载 YAML 策略,将规则与事件匹配,并输出分类结果,如 `ALLOW`、`LOG`、`ALERT` 和 `BLOCK`。 - **Linux 强制执行**:可选的 cgroup `connect4` eBPF 程序可以在内核级别强制执行一部分 `connect` 阻塞规则。 ## 先决条件 Linux eBPF 模式: ``` ./scripts/linux-vm-setup.sh ``` macOS 回退模式: ``` ./scripts/macos-setup.sh ``` ## 构建 使用工作区根目录中的辅助脚本: ``` ./scripts/build-release.sh ``` ## 运行 Linux eBPF 模式必须在具有现代内核 BTF 支持的 Linux 主机上运行: ``` sudo ./scripts/run.sh ``` 要为可强制执行的 `action: block` 连接规则启用内核级出站连接阻塞: ``` sudo ./scripts/run.sh --enforce-connect ``` 若要在第二个终端中快速生成测试事件: ``` ./scripts/linux-smoke-test.sh ``` 要为当前用户生成一个临时的“阻止 HTTPS”策略并验证 `curl` 被拒绝: ``` ./scripts/linux-enforce-test.sh ``` 要显示完整的未过滤 Linux 事件流: ``` sudo ./target/release/sysguard --policy ./policy.yaml --verbose ``` 要专注于单个 uid: ``` sudo ./target/release/sysguard --policy ./policy.yaml --uid 1000 ``` 要以机器可读的 JSON 格式输出: ``` sudo ./target/release/sysguard --policy ./policy.yaml --output json ``` 要将连接阻塞器附加到自定义 cgroup: ``` sudo ./target/release/sysguard --policy ./policy.yaml --enforce-connect --cgroup-path /sys/fs/cgroup ``` macOS 回退模式在没有 eBPF 的情况下运行,并轮询 `ps` 以获取新进程启动: ``` ./scripts/run.sh ``` ## 手动构建步骤 如果希望手动执行命令: ``` cargo xtask build-ebpf --release cargo build --release -p sysguard sudo ./target/release/sysguard --policy ./policy.yaml ``` ## 发布 在将此仓库公开之前: ``` git init git add . git status ``` 确保未提交 `target/`、临时测试策略和机器特定文件。该仓库包含一个 `.gitignore`,用于排除这些路径。 ## 注意事项 - `cargo build --release` 默认从工作区根目录构建用户空间应用程序。 - 示例 [`policy.yaml`](./policy.yaml) 包含用于 `execve`、`openat` 和 `connect` 的示例规则。 - 示例策略还包括一个可配置的 `ignore:` 部分,用于忽略嘈杂的进程、路径、端口和地址。 - 项目固定使用当前已发布的 Aya crate 版本,以便 `cargo` 可以在全新 Linux 虚拟机上解析依赖项。 - 在 macOS 上,Sysguard 使用用户空间进程轮询后端,而不是 Linux eBPF 跟踪点。 - Linux 上的 `action: block` 规则在用户空间进行分类,并且具有精确 IPv4 地址和/或端口匹配的 `connect` 规则也可以通过 `--enforce-connect` 在内核级别强制执行。 - 当前的内核强制执行范围有意保持狭窄:仅限出站 IPv4 `connect`。`execve` 和 `openat` 规则仍会监控和分类,但不会在内核中阻塞。 - [`scripts/linux-enforce-test.sh`](./scripts/linux-enforce-test.sh) 为当前 uid 写入临时测试策略,并检查当强制执行激活时 `curl https://example.com` 是否失败。 - Linux 静默模式默认抑制常见的桌面和系统噪声;使用 `--verbose` 可查看所有内容。 - Linux 去重重复事件,并发出周期性摘要行,而不是不断刷屏相同条目。
标签:API安全, Cgroup, Docker镜像, IPv4过滤, IP 地址批量处理, JSON输出, Linux监控, Linux系统编程, Rust, Tokio, YAML策略, 事件流处理, 内核级拦截, 出站连接拦截, 可视化界面, 块设备监控, 子域名枚举, 开源安全工具, 异步处理, 性能分析, 文件监控, 策略引擎, 系统安全, 网络安全挑战, 网络流量审计, 虚拟机测试, 连接追踪, 逆向工程平台, 通知系统