Ann-BT/SIDERIS

GitHub: Ann-BT/SIDERIS

SIDERIS 是一个自托管的行为 WAF 代理,通过实时分析访客行为生物特征来检测和拦截传统 WAF 无法发现的自动化威胁。

Stars: 1 | Forks: 0


███████╗██╗██████╗ ███████╗██████╗ ██╗███████╗

██╔════╝██║██╔══██╗██╔════╝██╔══██╗██║██╔════╝

███████╗██║██║  ██║█████╗  ██████╔╝██║███████╗

╚════██║██║██║  ██║██╔══╝  ██╔══██╗██║╚════██║

███████║██║██████╔╝███████╗██║  ██║██║███████║

╚══════╝╚═╝╚═════╝ ╚══════╝╚═╝  ╚═╝╚═╝╚══════╝


           



SIDERIS

行为 WAF & 实时威胁检测代理

一个 sidecar 安全层,可拦截、分析并消除恶意流量
—— 无需改动您应用程序的任何一行代码。




SIDERIS 是一款**自托管的 Web 应用防火墙和实时行为分析代理**,运行在您现有网站的前端。它无需对您的应用进行任何更改,可与任何技术栈配合使用 —— 无论是 WordPress、Laravel、Node.js、Django、纯静态 HTML,还是那个您在 2011 年弄出来、至今都不敢碰的祖传系统。 它的工作原理是驻留在用户和您的服务器之间,静默观察访问者的行为方式(不仅是他们请求了什么)。击键动态、鼠标移动轨迹、请求时序、浏览器指纹。当行为看起来像自动化程序时,SIDERIS 就会采取行动。当看起来像真人操作时,流量则会原封不动地通过。
### SIDERIS 解决的问题 您的应用此刻可能正在被扫描探测。撞库工具、内容爬虫、endpoint fuzzer —— 它们大多不会触发传统 WAF 的特征库,因为它们不使用已知的 payload。它们只是表现得跟真人不一样。SIDERIS 度量的正是这种差异。
|         威胁类型         | 传统 WAF | SIDERIS | |:---|:---:|:---:| | 已知攻击特征 (SQLi, XSS) | ✅ 拦截 | ✅ 拦截 | | 行为异常 (bot, 爬虫) | ❌ 不可见 | ✅ 检测 | | 撞库攻击 | ❌ 不可见 | ✅ 检测 | | Headless 浏览器自动化 | ❌ 不可见 | ✅ 检测 | | 合法的人类用户 | ✅ 放行 | ✅ 放行 |

### 零应用代码更改 SIDERIS 是一个 sidecar。您的应用保持原样运行。您只需将流量先导引通过 SIDERIS。这就是全部的集成步骤。 ``` Before SIDERIS: [Users] ─────────────────────────────── [Your App :8080] After SIDERIS: [Users] ── [SIDERIS :4000] ──────────── [Your App :8080] ↑ security happens here ```
| 技术栈 | 状态 | |:---|:---:| | WordPress / WooCommerce | ✅ 兼容 | | Laravel / PHP | ✅ 兼容 | | Node.js / Express | ✅ 兼容 | | Django / Flask | ✅ 兼容 | | Ruby on Rails | ✅ 兼容 | | 静态 HTML / CDN origin | ✅ 兼容 | | 任何使用 HTTP 通信的应用 | ✅ 兼容 |


