基于 ptrace 的 Linux 系统调用监控器与沙箱,用于分析 ELF 二进制文件。
SysTrace 在隔离的 Linux 命名空间环境中运行目标程序,跟踪其系统调用和子进程,应用基于规则的检测和加权风险评分,然后使用随机森林分类器作为辅助信号。
ptrace 系统调用跟踪fork、vfork、clone 和 execvepivot_root 沙箱SIGKILL克隆仓库:
git clone https://github.com/tracebyte8/SysTrace.git
cd SysTrace
使配置脚本可执行:
chmod +x config.sh
对已编译的 ELF 二进制文件运行 SysTrace:
./config.sh ./tests/bin/mal_fileopen
config.sh 会自动执行以下操作:
gcc、make 和 python3.venv无需手动安装 Python 包。
目标必须是一个已经编译好的 ELF 二进制文件。不能直接传入
.c源文件。
Target ELF
│
▼
Namespace Sandbox
│
├── CLONE_NEWUSER
├── CLONE_NEWPID
├── CLONE_NEWNS
└── pivot_root
│
▼
ptrace Tracer
│
├── Syscall tracing
├── fork/vfork/clone following
└── exec following
│
▼
System Call Monitors
│
├── File
├── Process
├── Memory
└── Network
│
▼
Statistics
│
▼
Rule Engine
│
├── Alerts
└── SIGKILL enforcement
│
▼
Risk Scoring
│
├── features.json
│
└── Random Forest
│
▼
security_report.html
| 类别 | 跟踪的系统调用 |
|---|---|
| 文件 | open、openat、read、close |
| 进程 | execve、fork、clone、wait4、ptrace |
| 内存 | mmap、mprotect |
| 网络 | socket、connect、sendto、recvfrom、bind、listen、accept |
当其他系统调用的名称在系统调用表中可用时,它们也会被写入 syscall.txt。
| 触发条件 | 条件 | 操作 |
|---|---|---|
| 敏感文件访问 | /etc/passwd 或 /etc/shadow | 告警 + SIGKILL |
| 文件打开次数过多 | open > 100 | 告警 + SIGKILL |
| 读取次数过多 | read > 29 | 告警 + SIGKILL |
| 派生进程过多 | fork/clone > 8 | 告警 + SIGKILL |
| 重复执行过多 | execve > 8 | 告警 + SIGKILL |
| 网络连接 | 任意 connect() | 告警 + SIGKILL |
| 网络发送 | 被跟踪的发送系统调用 | 告警 + SIGKILL |
| 内存保护变更 | mprotect > 5 | 告警 + SIGKILL |
| 跨进程跟踪 | 任意 ptrace() | 告警 + SIGKILL |
| 高风险 | 评分 ≥ 70 | 告警 + SIGKILL |
| 中等风险 | 40 ≤ 评分 < 70 | 告警 |
killit 会记录规则引擎执行的 SIGKILL 操作。
SysTrace 会计算加权行为评分:
score =
(sum of weighted syscall counts)
/ (total syscalls × 6.0)
× 100
分数被限制在 0–100 之间。
如果规则引擎终止了某个进程,风险分数会被强制设为至少 90。
| 行为 | 权重 |
|---|---|
ptrace | 6.0 |
connect | 5.0 |
| 网络 | 4.0 |
execve | 3.0 |
mprotect | 3.0 |
fork | 2.0 |
| 进程 | 1.5 |
open | 0.5 |
mmap | 0.5 |
| 文件 | 0.3 |
read | 0.2 |
close | 0.1 |
SysTrace 使用随机森林分类器作为辅助行为信号。
该模型位于:
ml/syscall_model.pkl
被监控的系统调用统计信息导出到:
features.json
ml/predict.py 读取最新的特征记录并生成:
prediction.txt
示例:
Program: ./tests/bin/mal_fileopen
Prediction: MALICIOUS
Confidence: 91.42%
ML 结果应被视为次要信号,而非确定性结论。
该仓库不附带原始训练数据集或已发布的模型准确率。
| 文件 | 描述 |
|---|---|
security_report.html | 最终 HTML 安全报告 |
alerts.json | JSON 安全告警 |
features.json | ML 特征记录 |
prediction.txt | 最新 ML 预测 |
log.txt | 人类可读的告警 |
syscall.txt | 原始系统调用跟踪 |
features.json、alerts.json、log.txt 和 syscall.txt 会跨多次运行累积记录。
security_report.html 和 prediction.txt 在每次运行时被覆盖。

HTML 报告包含:
SysTrace/
├── src/
│ ├── tracer.c
│ ├── namespace.c
│ ├── set_root.c
│ ├── file_monitor.c
│ ├── process_monitor.c
│ ├── memory_monitor.c
│ ├── network_monitor.c
│ ├── rules.c
│ ├── score.c
│ ├── stat.c
│ └── dataset.c
│
├── include/
├── dashboard/
│ ├── index.c
│ └── style.css
│
├── ml/
│ ├── train.py
│ ├── predict.py
│ └── syscall_model.pkl
│
├── tests/
│ └── bin/
│
├── image/
├── Makefile
├── config.sh
└── README.md
如果你不想使用 config.sh:
make
清理项目:
make clean
重建:
make re
手动 Python 安装:
python3 -m venv .venv
source .venv/bin/activate
pip install numpy scikit-learn
| 程序 | 行为 |
|---|---|
benign_idle.c | 休眠后退出 |
benign_fileread.c | 创建、读取并删除临时文件 |
mal_fileopen.c | 打开/读取/关闭多个文件 |
mal_forkbomb.c | 创建数量受限的子进程 |
mal_connect.c | 尝试多次网络连接 |
mal_mmap_mprotect.c | 重复执行 mmap/mprotect 操作 |
示例:
./config.sh ./tests/bin/mal_forkbomb
然后打开:
xdg-open security_report.html
SysTrace 是一个研究/学习用途的动态分析工具,并非加固的安全边界或生产级 EDR。
重要局限性:
SIGKILL 实现;并非内核级系统调用拦截。pivot_root。仅对您拥有或获授权分析的二进制文件运行 SysTrace。
对于不受信任的二进制文件,请使用专用虚拟机或其他适当隔离的环境。
SysTrace 2.0