
Монитор системных вызовов Linux, использующий ptrace для отслеживания активности файлов, процессов, сети и памяти, с изоляцией пространств имён (namespace) и классификацией на основе машинного обучения для поведенческого анализа безопасности.
Монитор системных вызовов Linux на основе ptrace и песочница для анализа ELF-бинарников.
SysTrace запускает целевую программу в изолированном окружении пространств имён Linux, трассирует её системные вызовы и дочерние процессы, применяет обнаружение на основе правил и взвешенную оценку риска, а затем использует классификатор Random Forest в качестве вторичного сигнала.
ptracefork, vfork, clone и execvepivot_rootSIGKILLКлонируйте репозиторий:
git clone https://github.com/tracebyte8/SysTrace.git
cd SysTrace
Сделайте скрипт конфигурации исполняемым:
chmod +x config.sh
Запустите SysTrace для скомпилированного ELF-бинарника:
./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 использует классификатор Random Forest в качестве вторичного поведенческого сигнала.
Модель расположена по пути:
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 — это инструмент динамического анализа для исследований/обучения, а не усиленная граница безопасности или production-система EDR.
Важные ограничения: