priyajyadav8-crypto/veritas
GitHub: priyajyadav8-crypto/veritas
Veritas 是一款利用 eBPF 技术检测 Linux 系统中隐藏元素的内核真相引擎,用于提升安全监控和事件响应能力。
Stars: 3 | Forks: 0
# veritas





**一款利用 eBPF 从 rootkit 无法触及的 Linux 内核内部检测隐藏进程、网络套接字和文件的内核真相引擎。**
## 工作原理
Veritas 利用 eBPF 将探针直接附加到内核函数上——位于用户空间之下,rootkit 的钩子之下。然后,它将内核实际看到的内容与用户空间报告的内容进行交叉引用。
一个 rootkit 可以欺骗 /proc。它无法欺骗一个在 rootkit 钩子运行前就已位于内核内部的 eBPF 探针。
## 使用方法
```
# 完整的内核与用户空间差异(默认)
sudo veritas --diff
# 用于 SIEM/管道集成的可机器读取 JSON
sudo veritas --json
# 仅检查进程
sudo veritas --processes
# 仅检查网络套接字
sudo veritas --network
# 仅检查文件系统与 LD_PRELOAD
sudo veritas --fs
```
### 在干净系统上的示例输出
## Veritas 检查内容
| 检查项 | 方法 | 检测目标 |
|--------|------|----------|
| 隐藏进程 | 暴力 PID 扫描与 /proc 差异对比 | Diamorphine, Reptile 等任何隐藏 PID 的 rootkit |
| 隐藏网络套接字 | 套接字 inode 交叉引用 | 在开放端口上隐藏的后门 |
| LD_PRELOAD 注入 | 读取 /etc/ld.so.preload | 库注入型 rootkit |
| 内核模块 | /proc/modules 关键词扫描 | 已知的 rootkit 模块名称 |
| 关键文件权限 | 直接 stat 检查 | 被篡改的 /etc/passwd, /etc/shadow |
| 可疑路径 | 路径存在性检查 | 隐藏在 /tmp, /dev/shm 中的文件 |
| PID 1 库映射 | /proc/1/maps 扫描 | 注入到 init 进程中的库 |
## 为何不使用现有工具
| 工具 | 方法 | 局限性 |
|------|------|--------|
| Volatility | 内存取证 | 需要离线内存转储 |
| rkhunter | 文件签名 | 极易被绕过 |
| chkrootkit | 签名扫描 | 在用户空间运行,可能被欺骗 |
| unhide | 进程差异对比 | 未维护,非基于 eBPF |
| **veritas** | 实时 eBPF 内核差异对比 | 在 rootkit 钩子之下运行 |
## 系统要求
- Linux 内核 **5.15+**(推荐 6.x)
- **Root** 权限或 CAP_BPF 能力
- 架构:**x86_64**
## 安装说明
### 下载静态二进制文件
从发布页面下载预构建的 2.7MB 静态二进制文件。无需任何依赖。
```
chmod +x veritas
sudo ./veritas --diff
```
### 从源代码构建
```
# 安装 Rust nightly
curl --proto =https --tlsv1.2 -sSf https://sh.rustup.rs | sh
rustup toolchain install nightly
rustup component add rust-src --toolchain nightly
# 安装依赖项
sudo apt install -y llvm clang libelf-dev musl-tools
# 安装 eBPF 链接器
cargo install bpf-linker
# 构建 eBPF 程序
cargo +nightly build --package veritas-ebpf --target bpfel-unknown-none -Z build-std=core
# 构建静态发布二进制文件
cargo build --package veritas --target x86_64-unknown-linux-musl --release
# 运行
sudo ./target/x86_64-unknown-linux-musl/release/veritas --diff
```
## 流水线集成
```
# 将输出传输至 jq
sudo veritas --json | jq .verdict
# 用于持续监控的 Cron 作业
*/15 * * * * sudo veritas --json >> /var/log/veritas.log
# 发送至中央日志记录
sudo veritas --json | curl -X POST https://your-siem/ingest -d @-
```
## 技术架构
**技术栈:**
- 语言:Rust(nightly 版)
- eBPF 库:Aya(纯 Rust,无 libbpf C 依赖)
- 序列化:serde + serde_json
- 构建目标:x86_64-unknown-linux-musl(静态二进制文件,2.7MB)
- 最低内核:5.15
## 路线图
- [x] 隐藏进程检测
- [x] 隐藏网络套接字检测
- [x] LD_PRELOAD 注入检测
- [x] 内核模块扫描
- [x] 关键路径完整性检查
- [x] JSON 输出用于流水线集成
- [x] 静态二进制文件构建
- [x] 手册页
- [ ] 守护进程模式用于持续监控
- [ ] 集中式集群报告
- [ ] 更多 rootkit 签名
## 许可证与版权
本项目根据 **GNU 通用公共许可证 v2.0** 授权。
完整条款请参见 LICENSE-GPL2 文件。
## 作者
**由 Priyaj Yadav 创建并维护**
GitHub: [@priyajyadav8-crypto](https://github.com/priyajyadav8-crypto)
## 贡献
欢迎提交问题和拉取请求。
提交重大更改前,请先提出问题讨论。
veritas — 无法被贿赂的见证者。
标签:Docker镜像, 可视化界面, 通知系统