Skip to content

Vigilyx在核心实现层面真正不一样的邮件安全网关

开源的 Rust 邮件安全网关。不是黑盒——一套能读、能跑测试、能扩展的检测栈。

开源 · Rust 核心 · 旁路 + Inline
检测流水线
  1. 01解析
  2. 02头部
  3. 03内容
  4. 04链接
  5. 05YARA
  6. 06DLP
  7. 07融合
D-S + Murphy证据融合
5 状态 HMMBEC 阶段推断
Hawkes自激时序建模

逐层剖析

打开一封邮件,看每一层是怎么识破它的。

选一个场景,然后滚。每一行都是 Vigilyx 对这封捕获邮件真实跑过的一个检测——从网线字节一路到融合 verdict。不是示意图、不是拼接截图:就是你工程师在 SOC 排查时会看到的实际字段。

已捕获 · From: ceo@acme-corp.com · Subject: [紧急] 电汇 — 供应商账户变更 · 周二 14:03
L1 · 抓包SMTP 203.0.113.44 → mx.acme-corp.com新发件 IP发件 IP 在通信图里零历史;这个 /24 段第一次出现在入站路径上。
L2 · 头部SPF=softfail DKIM=none DMARC=fail Reply-To: ceo.acme@proton.meReply-To 不匹配Reply-To 域名和 From 对不上。典型的伪冒:企业显示名 + 免费邮箱回信地址。
L3 · 内容subject="[紧急] 电汇" urgency_financial_combo=0.78紧迫性 + 金额content_scan 命中 urgency_financial_combo 规则——紧迫关键词 + 金额陈述 + 24 小时内截止。
L4 · 身份display_name="CEO John Doe" first_comm_window=true身份异常identity_anomaly:这个发件域从未和该收件人通信过。首次接触 + 电汇请求 = 典型 BEC。
L5 · 时序HMM 阶段: EXECUTE · CUSUM 漂移 +3.2σHMM EXECUTE5 状态 HMM 在过去 8 天完成 侦察 → 建信任 → EXECUTE 的状态转移,CUSUM 确认基线漂移。
融合判定HIGH0.87处置 · 隔离 + 通过 SOAR playbook 通知财务审批人

悬停任意一行可查看为什么被标记。

两种独立的部署形态

按场景选一种来用,不是升级路径。

旁路镜像和 MTA 代理是两种独立的部署形态,服务于两种不同的运营模型,而不是同一次部署的两个阶段。它们共用同一套检测栈,但安装、运维和评估都互不相关。能接管多少邮件路径,就选对应的那一种。

旁路镜像部署

部署在邮件系统旁边做被动分析

Vigilyx 从镜像口 / SPAN 口收到一份流量副本,重组 SMTP、POP3、IMAP 与 Webmail 会话,在投递完成后产出判定。邮件路径完全不动,检测栈永远不会阻塞邮件。

  • 零侵入——不需要改 MX、不需要调整 SMTP 路由
  • 判定是事后参考:告警、审计、复盘、调参
  • 适合不能动邮件路径的环境,或者做取证与规则迭代

MTA 代理部署

作为 Inline SMTP 代理在投递前做决策

Vigilyx 作为 SMTP 中继放在最终邮件服务器之前,每一封邮件都会经过它做同步检查,然后在投递前被 accept / quarantine / reject。Inline 判定典型耗时 <2s,支持可配置的 fail-open。

  • 真正的拦截——邮件在 Vigilyx 决策之前不会到达用户
  • 支持 accept / quarantine / reject,并配 fail-open 作为安全阀
  • 适合可以改造邮件路径、且需要真正阻断的场景

真正不一样的地方

四件邮件安全产品里几乎看不到的实现。

下面这些不是市场话术,而是仓库里真实存在的代码。我们只列那些相对于主流邮件网关确实不一样的检测面,而不是所有邮件安全产品都已经做的基础功能。

01证据融合

Murphy 修正的 D-S 证据融合

crates/vigilyx-engine/src/fusion/murphy.rs
展开详情

不是加权求和,不是黑盒分类器。一套正经的 Dempster–Shafer 实现,配合 Murphy 权重平均修正和针对相关检测器的 Copula 折扣——同源同族的信号不会互相放大,每个 verdict 都能按引擎单独解释。用 Rust 自研,不是继承某个商用库。

为什么关键: 规避 Zadeh 悖论,显式建模相关性,每个引擎的判定贡献都可以单独解释,而不是只给一个神秘分数。

02时序层

在单邮件判定之上的完整时序层

crates/vigilyx-engine/src/temporal/
展开详情

