elin-olsson/fox-trace
GitHub: elin-olsson/fox-trace
轻量级 SSH 信任关系映射工具,通过审计本地 SSH 产物揭示隐藏的横向移动路径并计算密钥爆炸半径。
Stars: 0 | Forks: 0
Fox-trace 是一个轻量级安全工具,旨在映射和可视化 Linux 系统上的 SSH 信任关系。
Fox-trace 识别“影子路径”(Shadow Paths)——攻击者通过利用本地 SSH 产物(如密钥、配置文件和连接历史)在网络中进行横向移动的潜在路径。
## 前置条件
- Python 3.10 或更高版本
- 运行时无需外部依赖包 —— 仅使用标准库
检查您的 Python 版本:
```
python3 --version
```
## 安装说明
克隆仓库并进入工具目录:
```
git clone https://github.com/elin-olsson/fox-trace.git
cd fox-trace
```
无需安装依赖。直接运行:
```
python3 src/harvester.py
```
## 用法
以下所有命令均在 `fox-trace` 目录内运行:
```
cd fox-trace
```
```
python3 src/harvester.py [options]
```
```
# 运行 harvester 扫描默认的 ~/.ssh 目录
python3 src/harvester.py
# 将结果保存到自定义的 JSON 路径
python3 src/harvester.py --json data/custom_findings.json
# 生成交互式 Shadow Map (HTML)
python3 src/harvester.py --html
# 将密钥与 GitHub 用户的公钥进行匹配
python3 src/harvester.py --github elin-olsson
# 将超过 90 天的密钥标记为 stale
python3 src/harvester.py --stale 90
```
### 标志
| 标志 | 描述 | 状态 |
|---|---|---|
| `--json FILE` | 将结构化发现结果写入 JSON | ✅ 已实现 |
| `--html FILE` | 生成交互式 D3.js 影子拓扑图 | ✅ 已实现 |
| `--github USER` | 通过 GitHub 公开 API 匹配密钥 | ✅ 已实现 |
| `--stale DAYS` | 标记超过 X 天的旧密钥(默认:180) | ✅ 已实现 |
## 检查内容
Fox-trace 对您的 SSH 环境执行多阶段审计,以揭示隐藏的风险。
| 检查项 | 方式 | 洞察 |
|---|---|---|
| **私钥** | 扫描 `~/.ssh/` 中的私钥头 | 识别系统上可用的“通行证” |
| **密钥强度** | 解析 RSA 模数大小,标记 DSA | 检测加密强度弱的密钥 |
| **密码短语** | 检测 PEM 和 OpenSSH 格式的加密情况 | 标记一旦被盗即可立即使用的密钥 |
| **权限** | 检查文件和目录权限 | 对任何用户可读或组用户可读的密钥发出警告 |
| **已知主机** | 解析 `known_hosts`(明文和哈希格式) | 映射该用户曾经连接过的目标地址 |
| **授权密钥** | 读取指纹和注释 | 识别谁拥有对该系统的入站访问权限 |
| **身份匹配** | GitHub API 关联 | 验证匿名密钥是否属于已知的 GitHub 身份 |
| **活动代理** | 扫描 `/tmp/` 中的活动 SSH 代理套接字 | 警告潜在的会话劫持风险 |
| **爆炸半径** | 将 SSH 配置与已知主机相关联 | 计算泄露的密钥可以访问多少台服务器 |
| **ForwardAgent** | 解析 SSH 配置 | 标记启用了代理转发的主机 |
## 示例输出
```
══════════════════════════════════════════════════════════════
FOX-TRACE — SSH Trust & Lateral Movement Mapper
══════════════════════════════════════════════════════════════
Risk Score ████████████████░░░░ 60/100 [HIGH]
Findings 34 artifacts identified
Found 1 private key(s).
Found 1 public key(s).
Found 1 authorized_keys entry(s).
Found 30 known host(s).
Found 0 active SSH agent(s).
~/.ssh permissions: 700 (OK)
--- Private Keys ---
id_ed25519 ssh-ed25519 perm:600 NO PASSPHRASE age:0d
--- Blast Radius Analysis ---
id_ed25519 → 30 hosts (100.0%) [potential]
--- Risk Alerts & Remediations ---
[HIGH ] Key 'id_ed25519' has no passphrase — usable immediately if stolen.
→ Fix: Add a passphrase: ssh-keygen -p -f ~/.ssh/id_ed25519
[HIGH ] Key 'id_ed25519' blast radius 100.0% — 30 hosts (potential — no SSH config mapping).
→ Fix: Use per-host keys in ~/.ssh/config (IdentityFile). Audit and
remove this key from authorized_keys on servers where it is no longer needed.
──────────────────────────────────────────────────────────────
MOST CRITICAL ATTACK PATH
──────────────────────────────────────────────────────────────
Key: id_ed25519 (ssh-ed25519)
Passphrase: no passphrase — usable immediately if stolen
Permissions: 600 (OK)
Age: 0 days
Blast Radius: 30 hosts (100.0%) — potential — no SSH config mapping found
Example targets: github.com, 10.10.20.10, 192.168.1.100
══════════════════════════════════════════════════════════════
```
## 影子拓扑图可视化
Fox-trace 包含一个内置可视化工具,使用 **D3.js** 生成交互式的力导向图。
```
python3 src/harvester.py --html
```

- **本地机器** —— 审计的起点,根据风险评分进行着色
- **SSH 密钥** —— 节点大小按爆炸半径缩放;绿色 = 受密码短语保护,红色 = 无密码短语
- **已知主机** —— 按类型分类:私有 IP、外部 IP、已知服务(GitHub)或回环地址
- **警报** —— 点击任何节点可查看发现结果和具体的修复命令
- **悬停** —— 将鼠标悬停在任何节点上可查看快速摘要,无需点击
- **缩放与拖拽** —— 滚动缩放,拖动节点重新排列,按 ESC 关闭信息面板
## 依赖项
无运行时依赖 —— 仅使用标准库。
| 包 | 版本 | 用途 |
|---|---|---|
| `json` | 标准库 | 数据导出和可视化输入 |
| `urllib` | 标准库 | GitHub 公钥 API 通信 |
| `hashlib` | 标准库 | SSH 密钥指纹识别 (SHA256) |
| `base64` / `struct` | 标准库 | RSA 密钥大小解析 |
| `d3.js` | v7 (CDN) | 交互式图表渲染(通过可视化工具) |
本 Logo 版权所有 © 2026 shadowfox.se —— 保留所有权利,不受 MIT 许可证保护。
标签:D3.js, GitHub API, Mutation, Python安全工具, SamuraiWTF, SSH安全, 信任关系分析, 反取证, 可视化, 安全评估, 库, 应急响应, 影子路径, 横向移动, 编程规范, 网络安全, 逆向工具, 隐私保护, 零依赖