
Moniteur d'appels système Linux utilisant ptrace pour tracer l'activité des fichiers, des processus, du réseau et de la mémoire, avec isolation des espaces de noms et classification par apprentissage automatique pour l'analyse comportementale de la sécurité.
Moniteur d'appels système Linux et bac à sable basé sur ptrace pour l'analyse de binaires ELF.
SysTrace exécute une cible dans un environnement d'espace de noms Linux isolé, trace ses appels système et ses processus enfants, applique une détection basée sur des règles et un score de risque pondéré, puis utilise un classificateur Random Forest comme signal secondaire.
ptracefork, vfork, clone et execvepivot_rootSIGKILLCloner le dépôt :
git clone https://github.com/tracebyte8/SysTrace.git
cd SysTrace
Rendre le script de configuration exécutable :
chmod +x config.sh
Exécuter SysTrace sur un binaire ELF compilé :
./config.sh ./tests/bin/mal_fileopen
config.sh effectue automatiquement :
gcc, make et python3.venvAucune installation manuelle de paquets Python n'est nécessaire.
La cible doit être un binaire ELF déjà compilé. Un fichier source
.cne peut pas être passé directement.
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
| Catégorie | Appels système suivis |
|---|---|
| Fichier | open, openat, read, close |
| Processus | execve, fork, clone, wait4, ptrace |
| Mémoire | mmap, mprotect |
| Réseau | socket, connect, sendto, recvfrom, bind, listen, accept |
Les autres appels système sont également écrits dans syscall.txt lorsque leurs noms sont disponibles dans la table des appels système.
| Déclencheur | Condition | Action |
|---|---|---|
| Accès à un fichier sensible | /etc/passwd ou /etc/shadow | Alerte + SIGKILL |
| Ouvertures de fichiers excessives | open > 100 | Alerte + SIGKILL |
| Lectures excessives | read > 29 | Alerte + SIGKILL |
| Fork excessif | fork/clone > 8 | Alerte + SIGKILL |
| Ré-exécutions excessives | execve > 8 | Alerte + SIGKILL |
| Connexion réseau | Tout connect() | Alerte + SIGKILL |
| Envoi réseau | Appel système d'envoi suivi | Alerte + SIGKILL |
| Modification de la protection mémoire | mprotect > 5 | Alerte + SIGKILL |
| Traçage inter-processus | Tout ptrace() | Alerte + SIGKILL |
| Risque élevé | Score ≥ 70 | Alerte + SIGKILL |
| Risque modéré | 40 ≤ score < 70 | Alerte |
killit enregistre les actions SIGKILL effectuées par le moteur de règles.
SysTrace calcule un score comportemental pondéré :
score =
(sum of weighted syscall counts)
/ (total syscalls × 6.0)
× 100
Le score est borné à 0–100.
Si le moteur de règles tue un processus, le score de risque est forcé à au moins 90.
| Comportement | Pondération |
|---|---|
ptrace | 6.0 |
connect | 5.0 |
| réseau | 4.0 |
execve | 3.0 |
mprotect | 3.0 |
fork | 2.0 |
| processus | 1.5 |
open | 0.5 |
mmap | 0.5 |
| fichier | 0.3 |
read | 0.2 |
close | 0.1 |
SysTrace utilise un classificateur Random Forest comme signal comportemental secondaire.
Le modèle se trouve à l'emplacement suivant :
ml/syscall_model.pkl
Les statistiques d'appels système surveillées sont exportées vers :
features.json
ml/predict.py lit le dernier enregistrement de caractéristiques et produit :
prediction.txt
Exemple :
Program: ./tests/bin/mal_fileopen
Prediction: MALICIOUS
Confidence: 91.42%
Le résultat ML doit être traité comme un signal secondaire, et non comme un verdict définitif.
Le dépôt ne fournit ni le jeu de données d'entraînement d'origine ni la précision publiée du modèle.
| Fichier | Description |
|---|---|
security_report.html | Rapport de sécurité HTML final |
alerts.json | Alertes de sécurité JSON |
features.json | Enregistrements de caractéristiques ML |
prediction.txt | Dernière prédiction ML |
log.txt | Alertes lisibles par l'humain |
syscall.txt | Trace brute des appels système |
features.json, alerts.json, log.txt et syscall.txt accumulent les enregistrements au fil des exécutions.
security_report.html et prediction.txt sont écrasés à chaque exécution.

Le rapport HTML contient :
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 vous ne souhaitez pas utiliser config.sh :
make
Nettoyer le projet :
make clean
Reconstruction :
make re
Configuration manuelle de Python :
python3 -m venv .venv
source .venv/bin/activate
pip install numpy scikit-learn
| Programme | Comportement |
|---|---|
benign_idle.c | Dort et se termine |
benign_fileread.c | Crée, lit et supprime un fichier temporaire |
mal_fileopen.c | Ouvre/lit/ferme plusieurs fichiers |
mal_forkbomb.c | Crée un nombre limité de processus enfants |
mal_connect.c | Tente plusieurs connexions réseau |
mal_mmap_mprotect.c | Opérations répétées de mmap/mprotect |
Exemple :
./config.sh ./tests/bin/mal_forkbomb
Puis ouvrez :
xdg-open security_report.html
SysTrace est un outil d'analyse dynamique à vocation de recherche/apprentissage, et non une frontière de sécurité renforcée ni un EDR de production.
Limitations importantes :