CUSUM 累计漂移检测、双速 EWMA 基线漂移、带 mark 的 Hawkes 自激过程建模攻击期节奏、5 状态 HMM 推断 BEC / ATO 阶段(侦察 → 建信 → 执行 → 收割),还叠了一张有向通信图。多数邮件安全产品按「单封邮件」孤立判定——这套不是。

为什么关键: 可以抓到那些「单封看起来没问题」的营销期攻击、慢速 BEC 和外泄 burst。

03AitM 钓鱼

AitM 反向代理钓鱼检测

crates/vigilyx-engine/src/modules/aitm_detect.rs
展开详情

专门针对 2024 年起实战里真在用的 MFA 绕过工具(Tycoon2FA、EvilProxy、Evilginx3)做指纹——Cloudflare Workers / Pages 上的 DGA 托管、OAuth redirect_uri 不一致、Turnstile 验证码工具包指纹、Latin-Cyrillic 同形异义做品牌冒充。这一类钓鱼会完全绕过传统链接信誉库和附件扫描。

为什么关键: 反向代理钓鱼这条攻击面对传统「URL 信誉 + 沙箱扫链接」的栈完全不可见。

04HTML 像素艺术

HTML 像素艺术与表格二维码检测

crates/vigilyx-engine/src/modules/html_pixel_art.rs
展开详情

攻击者用 <table> 的 bgcolor 单元格「画」二维码、用浮动 <div> 配 background-color 拼出钓鱼文字——就是为了绕开 OCR 和沙箱图片扫描。Vigilyx 从 DOM 结构重建位图并用 rqrr 解码。正文里用 Unicode 方块字符拼出来的 ASCII-art 二维码用同一套流程解出来。

为什么关键: 常见「用 OCR 扫图片」的工具链一个都看不到这些东西。

检测流程

按工程系统去打磨,而不是按“命中一个模型就下结论”的黑盒思路。

产品形态是有明确取向的:先收足信号,再做可解释的融合,最后把响应和审计链路补完整。这样才方便在压误报时不把取证能力一起牺牲掉。

01

收集与归一化

SMTP、MIME、附件、链接、头部与 Webmail 行为都会被拉平到统一的数据形态供检测引擎使用——无论这份流量来自旁路镜像抓包,还是来自 Inline MTA 代理。

02

证据融合与判定

多个检测模块贡献证据,通过 clustered D-S fusion 和模块级解释产出更清晰的 threat score,而不是单个黑盒标签。

03

响应与审计

告警、隔离、重扫、拒收与分析师处置都保留在同一条审计链上,不会因为做了自动化就丢掉上下文。

产品形态

不是一个只有列表页和风险标签的“邮件控制台”。

当前项目已经覆盖了很多团队通常需要自己拼起来的部分:解析器、证据融合、内容控制、处置流以及一套能实际用于分析的前端界面。

20默认 pipeline entries

覆盖内容、身份、链接、附件、YARA、DLP 与 verdict 的检测链路。

30DLP patterns

覆盖敏感内容识别与可疑传输行为的数据安全检测路径。

2deployment modes

两种独立形态——旁路镜像做被动可见性,MTA 代理做 Inline 拦截。每个环境选一种。

Rustcore runtime

抓包、解析、检测、API 与 MTA 逻辑都维持在同一套高性能栈里。

AI 支持

AI 是额外视角,不是单点依赖。

Vigilyx 可以在确定性检测链上叠加语义和 NLP 分析,但就算关闭 AI,核心检测流水线仍然可以独立工作。这更适合真实生产环境。

AI 辅助语义分析

可选接入 NLP 检测,用于钓鱼语义、意图分析和说服话术识别——可以在纯 CPU 环境运行,不依赖 GPU,也可以接入外部大模型(Claude / OpenAI)辅助分析师复核。

核心系统不依赖 AI

解析、链接检测、YARA、DLP、身份异常和 verdict fusion 不依赖任何单一模型。

更适合生产运维

只有当 AI 真正提升分析效率时才启用,而不是「不开 AI 就没法工作」。

给工程驱动的安全团队。直接 clone 就行。

如果你更想自己掌控检测逻辑、而不是租一个黑盒,Vigilyx 已经可以跑起来。三条命令,旁路镜像或 Inline MTA 同一套引擎。AGPL-3.0,不回传任何遥测,不需要联网授权。

deploy.sh
# 1. 拉取仓库$ git clone https://github.com/HerbiusYang/Vigilyx.git$ cd Vigilyx# 2. 初始化远程构建环境(一次性)$ ./deploy.sh --init# 3. 打开控制台→ https://localhost:8088

基于 AGPL-3.0-only 发布。