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策略, 事件流处理, 内核级拦截, 出站连接拦截, 可视化界面, 块设备监控, 子域名枚举, 开源安全工具, 异步处理, 性能分析, 文件监控, 策略引擎, 系统安全, 网络安全挑战, 网络流量审计, 虚拟机测试, 连接追踪, 逆向工程平台, 通知系统