etherman-os/SavannaGuard
GitHub: etherman-os/SavannaGuard
一个注重隐私的自托管反机器人防护系统,通过多信号行为分析与联邦学习解决传统验证码体验与追踪问题。
Stars: 0 | Forks: 0
# SavannaGuard — 注重隐私的机器人安全层
**在线演示:** https://savannaguard.com
SavannaGuard 是一个真正的自托管、尊重隐私的安全层,旨在解决传统验证码忽略的问题。其他解决方案只专注于令人沮丧的图像谜题和跨网络追踪用户,而 SavannaGuard 作为一个隐形、补充性的纵深防御工具。
通过结合 **自适应工作量证明**(根据攻击量自动调整难度)、**每站机器学习**(在线高斯模型,学习真实用户行为)、**机器人签名追踪**(标记重复攻击者)、**JavaScript 引擎时序预言机**(通过 V8 JIT 模式检测无头浏览器)以及 **联邦机器人智能**(跨实例共享威胁情报),它构建了一个强大的防护盾,可以作为现有安全措施的替代方案或附加层。
**零第三方依赖:** 无需 Redis,不调用大厂外部 API,且绝对不会有行为数据离开您的服务器。
## 关键特性
### 自适应工作量证明
根据检测到的机器人比例自动调整难度。受到攻击时 → 谜题更难;空闲时段 → 最小摩擦。
### 每站机器学习
在线高斯模型在仅 10+ 个人类样本后即可学习您的合法用户行为模式。适应您的流量,而非通用模型。
### 机器人签名追踪
通过 IP+UA 哈希标记重复攻击者。三次匹配 = 高置信度机器人。签名保留期:30 天。
### JavaScript 引擎时序预言机
通过分析 V8 JIT 编译模式、加密操作和 requestAnimationFrame 行为来检测无头浏览器(Puppeteer、Playwright、Selenium)— **无需嗅探用户代理**。
### 生理震颤分析
人类手部会表现出 8–12 Hz 的非自主震颤 — 这是所有健康用户都存在的神经学常量。SavannaGuard 对鼠标速度流应用 FFT,并测量该频带的功率。机器人产生的是平坦噪声或程序化平滑;两者都无法匹配生物熵。
### WebRTC 拓扑预言机
在任何表单交互之前,SavannaGuard 被动收集 WebRTC ICE 候选 — 浏览器自身的网络自述。数据中心环境、单接口虚拟机以及 VPN 泄露会产生真实家庭/办公用户绝不会出现的拓扑特征。无需任何网络请求。
### 联邦机器人智能(P2P)
自托管实例通过八卦协议点对点共享机器人签名。当一个实例检测到机器人时,所有实例都会学习。无中央服务器,无原始数据离开您的网络。
### 10 个行为信号收集器
鼠标动态、击键节奏、画布指纹、WebGL 渲染、屏幕指标、浏览器属性、网络时序、页面时序、生理震颤、WebRTC 拓扑 — 所有数据均在本地处理,得分范围为 0–100。
## 实时链接
- **官网:** https://savannaguard.com
- **代码仓库:** https://github.com/etherman-os/SavannaGuard
## 快速启动(3 条命令)
```
git clone https://github.com/etherman-os/SavannaGuard && cd SavannaGuard
cp .env.example .env
docker compose up -d
```
然后打开 http://localhost:3000/admin(默认密码: `admin`)。
## 使用摘要
生产环境中 SavannaGuard 的使用流程:
1. 前端向 `/api/v1/challenge/create` 请求挑战。
2. 插件解决 PoW 并向 `/api/v1/challenge/solve` 发送遥测数据。
3. 后端在处理用户操作前使用 `/api/v1/token/validate` 验证颁发的令牌。
## 运行测试
```
pnpm test
```
仅运行服务器测试:
```
pnpm --filter @savannaguard/server test
```
## 表单集成
```
```
## 架构
- **服务器**: Fastify + SQLite — 处理 PoW 挑战、令牌生成、会话评分
- **插件**: 通过 Vite 实现的 Vanilla TS — Web Worker PoW 求解器、行为收集器(5.8KB gzip)
- **管理端**: 由服务器提供的 Alpine.js UI — 统计、标记会话、设置
## 检测背后的科学
SavannaGuard 的检测方法基于可观察的生物和网络现象,机器人难以轻易复制。
### 生理震颤分析(信号 #9)
人类手部会表现出 8–12 Hz 的非自主震颤 — 这是所有健康用户都存在的神经学常量。SavannaGuard 对鼠标速度流应用 FFT,并测量该频带的功率。机器人产生的是平坦噪声或程序化平滑;两者都无法匹配生物熵。
### WebRTC 拓扑预言机
在任何表单交互之前,SavannaGuard 被动收集 WebRTC ICE 候选 — 浏览器自身的网络自述。数据中心环境、单接口虚拟机以及 VPN 泄露会产生真实家庭/办公用户绝不会出现的拓扑特征。无需网络请求。
### 尝试击败它
我们邀请安全研究人员尝试突破。打开一个议题并提交您的方案 — 成功绕过并被修复的方案将在本 README 中获得致谢。
## API 端点
| 方法 | 路径 | 描述 |
|------|------|------|
| POST | /api/v1/challenge/create | 创建 PoW 挑战 |
| POST | /api/v1/challenge/solve | 提交 PoW 解决方案 + 行为数据 |
| POST | /api/v1/token/validate | 验证令牌 |
| GET | /admin | 管理统计页面 |
| GET | /admin/threat | 威胁情报标签 |
| GET | /admin/flagged | 标记会话页面 |
| GET | /admin/settings | 设置页面 |
| GET | /admin/federation | 联邦管理 |
## 对比
| 特性 | SavannaGuard | Cloudflare Turnstile | hCaptcha |
|------|-------------|---------------------|----------|
| 自托管 | ✅ | ❌ | ❌ |
| 无外部 API 调用 | ✅ | ❌ | ❌ |
| 每站机器学习 | ✅ | ❌ | ✅ |
| 无头浏览器检测 | ✅ | 有限 | ❌ |
| 生理震颤分析 | ✅ | ❌ | ❌ |
| WebRTC 拓扑预言机 | ✅ | ❌ | ❌ |
| 联邦威胁情报 | ✅ | ❌ | ❌ |
| 自适应 PoW 难度 | ✅ | ❌ | ❌ |
| 行为信号收集器 | 10 个信号 | 未知 | 最少 |
| SQLite(无需 Redis) | ✅ | 不适用 | 不适用 |
## 技术栈
Fastify · SQLite · TypeScript · Vite · Alpine.js · Docker Compose
## 许可
- 本仓库为来源可用(并非 OSI 开源)。
- 社区自托管允许。
- 托管/转售需要单独的商用协议。
- 详情请参阅 LICENSE 和 COMMERCIAL_USE.md。
## 开源边界
- 本仓库:社区可验证的核心(可自托管)。
- 付费/私有仓库:计费、租户配置、管理控制平面、企业功能。
## 隐私
- 无 Redis — 挑战/会话状态仅使用 SQLite。
- 无原始行为数据 — 仅存储聚合分数(0–100)。
- IP 地址哈希(SHA256 + 每日轮换盐),永不清文存储。
## 令牌验证示例
```
import fetch from 'node-fetch';
async function verifySavannaToken(token: string) {
const response = await fetch('http://localhost:3000/api/v1/token/validate', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ token }),
});
const data = await response.json();
// { valid: true, verdict: 'human', score: 84 }
return data;
}
```
标签:Apex, Bot签名, FFT, JS引擎时序取证, PoW, SEO, V8 JIT, 人机验证, 分布式威胁共享, 去中心化威胁情报, 反爬虫, 反自动化, 在线高斯模型, 安全层, 无头浏览器检测, 无验证码, 机器人特征追踪, 机器人防护, 机器学习, 流量自适应, 流量验证, 版权保护, 生理震颤分析, 网站防护, 联邦P2P, 自动化攻击, 自托管, 自适应工作量证明, 边缘安全, 隐私优先, 零第三方依赖, 频域分析, 鼠标速率