hemanthkori/phishing-incident-response

GitHub: hemanthkori/phishing-incident-response

一个完整的钓鱼事件应急响应项目,提供端到端调查报告、证据包以及一个可自动化的钓鱼邮件分诊评分工具。

Stars: 0 | Forks: 0

# IR-2026-0417 — 四分钟内从钓鱼到 C2 这是一次完整的钓鱼事件,经过了端到端的调查,并按照 提交给管理者的方式撰写:**[INCIDENT-REPORT.md](INCIDENT-REPORT.md)**。 一封来自仿冒域名的发票主题电子邮件到达了财务邮箱。用户点击了链接,下载了一个压缩包,并打开了一个伪装成 PDF 的快捷方式。经过编码的 PowerShell 拉取了一个 loader,该 loader 写入了一个 Run 键,运行了三条域侦察命令,并开始进行 beacon 通信。 **点击到 C2:3 分 41 秒。C2 到检测:10 分 19 秒。** ## 目录内容 | | | | --- | --- | | [`INCIDENT-REPORT.md`](INCIDENT-REPORT.md) | 最终交付物。包含时间线、初始访问分析、执行链、IOC、ATT&CK 映射、响应措施、根本原因及建议。 | | `evidence/` | 钓鱼 `.eml` 文件、一封用于对比的合法发票邮件,以及邮件网关、代理和 Sysmon 日志。 | | `tools/triage.py` | 220 行代码。从身份验证、发件人身份、payload 和语言四个维度对 `.eml` 进行评分,并展示其推理过程。 | | `tests/` | 13 个测试。其中关键的测试用于断言该工具**不会**将合法发票误报为恶意。 | ## 分诊工具 手动分诊一封可疑邮件通常需要十分钟,期间要将邮件头粘贴到四个不同的 Web 工具中,而且每次都是重复的这十分钟。 ![钓鱼邮件的分诊](https://static.pigsec.cn/wp-content/uploads/repos/cas/cd/cd65ccb79d7aa73317ff75b16897b3f9ce56b0e4b79706b97b56fe92e2d09d00.png) 每项发现的权重和详情都会展示出来。分析师无法向他人解释的结论毫无价值,因此该工具会输出其推理过程,而不仅仅是给出答案。 更难的测试在于那些看起来一样但实际上并非如此的邮件。下面是一封来自真实供应商的发票催款邮件:相同的逾期框架,相同的“超期”话术,相同的付款进度查询。 ![合法发票的分诊](https://static.pigsec.cn/wp-content/uploads/repos/cas/4a/4a871e7afc9658cecf819c0d484487f6402ed967e09a1b3f2dfe2c3ce1547838.png) 得分为 10/100,而钓鱼邮件的得分为 100/100。这种差异源于攻击者难以伪造的部分——即 SPF、DKIM 和 DMARC 全部通过,且回复地址(Reply-To)与发件人地址(From)匹配——而不是措辞,因为任何催款发票都会使用类似的措辞。 这种对比正是为什么样本库和测试中都要包含良性样本的原因。如果分诊工具把所有东西都标记为可疑,那它还不如没有工具,因为这会让分析师对其报警习以为常并最终忽视。 ![测试](https://static.pigsec.cn/wp-content/uploads/repos/cas/e2/e2f25ce0ab839450d750b9282c19d2a82a4a04cb39ffe599edd5d9af4ec1dc84.png) ## 运行方式 ``` python3 tools/triage.py evidence/phish-invoice-overdue.eml --org harbourline.ie python3 -m pytest tests -q python3 tools/capture.py # regenerates every image above from live output ``` 如果判定为恶意,程序会以状态码 1 退出,因此可以将其直接接入邮件处理流水线(pipeline)的 hook 中。 ## 关键发现 该邮件未通过 SPF 和 DMARC 验证。邮件网关记录了这两项失败,但最终还是投递了邮件,因为该域名发布的 DMARC 策略为 `p=none`——这相当于指示接收方服务器在遇到验证失败时无需采取任何行动。 在此之后发生的一切都是连锁反应。用户只是做了财务邮箱该做的事:他们打开了一封看似来自公司内部的催款发票。能够阻止此类邮件的唯一控制措施,就是完成当初停滞在监控阶段的 DMARC 推广工作。 ## 局限性 - 场景、主机、用户、域名和哈希值均为虚构。这些日志是为追求真实性而手动构建的,并非从实时环境中捕获。 - `triage.py` 仅读取邮件头和正文文本。它不会引爆附件、解析 URL,也不会查询威胁情报。 - 仿冒域名的检查方式是对组织名称进行子串匹配。它可以抓出 `harbourline-invoices.com`;但无法防范同形异义字(homoglyph)攻击。 采用 MIT 许可证。
标签:IP 地址批量处理, Python, 威胁情报, 安全, 安全规则引擎, 库, 应急响应, 开发者工具, 无后门, 网络信息收集, 超时处理, 逆向工具, 钓鱼攻击分析