
Monitor de llamadas al sistema de Linux que utiliza ptrace para rastrear la actividad de archivos, procesos, red y memoria, con aislamiento de namespaces y clasificación mediante aprendizaje automático para el análisis de seguridad conductual.
Monitor de llamadas al sistema de Linux basado en ptrace y sandbox para analizar binarios ELF.
SysTrace ejecuta un objetivo dentro de un entorno de namespaces de Linux aislado, rastrea sus llamadas al sistema y procesos hijos, aplica detección basada en reglas y puntuación de riesgo ponderada, y luego utiliza un clasificador Random Forest como señal secundaria.
ptracefork, vfork, clone y execvepivot_rootSIGKILLClona el repositorio:
git clone https://github.com/tracebyte8/SysTrace.git
cd SysTrace
Haz que el script de configuración sea ejecutable:
chmod +x config.sh
Ejecuta SysTrace contra un binario ELF compilado:
./config.sh ./tests/bin/mal_fileopen
config.sh automáticamente:
gcc, make y python3.venvNo se requiere la instalación manual de paquetes de Python.
El objetivo debe ser un binario ELF ya compilado. No se puede pasar directamente un archivo fuente
.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
| Categoría | Syscalls rastreadas |
|---|---|
| Archivo | open, openat, read, close |
| Proceso | execve, fork, clone, wait4, ptrace |
| Memoria | mmap, mprotect |
| Red | socket, connect, sendto, recvfrom, bind, listen, accept |
Otras syscalls también se escriben en syscall.txt cuando sus nombres están disponibles en la tabla de syscalls.
| Disparador | Condición | Acción |
|---|---|---|
| Acceso a archivo sensible | /etc/passwd o /etc/shadow | Alerta + SIGKILL |
| Aperturas de archivo excesivas | open > 100 | Alerta + SIGKILL |
| Lecturas excesivas | read > 29 | Alerta + SIGKILL |
| Bifurcación excesiva | fork/clone > 8 | Alerta + SIGKILL |
| Re-ejecución excesiva | execve > 8 | Alerta + SIGKILL |
| Conexión de red | Cualquier connect() | Alerta + SIGKILL |
| Envío por red | Syscall de envío rastreada | Alerta + SIGKILL |
| Cambio de protección de memoria | mprotect > 5 | Alerta + SIGKILL |
| Trazado entre procesos | Cualquier ptrace() | Alerta + SIGKILL |
| Riesgo alto | Puntuación ≥ 70 | Alerta + SIGKILL |
| Riesgo moderado | 40 ≤ puntuación < 70 | Alerta |
killit registra las acciones SIGKILL realizadas por el motor de reglas.
SysTrace calcula una puntuación de comportamiento ponderada:
score =
(sum of weighted syscall counts)
/ (total syscalls × 6.0)
× 100
La puntuación se limita a 0–100.
Si el motor de reglas termina un proceso, la puntuación de riesgo se fuerza a un mínimo de 90.
| Comportamiento | Peso |
|---|---|
ptrace | 6.0 |
connect | 5.0 |
| red | 4.0 |
execve | 3.0 |
mprotect | 3.0 |
fork | 2.0 |
| proceso | 1.5 |
open | 0.5 |
mmap | 0.5 |
| archivo | 0.3 |
read | 0.2 |
close | 0.1 |
SysTrace utiliza un clasificador Random Forest como señal de comportamiento secundaria.
El modelo se encuentra en:
ml/syscall_model.pkl
Las estadísticas de llamadas al sistema monitorizadas se exportan a:
features.json
ml/predict.py lee el registro de características más reciente y produce:
prediction.txt
Ejemplo:
Program: ./tests/bin/mal_fileopen
Prediction: MALICIOUS
Confidence: 91.42%
El resultado del ML debe tratarse como una señal secundaria, no como un veredicto definitivo.
El repositorio no incluye el conjunto de datos de entrenamiento original ni la precisión publicada del modelo.
| Archivo | Descripción |
|---|---|
security_report.html | Informe de seguridad HTML final |
alerts.json | Alertas de seguridad en JSON |
features.json | Registros de características del ML |
prediction.txt | Última predicción del ML |
log.txt | Alertas legibles por humanos |
syscall.txt | Traza de llamadas al sistema sin procesar |
features.json, alerts.json, log.txt y syscall.txt acumulan registros entre ejecuciones.
security_report.html y prediction.txt se sobrescriben en cada ejecución.

El informe HTML contiene:
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
Si no desea usar config.sh:
make
Limpie el proyecto:
make clean
Reconstrucción:
make re
Configuración manual de Python:
python3 -m venv .venv
source .venv/bin/activate
pip install numpy scikit-learn
| Programa | Comportamiento |
|---|---|
benign_idle.c | Duerme y finaliza |
benign_fileread.c | Crea, lee y elimina un archivo temporal |
mal_fileopen.c | Abre/lee/cierra múltiples archivos |
mal_forkbomb.c | Crea un número limitado de procesos hijos |
mal_connect.c | Intenta múltiples conexiones de red |
mal_mmap_mprotect.c | Operaciones repetidas de mmap/mprotect |
Ejemplo:
./config.sh ./tests/bin/mal_forkbomb
Luego abre:
xdg-open security_report.html
SysTrace es una herramienta de análisis dinámico para investigación/aprendizaje, no un límite de seguridad reforzado ni un EDR de producción.
Limitaciones importantes: