lfzer0h/udjat

GitHub: lfzer0h/udjat

一个基于多模态 AI 的浏览器实时零日钓鱼检测与阻断代理。

Stars: 0 | Forks: 0

Udjat Logo

# Udjat — AI 反钓鱼代理 [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Platform: Chrome](https://img.shields.io/badge/Platform-Chrome-blue.svg)](https://www.google.com/chrome/) [![AI-Powered](https://img.shields.io/badge/AI-Powered-brightgreen.svg)](#) [![Ollama Supported](https://img.shields.io/badge/Ollama-Supported-purple.svg)](https://ollama.com) **Udjat**(荷鲁斯之眼)是一个先进的**多模态 AI 代理**,专为**实时零日钓鱼检测**而设计。它会拦截你在浏览器中访问的每一个 URL,在页面完全可交互**之前**使用多模态 AI(截图 + DOM 文本 + URL 启发式)进行分析和判断,并立即显示内联裁决:**安全(SAFE)**、**恶意(MALICIOUS)** 或 **未知(UNKNOWN)**。 Udjat 解决了现代钓鱼攻击利用高级视觉与推理技术绕过传统黑名单的关键问题,能够“看到”威胁的发生。 ### 🛡️ 为何选择 Udjat?(AI 驱动的反钓鱼防护) 传统反钓鱼方案依赖静态黑名单与已知特征库,容易被**零日攻击**绕过。Udjat 通过实时多模态 AI 代理在本地充当 24/7 的安全分析师,彻底改变游戏规则。 * **⚡ 零日检测**:在恶意站点上线数分钟内即可识别,无需等待黑名单更新。 * **👁️ 多模态视觉**:使用高端视觉模型分析 Logo、UI 布局与品牌伪造尝试。 * **🚫 防伪装**:分析在浏览器本地完成,绕过攻击者对服务端爬虫的隐藏技巧。 * **🔒 高度隐私**:零遥测。你的数据只在你与 AI 提供商之间流动。使用 **Ollama** 可实现完全本地、隔离的安全模型。 * **🧠 提供商无关**:支持 Google Gemini、OpenAI GPT-4o、Anthropic Claude 或通过 OpenRouter/Ollama 连接任意本地模型。 ## 📸 实际应用 **1. AI 拦截与阻断页面** Udjat 会阻止导航,先展示完整的 AI 推理过程,再决定是否允许交互。

Block Page

**2. 持续危险横幅(绕过模式)** 如果你决定自行承担风险继续访问被标记的站点,Udjat 会注入一个无法关闭的红色横幅,确保你保持警觉。

Danger Banner

**3. 企业配置面板** 可轻松将 Udjat 连接到你本地托管的 AI(如 Ollama)或任意企业后端。

Options Page

## 🚀 快速开始 在本地机器上不到 3 分钟内运行 Udjat: **1. 克隆并安装** ``` git clone https://github.com/lfzer0h/udjat.git cd udjat ./install.sh # Interactively installs dependencies, runs setup, and starts server ``` **2. 在 Chrome 中加载扩展** 1. 打开 `chrome://extensions` 2. 启用 **开发者模式**(右上角) 3. 点击 **加载已解压的扩展程序** → 选择 `extension/` 文件夹 4. Udjat 图标将出现在工具栏中。 *(更多选项、本地 Ollama AI 或企业 HTTPS 部署请参考[安装与配置](#34-installation-and-configuration-manual))* ## 📚 索引 - [🚀 快速开始](#-quick-start) - [🧠 1. 工作原理(核心概念)](#1-how-it-works-core-concepts) - [1.1 技术数据流](#11-technical-data-flow) - [1.2 分析生命周期(客户端优先混合分流)](#12-the-analysis-lifecycle-client-first-hybrid-triage) - [1.3 四层防护](#13-the-4-protection-layers) - [1.4 激进检测系统](#14-aggressive-detection-system) - [🤖 2. AI 模型与提供商](#2-ai-models--providers) - [2.1 比较与性能](#21-supported-ai-models-and-performance-comparison) - [2.2 提供商详情(SDK 与 API)](#22-ai-providers--direct-api) - [🛠️ 3. 配置与管理](#3-configuration--management) - [3.1 设置向导](#31-setup-wizard--interactive-configuration) - [3.2 白名单管理](#32-whitelist-management) - [3.3 使用 Ollama(本地 AI)设置](#33-using-ollama-local-ai--no-api-key) - [3.4 手动安装与配置](#34-installation-and-configuration-manual) - [🏗️ 4. 系统架构(深度解析)](#4-system-architecture-deep-dive) - [4.1 通用架构](#41-general-architecture) - [4.2 文件结构](#42-file-structure) - [4.3 完整导航流程与消息](#43-complete-navigation-sequence--messages) - [4.4 扩展 UI 与硬件限制](#44-extension-ui--hardware-constraints) - [🛰️ 5. 专家参考与部署](#5-expert-reference--deployment) - [5.1 后端 API 参考](#51-backend-api) - [5.2 环境变量](#52-environment-variables) - [5.3 通过反向代理使用 HTTPS](#53-https-via-reverse-proxy) - [5.4 企业部署模型](#54-enterprise-deployment-model-dedicated-server--multi-client) - [5.5 设计与安全决策](#55-design-and-security-decisions) - [5.6 企业就绪性与维护](#56-enterprise-readiness--maintenance) - [⚖️ 6. 许可证](#6-license) ## 🧠 1. 工作原理(核心概念) Udjat 在浏览器导航中应用零信任模型,结合本地启发式与云端或本地 AI。 ### 1.1 技术数据流 ![Udjat 技术数据流](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/6cc7de14bc132132.png) ### 1.2 分析生命周期(客户端优先混合分流) Udjat 采用“计划 A / 计划 B”策略,在保证最高检测准确率的同时具备容错能力。 1. **阶段 1:客户端侧捕获(计划 A - 主路径)** - **捕获**:扩展等待 1.5 秒让页面渲染,获取高质量截图与 DOM 文本。 - **优势**:在浏览器中本地捕获,Udjat 看到的内容与用户完全一致,绕开“伪装”(恶意站点向数据中心机器人展示虚假“安全”版本)。 2. **阶段 2:混合后备(计划 B - 容错)** - **触发**:若扩展未能发送数据(超时或错误),后端触发内部**隔离沙箱**。 - **动作**:无头 Chromium 实例独立访问该 URL,生成所需截图与文本。 3. **阶段 3:多模态 AI 裁决** - 数据(来自计划 A 或 B)发送至 AI(Gemini、Claude、GPT-4 等)。 - AI 分析品牌一致性、紧迫感与凭证请求,给出最终裁决。 ### 1.3 四层防护 Udjat 采用多层策略以兼顾安全性与性能,仅在必要时执行 AI 分析。 * **第一层:静态信任(白名单/允许列表)** 在任何网络活动前,Udjat 会检查域名是否已知安全。 - **本地(扩展):** `STATIC_ALLOWLIST`(Google、Microsoft、GitHub 等)。 - **远程(后端):** `safeDomainsCache`(来自 GitHub/URL 的集中列表)。 - **匹配:** 支持精确匹配与**子域继承**(例如 `google.com` 覆盖 `mail.google.com`)。 - **结果:** 毫秒级 `SAFE` 裁决,零延迟。 * **第二层:启发式分流(后端)** 若域名未知,后端分析 URL 结构中的风险信号。 - **标记:** 检查品牌伪造、可疑 TLD、重定向模式与关键词。 - **逻辑:** 若**0 个信号**,则认为风险足够低,可跳过 AI。 - **结果:** 无需 AI 调用即可返回 `SAFE`。 * **第三层:三缓存会话** 为避免对相同内容重复分析: 1. **扩展缓存**:Service Worker 中每个 URL 10 分钟 TTL。 2. **后端缓存**:基于 Map 的进程内存,支持即时并发请求。 3. **浏览器存储**:持久化已绕过站点状态。 * **第四层:用户例外(绕过与提醒)** 最终决策权用户。 - **绕过**:被阻止时可选择“自行承担风险继续”。 - **一次性例外**:绕过仅限当前会话。 - **提醒系统**:周期性覆盖层确保用户持续感知风险。 ### 1.4 激进检测系统 Udjat 在给出裁决前应用两层检测: #### 1.4.1 第一层 — URL 启发式(`analyzeUrlSignals`) 在调用 AI 前对 URL 进行即时本地分析,检测: | 信号 | 示例 | |------|------| | 高风险 TLD | `.online`、`.xyz`、`.click`、`.tk`、`.icu`、`.buzz` | | 营销参数 | `utm_campaign=`、`utm_source=`、`campanha=`、`ref=` | | 域名中的关键词 | `portal`、`secure`、`login`、`bank`、`verify`、`professional` | | 品牌伪造 | 域名包含 `microsoft`、`paypal`、`nubank`、`bradesco` 等 | | 直接 IP 主机 | `http://185.220.101.45/login` | | 嵌套子域 | `login.secure.account.evil.com` | | 过长域名 | >40 字符(混淆技术) | | 数字序列 | `bank4829301.site` | #### 1.4.2 第二层 — 分数覆盖(`aiFactory.runAnalysis`) 若模型过于乐观(返回 SAFE 但分数 > 45),工厂层会将其修正为 MALICIOUS。 | 分数 | 含义 | 裁决 | |------|------|------| | 0–20 | 明显合法站点 | SAFE | | 21–45 | 少量风险信号 | SAFE | | 46–65 | 多个风险信号 | **MALICIOUS** | | 66–85 | 明显钓鱼迹象 | **MALICIOUS** | | 86–100 | 确认钓鱼 | **MALICIOUS** | ## 🤖 2. AI 模型与提供商 ### 2.1 支持的 AI 模型与性能对比 下表提供了可配置模型的客观对比。 | AI 模型 | 推荐提供商 | 预计检测率 * | 每 $10 USD 请求数 ** | 关键特性 | |---------|------------|--------------|----------------------|----------| | **Claude 3.5 Sonnet** | Anthropic / OpenRouter | ~98.8% | ~300 - 450 | ✅ 视觉推理与去混淆能力处于业界前沿。
❌ 每 Token 成本较高。 | | **GPT-4o** | OpenAI / OpenRouter | ~97.2% | ~400 - 600 | ✅ 语义识别极为稳定且出色。
❌ 对大规模用户成本较高。 | | **Gemini 2.5 Pro** | OpenRouter | ~96.5% | ~500 - 800 | ✅ 对复杂视觉线索与品牌检测有优越推理。
❌ 推理速度慢于 Flash 系列。 | | **GPT-4o-mini** | OpenAI / OpenRouter | ~95.5% | ~7,000 - 10,000 | ✅ 极高的性能/成本比,适合高吞吐。
❌ 法医分析细节稍弱。 | | **Gemini 2.5 Flash** | OpenRouter | ~94.8% | ~12,500+ | ✅ 极致速度与超低成本,适合实时分流。
❌ 更适合标准钓鱼;可能遗漏边缘混淆。 | | **GLM-4V / Qwen2-VL** | Zhipu / DashScope | ~91.2% | ~2,500 - 3,500 | ✅ 成本极具优势,内置 OCR 优秀。
❌ 在非常规域名上偶有结构偏差。 | | **Llama 3.3 / LLaVA** | Ollama(本地) | ~75% - 85% | 无限(硬件决定) | ✅ 绝对隐私(零信任),数据永不离开本地网络。
❌ 未经特定微调效果较低。 | ### 2.2 AI 提供商 — 直接 API **所有提供方均通过官方 API 直接调用。Udjat 与 API 之间不存在任何封装、代理或中间层。** * **Google Gemini(`providers/gemini.js`):** 使用官方 `@google/generative-ai` SDK,返回原生 JSON。 * **OpenAI(`providers/openai.js`):** 使用官方 `openai` SDK,支持 image_url base64 上传。 * **Anthropic(`providers/anthropic.js`):** 使用官方 `@anthropic-ai/sdk`。注意图像源结构不同。 * **OpenRouter(`providers/openrouter.js`):** 使用官方 `openai` SDK 并自定义 `baseURL`。对 429 错误自动重试。 * **Ollama(`providers/ollama.js`):** 使用官方 `openai` SDK 指向 `localhost:11434`。100% 本地私有。 ## 🛠️ 3. 配置与管理 ### 3.1 设置向导 — 交互式配置 配置后端的最简单方式: ``` cd backend npm run setup # launches the interactive wizard ``` 该向导会逐步生成 `.env` 文件,隐藏 API 密钥并验证端口。 ### 3.2 白名单管理 #### 3.2.1 本地用户白名单 - **快捷方式**:点击 Udjat 图标 → **“将本域加入白名单”**。 - **管理**:打开**选项**面板(右键图标 → 选项)可查看、添加或移除域名。 - **持久化**:保存在 `chrome.storage.local`。 #### 3.2.2 集中式白名单管理 Udjat 支持通过远程文本文件(如 GitHub Raw 托管)管理全局可信域名列表。 - **配置**:在 `backend/.env` 中设置 `WHITELIST_URL`。 - **继承**:将 `google.com` 加入白名单会覆盖所有子域。 - **平台保护**:为防止绕过,UGC 平台(如 `github.io`、`s3.amazonaws.com`)的信任继承被显式阻止。 - **同步**:自动每 **24 小时** 刷新。 ### 3.3 使用 Ollama(本地 AI — 无 API 密钥) 1. **安装 Ollama**:`curl -fsSL https://ollama.com/install.sh | sh` 2. **拉取模型**:`ollama pull llava`(推荐视觉模型) 3. **配置 Udjat**:在设置向导中选择“Ollama”。 ### 3.4 手动安装与配置 若不使用自动化脚本: #### 后端 ``` cd backend npm install npm run setup npm start ``` #### 扩展 1. 打开 `chrome://extensions`。 2. 启用**开发者模式**。 3. 点击**加载已解压的扩展程序** → 选择 `extension/` 文件夹。 ## 🏗️ 4. 系统架构(深度解析) ### 4.1 通用架构 **模型:客户端侧捕获 + AI 路由代理** ``` ┌─────────────────────────────────────────────────────────────────┐ │ BROWSER (Chrome) │ │ │ │ ┌──────────────────────────┐ ┌───────────────────────────┐ │ │ │ background.js │ │ content.js │ │ │ │ (MV3 Service Worker) │◄─►│ (Content Script) │ │ │ │ │ │ │ │ │ │ onBeforeNavigate: │ │ - UDJAT_GET_DOM_TEXT │ │ │ │ quick decisions │ │ extract title+body+forms │ │ │ (allowlist/cache) │ │ - Analysis overlay │ │ │ │ │ │ - Verdict panel │ │ │ │ onCompleted: │ │ - Nag system │ │ │ │ captureVisibleTab() │ │ │ │ │ │ GET_DOM_TEXT │ └───────────────────────────┘ │ │ │ SHOW_OVERLAY │ │ │ │ callBackend(...) │ ┌───────────────────────────┐ │ │ └────────────┬─────────────┘ │ options.html / .js │ │ │ │ │ - Configure backend URL │ │ │ ┌────────────▼─────────────┐ │ - Enterprise deployment │ │ │ │ popup.html / .js │ └───────────────────────────┘ │ │ │ - Backend status │ │ │ │ - Active verdict │ │ │ │ - History · Nag config │ │ │ └──────────────────────────┘ │ └───────────────────┬─────────────────────────────────────────────┘ │ POST /api/analyze │ { url, screenshotBase64, extractedText } │ ┌───────────────────▼─────────────────────────────────────────────┐ │ BACKEND — AI Triage Proxy (Node.js) │ │ │ │ Express API (/api/health · /api/analyze) │ │ ├── 1. Cache Check │ │ ├── 2. Heuristic Triage │ │ └── 3. AI Bridge (Gemini, GPT-4o, Claude, Ollama) │ └─────────────────────────────────────────────────────────────────┘ ``` ### 4.2 文件结构 ``` udjat/ ├── backend/ │ ├── server.js # Express Entry point │ ├── src/ │ │ ├── ai/ # Strategic AI providers │ │ ├── sandbox/ # Puppeteer fallback sandbox │ │ └── prompt.js # Unified JSON Prompt └── extension/ ├── background.js # Capture engine ├── content.js # UI Overlay & Extraction ├── options.html # Admin Panel └── block.html # Phishing block page ``` ### 4.3 完整导航流程与消息 1. **[onBeforeNavigate]**:快速检查(白名单/缓存)。 2. **[onCompleted]**:完整分析。 - `captureVisibleTab()` → 清洁截图。 - `UDJAT_GET_DOM_TEXT` → 标题 + 正文 + 表单。 - `UDJAT_SHOW_OVERLAY` → 阻塞用户交互。 - `POST /api/analyze` → 后端分流与 AI 评估。 3. **结果**:处理裁决(重定向至阻断页 或 隐藏覆盖层)。 #### 扩展 ↔ 内容脚本消息 | 消息 | 方向 | 动作 | |------|------|------| | `UDJAT_SHOW_OVERLAY` | SW → CS | 显示分析旋转器 | `UDJAT_SHOW_VERDICT` | SW → CS | 显示结果(UNKNOWN/降级) | | `UDJAT_START_NAG` | SW → CS | 启动周期性警告 | | `UDJAT_BYPASS_AND_GO` | Block → SW | 用户接受风险 | ### 4.4 扩展 UI 与硬件限制 * **8 位图标**:Chrome MV3 仅接受 8 位 PNG 作为 `setIcon`。16 位 PNG 会完全透明。 * **运行在 document_start**:确保覆盖层在 HTML 解析完成前出现。 ## 🛰️ 5. 专家参考与部署 ### 5.1 后端 API #### GET /api/health 检查后端状态与活跃 AI 提供商。 #### POST /api/analyze **请求:** `{ "url": "https://suspicious.site" }` **响应:** ``` { "verdict": "MALICIOUS", "score": 82, "reason": "Brand impersonation + suspicious TLD.", "provider": "GEMINI", "latencyMs": 3100 } ``` ### 5.2 环境变量 在 `backend/.env` 中设置: * `AI_PROVIDER`: GEMINI、OPENAI、ANTHROPIC 等。 * `WHITELIST_URL`: 可信列表远程文件路径。 * `HOST`/`PORT`: 服务器网络配置。 ### 5.3 通过反向代理使用 HTTPS Udjat 后端是一个纯 HTTP 服务器,不原生处理 TLS。生产环境若需 HTTPS(公开服务器或企业 SSL 解密),建议在前端部署反向代理。 ``` Chrome Extension ──HTTPS──► nginx / Caddy ──HTTP──► Express :8000 ``` 扩展通过 HTTPS 与代理通信;代理终止 TLS 并将纯 HTTP 转发给本地 Express。无需修改 Udjat 源码。 ### 5.4 企业部署模型(独立服务器 + 多客户端) Udjat 可天然支持企业级分析。你可以部署单台后端服务器并让多个 Udjat 扩展指向它: 1. **部署后端**:在独立服务器(公网或 VPN 可访问)上部署。 2. **配置 HTTPS**:按第 5.3 节使用 Nginx/Caddy 提供安全端点。 3. **配置客户端**:在 Udjat 扩展**选项面板**中,将 `http://127.0.0.1:8000` 替换为服务器地址(如 `https://udjat.yourcompany.com`)。 ![Udjat 企业架构](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/99dfe21c4f132147.png) 这允许集中式安全引擎使用单一 API 密钥与共享情报保护整个设备舰队。 ### 5.5 设计与安全决策 * **故障关闭**:任何内部错误均返回 `UNKNOWN`(警告),绝不返回 `SAFE`。 * **混合沙箱后备**:若扩展发送失败,后端触发集成 Puppeteer 沙箱进行独立捕获。 * **Chromium 重生**:为保持稳定性,后端沙箱每 100 次使用后回收 Chromium,防止内存泄漏。 * **无遥测**:分析完全私密,数据仅到达你的后端与所选的 AI 提供商。 ### 5.6 企业就绪性与维护 * **结构化日志**:便于接入 SIEM(Splunk/ELK)。 * **标准 JSDoc**:全代码库遵循专业 JSDoc 标准,便于审计。 * **速率限制**:保护后端免遭 DoS 与预算耗尽。 ## ⚖️ 6. 许可证 本项目根据 **MIT 许可证** 授权。 ## 🏷️ 关键词与标签 `ai-phishing` `antiphishing` `cybersecurity-agent` `security-llm` `zero-day-detection` `ollama-security` `multimodal-ai-agent` `phishing-prevention` `automated-security-analyst` `browser-security-extension`
标签:AI代理, AI安全, AI风险缓解, AI驱动, AMSI绕过, Apex, Chat Copilot, Eye of Horus, LLM评估, MITM代理, Ollama, Udjat, URL启发式, 供应商无关, 内联判决, 前端安全, 反规避, 反钓鱼, 品牌冒充检测, 多模态AI, 多重验证, 威胁检测, 安全防护, 实时检测, 推理分析, 本地AI, 机器学习, 浏览器拦截, 网络钓鱼防护, 自定义脚本, 视觉识别, 隐私安全, 零日钓鱼, 零遥测