elin-olsson/fox-trace

GitHub: elin-olsson/fox-trace

轻量级 SSH 信任关系映射工具,通过审计本地 SSH 产物揭示隐藏的横向移动路径并计算密钥爆炸半径。

Stars: 0 | Forks: 0

fox-trace

License: MIT CI

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 ``` ![影子拓扑图预览](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/815c60ca12122240.png) - **本地机器** —— 审计的起点,根据风险评分进行着色 - **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安全, 信任关系分析, 反取证, 可视化, 安全评估, 库, 应急响应, 影子路径, 横向移动, 编程规范, 网络安全, 逆向工具, 隐私保护, 零依赖