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` | | ![image-analysis](https://raw.githubusercontent.com/0xbitx/DEDSEC_PHISHLENS/main/page-screenshots/screenshot-github.com-20260723044251.png) | | 报告 | | ![image-analysis](https://raw.githubusercontent.com/0xbitx/DEDSEC_PHISHLENS/main/reports/report-github.com-20260723065712.pdf) | | Json 报告 | | ![image-analysis](https://raw.githubusercontent.com/0xbitx/DEDSEC_PHISHLENS/main/reports/report-github.com-20260723065713.json) | ### 2. Google(合法域名) | 分析 | |----------| | URL: `https://google.com` | | ![image-analysis](https://raw.githubusercontent.com/0xbitx/DEDSEC_PHISHLENS/main/page-screenshots/screenshot-google.com-20260723070026.png) | | 报告 | | ![image-analysis](https://raw.githubusercontent.com/0xbitx/DEDSEC_PHISHLENS/main/reports/report-google.com-20260723070032.pdf) | | Json 报告 | | ![image-analysis](https://raw.githubusercontent.com/0xbitx/DEDSEC_PHISHLENS/main/reports/report-google.com-20260723070032.json) | ### 3. Facebook 登录页面(合法域名) | 分析 | |----------| | URL: `https://facebook.com` | | ![image-analysis](https://raw.githubusercontent.com/0xbitx/DEDSEC_PHISHLENS/main/page-screenshots/screenshot-facebook.com-20260723070125.png) | | 报告 | | ![image-analysis](https://raw.githubusercontent.com/0xbitx/DEDSEC_PHISHLENS/main/reports/report-facebook.com-20260723070133.pdf) | | Json 报告 | | ![image-analysis](https://raw.githubusercontent.com/0xbitx/DEDSEC_PHISHLENS/main/reports/report-facebook.com-20260723070133.json) | ### 4. 实际钓鱼页面(Facebook 方法 1) | 分析 | |----------| | URL: `https://www.facebook.com⧸james⧸idʔ@prepare-primary-favors-attitudes.trycloudflare.com` | | ![image-analysis](https://raw.githubusercontent.com/0xbitx/DEDSEC_PHISHLENS/main/page-screenshots/screenshot-prepare-primary-favors-attitudes.trycloudflare.com-20260723070506.png) | | 报告 | | ![image-analysis](https://raw.githubusercontent.com/0xbitx/DEDSEC_PHISHLENS/main/reports/report-prepare-primary-favors-attitudes.trycloudflare.com-20260723070512.pdf) | | Json 报告 | | ![image-analysis](https://raw.githubusercontent.com/0xbitx/DEDSEC_PHISHLENS/main/reports/report-prepare-primary-favors-attitudes.trycloudflare.com-20260723070512.json) | ### 5. 实际钓鱼页面(Facebook 方法 2) | 分析 | |----------| | URL: `https://www.facebook.com⧸james⧸idʔ@t.ly/Rz9Jn` | | ![image-analysis](https://raw.githubusercontent.com/0xbitx/DEDSEC_PHISHLENS/main/page-screenshots/screenshot-prepare-primary-favors-attitudes.trycloudflare.com-20260723070506.png) | | 报告 | | ![image-analysis](https://raw.githubusercontent.com/0xbitx/DEDSEC_PHISHLENS/main/reports/report-prepare-primary-favors-attitudes.trycloudflare.com-20260723070757.pdf) | | Json 报告 | | ![image-analysis](https://raw.githubusercontent.com/0xbitx/DEDSEC_PHISHLENS/main/reports/screenshot-prepare-primary-favors-attitudes.trycloudflare.com-20260723070506.png) | ### 6. 实际钓鱼页面(Google 方法 1| 分析 | |----------| | URL: `https://google.com⧸accountʔ@cuisine-existing-breakdown-discounts.trycloudflare.com` | | ![image-analysis](https://raw.githubusercontent.com/0xbitx/DEDSEC_PHISHLENS/main/page-screenshots/screenshot-cuisine-existing-breakdown-discounts.trycloudflare.com-20260723071140.png) | | 报告 | | ![image-analysis](https://raw.githubusercontent.com/0xbitx/DEDSEC_PHISHLENS/main/reports/report-cuisine-existing-breakdown-discounts.trycloudflare.com-20260723071148.pdf) | | Json 报告 | | ![image-analysis](https://raw.githubusercontent.com/0xbitx/DEDSEC_PHISHLENS/main/reports/report-cuisine-existing-breakdown-discounts.trycloudflare.com-20260723071149.json) | ### 7. 实际钓鱼页面(Google 方法 2) | 分析 | |----------| | URL: `https://google.com⧸accountʔ@t.ly/EFiTr` | | ![image-analysis](https://raw.githubusercontent.com/0xbitx/DEDSEC_PHISHLENS/main/page-screenshots/screenshot-cuisine-existing-breakdown-discounts.trycloudflare.com-20260723071140.png) | | 报告 | | ![image-analysis](https://raw.githubusercontent.com/0xbitx/DEDSEC_PHISHLENS/main/reports/report-t.ly-20260723072801.pdf) | | Json 报告 | | ![image-analysis](https://raw.githubusercontent.com/0xbitx/DEDSEC_PHISHLENS/main/reports/report-t.ly-20260723072801.pdf) | ## 许可证与免责声明 本项目仅供教育和防御性安全研究目的发布。对于滥用或仅基于此工具输出做出的决定,作者不承担任何责任。请负责任地使用,并遵守适用法律和组织政策。
标签:逆向工具