tejasprasad2008-afk/TraceTree
GitHub: tejasprasad2008-afk/TraceTree
TraceTree 是一个基于运行时行为沙箱分析的工具,旨在通过系统调用跟踪与机器学习检测供应链中的隐蔽恶意行为。
Stars: 39 | Forks: 4
# TraceTree


对 Python 包、npm 模块、DMG 镜像和 Windows EXE 文件进行运行时行为分析。在沙箱化的 Docker 容器中执行目标程序,使用 strace 跟踪系统调用,并通过 ML 异常检测、基于规则的签名匹配和时间模式分析对行为进行分类。
## 工作原理
```
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
```
1. **沙箱** — 目标程序在 Docker 容器中运行。在开始安装/执行前关闭网络(`ip link set eth0 down`),因此任何出站连接尝试都会被记录但被阻止。
2. **strace** — 使用 `strace -t -f -e trace=all` 跟踪每个系统调用。`-t` 标志添加时间戳用于时间分析,`-f` 跟踪子进程。
3. **解析器** (`monitor/parser.py`) — 基于正则表达式的解析器,处理多行 strace 输出以及 `[pid]` 和裸 PID 格式。提取进程创建、文件访问、网络连接和内存操作。为每个系统调用分配一个安全相关性的严重性权重(0–9)。
4. **签名匹配** (`monitor/signatures.py`) — 将解析后的事件流与 `data/signatures.json` 中定义的 8 种行为签名模式进行匹配。每次匹配都会生成包含触发该签名的具体事件的证据。
5. **时间分析** (`monitor/timeline.py`) — 从带时间戳的事件流中检测 5 种基于时间的行为模式(例如,在 5 秒内读取凭证文件后建立外部连接)。
6. **图构建** (`graph/builder.py`) — 使用 NetworkX 构建有向图,包含进程、文件和网络节点。在同一 PID 的事件之间,若时间间隔在 5 秒内,则添加时间边。
7. **ML** (`ml/detector.py`) — 从图中提取 10 维特征向量。若存在已训练模型则使用随机森林分类器,否则回退到基于 10 个硬编码干净包基线的孤立森林。严重性分数和时间模式计数会提升最终置信度。
## 检测内容
### 行为签名(8 种模式)
定义在 `data/signatures.json` 中。每种签名包含严重性(1–10)、所需系统调用、文件模式、网络条件以及有序匹配序列。
| 签名 | 严重性 | 检测内容 |
|---|---|---|
| `reverse_shell` | 10 | 外部连接 → dup2 → execve /bin/sh |
| `container_escape` | 10 | 打开 /proc/1/、/sys/fs/cgroup、/var/run/docker.sock |
| `credential_theft` | 9 | 打开 /etc/shadow、.ssh/、.aws/ → 外部连接 |
| `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 + 53/5353 端口上的 socket |
| `persistence_cron` | 7 | 打开 crontab 路径 → 写入 |
### 时间模式(5 种)
从带时间戳的 strace 输出中检测。启用 strace 的 `-t` 标志(默认开启)。
| 模式 | 严重性 | 触发条件 |
|---|---|---|
| `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 |
### 严重性加权系统调用评分
每种系统调用类型具有基础严重性权重。示例:
- `mprotect` 且 `PROT_EXEC`:9.0
- 连接后 `dup2`:9.0
- 执非常规二进制文件的 `execve`:7.0
- 连接到云元数据(169.254.x.x):8.0
- 连接到 PyPI/npm CDN:0.0(良性)
- 打开 `/usr/lib/python/*`:0.0(良性)
总严重性分数用于 ML 置信度计算。
### 网络目标分类
每个 `connect` 系统调用被分类为以下四类之一:
| 类别 | 条件 | 风险分数 |
|---|---|---|
| `safe_registry` | IP 匹配已知的 PyPI/npm/GitHub CDN 范围 | 0.0 |
| `known_benign` | 标准 Web 端口(80/443)连接到未识别主机 | 0.5 |
| `suspicious` | 云元数据(169.254.x.x)、容器内私有 IP 或可疑端口(4444、1337、31337 等) | 8.0–9.0 |
| `unknown` | 默认 | 3.0 |
## 支持的目标类型
| 目标类型 | 工作方式 | 说明 |
|---|---|---|
| **PyPI 包** | `pip download`(带网络),然后在无网络环境下执行 `pip install --no-index` | 最可靠。在执行前关闭网络。 |
| **npm 包** | 在沙箱中执行 `npm install`,网络在 dry-run 后关闭 | 需要沙箱镜像中包含 Node.js。 |
| **DMG 文件** | 使用 `7z` 在容器内解压。执行找到的脚本(.sh、.py、.command)、.pkg 安装包、.app 包以及裸 Mach-O 二进制文件。 | 需要沙箱镜像中包含 p7zip-full。DMG 解压可能因加密或不常见格式失败。脚本在 Linux 容器中运行,因此不会执行 macOS 特定行为。 |
| **EXE 文件** | 使用 `wine64` 在沙箱中运行,并附带 `strace -t -f` 和 30 秒超时。Wine 初始化噪声会从 strace 日志中过滤。 | 需要沙箱镜像中包含 wine64。等待用户输入的 GUI 应用会在 30 秒后超时。Wine 层意味着系统调用是 Linux 系统调用,而非原生 Windows —— 部分 Windows 特定行为可能不可见。 |
## 快速开始
### 先决条件
- Python 3.9+
- Docker(必须正在运行)
### 安装
```
git clone https://github.com/tejasprasad2008-afk/TraceTree.git
cd TraceTree
pip install -e .
```
### 运行分析
```
cascade-analyze requests
```
输出:
```
┌──────────────────────────────────────┐
│ 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
```
## CLI 参考
### `cascade-analyze `
分析单个包、二进制文件或批量文件。
```
# PyPI package
cascade-analyze requests
cascade-analyze urllib33 # known typosquat
# npm package
cascade-analyze package.json
# DMG / EXE
cascade-analyze suspicious_app.dmg
cascade-analyze payload.exe
# Bulk analysis
cascade-analyze requirements.txt
cascade-analyze package.json
# Force target type
cascade-analyze ./some_file --type pip
cascade-analyze ./some_file --type npm
cascade-analyze ./some_file --type dmg
cascade-analyze ./some_file --type exe
```
**子命令 `cascade-analyze mcp`** — 分析 Model Context Protocol 服务器的安全性(参见下方 MCP 章节)。
**子命令 `cascade-analyze watch `** — 会话守护者(参见会话守护者章节)。
**子命令 `cascade-analyze check `** — 快速按需扫描。
### `cascade-watch `
独立的会话守护者。监视目录中的包清单并后台运行沙箱分析。
```
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 `
快速一次性分析特定文件。启动一个新的沙箱运行并返回判断结果。
<_BLOCK_7/>
### `cascade-install-hook`
安装一个 Shell 钩子,在每次 `git clone` 后自动运行 `cascade-watch`。
```
cascade-install-hook
```
该命令会在 `~/.bashrc` 或 `~/.zshrc` 中追加一行 source。钩子脚本位于 `~/.local/share/tracetree/hooks/shell_hook.sh`。安装后,每次 `git clone` 都会启动一个后台监视器并记录到 `/tmp/tracetree_.log`。
### `cascade-train`
交互式训练管道。提示输入 MalwareBazaar API 密钥(可选 —— 可跳过仅使用本地数据集训练),然后:
1. 从 MalwareBazaar 摄入样本(如果提供了密钥)
2. 对每个样本运行沙箱管道
3. 在提取的特征上训练随机森林分类器
4. 保存到 `ml/model.pkl`
5. 尝试上传到 Google Cloud Storage(需要已认证的 `google-cloud-storage`)
```
export MALWAREBAZAAR_AUTH_KEY="your-key"
cascade-train
```
### `cascade-update`
从 Google Cloud Storage(`cascade-analyzer-models` 存储桶,匿名访问)下载最新的预训练模型。如果下载失败,则回退到孤立森林基线。
```
cascade-update
```
## MCP 服务器安全分析
`cascade-analyze mcp` 子命令用于分析模型上下文协议(MCP)服务器的恶意行为。它在沙箱容器中运行服务器,充当模拟的 MCP 客户端以发现并调用每个工具,然后分类生成的系统调用跟踪。
```
# 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
```
### MCP 分析的作用
1. **沙箱** — 服务器在 Docker 中运行,默认关闭网络。使用 `strace -f` 进行跟踪。
2. **客户端模拟** — JSON-RPC 2.0 的 `initialize` 握手、`tools/list` 发现,以及使用合成参数对每个工具进行安全调用。
3. **对抗性探测** — 对每个工具重新调用注入载荷(`; ls /etc`、`../../../etc/passwd`、``)。
4. **特征提取** — MCP 特定特征:每个工具的网络连接、Shell 调用、敏感文件读取以及在对抗输入下的行为变化。
5. **威胁分类** — 基于规则的分类器,包含 6 类威胁:
| 威胁 | 严重性 | 描述 |
|---|---|---|
| `COMMAND_INJECTION` | Critical | 工具参数触发 Shell 启动 |
| `CREDENTIAL_EXFILTRATION` | Critical | 读取密钥后建立网络连接 |
| `COVERT_NETWORK_CALL` | High | 工具调用期间连接到意外目标 |
| `PATH_TRAVERSAL` | High | 读取工作目录之外的文件 |
| `EXCESSIVE_PROCESS_SPAWNING` | Medium | 子进程数量异常 |
| `PROMPT_INJECTION_VECTOR` | High | 工具描述包含零宽字符或注入语言 |
6. **基线对比** — 将系统调用特征与 5 种服务器类型(`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`)。支持 PyPI、npm、DMG 和 EXE 目标。返回 strace 日志路径或失败时返回空字符串。
**`monitor/parser.py`** — 基于正则表达式的 strace 日志解析器。处理多行系统调用条目、`[pid]` 和裸 PID 格式,以及带时间戳(`-t`)的输出。跟踪 24 种系统调用类型,跨 5 个类别(进程、网络、文件、内存、IPC)。为每个事件分配严重性权重,分类网络目标并标记敏感文件访问。返回包含时间戳和相对毫秒偏移的结构化事件数据。
**`monitor/signatures.py`** — 行为签名匹配器。从 `data/signatures.json` 加载 8 种模式。支持无序匹配(必需系统调用 + 文件/网络模式必须存在)和有序序列匹配(系统调用-条件对必须按顺序出现)。返回匹配的签名及触发它们的特定事件证据。
**`monitor/timeline.py`** — 时间模式分析器。从有序且带时间戳的事件流中检测 5 种基于时间的行为模式。每种模式指定严重性、时间窗口和触发条件。仅在 strace 使用 `-t` 标志(默认启用)时有效。返回按严重性降序排列的匹配结果。
**`graph/builder.py`** — NetworkX 有向图构建。创建进程、文件和网络目标节点。添加克隆关系、系统调用目标和时间关系(同一 PID 事件在 5 秒内连续发生)。节点和边标记有签名匹配和严重性权重。输出 Cytoscape 兼容的 JSON 及内部统计信息。
**`ml/detector.py`** — 异常检测。提取 10 维特征向量(节点数、边数、网络连接、文件读取、execve 数量、总严重性、可疑网络、敏感文件、最大严重性、时间模式数量)。若本地存在已训练模型则使用随机森林分类器,否则回退到基于 10 个硬编码干净包基线的孤立森林。严重性分数和时间模式计数独立于 ML 预测提升最终置信度。
**`mcp/`** — MCP 服务器分析模块。包含六个文件:`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` 类。ASCII 蜘蛛,具有 5 种状态(`idle`、`success`、`warning`、`scanning`、`confused`)。在 CLI 中用于分析过程中的视觉反馈。
**`hooks/`** — Shell 钩子系统。`shell_hook.sh` 包装 `git` 命令以拦截 `git clone` 并在后台启动 `cascade-watch`。`install_hook.py` 是跨平台安装器,检测 bash/zsh 并在适当的 RC 文件中追加 source 行。
**`cli.py`** — Typer CLI 入口点。注册所有子命令。使用 Rich 进度条和格式化输出面板协调分析管道。
## 限制
- **ML 模型可靠性** — 训练好的随机森林模型质量取决于训练数据。当前模型使用小规模包集合训练。要获得可靠检测,请使用大数据集运行 `cascade-train`。孤立森林回退是启发式基线,并非生产级模型。
- **strace 需要 Linux** — 沙箱在 Docker 中运行于 Linux。在 macOS 和 Windows 上,Docker 运行 Linux 虚拟机,这可以工作,但无法跟踪原生 macOS 或 Windows 系统调用。DMG 脚本和 EXE 二进制文件在 Linux 环境中执行,这限制了其行为保真度。
- **wine64 EXE 分析是尽力而为** — Wine 将 Windows 系统调用转换为 Linux 系统调用。某些 Windows 特定行为(注册表访问、COM 对象、Windows API 调用)可能不会产生可见的 Linux 系统调用。等待用户输入的 GUI 应用会在 30 秒后超时。
- **DMG 分析受限** — DMG 文件使用 7z 解压,可能因加密或不常见格式失败。解压后的脚本在 Linux 容器中运行,因此不会执行 macOS 特定行为(launchd、Keychain 等)。
- **无训练/测试分割** — 训练管道未将数据分为训练集和评估集。不报告准确率指标。
- **API 占位符** — `api/main.py` 未连接到真实管道,返回硬编码数据。
- **会话守护者不克隆仓库 — `cascade-watch` 接受 URL 参数但不执行 `git clone`。它监视本地目录或回退到当前工作目录。
## 贡献
欢迎提交 Pull Request。请保持新功能与现有模块解耦。
## 许可证
MIT
标签:Apex, DMG分析, Docker沙箱, NetworkX, npm分析, Python分析, SEO:供应链攻击检测, SEO:沙箱分析工具, SEO:运行时行为分析, strace, Windows可执行文件分析, 可视化界面, 孤立森林, 安装时扫描, 异常检测, 时序模式分析, 有向图, 机器学习, 沙箱分析, 特权检测, 突变策略, 系统调用追踪, 网络隔离, 规则匹配, 请求拦截, 运行时行为分析, 进程树, 逆向工具, 随机森林, 隐蔽攻击发现