elstati0n/ELHunter

GitHub: elstati0n/ELHunter

一款 Chrome 浏览器扩展,整合多源威胁情报和 AI 钓鱼检测,实时防护恶意网站与邮件攻击。

Stars: 0 | Forks: 0

# ElHunter — 威胁情报浏览器扩展

ElHunter

直接在浏览器中进行实时域名和 IP 威胁分析。
VirusTotal · AbuseIPDB · Geo Intelligence · AI Phishing Detection · Telegram Alerts

## 什么是 ElHunter? ElHunter 是一款 Chrome 扩展,它会静默监控您访问的每一个网站和阅读的每一封电子邮件 —— 针对多个威胁情报源实时检查 URL、域名和 IP 地址。如果检测到恶意内容,它会立即拦截该页面并显示详细的威胁报告。对于电子邮件,它会扫描嵌入的链接,并可选择使用 AI 分析完整内容。 它专为安全专业人员、IT 管理员、记者和注重隐私的用户设计,希望在无需企业级复杂性的情况下获得企业级的威胁可见性。 ## 功能特性 ### 🔴 实时网站拦截 每次导航都会根据 VirusTotal 和 AbuseIPDB 进行检查。如果域名或 IP 被标记为恶意,标签页将立即重定向到详细的拦截页面,显示: - 被拦截的 URL - VirusTotal 供应商计数(例如 `5/72 flagged`) - 带有可视化进度条的 AbuseIPDB 置信度评分 - 解析后的 IP 地址 - 国家和 ISP/组织 - Cloudflare 检测(CDN 与 Direct IP) - 拦截原因(VT/AbuseIPDB 或国家规则) ### 🔔 智能通知 针对可疑和恶意网站的 Chrome 通知 —— 即使未打开弹出窗口也能触发。可按国家规则或全局进行配置。 ### 📧 邮件钓鱼检测 在 Gmail、Outlook Web、Yahoo Mail 和 ProtonMail 上 —— 当您打开邮件时,会激活两个独立的检测层: **正则 URL 检查(默认开启)** 提取邮件正文中所有 `http://` 和 `https://` 链接,并根据 VirusTotal + AbuseIPDB 进行检查。结果显示在页面顶部的内联位置: - ✓ `github.com` 安全 - ✕ `evil-domain.com` (VT:5/72 Abuse:85%) **AI 分析(需要 API 密钥,默认关闭)** 打开的邮件顶部会出现一个提示条,询问 "Analyze with AI?"(是否使用 AI 分析?)。确认后,邮件内容将发送到您配置的 AI 提供商,该提供商会返回 0–100% 的钓鱼概率评分和一句话的解释。支持 OpenAI、Anthropic、Google Gemini、Mistral、Groq、OpenRouter、Ollama (本地)、LM Studio (本地) 以及任何兼容 OpenAI 的 endpoint。 ### 🌍 地理情报 (Geo Intelligence) 每个域名都会通过 [networkcalc.com](https://networkcalc.com) DNS 查找解析为其 IP,然后通过 [ipinfo.io](https://ipinfo.io) 对 IP 进行地理定位。国家、ISP、组织和 Cloudflare 状态会在第一阶段扫描完成后在后台进行充实。所有结果缓存 14 天。 ### ☁️ Cloudflare 检测 将解析后的 IP 与 Cloudflare 发布的 CIDR 范围(IPv4 和 IPv6)进行匹配。在弹出窗口和拦截页面上显示 "YES — Cloudflare" 或 "NO — Direct IP"。 ### 🌐 国家规则 国家规则允许您为来自特定国家的流量定义自定义行为。当存在至少一条国家规则时,**只有这些国家会触发警报** —— 所有其他国家将被静默忽略(无通知,无拦截)。 #### 如何匹配国家 每条规则都有两种独立的匹配模式,可以单独使用,也可以一起使用: **IP ON (基于 IP 的匹配)** 服务器的托管国家通过对其 IP 地址进行地理定位来确定。例如,如果 `example.com` 解析为托管在俄罗斯的 IP,并且您有一条 IP ON 的俄罗斯规则 —— 则匹配。这将捕获托管在某个国家的服务器,无论它们使用什么域名。 **`.com` ON (域名 TLD 匹配)** 域名的顶级扩展名直接检查 —— 无需地理查找。如果访问的 URL 以 `.com`、`.cn`、`.ir` 等结尾,并且您有相应的 TLD ON 的国家规则 —— 则立即匹配。这更快,即使域名的托管 IP 在另一个国家(例如托管在 Cloudflare 美国的 `.com` 站点)也能捕获域名。 两者可以同时开启 —— 任一匹配即足以触发规则。 #### 规则匹配时会发生什么 **Notify ON / Notify OFF** - **ON** — 当访问来自该国家的可疑或恶意网站时,会触发 Chrome 通知。即使浏览器最小化或弹出窗口关闭,通知也会出现。 - **OFF** — 访问完全静默。无警报,无标记。如果您想拦截某个国家而不希望收到每一个网站的通知,这很有用。 **Mode: Suspicious only / All events** 这控制 *哪些威胁级别* 会触发通知(仅在 Notify 为 ON 时可见): - **Suspicious only** — 仅当 VirusTotal 标记 1 个以上供应商 或 AbuseIPDB 分数大于 0 时才触发通知。来自该国家的安全网站保持静默。 - **All events** — 对来自该国家的 *每个* 网站都触发通知,即使是完全安全的网站。对于您希望了解所有流量(而不仅仅是被标记站点)的高风险国家很有用。 **Block ON / Block OFF** - **ON** — 无论 VT/AbuseIPDB 结果如何,立即拦截对该国家/地区任何站点的访问。标签页重定向到 ElHunter 拦截页面,并显示原因(例如 "Blocked: country rule (Russia)" 或 "Blocked: domain rule (.com)")。如果需要,用户仍可选择 "Proceed anyway"(继续访问)。 - **OFF** — 不拦截站点。仅应用通知。 **TG ON / TG OFF** - **ON** — 除了 Chrome 通知外,警报还会发送到您配置的 Telegram bot。包括威胁等级表情符号、VT 分数、AbuseIPDB 分数、国旗、解析的 IP 和 Cloudflare 状态。 - **OFF** — 此规则不使用 Telegram。如果 Notify 为 ON,Chrome 通知仍会触发。 #### 实用示例 | 场景 | IP | TLD | Notify | Mode | Block | TG | |---|---|---|---|---|---|---| | 监控俄罗斯,威胁时警报 | ON | ON | ON | Suspicious only | OFF | OFF | | 静默拦截所有 .cn 域名 | OFF | ON | OFF | — | ON | OFF | | 伊朗所有内容警报 + Telegram | ON | ON | ON | All events | OFF | ON | | 拦截已知不良国家,通过 Telegram 通知自己 | ON | OFF | OFF | — | ON | ON | #### 与 Default Mode 的关系 当未配置国家规则时,**Default Mode**(Rules 标签页 → Default Mode 卡片)全局应用于所有国家。一旦您添加了哪怕一条国家规则,Default Mode 就会变成 **fallback**(后备) —— 它仅适用于不匹配任何规则的国家。所有其他国家将被静默略过。 ### ✈️ Telegram 提醒 发送威胁警报到 Telegram bot。在 API Keys 中配置 bot token + chat ID。可以全局启用或按国家规则启用。每个警报包括威胁等级、VT 分数、AbuseIPDB 分数、国旗、解析的 IP 和 Cloudflare 状态。 ### 💾 14 天缓存 所有扫描结果都本地缓存在 `chrome.storage.local` 中,TTL 为 14 天。在缓存过期之前,重新访问域名绝不会触发新的 API 调用。缓存统计信息在 Cache 标签页中可见 —— 可按 clean / suspicious / malicious / blocked 过滤。 ## 架构 ``` Browser Navigation │ ▼ background.js (Service Worker) │ ├─── Phase 1 ─────────────────────────────────────────────────────────┐ │ VirusTotal API → malicious/suspicious/harmless count │ │ AbuseIPDB API → confidence score (IP only) │ │ classify() → 'clean' | 'suspicious' | 'malicious' │ │ cacheSet(host, entry) → saved to chrome.storage.local │ │ │ │ If malicious → blockTab() immediately │ │ │ ├─── Phase 2 (background) ────────────────────────────────────────────┘ │ networkcalc.com DNS → domain → IP │ ipinfo.io → IP → country, ISP, org │ isCF(ip) → Cloudflare CIDR match │ notifDecision() → 'block' | 'notify' | 'skip' | 'wait' │ fireNotif() or blockTab() │ └─── Email tabs (phishing-content.js injected) extractUrls() → regex from email body CHECK_EMAIL_URLS → VT + AbuseIPDB per host showRegexResult() → inline bar with per-link status CHECK_EMAIL_LLM → email content → AI provider → score showLLMResult() → inline bar with % and reason ``` ### 每次导航的请求流 ``` User visits example.com │ ├─ cacheGet("example.com") │ └─ Hit → return cached result, skip all API calls │ └─ Miss → ├─ VirusTotal: GET /api/v3/domains/example.com ├─ AbuseIPDB: GET /api/v2/check?ipAddress=example.com ├─ classify(vt, abuse) → level │ ├─ [Phase 2, async] │ ├─ networkcalc.com: GET /api/dns/lookup/example.com → IP │ ├─ ipinfo.io: GET /{ip}/json → geo │ └─ isCF(ip) → cloudflare │ └─ cacheSet("example.com", enriched entry) ``` ### 分类逻辑 | 条件 | 等级 | |---|---| | VT 标记 ≥ 4 个供应商 或 AbuseIPDB ≥ 40% | `malicious` | | VT 标记 1–3 个供应商 或 AbuseIPDB 1–39% | `suspicious` | | 无标记 | `clean` | Malicious → 立即拦截。Suspicious → 通知(可配置)。Clean → 静默。 ## 外部 API | 服务 | 用途 | 认证 | 限制 (免费) | 协议 | |---|---|---|---|---| | [VirusTotal](https://virustotal.com) | 域名/IP 威胁扫描 | 需要 API key | 4 次/分钟, 500 次/天 | HTTPS | | [AbuseIPDB](https://abuseipdb.com) | IP 滥用置信度 | 需要 API key | 1,000 次/天 | HTTPS | | [networkcalc.com](https://networkcalc.com) | DNS A 记录查找 | 无 key | 无公开限制 | HTTPS | | [ipinfo.io](https://ipinfo.io) | IP 地理 + ISP 查找 | 无需 key | 1,000 次/天 (共享) | HTTPS | | [api.telegram.org](https://core.telegram.org/bots/api) | 发送警报消息 | Bot token | 无限制 | HTTPS | | AI providers | 钓鱼内容分析 | 需要 API key | 因提供商而异 | HTTPS | ### AI Provider 支持 | Provider | Endpoint | Auth | Default Model | |---|---|---|---| | OpenAI | `api.openai.com` | Bearer token | `gpt-4o-mini` | | Anthropic | `api.anthropic.com` | `x-api-key` header | `claude-haiku-4-5-20251001` | | Google Gemini | `generativelanguage.googleapis.com` | Query param `?key=` | `gemini-2.0-flash` | | Mistral | `api.mistral.ai` | Bearer token | `mistral-small-latest` | | Groq | `api.groq.com` | Bearer token | `llama-3.1-8b-instant` | | OpenRouter | `openrouter.ai` | Bearer token | `openai/gpt-4o-mini` | | Ollama (local) | `http://localhost:11434` | None | `llama3.2` | | LM Studio (local) | `http://localhost:1234` | None | configurable | | Custom | Any OpenAI-compatible URL | Optional | configurable | ## 隐私与安全 - **ElHunter 不收集任何数据。** 所有设置和 API key 都存储在 `chrome.storage.sync` 中(您的 Google 账户,由 Chrome 加密)。 - **API key 永远不会离开您的浏览器**,除了作为授权头发送给各自的服务。 - **Email content** 仅在您明确点击 "Analyze" 时发送到您配置的 AI provider —— 从不自动发送。 - **Phishing content script** 仅在已知的邮件域名上运行:`mail.google.com`, `outlook.live.com`, `outlook.office.com`, `outlook.office365.com`, `mail.yahoo.com`, `mail.proton.me`, `protonmail.com`。 - 发送到 VirusTotal、AbuseIPDB、networkcalc 和 ipinfo.io 的 **所有域名/IP 数据** 都是被访问站点的域名/IP —— 无个人数据。 - 注入到邮件页面的所有 HTML 在插入前都通过 `ehEscape()` 进行了 XSS 净化。 - 从邮件正文中提取的主机名在任何 API 调用之前都会根据 `/^[a-zA-Z0-9._-]{1,253}$/` 进行验证。 ## 安装 ### 从源码安装(开发者模式) 1. 下载并解压本仓库 2. 打开 Chrome → `chrome://extensions` 3. 启用 **Developer mode**(右上角开关) 4. 点击 **Load unpacked** 5. 选择解压后的 `ElHunter` 文件夹 6. 扩展图标将出现在工具栏中 ### 配置 点击 ElHunter 图标打开弹出窗口,然后进入 **API Keys** 标签页: | Key | 获取位置 | 用途 | |---|---|---| | VirusTotal | [virustotal.com/gui/my-apikey](https://www.virustotal.com/gui/my-apikey) | 域名/IP 扫描 | | AbuseIPDB | [abuseipdb.com/account/api](https://www.abuseipdb.com/account/api) | IP 滥用评分 | | Telegram Bot Token | 通过 [@BotFather](https://t.me/BotFather) 创建 | Telegram alerts | | Telegram Chat ID | 从 [@userinfobot](https://t.me/userinfobot) 获取 | Telegram alerts | | AI API Key | Provider dashboard (见上表) | Email AI analysis | ## 标签页概览 ### Main Tab 显示当前活动标签页的威胁分析。显示威胁等级徽章、VT 分数、AbuseIPDB 分数、带国旗的国家、Cloudflare 状态和解析的 IP。每 600ms 轮询一次,直到地理充实完成。 ### API Keys Tab 保存/编辑/移除以下服务的密钥:VirusTotal, AbuseIPDB, AI Model (附带 provider + model 选择), Telegram bot。 ### Rules Tab **Phishing Detection card** — 切换邮件页面的 Regex URL Check 和 AI Analysis。 **Default Mode card** — 全局通知模式(Suspicious only / All events / Off)和全局 Telegram 开关。 **Country Rules card** — 添加国家,配置按国家行为(基于 匹配、域名 TLD 匹配、通知、拦截、Telegram、模式)。 ### Cache Tab 显示总条目数和按等级细分。点击任何芯片可打开详细的叠加层,显示域名、国家、VT 分数、Cloudflare 状态和时长。提供清除所有缓存的按钮。 ## 拦截页面 当站点被拦截时,标签页会重定向到 `blocked.html` 并显示完整的威胁情报: - 带有脉冲环的动画威胁指示器 - 被拦截的 URL - VirusTotal 标记的供应商数量 - 带有颜色编码条的 AbuseIPDB 置信度评分 - 国家、ISP、解析的 IP、Cloudflare 状态(异步充实) - **Go Back to Safety** — 导航回退 - **Proceed anyway** — 显示确认对话框,将 URL 添加到 allow-once 集合,然后导航 ## 文件结构 ``` ElHunter/ ├── manifest.json # MV3 manifest — permissions, host_permissions, icons ├── background.js # Service worker — all analysis logic, API calls, cache ├── popup.html # Extension popup UI ├── popup.js # Popup logic — tabs, key widgets, rules, cache stats ├── blocked.html # Block page UI ├── blocked.js # Block page logic — reads URL params, polls for enrichment ├── phishing-content.js # Content script — injected into email pages only └── icons/ ├── icon16.png ├── icon48.png └── icon128.png ``` ## 权限 | 权限 | 原因 | |---|---| | `storage` | 存储 API key、设置和缓存 | | `tabs` | 读取当前标签页 URL 进行分析 | | `webNavigation` | 检测导航事件 | | `scripting` | 将钓鱼内容脚本注入邮件标签页 | | `notifications` | 显示威胁警报 | | `` | 分析任何导航的 URL(通用覆盖范围所需) | ## 限制 - 需要 Chrome (Manifest V3)。未实现 Firefox 支持。 - VirusTotal 免费 API:4 次请求/分钟,500 次/天。重度浏览可能会达到限制。 - ipinfo.io 免费层:1,000 次请求/天(按 IP 共享)。由 14 天缓存覆盖。 - AbuseIPDB 仅检查 IP 地址 —— 没有解析 IP 的纯域名站点显示 N/A。 - 邮件钓鱼检测仅在支持的 webmail 客户端上有效,不支持桌面邮件应用。 - 本地 LLM provider (Ollama, LM Studio) 必须在点击 Analyze 之前运行。 ## 许可证 MIT License。详见 [LICENSE](LICENSE)。 ## 致谢 - [VirusTotal](https://virustotal.com) — 多引擎恶意软件扫描 - [AbuseIPDB](https://abuseipdb.com) — IP 信誉数据库 - [networkcalc.com](https://networkcalc.com) — 免费 DNS 查找 API - [ipinfo.io](https://ipinfo.io) — IP 地理定位和 ASN 数据 - [Space Grotesk](https://fonts.google.com/specimen/Space+Grotesk) + [JetBrains Mono](https://fonts.google.com/specimen/JetBrains+Mono) — 字体
标签:AbuseIPDB, AI安全, Ask搜索, Chat Copilot, Chrome插件, DAST, ESC4, Gmail安全, HTTP/HTTPS抓包, IP地址查询, IT安全管理, OSINT, Outlook安全, VirusTotal, 二进制模式, 商业软件, 域名安全, 威胁情报, 实时防护, 开发者工具, 态势感知, 恶意软件分析, 数据可视化, 浏览器扩展, 结构化查询, 网站拦截, 网络侦查, 网络安全, 自动化安全, 自定义脚本, 邮件安全, 钓鱼检测, 隐私保护