shankar-bettadapura/phishing-analysis-report

GitHub: shankar-bettadapura/phishing-analysis-report

Python 命令行钓鱼邮件分析工具,自动化完成邮件头解析、IOC 提取、威胁情报丰富化与双格式报告生成。

Stars: 0 | Forks: 0

# 钓鱼分析报告 **自动化邮件头解析、IOC 提取、威胁情报丰富化及双格式报告生成** 这是一个 Python 命令行工具,它接收原始的 `.eml` 文件,通过五个模块的 pipeline 解析邮件头和正文内容,提取四种类型的入侵指标(IOC),将它们与开源威胁情报源进行交叉比对,并同时生成两份专业交付物:一份深色主题的 HTML 分诊报告和一个包含四个工作表的 Excel 工作簿。 ## 功能介绍 大多数钓鱼分诊工作流将检测视为一种视觉练习——检查发件人地址、悬停查看链接、谨慎对待附件。然而,能够可靠揭露钓鱼活动的取证证据并不在邮件的可见层,而是在其底层的技术层中:接收邮件服务器写入的身份验证结果、嵌入在邮件头中的源 IP、嵌入在可见正文和原始 HTML 源码中的域名,以及任何附件的加密指纹。该工具实现了这一技术层的自动化系统提取与丰富化。 ## 特性 - **全面的邮件解析** — 邮件头、SPF/DKIM/DMARC 身份验证结果、Received 链跳分析、纯文本和 HTML 正文,以及带有 SHA256 哈希的附件元数据 - **IOC 提取** — 从邮件头和正文中提取 URL、IP 地址、域名和文件哈希;所有 IOC 均已进行防恶意点击处理(例如 `hxxp://`、`[.]`)以确保安全展示 - **威胁情报丰富化** — 查询 AlienVault OTX(IP 和域名)、AbuseIPDB(IP)和 URLhaus(URL 和 SHA256 哈希) - **判定评分** — 根据被多少情报源标记,为每个 IOC 给出 CLEAN / SUSPICIOUS / MALICIOUS(安全/可疑/恶意)判定;当无可用丰富化数据时标记为 UNKNOWN(未知) - **HTML 报告** — 深色主题单文件输出,包含总体判定横幅、IOC 摘要磁贴、带有颜色编码身份验证徽章的邮件头分析表、每个 IOC 的丰富化结果表以及附件登记表 - **Excel 工作簿** — 四个工作表:执行摘要、邮件头分析、IOC 判定和原始 IOC 登记表;根据判定和身份验证结果进行颜色编码 - **离线模式** — `--no-enrichment` 标志跳过所有 API 调用,适用于快速的在隔离环境下的解析 ## 架构 ``` phishing-analysis-report/ ├── main.py CLI entry point and pipeline orchestrator ├── parsers/ │ └── email_parser.py .eml ingestion, MIME tree traversal, header and attachment extraction ├── ioc/ │ └── extractor.py Regex-based IOC extraction with defanging and deduplication ├── enrichment/ │ └── engine.py OTX, AbuseIPDB, and URLhaus API clients with verdict scoring ├── reports/ │ ├── html_report.py Dark-themed HTML report generator │ └── excel_report.py Four-sheet openpyxl workbook generator ├── sample_emails/ │ └── phishing_sample.eml Synthetic PayPal impersonation email for testing ├── requirements.txt └── README.md ``` ## Pipeline ``` .eml file ↓ email_parser.py Structures the raw email into headers, auth results, body, attachments ↓ extractor.py Mines the parsed dict for URLs, IPs, domains, and hashes; defangs all IOCs ↓ engine.py Queries each IOC against OTX, AbuseIPDB, and URLhaus; assigns verdicts ↓ html_report.py Generates dark-themed HTML triage report excel_report.py Generates four-sheet Excel workbook ``` ## 数据源 | 数据源 | IOC 类型 | 身份验证 | |---|---|---| | AlienVault OTX | IP, 域名 | API 密钥(免费) | | AbuseIPDB | IP | API 密钥(免费) | | URLhaus | URL, SHA256 哈希 | 无需 | ## 判定逻辑 | 判定 | 条件 | |---|---| | CLEAN | 零个情报源标记了该 IOC | | SUSPICIOUS | 仅有一个情报源标记了该 IOC | | MALICIOUS | 两个或更多情报源标记了该 IOC | | UNKNOWN | 无可用丰富化数据(缺少 API 密钥或未针对此 IOC 类型配置情报源) | AbuseIPDB 置信度阈值为:25/100。OTX 会标记任何至少出现在一个威胁 pulse 中的 IOC。URLhaus 会标记任何状态为 online 或 unknown 的 URL,以及任何存在于 payload 数据库中的哈希。 ## 安装说明 **1. 克隆代码仓库** ``` git clone https://github.com/shankar-bettadapura/phishing-analysis-report.git cd phishing-analysis-report ``` **2. 创建并激活虚拟环境** ``` # Mac/Linux python -m venv venv && source venv/bin/activate # Windows python -m venv venv && venv\Scripts\activate ``` **3. 安装依赖项** ``` pip install -r requirements.txt ``` **4. 将 API 密钥添加到项目根目录下的 `.env` 文件中** ``` OTX_API_KEY=your_key_here ABUSEIPDB_API_KEY=your_key_here ``` 免费 API 密钥获取: - AlienVault OTX: https://otx.alienvault.com — Settings → API Integration - AbuseIPDB: https://www.abuseipdb.com — Account → API ## 用法 ``` # 结合实时 TI enrichment 的完整分析 python main.py sample_emails/phishing_sample.eml --org "Your Organisation" # Offline mode — 仅进行解析和 IOC 提取,不进行 API 调用 python main.py sample_emails/phishing_sample.eml --no-enrichment # 自定义输出目录 python main.py /path/to/email.eml --output /path/to/reports/ --org "Your Organisation" ``` | 参数 | 描述 | |---|---| | `email` | `.eml` 文件的路径(必填) | | `--output` | 报告的输出目录(默认:`reports/`) | | `--org` | 用于报告头的组织名称 | | `--no-enrichment` | 跳过威胁情报丰富化 — 速度更快,支持离线工作 | ## 示例输出 ``` [*] Phishing Analysis Report File : sample_emails/phishing_sample.eml Time : 2026-06-15 03:24 UTC Org : Portfolio Demo [1/4] Parsing email headers and body... From : PayPal Security Subject : Urgent: Your PayPal account has been limited Auth : SPF=fail DKIM=fail DMARC=fail [2/4] Extracting IOCs... URLs : 5 IPs : 2 Domains : 7 Hashes : 2 Total : 16 IOCs extracted [3/4] Enriching IOCs against threat intelligence feeds... MALICIOUS : 0 SUSPICIOUS : 2 CLEAN : 14 [4/4] Generating reports... HTML -> reports/Phishing_Report_Urgent__Your_PayPal_account_ha_20260615.html Excel -> reports/Phishing_Report_Urgent__Your_PayPal_account_ha_20260615.xlsx [+] Analysis complete. ``` ## IOC 防恶意点击参考 | 类型 | 原始内容 | 已处理 | |---|---|---| | URL | `http://evil.ru/payload` | `hxxp://evil[.]ru/payload` | | IP | `185.220.101.45` | `185[.]220[.]101[.]45` | | 域名 | `paypa1-verify.ru` | `paypa1-verify[.]ru` | | 哈希 | `a3f4b2c1...` | `a3f4b2c1...`(未改变) | ## 架构渊源 该工具是相互关联的 Python 安全工具 pipeline 中的第三个: - **IOC 丰富化与判定评分** → [威胁情报聚合器](https://github.com/shankar-bettadapura/threat-intel-aggregator)(Project 5) - **通过 openpyxl 生成 Excel 工作簿** → [GRC 控制差距分析器](https://github.com/shankar-bettadapura/grc-control-gap-analyzer)(Project 10) - **指标提取模式** → [APT TTP 映射器 v1.1](https://github.com/shankar-bettadapura/apt-ttp-mapper-v1.1)(Project 7) ## 已知局限性 - URL、域名和哈希每种仅查询一个来源,在当前的阈值模型下,其最高判定上限为 SUSPICIOUS。添加 VirusTotal 作为辅助情报源将使这些 IOC 类型能够获得 MALICIOUS 判定。 - 在威胁情报报告中经常作为被冒充目标出现的合法域名(例如 `paypal.com`),可能会由于 OTX pulse 的累积而产生 SUSPICIOUS 的误报。原始情报数据会与判定标签一并公开,以便分析人员无需重新查询即可做出判断。 - 附件分析仅限于 SHA256 哈希和 URLhaus payload 查找。生产级版本将集成沙箱 API,以便对新型 payload 进行行为分析。 ## 作者 **Shankar Bettadapura** — 网络安全和 IT GRC 专业人士,网络安全研究硕士(AMU),CompTIA Security+,正在考取 CISA/CRISC/ISO 42001 认证,前美国陆军全源情报分析师。 🔗 [LinkedIn](https://www.linkedin.com/in/shankar-bettadapura) | 🔗 [Substack](https://shankarbettadapura.substack.com) | 🔗 [GitHub](https://github.com/shankar-bettadapura)
标签:IOC提取, Python, 威胁情报, 字符串匹配, 开发者工具, 无后门, 自动化报告, 逆向工具, 钓鱼邮件分析