
러닝타임 행동 분석 도구로, 의심스러운 패키지를 Docker에서 샌드박싱하고, strace로 시스템 콜을 추적하며, 프로세스 계층 구조를 방향성 그래프로 매핑하고, YARA 시그니처, ML 이상 탐지, 시간적 패턴 분석을 통해 공급망 공격을 탐지합니다.

TraceTree Demo
TraceTree(cascade-analyzer)는 에이전트 시대를 위해 설계된 자율 보안 유기체입니다. 단순한 스캐닝을 넘어 견고하고 강화된 확장형 탐지 생태계로 발전합니다. 마스코트인 거미처럼, TraceTree는 여덟 개의 특화된 "다리"를 사용하여 개발 워크플로우 주변에 포괄적인 보호망을 엮습니다.
TraceTree는 에이전트 또는 사람이 패키지 설치를 신뢰하기 전 검토 게이트로 사용될 수 있습니다. 원시 시스템 호출 로그를 노출하지 않고 대상 해시, 샌드박스 정책, 관찰된 행동, 아티팩트 해시, 평결 및 개인정보 기본값을 요약하는 작은 JSON/SARIF 친화적 영수증 형태는 행동 영수증 내보내기를 참조하세요.
TraceTree/ ├── api/ # API stubs ├── codebase-analysis-docs/ # Architecture documents and knowledge guides ├── data/ # Behavioral signatures, rules, and training datasets ├── docs/ # Documentation assets ├── examples/ # Demo scripts and usage examples ├── frontend/ # Next.js/React web dashboard ├── graph/ # NetworkX directed graph builder ├── hooks/ # Git/Shell hooks for background monitoring ├── logs/ # Execution trace logs and strace outputs ├── macapp/ # Native macOS menu bar app ├── mascot/ # Console ASCII spider mascot ├── mcp/ # MCP server security testing module ├── ml/ # Machine learning classification and anomaly detection ├── monitor/ # Core syscall parser, YARA matching, and timelines ├── orchestrator/ # TypeScript multi-agent coordination server ├── repocheckai/ # Repository analysis engine (TypeScript/Node) ├── samples/ # Malware and benign files for sandbox tests ├── sandbox/ # Docker container manager and strace sandbox ├── test_targets/ # Mock packages/servers for detection testing ├── tests/ # Unit, integration, and system tests ├── watcher/ # File system change listener daemon └── worker/ # Background task execution worker
## 트레이스트리 거미의 8개의 다리
1. **다리 1: 샌드박스 격리 (함정)** — 격리된 Docker 컨테이너(또는 고성능 `direct` 모드)에서 대상을 실행하여 위협을 물리적으로 차단합니다.
2. **다리 2: 시스템 콜 파싱 (신경계)** — 프로세스가 OS에 보내는 모든 "진동"(시스템 콜)을 모니터링하는 고정밀 엔진입니다.
3. **다리 3: 행동 그래프 (거미줄)** — NetworkX 방향 그래프를 사용하여 프로세스, 파일, 네트워크 노드가 상호작용하는 "계단식 효과"를 매핑합니다.
4. **다리 4: ML 이상 탐지 (직감)** — 소규모 대표적인 정상/악성 패키지 데이터셋과 선택적인 실시간 MalwareBazaar 피드로 훈련된 맞춤형 Random Forest 모델로, 높은 신뢰도로 악성 의도를 예측합니다.
5. **다리 5: YARA 서명 매칭 (기억)** — 알려진 악성코드 DNA 및 익스플로잇 패턴(리버스 셸, 암호화폐 채굴기 등)의 통합 라이브러리입니다.
6. **다리 6: MCP 보안 프로토콜 (에이전트 방패)** — Model Context Protocol 서버를 위한 특화된 보호 기능으로, AI 에이전트가 사용하는 도구를 방어합니다.
7. **다리 7: 보안 가디언 AI (사전 예방적 거미줄)** — 로컬 LLM(Qwen-Coder)을 사용하여 커밋 전에 유출 및 주입을 탐지하는 "스마트 스캐너"입니다.
8. **다리 8: 시간적 및 N-gram 분석 (DNA 스캔)** — 시간에 따른 행동의 *리듬*과 *순서*로 위협을 식별합니다.
## 작동 방식```
target ──► Docker sandbox (network dropped) ──► strace -t -f
│
▼
strace log
│
┌────────────────┼────────────────┐
▼ ▼ ▼
strace parser signature temporal
(parser.py) matcher (sigs) analyzer
│ │ │
└───────┬────────┴────────────────┘
▼
NetworkX graph
(builder.py)
│
▼
ML anomaly detection
(RandomForest / IsolationForest)
│
▼
verdict
ip link set eth0 down). 따라서 외부 연결 시도는 기록되지만 차단됩니다.strace -t -f -e trace=all로 추적됩니다. -t 플래그는 시간 분석을 위한 타임스탬프를 추가하고, -f는 자식 프로세스를 추적합니다.monitor/parser.py) — 다중 행 strace 출력과 [pid] 및 bare-pid 형식을 모두 처리하는 정규식 기반 파서입니다. 프로세스 생성, 파일 접근, 네트워크 연결 및 메모리 작업을 추출합니다. 각 시스템 호출은 보안 관련성에 따라 심각도 가중치(0–9)가 할당됩니다.monitor/signatures.py) — 구문 분석된 이벤트 스트림을 data/signatures.json에 정의된 8가지 행동 시그니처 패턴과 매칭합니다. 각 매치가 발생시킨 특정 이벤트를 나열하는 증거를 생성합니다.monitor/timeline.py) — 타임스탬프가 있는 이벤트 스트림에서 5가지 시간 기반 행동 패턴을 감지합니다(예: 자격 증명 읽기 후 5초 이내 외부 연결).graph/builder.py) — 프로세스, 파일, 네트워크 노드가 있는 NetworkX 방향 그래프를 구축합니다. 5초 창 내 동일 PID의 연속 이벤트 사이에 시간적 엣지를 추가합니다.ml/detector.py) — 그래프와 구문 분석된 데이터에서 10개 특징 벡터를 추출합니다. 훈련된 모델이 있으면 RandomForestClassifier를 사용하고, 그렇지 않으면 10개의 하드코딩된 클린 패키지 기준선으로 훈련된 IsolationForest로 대체됩니다. 심각도 점수와 시간 패턴 수가 최종 신뢰도를 높입니다.data/signatures.json에 정의되어 있습니다. 각 시그니처에는 심각도(1–10), 필요한 시스템 호출, 파일 패턴, 네트워크 조건 및 일치시킬 순서 있는 시퀀스가 있습니다.
타임스탬프가 있는 strace 출력에서 감지됩니다. strace -t 플래그 필요(기본적으로 활성화됨).
24가지 시스템 호출 유형 각각에는 기본 심각도 가중치가 있습니다. 예:
mprotect with PROT_EXEC: 9.0dup2 after a connect: 9.0execve of unexpected binary: 7.0connect to cloud metadata (169.254.x.x): 8.0connect to PyPI/npm CDN: 0.0 (양성)openat of /usr/lib/python/*: 0.0 (양성)총 심각도 점수는 ML 신뢰도 계산에 사용됩니다.
모든 connect 시스템 호출은 네 가지 범주 중 하나로 분류됩니다.
git clone --depth 1 https://github.com/tejasprasad2008-afk/TraceTree.git cd TraceTree pip install -e .
### 분석 실행```bash
cascade-analyze --help
출력:``` ┌──────────────────────────────────────┐ │ TraceTree Security Analyzer │ │ Target: requests │ │ Analyzer Type: PIP │ └──────────────────────────────────────┘ ✔ Sandboxing requests (pip)... ✔ Parsing requests... ✔ Graphing requests... ✔ Detecting requests...
┌─ Cascade Graph: requests ────────────┐ │ pip install requests │ │ └─ pip (root) │ │ └─ net_151.101.1.69:443 (connect)│ │ └─ file_/usr/lib/python3.11/... │ └──────────────────────────────────────┘
┌─ Flagged Behaviors ──────────────────┐ │ No suspicious footprints flagged. │ └──────────────────────────────────────┘
┌──────────┐
│ CLEAN │
└──────────
Confidence Score: 72.3%
악성 패키지 (예: 알려진 오타 스쿼팅)의 경우:```
┌─ Behavioral Signatures Matched ──────┐
│ 🔴 credential_theft (severity 9/10) │
│ Step 1: openat /etc/shadow │
│ Step 2: connect 45.33.32.156:4444 │
└──────────────────────────────────────┘
┌─ Temporal Execution Patterns ────────┐
│ 🔴 connect_then_shell (severity 10/10)│
│ Window: 1500-4200 ms — External... │
└──────────────────────────────────────┘
┌───────────┐
│ MALICIOUS │
└───────────┘
Confidence Score: 99.9%
Signatures: credential_theft | Temporal: connect_then_shell
cascade-analyze <target>단일 패키지, 바이너리 또는 벌크 파일을 분석합니다.```bash
cascade-analyze requests cascade-analyze urllib33 # known typosquat
cascade-analyze package.json
cascade-analyze suspicious_app.dmg cascade-analyze payload.exe
cascade-analyze requirements.txt cascade-analyze package.json
cascade-analyze ./some_file --type pip cascade-analyze ./some_file --type npm cascade-analyze ./some_file --type dmg cascade-analyze ./some_file --type exe
**Subcommand: `cascade-analyze mcp`** — MCP 서버 보안 분석 (아래 MCP 섹션 참조).
**Subcommand: `cascade-analyze watch <repo>`** — 세션 가디언 (세션 가디언 섹션 참조).
**Subcommand: `cascade-analyze check <file>`** — 빠른 온디맨드 스캔.
### `cascade-watch <repo>`
독립형 세션 가디언. 패키지 매니페스트를 감시하고 백그라운드 샌드박스 분석을 실행합니다.```bash
cascade-watch ./my-project
cascade-watch ./my-project --check setup.py # on-demand scan
cascade-watch https://github.com/user/repo.git # URL accepted but not cloned
터미널에 거미 마스코트를 표시하고 상태를 반복적으로 확인합니다. Ctrl+C를 눌러 중지하세요. 디렉터리당 하나의 감시자만 허용됩니다(잠금 파일: /tmp/tracetree_sessions/).
cascade-check <file>특정 파일에 대한 빠른 일회성 분석입니다. 새로운 샌드박스 실행을 시작하고 결과를 반환합니다.```bash cascade-check setup.py cascade-check ./payload.exe
### `cascade-install-hook`
모든 `git clone` 후에 `cascade-watch`를 자동으로 실행하는 셸 훅을 설치합니다.```bash
cascade-install-hook
이는 source 줄을 ~/.bashrc 또는 ~/.zshrc에 추가합니다. 훅 스크립트는 ~/.local/share/tracetree/hooks/shell_hook.sh에 위치합니다. 설치 후, 모든 git clone은 백그라운드 감시자를 실행하고 /tmp/tracetree_<reponame>.log에 기록합니다.
cascade-train대화형 훈련 파이프라인입니다. MalwareBazaar API 키를 입력받습니다 (선택 사항 — 로컬 데이터셋만 사용하여 훈련하려면 건너뛸 수 있습니다). 그런 다음:
ml/model.skops에 저장하고 캐시를 무효화합니다```bash
export MALWAREBAZAAR_AUTH_KEY="your-key"
cascade-train## MCP 서버 보안 분석
`cascade-analyze mcp` 하위 명령은 Model Context Protocol 서버의 악성 행위를 분석합니다. 샌드박스 컨테이너에서 서버를 실행하고, 시뮬레이션된 MCP 클라이언트 역할을 하여 모든 도구를 발견하고 호출한 다음, 결과 syscall trace를 분류합니다.```bash
# Analyze an npm MCP server
cascade-analyze mcp --npm @modelcontextprotocol/server-github
# Analyze a local MCP server project
cascade-analyze mcp --path ./my-mcp-server
# Allow network (for servers that legitimately need internet)
cascade-analyze mcp --npm @modelcontextprotocol/server-github --allow-network
# Force transport
cascade-analyze mcp --npm some-package --transport stdio
cascade-analyze mcp --npm some-package --transport http --port 3000
# JSON output
cascade-analyze mcp --npm some-package --output json
strace -f로 추적합니다.initialize 핸드셰이크, tools/list 발견, 모든 도구를 합성 인수로 안전하게 호출.; ls /etc, ../../../etc/passwd, <script>alert(1)</script>)로 다시 호출됩니다.filesystem, github, postgres, fetch, shell)에 대한 하드코딩된 기준선과 시스템 호출 프로필을 비교합니다.sandbox/ — Docker 컨테이너 수명주기 관리. python:3.11-slim 기반 Dockerfile에서 cascade-sandbox:latest를 빌드하며, strace, wine64, p7zip-full, cabextract, Node.js, npm이 포함됩니다. 대상 실행 전에 네트워크 인터페이스를 내립니다(ip link set eth0 down). pip, npm, DMG, EXE 대상을 지원합니다. strace 로그 경로를 반환하거나 실패 시 빈 문자열을 반환합니다.
monitor/parser.py — 정규식 기반 strace 로그 파서. [pid] 형식과 PID만 있는 형식, 타임스탬프가 있는(-t) 출력 등 여러 줄의 시스템 호출 항목을 처리합니다. 5개 범주(프로세스, 네트워크, 파일, 메모리, IPC)에 걸쳐 24가지 시스템 호출 유형을 추적합니다. 이벤트별 심각도 가중치를 할당하고, 네트워크 대상을 분류하며, 민감한 파일 액세스를 표시합니다. 타임스탬프와 상대적 밀리초 오프셋이 포함된 구조화된 이벤트 데이터를 반환합니다.
monitor/signatures.py — 동작 시그니처 매처. data/signatures.json에서 8개의 패턴을 로드합니다. 정렬되지 않은 매칭(필수 시스템 호출 + 파일/네트워크 패턴이 존재해야 함)과 정렬된 시퀀스 매칭(시스템 호출-조건 쌍이 순서대로 나타나야 함)을 모두 지원합니다. 각 매치를 트리거한 특정 이벤트를 나열하는 증거와 함께 일치된 시그니처를 반환합니다.
monitor/timeline.py — 시간 패턴 분석기. 정렬되고 타임스탬프가 있는 이벤트 스트림에서 5가지 시간 기반 동작 패턴을 감지합니다. 각 패턴은 심각도, 시간 창, 트리거 조건을 지정합니다. 심각도 내림차순으로 정렬된 매치를 반환합니다. strace가 -t(기본값)로 실행된 경우에만 활성화됩니다.
graph/builder.py — NetworkX 방향 그래프 구성. 프로세스, 파일, 네트워크 대상에 대한 노드를 생성합니다. 복제 관계, 시스템 호출 대상, 시간 관계(5초 이내의 연속된 동일 PID 이벤트)에 대한 엣지를 추가합니다. 노드와 엣지는 시그니처 매치 및 심각도 가중치로 태그가 지정됩니다. Cytoscape 호환 JSON 및 내부 통계를 출력합니다.
ml/detector.py — 이상 탐지. 10가지 특징 벡터(노드 수, 엣지 수, 네트워크 연결, 파일 읽기, execve 수, 총 심각도, 의심스러운 네트워크, 민감한 파일, 최대 심각도, 시간 패턴 수)를 추출합니다. 학습된 모델이 로컬에 있거나 GCS에서 다운로드 가능한 경우 RandomForestClassifier를 사용하고, 그렇지 않으면 10개의 하드코딩된 클린 패키지 기준선으로 학습된 IsolationForest로 대체합니다. 심각도 점수와 시간 패턴 수는 ML 예측과 별도로 최종 신뢰도를 높입니다.
mcp/ — MCP 서버 분석 모듈. 6개 파일: sandbox.py (MCP 서버용 Docker 샌드박스), client.py (도구 발견 및 적대적 프로브가 있는 JSON-RPC 2.0 클라이언트), features.py (서버 유형 감지 기능이 있는 MCP별 특징 추출), classifier.py (규칙 기반 위협 분류), report.py (Rich 콘솔 + JSON 보고서 생성).
watcher/session.py — 세션 가디언. SessionWatcher 클래스는 백그라운드 데몬 스레드에서 실행됩니다. requirements.txt, package.json, setup.py, pyproject.toml을 스캔하여 패키지를 검색합니다. 각각을 샌드박스 파이프라인을 통해 실행합니다. get_status()를 통해 상태를 노출하고 Queue를 통해 결과를 노출합니다. /tmp/tracetree_sessions/의 잠금 파일을 통한 세션 잠금.
mascot/spider.py — SpiderMascot 클래스. 5가지 상태(idle, success, warning, scanning, confused)를 가진 ASCII 거미. 분석 중 시각적 피드백을 위해 CLI에서 사용됩니다.
hooks/ — 셸 훅 시스템. shell_hook.sh는 git 명령을 래핑하여 git clone을 가로채고 백그라운드에서 cascade-watch를 시작합니다. install_hook.py는 크로스 플랫폼 설치 프로그램으로, bash/zsh를 감지하고 적절한 RC 파일에 소스 줄을 추가합니다.
cli.py — Typer CLI 진입점. 모든 하위 명령을 등록합니다. Rich 진행 표시줄 및 형식화된 출력 패널로 분석 파이프라인을 조정합니다.
cascade-train을 실행하세요. IsolationForest 대체는 휴리스틱 기준선이며 프로덕션 품질 모델이 아닙니다.ip link set eth0 down)하여 스캔 중 활성 데이터 유출을 방지합니다. 보안성이 있지만, 설치 중 네트워크 핸드셰이크나 C2 연결이 필요한 멀웨어는 페이로드를 실행하지 못할 수 있으며, 인터넷 연결이 필요한 일부 합법적인 설치 프로그램도 실패합니다. 이를 우회하려면 --controlled-network 옵션을 전달하여 제어된/싱크홀 네트워크 모드를 활성화하세요.strace/ptrace 모니터링 중임을 감지(ptrace(PTRACE_TRACEME, ...) 호출 또는 /proc/self/status에서 TracerPid 확인)할 수 있습니다. 회피가 트리거되면 멀웨어가 조기에 종료되거나 양성 동작만 실행하여 탐지를 회피할 수 있습니다.풀 리퀘스트를 환영합니다. 새로운 기능은 기존 모듈과 분리된 상태로 유지해 주세요.
MIT
| 시그니처 | 심각도 | 탐지 내용 |
|---|
reverse_shell | 10 | 외부 연결 → dup2 → execve /bin/sh |
container_escape | 10 | /proc/1/, /sys/fs/cgroup, /var/run/docker.sock의 openat |
credential_theft | 9 | /etc/shadow, .ssh/, .aws/의 openat → 외부 연결 |
typosquat_exfil | 9 | 비밀 읽기 (.env, .npmrc) → pastebin/file.io/transfer.sh에 연결 |
process_injection | 9 | mprotect PROT_EXEC → 비표준 바이너리의 execve |
crypto_miner | 8 | clone → clone → 마이닝 풀 포트(3333, 4444, 14444, 45700)에 연결 |
dns_tunneling | 7 | getaddrinfo + sendto + socket on port 53/5353 |
persistence_cron | 7 | crontab 경로의 openat → 쓰기 |
| 패턴 | 심각도 | 트리거 조건 |
|---|
connect_then_shell | 10 | 외부 연결 → 3초 이내 execve /bin/sh |
credential_scan_then_exfil | 9 | 민감한 파일 읽기 → 5초 이내 외부 연결 |
delayed_payload | 8 | 10초 이상의 간격 후 의심스러운 활동의 폭발(드로퍼 행동) |
rapid_file_enumeration | 7 | 1초 이내 10개 이상의 파일 열기(스캐닝 행동) |
burst_process_spawn | 7 | 2초 이내 5개 이상의 clone/execve |
| 범주 | 기준 | 위험 점수 |
|---|
safe_registry | IP가 알려진 PyPI/npm/GitHub CDN 범위와 일치 | 0.0 |
known_benign | 분류되지 않은 호스트의 표준 웹 포트(80/443) | 0.5 |
suspicious | 클라우드 메타데이터(169.254.x.x), 컨테이너의 개인 IP, 또는 의심스러운 포트(4444, 1337, 31337 등) | 8.0–9.0 |
unknown | 기본값 | 3.0 |
| 대상 유형 | 작동 방식 | 참고 사항 |
|---|
| PyPI 패키지 | pip download (네트워크 사용), 그런 다음 strace 하에서 pip install --no-index (네트워크 없음) | 가장 안정적입니다. 설치 전 네트워크가 차단됩니다. |
| npm 패키지 | strace 하에서 npm install, dry-run 후 네트워크 차단 | 샌드박스 이미지에 Node.js 필요 |
| DMG 파일 | 컨테이너 내부에서 7z로 추출. 발견된 스크립트(.sh, .py, .command), .pkg 설치 프로그램, .app 번들 및 bare Mach-O 바이너리는 각각 strace 하에서 실행됨 | 샌드박스 이미지에 p7zip-full 필요. DMG 추출은 암호화되거나 일반적이지 않은 형식에서 실패할 수 있음. 스크립트는 Linux 컨테이너에서 실행되므로 macOS 특정 동작은 실행되지 않음 |
| EXE 파일 | wine64와 함께 strace -t -f 및 30초 타임아웃으로 실행. Wine 초기화 노이즈는 strace 로그에서 필터링됨 | 샌드박스 이미지에 wine64 필요. 사용자 입력을 기다리는 GUI 앱은 타임아웃됨. Wine의 변환 계층으로 인해 시스템 호출은 Linux 시스템 호출이지 기본 Windows가 아님 — 일부 Windows 특정 동작이 표시되지 않을 수 있음 |
| 위협 | 심각도 | 설명 |
|---|
COMMAND_INJECTION | 치명적 | 도구 인수에 응답하여 셸이 생성됨 |
CREDENTIAL_EXFILTRATION | 치명적 | 비밀 읽기 후 네트워크 연결 |
COVERT_NETWORK_CALL | 높음 | 예상치 못한 대상으로의 도구 호출 중 아웃바운드 연결 |
PATH_TRAVERSAL | 높음 | 작업 디렉터리 외부 파일 읽기 |
EXCESSIVE_PROCESS_SPAWNING | 중간 | 불균형한 자식 프로세스 수 |
PROMPT_INJECTION_VECTOR | 높음 | 도구 설명에 제로 너비 문자 또는 인젝션 언어 포함 |
api/main.pymock_dbTRACETREE_API_KEYScascade-watch는 URL 인수를 받지만 git clone을 수행하지 않습니다. 로컬 디렉터리를 감시하거나 현재 작업 디렉터리로 대체됩니다.