
ptrace를 사용하여 파일, 프로세스, 네트워크 및 메모리 활동을 추적하는 Linux 시스템 호출 모니터로, 네임스페이스 격리와 머신러닝 분류를 통한 행동 기반 보안 분석을 제공합니다.
ptrace 기반 Linux 시스템 콜 모니터 및 ELF 바이너리 분석용 샌드박스입니다.
SysTrace는 격리된 Linux 네임스페이스 환경에서 대상 프로그램을 실행하고, 해당 프로그램의 시스템 콜과 자식 프로세스를 추적하며, 규칙 기반 탐지와 가중치 기반 위험 점수를 적용한 뒤 Random Forest 분류기를 보조 신호로 사용합니다.
ptrace 시스템 콜 추적fork, vfork, clone, execve 추적pivot_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
| 카테고리 | 추적되는 syscall |
|---|---|
| 파일 | open, openat, read, close |
| 프로세스 | execve, fork, clone, wait4, ptrace |
| 메모리 | mmap, mprotect |
| 네트워크 | socket, connect, sendto, recvfrom, bind, listen, accept |
다른 syscall들도 syscall 테이블에서 이름을 확인할 수 있는 경우 syscall.txt에 기록됩니다.
| 트리거 | 조건 | 동작 |
|---|---|---|
| 민감한 파일 접근 | /etc/passwd 또는 /etc/shadow | 경고 + SIGKILL |
| 과도한 파일 열기 | open > 100 | 경고 + SIGKILL |
| 과도한 읽기 | read > 29 | 경고 + SIGKILL |
| 과도한 포크 | fork/clone > 8 | 경고 + SIGKILL |
| 과도한 재실행 | execve > 8 | 경고 + SIGKILL |
| 네트워크 연결 | 모든 connect() | 경고 + SIGKILL |
| 네트워크 전송 | 추적되는 send syscall | 경고 + 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는 2차 행동 신호로 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는 연구/학습용 동적 분석 도구이며, 강화된 보안 경계나 프로덕션 EDR이 아닙니다.
중요한 제한 사항:
SIGKILL을 통해 강제 종료되며, 커널 수준의 시스템 호출 차단은 아닙니다.pivot_root를 사용합니다.SysTrace는 소유하거나 분석 권한이 있는 바이너리에 대해서만 실행하십시오.
신뢰할 수 없는 바이너리의 경우 전용 VM 또는 적절히 격리된 다른 환경을 사용하십시오.
SysTrace 2.0