0xbitx/DEDSEC_PHISHLENS
GitHub: 0xbitx/DEDSEC_PHISHLENS
一款多层级钓鱼检测引擎,结合机器学习分类器与基础设施信号,对可疑 URL 进行自动化评分与分析。
Stars: 1 | Forks: 0
# DEDSEC PHISHLENS
**高级钓鱼检测引擎 — 多层级分析、基于惩罚的评分、自动化分类处理**
## 概述
每个层级都会生成独立的发现结果,这些结果将显示在控制台中,嵌入到结构化的 PDF 报告中,并导出为机器可读的 JSON 格式,以供下游的 SIEM 和 SOAR 提取使用。加权评分引擎将 ML 分类器与基础设施信号相结合,随后对具体的危险信号应用惩罚系统,例如 `@` 重定向攻击、URL 缩短服务使用、登录表单数据外泄以及品牌仿冒 —— 从而将已确认的钓鱼基础设施的最终得分降至接近零。
## 检测层级
### 网络与基础设施
**重定向链追踪**
系统会跟踪并报告每一个重定向跳转。超过两次跳转的链路将被标记,因为攻击者基础设施通常会引导受害者穿过多个被攻陷的域名,然后才跳转到最终的钓鱼页面。
**同形异义词与域名抢注检测**
系统会检查域名是否存在 IDN punycode 编码,并将其与包含 30 多个高价值品牌名称的语料库进行比较。如果域名包含品牌字符串但与官方域名不匹配,将被标记为域名抢注(Typosquatting)企图。
**URL @ 重定向检测**
URL 中的 `@` 符号会导致浏览器将之前的所有内容视为身份验证凭据并自动忽略,将受害者路由到 `@` 之后出现的任何域名。攻击者利用这一点,在 `@` 之前放置一个看似合法的域名(例如 `https://facebook.com/path@evil.com`)。该层级会提取诱饵域名和真实目的地,并检测用于伪造极具迷惑性 URL 路径的 Unicode 相似字符(例如模仿 `/` 的 U+29F8 ⧸,模仿 `?` 的 U+0294 ʔ,以及模仿 `=` 的 U+A78A ꞊),这些路径实际上是被忽略的用户信息(userinfo)部分。
**URL 缩短服务扩展**
当检测到 URL 缩短服务(t.ly, bit.ly, is.gd, cutt.ly 等 25 个以上服务)时,引擎会执行 HEAD 请求以提取 `Location` 标头,并将缩短的链接扩展到其真实目的地。所有后续基于域名的查询都将针对扩展后的钓鱼基础设施,而不是中间的缩短服务。该层级会在任何其他分析之前运行,以确保每次下游检查都在真实的攻击者主机上进行。
**域名信誉**
域名会被提交至 VirusTotal API v3。系统会解析 `last_analysis_stats` 对象,并显示任何将该域名标记为恶意的供应商信息。对于缺失或无效的 API key,系统会明确报告,而不是静默失败。
**SSL 证书检查**
直接的 TLS 握手会提取完整的证书链以供离线分析。系统会识别颁发者(LetsEncrypt、DigiCert、自签名等),计算证书天数,检查使用者可选名称 中是否包含不相关的域名,并将过去 7 天内颁发的证书标记为高风险。无需依赖外部 CT 日志。
### 内容与结构
**SSL/TLS 证书验证**
系统会针对 443 端口执行 TLS 握手。对等证书的 `notAfter` 字段会与系统时间进行比较。过期或无法验证的证书将被视为风险指标。
**URL 关键词检查**
系统会使用包含 90 多个高信号关键词的语料库对 URL 路径和查询字符串进行扫描:凭据收集触发词、紧迫感施压短语、财务诱饵术语以及品牌仿冒目标。为了防止对合法站点产生误报,扫描过程会排除域名本身。
**Favicon 哈希**
系统会下载站点的 favicon 并计算其 SHA256 哈希值。这使得与已知的合法 favicon 数据库进行比较成为可能,并能够检测到托管在攻击者基础设施上的克隆资产。
**页面内容分析**
系统会检查渲染后的 DOM 以寻找钓鱼指标:将凭据发送到外部域名的登录表单、加载第三方内容的隐藏 iframe、混淆的 JavaScript 模式(`eval`、`fromCharCode`、`atob`),以及与托管域名不匹配的品牌名称引用。
**域名注册分析**
WHOIS 查询会检索域名创建时间戳。注册少于 365 天的域名会被标记为高风险,因为攻击者运营的域名绝大多数都是短期的。
### 分类与评分
**机器学习分类**
定制的 XGBoost 分类器(`phishing_model_by_0xbit.model`)会从 URL 的域名、路径、查询字符串和文件名组件中提取 114 个结构特征。该模型是在精选的钓鱼数据集上,使用梯度提升决策树进行训练的,采用 80/20 的训练/测试比例划分。特征包括字符频率分布、主机名中的 IP 检测、TLD 分析、URL 缩短服务检测、DNS TTL 值、MX 记录计数、WHOIS 域名存在天数、测得的 HTTP 响应时间以及结构异常评分。该模型输出一个带有置信概率的二元分类,该概率在评分引擎中占有最大权重。
**基于惩罚的安全评分**
评分引擎结合了两种机制。首先,根据 ML 分类器(60%)和四个基础设施信号(域名信誉、SSL 有效性、关键词检测和域名年龄,各占 10%)计算加权基础分。然后,惩罚系统会因具体的危险信号从基础分中扣除相应分数:`@` 重定向 (-15%)、URL 缩短服务使用 (-10%)、将凭据发送到外部域名的登录表单 (-10%)、页面内容中的品牌仿冒 (-5%) 以及 IDN 同形异义词攻击 (-8%)。这种双重方法确保了当确认存在结构性攻击技术时,具有有效 SSL 和未知信誉(如果不这样,得分会高得具有欺骗性)的钓鱼页面的得分会被降至接近零。没有触发任何惩罚的合法域名将保留其完整的加权得分。
### 输出与自动化
**PDF 报告生成**
系统会生成结构化的 PDF,其中包含域名信息表、所有带有 PASS/FAIL/WARN 标记的检测结果、嵌入的全页截图,以及带有加权安全分数的最终结论。
**JSON 导出**
所有分析结果将作为结构化 JSON 与 PDF 一起导出。该 schema 专为导入 SOAR playbook、SIEM 仪表盘或自定义分析流水线而设计。
**批处理**
可以提供文件路径来代替单个 URL。该工具会提取以换行符分隔的 URL 列表或来自邮件网关的 CSV 导出文件,并依次处理每个条目,为每个条目生成单独的报告。
**可视化分类**
Selenium WebDriver 会以全分辨率渲染目标页面,并将捕获的截图保存到 `page-screenshots/`。该截图会被直接嵌入到 PDF 报告中。
## 安装
```
git clone https://github.com/0xbitx/DEDSEC_PHISHLENS.git
cd DEDSEC_PHISHLENS
pip3 install -r requirements.txt
```
从 https://www.virustotal.com 获取 VirusTotal API key,并将其写入 `virustotal.api` 文件中,替换掉占位符值。
```
chmod +x dedsec_phishlens.py
python3 dedsec_phishlens.py
```
## 依赖项
| 包名 | 用途 |
|-------------------|----------------------------------|
| requests | VirusTotal API 和 HTTP 通信 |
| selenium | 无头浏览器自动化 |
| webdriver-manager | ChromeDriver 二进制文件管理 |
| python-whois | 域名注册查询 |
| joblib | ML 模型序列化 |
| pandas | 特征数据框构建 |
| tabulate | 控制台输出格式化 |
| dnspython | DNS MX, SPF 和 TTL 解析 |
| fpdf2 | PDF 报告生成 |
主机系统必须安装 Chrome 或 Chromium 才能使用截图捕获模块。WebDriver 二进制文件会在运行时自动管理。
## 使用方法
启动该工具并在提示符下提供 URL。引擎会按顺序运行所有 14 个检测层级,并内联显示每个发现。最终会打印出加权安全百分比,以及 PDF 报告、JSON 导出文件和捕获截图的路径。
```
./dedsec_phishlens
```
要批量处理多个 URL,请提供文件路径而不是 URL。该工具接受以换行符分隔的 URL 列表或单列 CSV 文件,并为每个条目生成单独的报告。
```
./dedsec_phishlens
# 在提示符处,输入:urls.txt
```
所有截图保存在 `page-screenshots/` 目录下,报告存放在 `reports/` 目录下,按域名和时间戳命名,以作审计追踪之用。
## 支持的平台
该工具已在以下发行版上经过验证:
* Kali Linux
* Parrot OS
* Ubuntu
## 项目结构
```
DEDSEC_PHISHING_DETECTION/
├── dedsec_phishlens Main analysis engine
├── phishing_model_by_0xbit.model Custom-trained XGBoost classifier
├── virustotal.api VirusTotal API key (user provided)
├── requirements.txt Python dependencies
├── page-screenshots/ Captured page renders
└── reports/ PDF reports and JSON exports
```
## 威胁模型
PhishLens 主要针对钓鱼事件响应生命周期的初步分类阶段,重点关注在活跃攻击活动中最常见的技术:带有 Unicode 路径伪造的 `@` 重定向、隐藏攻击者基础设施的 URL 缩短服务链路、由 Cloudflare 代理且具有有效 SSL 证书的钓鱼页面,以及嵌入在品牌仿冒着陆页中的凭据收集表单。基于惩罚的评分模型专门设计用于应对 SSL 盲点 —— 在简单的加权模型下,位于 Cloudflare 背后且具有有效证书的钓鱼页面得分可能在 40% 或更高,但是当确认存在结构性攻击技术时,惩罚系统会将其得分降至个位数。绕过了一两个层级的 URL 依然会被其余信号捕获。
## 在 SOC 工作流中的使用
该工具适用于一级分析工作流,在这些工作流中,URL 来自于用户报告、邮件网关警报或威胁情报源。分析师可以通过 PhishLens 批量处理指标,并按照加权安全得分对结果进行分类处理。低分 URL 可以升级进行更深入的分析,而高分 URL 则可以在从工具输出中记录了支持性证据后被驳回。
通过直接调用底层的 Python 类并以编程方式使用结构化输出,可以很方便地将自动化集成到 SOAR playbook 中。
## 局限性
该工具是分析辅助工具,而非绝对的判定标准。复杂的钓鱼活动可能会采用诸如页面伪装、地理围栏或 CAPTCHA 验证门控等技术,从而阻止自动截图捕获,并可能逃避基于关键词或年龄的检测。分析师应将加权得分视为调查过程中众多输入之一,并始终结合具体情况进行判断。
## 检测画廊
由 PhishLens 执行的真实 URL 分析。每个条目都显示了目标 URL 和在自动化分类过程中捕获的全页截图,就像分析师在调查期间审查它们时一样。
### 1. GitHub(合法域名)
| 分析 |
|----------|
| URL: `https://github.com` |
|  |
| 报告 |
|  |
| Json 报告 |
|  |
### 2. Google(合法域名)
| 分析 |
|----------|
| URL: `https://google.com` |
|  |
| 报告 |
|  |
| Json 报告 |
|  |
### 3. Facebook 登录页面(合法域名)
| 分析 |
|----------|
| URL: `https://facebook.com` |
|  |
| 报告 |
|  |
| Json 报告 |
|  |
### 4. 实际钓鱼页面(Facebook 方法 1)
| 分析 |
|----------|
| URL: `https://www.facebook.com⧸james⧸idʔ@prepare-primary-favors-attitudes.trycloudflare.com` |
|  |
| 报告 |
|  |
| Json 报告 |
|  |
### 5. 实际钓鱼页面(Facebook 方法 2)
| 分析 |
|----------|
| URL: `https://www.facebook.com⧸james⧸idʔ@t.ly/Rz9Jn` |
|  |
| 报告 |
|  |
| Json 报告 |
|  |
### 6. 实际钓鱼页面(Google 方法 1| 分析 |
|----------|
| URL: `https://google.com⧸accountʔ@cuisine-existing-breakdown-discounts.trycloudflare.com` |
|  |
| 报告 |
|  |
| Json 报告 |
|  |
### 7. 实际钓鱼页面(Google 方法 2)
| 分析 |
|----------|
| URL: `https://google.com⧸accountʔ@t.ly/EFiTr` |
|  |
| 报告 |
|  |
| Json 报告 |
|  |
## 许可证与免责声明
本项目仅供教育和防御性安全研究目的发布。对于滥用或仅基于此工具输出做出的决定,作者不承担任何责任。请负责任地使用,并遵守适用法律和组织政策。
标签:逆向工具