
Monitor de chamadas de sistema Linux usando ptrace para rastrear atividades de arquivos, processos, rede e memória, com isolamento de namespace e classificação por aprendizado de máquina para análise comportamental de segurança.
Monitor de syscalls Linux e sandbox baseado em ptrace para análise de binários ELF.
O SysTrace executa um alvo dentro de um ambiente isolado de namespaces Linux, rastreia suas chamadas de sistema e processos filhos, aplica detecção baseada em regras e pontuação de risco ponderada, e então usa um classificador Random Forest como sinal secundário.
ptracefork, vfork, clone e execvepivot_rootSIGKILLClone o repositório:
git clone https://github.com/tracebyte8/SysTrace.git
cd SysTrace
Torne o script de configuração executável:
chmod +x config.sh
Execute o SysTrace em um binário ELF compilado:
./config.sh ./tests/bin/mal_fileopen
config.sh automaticamente:
gcc, make e python3.venvNão é necessária a instalação manual de pacotes Python.
O alvo deve ser um binário ELF já compilado. Um arquivo de código-fonte
.cnão pode ser passado diretamente.
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
| Categoria | Syscalls rastreadas |
|---|---|
| Arquivo | open, openat, read, close |
| Processo | execve, fork, clone, wait4, ptrace |
| Memória | mmap, mprotect |
| Rede | socket, connect, sendto, recvfrom, bind, listen, accept |
Outras syscalls também são gravadas em syscall.txt quando seus nomes estão disponíveis na tabela de syscalls.
| Gatilho | Condição | Ação |
|---|---|---|
| Acesso a arquivo sensível | /etc/passwd ou /etc/shadow | Alerta + SIGKILL |
| Aberturas excessivas de arquivos | open > 100 | Alerta + SIGKILL |
| Leituras excessivas | read > 29 | Alerta + SIGKILL |
| Forking excessivo | fork/clone > 8 | Alerta + SIGKILL |
| Reexecução excessiva | execve > 8 | Alerta + SIGKILL |
| Conexão de rede | Qualquer connect() | Alerta + SIGKILL |
| Envio de rede | Syscall de envio rastreada | Alerta + SIGKILL |
| Alteração de proteção de memória | mprotect > 5 | Alerta + SIGKILL |
| Rastreamento entre processos | Qualquer ptrace() | Alerta + SIGKILL |
| Risco alto | Pontuação ≥ 70 | Alerta + SIGKILL |
| Risco moderado | 40 ≤ pontuação < 70 | Alerta |
O killit registra as ações de SIGKILL executadas pelo motor de regras.
O SysTrace calcula uma pontuação comportamental ponderada:
score =
(sum of weighted syscall counts)
/ (total syscalls × 6.0)
× 100
A pontuação é limitada a 0–100.
Se o motor de regras encerrar um processo, a pontuação de risco é forçada a pelo menos 90.
| Comportamento | Peso |
|---|---|
ptrace | 6.0 |
connect | 5.0 |
| rede | 4.0 |
execve | 3.0 |
mprotect | 3.0 |
fork | 2.0 |
| processo | 1.5 |
open | 0.5 |
mmap | 0.5 |
| arquivo | 0.3 |
read | 0.2 |
close | 0.1 |
O SysTrace usa um classificador Random Forest como sinal comportamental secundário.
O modelo está localizado em:
ml/syscall_model.pkl
As estatísticas de syscalls monitoradas são exportadas para:
features.json
ml/predict.py lê o registro de features mais recente e produz:
prediction.txt
Exemplo:
Program: ./tests/bin/mal_fileopen
Prediction: MALICIOUS
Confidence: 91.42%
O resultado de ML deve ser tratado como um sinal secundário, não como um veredito definitivo.
O repositório não inclui o conjunto de dados de treino original nem a precisão publicada do modelo.
| Ficheiro | Descrição |
|---|---|
security_report.html | Relatório de segurança HTML final |
alerts.json | Alertas de segurança JSON |
features.json | Registos de características de ML |
prediction.txt | Última previsão de ML |
log.txt | Alertas legíveis por humanos |
syscall.txt | Rastreio de syscalls em bruto |
features.json, alerts.json, log.txt e syscall.txt acumulam registos entre execuções.
security_report.html e prediction.txt são substituídos em cada execução.

O relatório HTML contém:
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
Se você não quiser usar config.sh:
make
Limpe o projeto:
make clean
Reconstruir:
make re
Configuração manual do Python:
python3 -m venv .venv
source .venv/bin/activate
pip install numpy scikit-learn
| Programa | Comportamento |
|---|---|
benign_idle.c | Dorme e encerra |
benign_fileread.c | Cria, lê e remove um arquivo temporário |
mal_fileopen.c | Abre/lê/fecha múltiplos arquivos |
mal_forkbomb.c | Cria um número limitado de processos filhos |
mal_connect.c | Tenta múltiplas conexões de rede |
mal_mmap_mprotect.c | Operações repetidas de mmap/mprotect |
Exemplo:
./config.sh ./tests/bin/mal_forkbomb
Em seguida, abra:
xdg-open security_report.html
O SysTrace é uma ferramenta de análise dinâmica para pesquisa/aprendizado, não uma fronteira de segurança reforçada nem um EDR de produção.
Limitações importantes:
SIGKILL após a detecção; não é um bloqueio de syscalls em nível de kernel.pivot_root.Execute o SysTrace apenas contra binários que você possui ou está autorizado a analisar.