SIDERIS 以三个 Docker 容器形式运行:用于维护实时状态的 `sideris-redis`,用于事件归档的 `sideris-postgres`,以及包含并发运行的核心微服务(代理、遥测数据接入、决策引擎和 SOC 面板)的 `sideris-app`。 ``` ┌─────────────────────────────────────────────────────────────────────┐ │ │ │ [ Visitor Browser ] │ │ │ │ │ ▼ :4000 ◄── the only port your users ever see │ │ ┌──────────────────────────────────────┐ │ │ │ SIDERIS WAF PROXY │ │ │ │ • Enforces blocks before forwarding │ │ │ │ • Injects agent.js into HTML │ │ │ │ • Drops confirmed threats at edge │ │ │ └──────────────┬───────────────────────┘ │ │ │ clean traffic only │ │ ▼ :8080 │ │ [ Your Web Application ] │ │ (untouched, unaware, unbothered) │ │ │ └─────────────────────────────────────────────────────────────────────┘ ┌──────────────────────────────┐ │ agent.js (in browser) │ Collects silently: │ │ • Keystroke timing intervals │ Injected into every page │ • Mouse movement vectors │ Zero visible UI changes │ • Browser fingerprint │ │ • Request cadence + patterns └──────────────┬───────────────┘ │ telemetry stream ▼ :5000 ┌──────────────────────────────┐ │ INGEST COLLECTOR │ │ Validates & routes events │ │ into Redis Streams │ └──────────────┬───────────────┘ │ ▼ ┌──────────────────────────────────────┐ │ SCORING ENGINE + GUARD │ │ │ │ Score = Impact │ │ × Confidence │ │ × Persistence │ │ │ │ Tier 1 ──► Monitor (Allow) │ │ Tier 2 ──► Rate Limit │ │ Tier 3 ──► CAPTCHA Challenge │ │ Tier 4 ──► Soft Block │ │ Tier 5 ──► Hard Block │ │ │ │ Live state ──► Redis │ │ Event archive ──► PostgreSQL │ └──────────────┬───────────────────────┘ │ ▼ :6001 (API) / :5173 (UI) ┌──────────────────────────────┐ │ SOC DASHBOARD │ │ Real-time session monitor │ │ Threat management console │ │ IP-allowlist gated access │ └──────────────────────────────┘ ```
### 评分模型 每个会话都会累积威胁分数,该分数会持续根据以下公式重新计算: $$\text{Score} = \text{Impact} \times \text{Confidence} \times \text{Persistence}$$ | 因素 | 衡量内容 | |:---|:---| | **Impact** | 检测到的行为严重程度 —— 探测关键 endpoint 与被动抓取内容的对比 | | **Confidence** | 确信这不是误报的程度,基于信号的一致性判定 | | **Persistence** | 可疑行为持续的时间和一致性 | 分数会随时间衰减。一个触发了速率限制但随后表现正常的访问者,其状态会恢复为干净 —— SIDERIS 不会永久记仇。
### MITRE ATT&CK 覆盖范围
| 技术 | ATT&CK ID | 检测信号 | |:---|:---:|:---| | 撞库攻击 | `T1110.004` | 请求节奏 + 表单填写时序异常 | | 网页抓取 / 内容窃取 | `T1119` | 导航模式 + 请求量激增 | | 漏洞扫描 | `T1595.002` | Endpoint 模糊测试特征 + 时序特征 | | 浏览器指纹欺骗 | `T1592` | 浏览器环境不一致 | | Headless 浏览器自动化 | `T1059.007` | 行为生物特征偏差 |

### 可扩展性与弹性



### 延迟开销 在单机 Docker 环境下针对本地目标 (OWASP Juice Shop) 进行测试:
| 请求状态 | 增加的延迟 | 备注 | |:---|:---:|:---| | 干净请求, session 在 Redis 中 | **~2–4ms** | 回访者的典型延迟 | | 首次请求,冷 session | **~8–12ms** | 每个新访客仅需付出一次的代价 | | 被封锁的 session | **< 1ms** | 在代理层直接丢弃,永远不会到达您的应用 |

### 内存占用
| 容器 | 空闲 RAM | |:---|:---:| | sideris-proxy | ~60 MB | | sideris-ingest | ~50 MB | | sideris-dashboard | ~80 MB | | Redis | ~30 MB *(随 session 增长)* | | PostgreSQL | ~90 MB | | **总计** | **~310 MB** |
**1GB VPS** 足以应对中低流量。对于高流量部署环境,建议使用配置了 `Redis maxmemory` 的 **2GB 实例**。 **Session 容量:** 默认配置可处理约 10,000 个并发追踪 session,之后 Redis 的内存压力才会成为瓶颈。支持自定义调优 —— 详见[配置](#configuration)。



#### `01`   SOC 面板 — 主视图

SIDERIS SOC Dashboard

SIDERIS 的中央驾驶舱和主控制室。它将活跃访客数、实时威胁评分、活跃拦截百分比和实时遥测数据源聚合到一个统一的工作区中——非常适合在副显示器上一直开着,当老板走过时显得你很忙。 #### `02`   评分与规则参考

Scoring Guide

从顶部导航栏访问。这是一份互动手册,解释了 WAF 的威胁公式、关联规则和衰减计算——非常适合作为睡前读物,当你想要深入研究启发式引擎的确切逻辑时。 #### `03`   事件摘要指标

Event Summary Metrics

位于面板画布的最上方。一个展示今日防御的攻击和活跃拦截情况的高级 KPI 组件。这是复制粘贴到您月度报告中的终极图表,用来证明您的网络安全预算和岗位存在的价值。 #### `04`   恶意访问者排行榜

Top Attacking IPs

位于右上角的面板网格中。SIDERIS 的耻辱榜。一个展示了最猖狂的攻击者子网和爬虫的排名榜,它们拼尽全力却被瞬间拦截,如今 IP 被永远钉在了这里。 #### `05`   面板访问审计日志

Dashboard Access Log

位于顶部指标行。一个严格记录每次面板登录尝试的自审计面板。SIDERIS 极其多疑,甚至不信任您,这意味着如果您输入错了管理员凭证,您也会把自己记录为威胁。 #### `06`   实时会话表

Live Sessions Monitor

面板中心的主要表格。实时追踪每个活跃访客的网格。它根据风险级别用颜色编码会话(绿色是人类,红色是脚本),因此您可以看着爬虫试图暴力破解您的页面,并在它们的威胁分数飙升时偷笑。 #### `07`   会话详情视图

Session Detail Expansion

通过展开中心网格中的任意一行打开。取证调查员面板。展开任意活跃用户,检查他们触发的关联规则、原始事件时间线和击键时序分布——并配有一个巨大的手动封禁按钮,专用于自动化过滤还不够解气的时候。 #### `08`   主动防御注册表

Active Defense Matrix

位于面板下半部。当前在 Redis 中注册的所有活跃封禁、速率限制和 CAPTCHA 验证的实时注册表。如果真实用户被意外标记,您可以一键为他们解除限制。 #### `09`   统一日志控制台

Live Logs Console

嵌入在面板底部。一个集成的控制台,结合了来自您的 proxy、ingest 和 detector 容器的 stdout 日志。它看起来像《黑客帝国》里的代码,只不过它确实包含有用的信息,而不仅仅是绿色的代码雨。 #### `10`   透明 Agent 注入

Normal Client Storefront

从访客的角度来看,您的网站看起来完全正常。但在幕后,SIDERIS 已经向提供服务的 HTML 中注入了一个轻量级的 `agent.js`,实时流式传输行为遥测数据。没有 Cookie。没有可见的 UI 变化。无需应用修改。这就像雇了个私家侦探在灌木丛中盯着每个访客,只不过这完全合法,而且它不知疲倦。 #### `11`   CAPTCHA 挑战

Adaptive CAPTCHA Challenge

直接在访客浏览器中呈现的安全关卡。可疑的 bot 会在会话中途遭到 CAPTCHA 拦截,将自动化爬虫困在识别红绿灯的无限循环中,而真正的人类则在几秒钟内直接通过。 #### `12`   强制拦截界面

Hard Block Screen

向被封禁访客展示的拦截页面。已确认的威胁行为者在触及您实际的应用服务器之前,其 TCP 连接就会在代理层被丢弃,从而节省您的 CPU 周期,免受无用查询对数据库的折磨。


**前置条件:** Docker 和 Docker Compose。您的主机上无需安装任何其他内容。
01 克隆代码库
``` git clone https://github.com/Ann-BT/SIDERIS.git cd SIDERIS ```
02 配置 —— 只需 30 秒
``` cp .env.example .env ``` 打开 `.env` 并设置两个值。其他所有配置都已提供安全的默认值。 ``` # 你的应用程序当前运行的位置 TARGET_URL=http://localhost:8080 # SIDERIS 监听的公共端口(你的用户访问此端口) PROXY_PORT=4000 ```
03 启动
``` docker compose up -d --build ``` 大功告成。您的应用现在已受到 `http://your-server:4000` 的保护。 SOC 面板地址为 `http://localhost:5173` —— 默认仅限 localhost 访问。
### 运行内容 ``` sideris-app (Proxy) :4000 ◄ WAF — faces the internet sideris-app (Ingest) :5000 ◄ Telemetry receiver — keep internal sideris-app (SOC API) :6001 ◄ Dashboard API — keep internal sideris-app (SOC UI) :5173 ◄ Dashboard UI — keep internal sideris-redis internal only sideris-postgres internal only ``` 所有服务间流量均通过隔离的 Docker 网络运行。只有您明确暴露的端口才能从外部访问。
### 推荐的生产环境部署 ``` [Internet] │ ▼ :443 [Nginx / Cloudflare] ◄── handles TLS │ ▼ :4000 [SIDERIS] ◄── handles security logic │ ▼ :8080 [Your Application] ◄── untouched ``` 如需包含 HTTPS、高可用性和扩展的完整生产环境部署:**[部署指南](./DEPLOYMENT.md)**



不是 DDoS 缓解工具
SIDERIS 专为单个话的行为分析而设计,而非针对大流量洪水攻击。如果您每秒接收到数以百万计的请求,您需要在 SIDERIS 上游部署 CDN 级别的解决方案(如 Cloudflare, AWS Shield)—— 而不是用它来替代它们。
不是网络防火墙
SIDERIS 运行在 HTTP 应用层。它不检查原始 TCP/UDP 流量,不提供 IDS/IPS 功能,也不能替代 iptables / ufw 规则。
静态检测阈值 —— 非基于 ML
SIDERIS 使用预配置的静态规则和阈值,而不是动态的机器学习。这消除了预热延迟,使得评分引擎具有可预测性和可审计性,但也意味着您可能需要调整 .env 中的灵敏度,以匹配您应用的基础流量特征。
可能会出现误报
高级用户、辅助功能工具以及某些浏览器扩展可能会产生类似于自动化程序的行为信号。默认阈值已进行保守调优,但任何行为系统都不可能完美无缺。任何受影响的会话都可以在几秒钟内从主动防御注册表中解除。
没有冗余的单代理进程
如果没有负载均衡器,SIDERIS 就是一个单点故障。对于关键任务部署,请在经过健康检查的负载均衡器后端运行多个实例。详见 部署指南
行为遥测需要 JavaScript 支持
agent.js 需要在访客的浏览器中运行 JavaScript。禁用 JS 的会话将回退为仅分析请求模式。这涵盖了绝大多数真实流量,但会降低对禁用 JS 客户端的检测置信度。



所有配置都位于 `.env` 中。无需到处寻找配置文件。
| 变量 | 默认值 | 描述 | |:---|:---|:---| | `TARGET_URL` | `http://localhost:8080` | 您应用的内部地址。SIDERIS 会将干净流量转发至此。 | | `PROXY_PORT` | `4000` | 面向公众的 WAF 端口。这是您的用户连接的端口。 | | `INGEST_PORT` | `5000` | 遥测数据接收器。保持内部访问 —— 不要暴露在公网上。 | | `DASHBOARD_PORT` | `6001` | SOC 面板 API。保持内部访问。 | | `REDIS_URL` | `redis://redis:6379` | 实时会话状态。由 Docker 自动管理。 | | `POSTGRES_URL` | `postgresql://sideris:...` | 事件归档。由 Docker 自动管理。 | | `DASHBOARD_ALLOWED_IPS` | `127.0.0.1,::1` | 允许访问 SOC 面板的 IP。在此处添加您自己的 IP。 |

**常见配置:** ``` # 在 SOC dashboard 上允许你的 IP DASHBOARD_ALLOWED_IPS=127.0.0.1,::1,203.0.113.42 # 直接在 VPS 上接管端口 80 TARGET_URL=http://localhost:8080 PROXY_PORT=80 # 允许整个办公网络 DASHBOARD_ALLOWED_IPS=127.0.0.1,::1,192.168.1.0/24 ``` 如需了解评分阈值调优、会话 TTL 和高级选项:**[部署指南](./DEPLOYMENT.md)** ### 扩展参考指南 * **[运维与管理指南](./docs/ADMIN_GUIDE.md)** —— 管理活跃封禁、通过 CLI/Redis 解封用户、数据库维护和故障排除。 * **[自定义与规则调优指南](./docs/CUSTOMIZATION.md)** —— 关于评分公式、调整缓解阈值以及编写自定义 WAF 规则的详细信息。 * **[浏览器 Agent 参考](./docs/AGENT_DETAILS.md)** —— 客户端遥测规范、会话同步机制和 CSP 兼容性。


SIDERIS 会使我的网站变慢吗?
对于大多数网站:影响微乎其微。已建立会话的干净请求增加 ~2–4ms 延迟。冷会话查找(新访客)增加 ~8–12ms。被封锁的会话在 1ms 内即被丢弃,永远不会到达您的应用。完整数据请参阅 性能
如果 SIDERIS 本身宕机会怎样?
流量将停止流向您的应用。这是一个代理 —— 如果代理死亡,连接就会中断。对于生产环境,请将其运行在经过健康检查的负载均衡器后面。详见 部署指南
如果 Redis 或 PostgreSQL 宕机会怎样?
SIDERIS 配置为失败放行(fail open)。如果 Redis 遇到问题,WAF 代理会捕获错误、记录日志,并回退为直接将流量路由到您的应用程序,而不会阻止用户。您的网站将保持在线,但在数据库恢复之前,行为评分将暂停。
它会拦截我的合法用户吗?
偶尔有可能,特别是对于高级用户或辅助工具使用者。默认阈值是保守的。任何被拦截的会话都可以在几秒钟内从主动防御注册表中予以豁免,您也可以直接在 .env 中调整灵敏度。
它支持 HTTPS 吗?
SIDERIS 终结的是纯 HTTP 协议。在它前面配置 Nginx 或 Caddy 来处理 TLS,然后转发到 SIDERIS 的 4000 端口。这是标准的反向代理模式 —— 设置上没有任何特别之处。
agent.js 会收集个人数据吗?
它仅收集行为信号:击键的时间间隔、鼠标移动向量、请求模式。它不收集击键本身的内容、表单字段内容或任何个人可识别信息。您可以直接审查代码库中的 agent.js
我可以在虚拟主机(共享托管)上运行它吗?
不行。SIDERIS 需要 Docker 环境。您需要一台 VPS 或独立服务器。


发现了 Bug?有功能建议?已经部署在实际网站上了? [![GitHub Issues](https://img.shields.io/badge/Open_an_Issue-161b22?style=for-the-badge&logo=github&logoColor=white)](https://github.com/Ann-BT/SIDERIS/issues)   [![Email](https://img.shields.io/badge/anbt.personal%40gmail.com-161b22?style=for-the-badge&logo=gmail&logoColor=EA4335)](mailto:anbt.personal@gmail.com)


**SIDERIS** 是开源项目,采用 MIT 许可证。
免费使用、修改和部署 —— 个人项目、商业网站,随便什么都可以。 该许可唯一不涵盖的情况是:如果动机极强的攻击者最终还是突破了防线,我们不承担任何责任。安全是一个过程。SIDERIS 只是其中的一层防线。
*出于对 Web 安全的真诚偏执以及与 Redis Streams 之间不太健康的依赖关系而打造。*
标签:AMSI绕过, AppImage, CISA项目, GNU通用公共许可证, IP 地址批量处理, MITM代理, Node.js, WAF, Web应用防火墙, 代理服务, 威胁检测, 安全防护, 搜索引擎查询, 测试用例, 自定义脚本, 请求拦截