自动网络钓鱼电子邮件分析工具 —— ThePhish
项目地址:https://github.com/emalderson/ThePhishThePhish 是一个基于 TheHive、Cortex 和 MISP 的自动网络钓鱼电子邮件分析工具,Python 3 编写,基于 Flask 的 Web 应用程序,可以自动执行整个分析过程,从邮件的标题和正文中提取可观察数据到最终判定。此外,它还允许分析师干预分析过程,并在必要时获取有关正在分析的电子邮件的更多详细信息。为了与 TheHive 和 Cortex 交互,使用 TheHive4py 和 Cortex4py,它们是 Python API 客户端,允许分别使用 TheHive 和 Cortex 提供的 REST API。
一、概述
下图展示了 ThePhish 在高层次上是如何工作的:
[*]攻击者发起网络钓鱼活动向用户发送网络钓鱼电子邮件;
[*]收到此类电子邮件的用户可以将该电子邮件作为附件发送到 ThePhish 使用的邮箱;
[*]分析师与 ThePhish 交互并选择要分析的电子邮件;
[*]ThePhish 从电子邮件中提取所有可观察的信息并在 TheHive 上创建一个案例,借助 Cortex 及其分析器,可以分析可观察量;
[*]ThePhish 根据分析器的判断计算一个判断;
[*]如果判决为最终判决,则案件结案并通知用户。此外,如果是恶意电子邮件,则将案例导出到 MISP;
[*]如果判决不是最终判决,则需要分析师的辅助。他必须在 TheHive 上审查案例以及各种分析器给出的结果以制定判决,然后可以将通知发送给用户,可选择将案例导出到 MISP 并关闭案例;
二、ThePhish 使用例子
此示例旨在演示用户如何向 ThePhish 发送电子邮件以供其分析,以及分析师如何使用 ThePhish 来分析该电子邮件。
2.1 用户向 ThePhish 发送一封电子邮件
用户可以向 ThePhish 提供的电子邮件地址发送电子邮件,ThePhish 就会获取要分析的电子邮件。电子邮件必须以 EML 格式作为附件转发,以防止电子邮件标题受到污染。在这种情况下,使用的邮件客户端是 Mozilla Thunderbird,使用的电子邮件地址是 Gmail 地址。
2.2 分析师分析电子邮件
分析人员导航到 ThePhish 的网页并单击 "列出电子邮件" 按钮以获取要分析的电子邮件列表。
当分析师单击与所选电子邮件相关的 "分析" 按钮时,分析开始,其进度显示在 Web 界面上。
与此同时,ThePhish 从电子邮件中提取可观察数据 (URL、domains、IP 地址、电子邮件地址、附件和这些附件的哈希),然后与 TheHive 交互以创建案例。
在案例内部创建了三个任务:
然后,ThePhish 开始将提取的 observable 添加到案例中。
此时,通过邮件通知用户分析已经开始,这要归功于 Mailer 响应者。
第一个任务的描述允许邮件响应者通过电子邮件发送通知。
关闭第一个任务后,启动第二个任务并在可观察对象上启动分析器。分析器启动时,分析进度显示在 Web 界面上。
由于 live stream.,还可以在 TheHive 上查看分析进度。
一旦所有的分析器都终止了它们的执行,第二个任务就会关闭并启动第三个任务,然后 ThePhish 计算判决。由于判定为 "恶意",所有被发现为恶意的 observable 都被标记为 IoC。在这种情况下,只有一个 observable 被标记为 IoC。
然后将该案例作为一个事件导出到 MISP,其中一个属性由上述 observable 表示。
ThePhish 通过电子邮件将判决发送给用户。
最后,任务和案例都关闭了。第三个任务的描述允许 Mailer 响应者通过电子邮件发送裁决。此外,该案例已在五分钟后结案,并以 "无影响" 作为 "真阳性" 解决,这意味着攻击在造成任何损害之前就已被检测到。
案件结案后,分析人员可以在 Web 界面上获得裁决以及分析进度的整个日志。
此时分析师可以返回并分析另一封电子邮件。上述案例与网络钓鱼电子邮件有关,但当分析的电子邮件被归类为 "安全" 时,可以观察到类似的工作流程。事实上,案件已经结案,判决通过电子邮件发送给用户。
然后,判决也会在网络界面上显示给分析师。
另一方面,当电子邮件被归类为 "可疑" 时,判决仅在网络界面上显示给分析师。
此时分析师需要使用页面左侧的按钮来使用 TheHive、Cortex 和 MISP 进行进一步分析。这是因为分析尚未完成,仅通知用户对他转发给 ThePhish 的电子邮件的分析已开始。事实上,最后一个任务和案件还没有结束,因为一旦分析师制定了最终裁决,他们就需要自己结束。
分析师可以在 TheHive 和 Cortex 上查看所有分析器的报告,如果这还不够,还可以下载电子邮件的 EML 文件并手动分析。
当分析人员终止分析时,可以在最后一个任务的描述中填充要发送给用户的电子邮件正文,启动 Mailer 响应程序,如果判断为 "恶意",则通过单击 "将案例导出到 MISP 导出" 按钮,然后关闭案例。
三、执行
ThePhish 是一个用 Python3 编写的 Web 应用程序,Web 服务器使用 Flask 实现,而应用程序的前端部分,即用 HTML、CSS 和 JavaScript 编写的动态页面,使用 Bootstrap 实现。除了 Web 服务器模块外,应用程序的后端逻辑由三个封装应用程序本身逻辑的 Python 模块和一个用于通过 WebSocket 协议支持日志工具的 Python 类构成。如果想查看应用程序逻辑的图形表示,请单击 此处。此外,上述模块使用了几个配置文件,用于各种目的。
当分析师导航到应用程序的基本 URL 时,将加载 ThePhish 的网页并与服务器建立双向连接。这是通过使用网页中的 Socket.IO JavaScript 库来实现的,该库支持浏览器和服务器之间的实时、双向和基于事件的通信。尽可能使用 WebSocket 建立此连接,并将使用 HTTP 长轮询作为后备。为此,服务器应用程序使用 Flask-SocketIO Python 库,该库为 Flask 应用程序提供 Socket.IO 集成。然后,ThePhish 使用此连接在 Web 界面上显示分析进度。
分析人员每次在 Web 界面上执行操作时,都会向服务器发送一个 AJAX 请求,这是一个异步 HTTP 请求,允许在后台与服务器交换数据并更新页面而无需重新加载。这使分析师既可以可视化要分析的电子邮件列表,也可以开始分析。
借助 TheHive4py 和 Cortex4py,ThePhish 与 TheHive 和 Cortex 交互。此外,它与 IMAP 服务器交互以检索要分析的电子邮件。
四、安装
4.1 使用 Docker 和 Docker Compose 安装
由于从头开始为生产环境安装和配置 TheHive、Cortex 和 MISP 服务可能不是非常简单,因此 TheHive 项目在此处提供 Docker 映像和 Docker Compose 模板以方便安装。为了简单起见,提供的模板很简单,没有提供每个 docker 镜像的完整配置选项。
如果只想尝试 ThePhish 或者希望尽快启动并运行它,可以使用 docker 文件夹中提供的 Docker 模板,它是 TheHive 项目提供的 Docker 模板之一的修改版本,该模板也允许创建 ThePhish 容器。要使用 Docker 和 Docker Compose 安装 ThePhish,请参阅 本指南。我强烈建议至少在第一次使用它时以这种方式安装它,这样就可以了解基础知识以及如何使用在第一次尝试时应该可以工作的最小配置来配置它。事实上,之前链接的指南还提供了配置 TheHive、Cortex 和 MISP 实例的分步过程。
4.2 从头开始安装
本指南是指 ThePhish 的唯一安装,它需要:
[*]TheHive 的一个正在运行的实例
[*]一个正在运行的 Cortex 实例
[*]一个正在运行的 MISP 实例
[*]用户可用于向 ThePhish 发送电子邮件的电子邮件地址
[*]安装了 Python 3.8+ 的基于 Linux 的操作系统
为了安装、配置和集成 TheHive、Cortex 和 MISP 实例,请参考它们的官方文档:
[*]TheHive documentation
[*]Cortex documentation
[*]MISP documentation
建议 ThePhish 从中获取电子邮件进行分析的电子邮件地址是 Gmail 地址,因为它是 ThePhish 测试最多的一个。最好该帐户是新创建的帐户,其唯一目的是供 ThePhish 使用。 此处 解释了激活 ThePhish 连接到邮箱和获取电子邮件所需的应用程序密码的过程。
此安装过程已在运行 Ubuntu 20.04.3 LTS 并安装了 Python 3.8 的 VM 上进行了测试,并且该 docker-compose.yml 文件中显示了 TheHive、Cortex 和 MISP 的版本。
一旦 TheHive、Cortex 和 MISP 配置并在某个 URL 上侦听并且电子邮件地址已准备好使用,就可以安装和配置 ThePhish。
克隆仓库
$ git clone https://github.com/emalderson/ThePhish.git
创建 Python 虚拟环境并激活它 (这是一种很好的做法,但不是必需的)
$ cd ThePhish/app
$ sudo apt install python3-venv
$ python3 -m venv venv
$ source venv/bin/activate
安装依赖
$ pip install -r requirements.txt
将 run_responder() 函数添加到 TheHive4py 的 api.py 文件中
为了向用户发送电子邮件,ThePhish 使用 Mailer 响应程序。由于 ThePhish 使用 TheHive4py 与 TheHive 交互,因此需要一个允许通过其 ID 运行响应程序的函数。不幸的是,这个函数还不是 TheHive4py 的一部分,但是已经提出了一个请求将它添加到 TheHive4py (#219)。在等待添加时,必须使用以下命令手动添加,才能使 ThePhish 正常工作 (如果使用不同版本的 Python,请在命令中替换 Python 版本):
$ (cat << _EOF_
def run_responder(self, responder_id, object_type, object_id):
req = self.url + "/api/connector/cortex/action"
try:
data = json.dumps({ "responderId": responder_id, "objectType": object_type, "objectId": object_id})
return requests.post(req, headers={"Content-Type": "application/json"}, data=data, proxies=self.proxies, auth=self.auth, verify=self.cert)
except requests.exceptions.RequestException as e:
raise TheHiveException("Responder run error: {}".format(e))
_EOF_
) | tee -a venv/lib/python3.8/site-packages/thehive4py/api.py > /dev/null
配置
configuration.json 是全局配置文件,允许设置连接到邮箱和 TheHive、Cortex 和 MISP 实例的参数。它还允许设置与将在 TheHive 上创建的案例相关的参数。
{
"imap" : {
"host" : "imap.gmail.com",
"port" : "993",
"user" : "",
"password" : "",
"folder" : "inbox"
},
"thehive" : {
"url" : "http://thehive:9000",
"apikey" : ""
},
"cortex" : {
"url" : "http://cortex:9001",
"apikey" : "",
"id" : "local"
},
"misp" : {
"id" : "MISP THP"
},
"case" : {
"tlp" : "2",
"pap" : "2",
"tags" : ["email", "ThePhish"]
}
}
[*]在 imap 部分,如果使用的是 Gmail 地址,只需设置用于连接 IMAP 服务器的用户名 (即你的电子邮件地址) 和应用密码。
[*]在 thehive 部分,必须设置 TheHive 实例可访问的 URL,并设置在 TheHive 上创建的用户的 API 密钥,ThePhish 将使用该密钥与 TheHive 交互。
[*]在 Cortex 部分,必须设置可访问 Cortex 实例的 URL,并设置在 Cortex 上创建的用户的 API 密钥,ThePhish 和 TheHive 都将使用该密钥与 Cortex 交互。此外,必须设置 Cortex 实例的 ID。
[*]在 misp 部分中,只需设置给 MISP 实例的 ID。
[*]在案例部分,可以为 ThePhish 创建的案例设置默认 TLP 和 PAP 级别,以及在创建案例时将应用到它们的标签。
你可以在 TheHive 上了解如何在该组织中创建组织和具有 org-admin 角色的用户,并在 此处 (ThePhish 文档,推荐) 或 此处 (TheHive 文档) 获取其 API 密钥。 类似地,可以在 Cortex 上学习如何创建组织和用户,并在该组织中读取、分析角色并在 此处 (ThePhish 文档,推荐) 或 此处 (Cortex 文档) 获取其 API 密钥。
此文件中设置的 URL 和 ID 必须与 TheHive 名为 application.conf 的配置文件中设置的相同,其中包含与 Cortex 相关的部分和与 MISP 相关的部分。应该查找的参数是名称和 url 两部分,它们对应于 Cortex 和 MISP 实例的 ID 和 URL。这些 ID 也可以在 TheHive Web 界面的 About 窗口中找到。下图为 Cortex ID 为字符串 local,MISP ID 为字符串 MISP THP 的示例:
application.conf 用于将 TheHive 与 Cortex 和 MISP 集成。可以在 此处 (ThePhish 文档,推荐) 或 此处 (TheHive 文档) 了解如何设置与 Cortex 的集成,而对于与 MISP 的集成,可以转到 此处 (ThePhish 文档,推荐) 或 此处 (TheHive 文档)。
TheHive、Cortex 和 MISP 实例可访问的 URL 也应在文件 templates/index.html 中替换,以便 Web 界面上的按钮能够访问它们。为此,请替换这部分代码的最后三个 href:
<ul class="navbar-nav text-light" id="accordionSidebar">
<li class="nav-item"><a class="nav-link active" href="/" style="max-width: 114px;" target="_blank" rel="noopener noreferrer"><img class="img-fluid" data-bss-hover-animate="bounce" src="../static/assets/img/logo_rounded.png" style="margin-top: 0px;margin-left: 0px;"></a></li>
<li class="nav-item"><a class="nav-link" href="http://thehive:9000" style="max-width: 114px;" target="_blank" rel="noopener noreferrer"><img class="img-fluid" data-bss-hover-animate="bounce" src="../static/assets/img/thehive.png" style="margin-right: 0px;margin-left: 0px;"></a></li>
<li class="nav-item"><a class="nav-link" href="http://cortex:9001" style="max-width: 114px;" target="_blank" rel="noopener noreferrer"><img class="img-fluid" data-bss-hover-animate="bounce" src="../static/assets/img/cortex.png" style="transform: translate(0px);"></a></li>
<li class="nav-item"><a class="nav-link" href="https://misp" style="max-width: 114px;" target="_blank" rel="noopener noreferrer"><img class="img-fluid" data-bss-hover-animate="bounce" src="../static/assets/img/misp.png" style="transform: translate(0px);"></a></li>
</ul>
启动 app
$ python3 thephish_app.py
将用于运行应用程序的服务器是 eventlet 提供的 WSGI 服务器,因为它在需求中列出。WebSocket 协议需要工作并避免退回到 HTTP 长轮询。如果没有 eventlet,将使用默认的 Flask WSGI 服务器 (Werkzeug)。如果希望使用另一个 WSGI 服务器 (例如 Gunicorn) 或使用反向代理 (例如 NGINX),Flask-SocketIO 文档解释了如何做到这一点。
现在应用程序应该可以通过 http://localhost:8080 访问了。
⚠️ 警告:如果使用 Mozilla Firefox 来使用 ThePhish,并且由于某种原因在分析过程中出现错误消息,则可以在 此处 找到解决方案。
五、配置分析器
ThePhish 只有在 Cortex 上启用并正确配置后才能启动分析器或响应器。这部分文档解释了如何启用它们,而这部分列出了可用的分析器和响应器及其配置参数。应该注意的是,虽然许多分析器是免费使用的,但有些需要特殊访问权限,而另一些则需要有效的服务订阅或产品许可证。
5.1 配置分析器的级别
每个分析器都会输出 JSON 格式的报告,其中包含可观察对象的恶意级别,该级别可以是 "信息"、"安全"、"可疑" 或 "恶意" 之一。然而,即使报告结构通常遵循约定,但并不总是遵守约定。而且,在对很多分析器的代码进行分析和多次测试后,发现部分分析器存在bug。出于这个原因,已经使用了一些调整和变通方法来获得这些分析器提供的恶意级别,或者防止应用程序由于这些错误而崩溃。
此外,这些级别并不总是代表 observable 的真实恶意级别。由于这取决于分析器本身的编程方式,因此 ThePhish 附带了另一个名为 analyzers_level_conf.json 的配置文件,可以使用该文件在任何分析器提供的实际恶意级别与分析师确定的级别之间创建映射。除此之外,该文件允许分析师选择这些修改应该应用于哪些可观察的类型。该文件需要遵循此处示例中显示的结构,使用要配置的分析器的确切名称以及右侧的所需级别。如果此文件中未列出分析器,则它提供的恶意级别保持不变。该文件需要遵循以下示例中显示的结构,使用要配置的分析器的确切名称以及右侧的所需级别。如果此文件中未列出分析器,则它提供的恶意级别保持不变。
{
"DomainMailSPFDMARC_Analyzer_1_1" : {
"dataType" : ["url", "ip", "domain", "mail"],
"levelMapping" : {
"malicious" : "suspicious",
"suspicious" : "suspicious",
"safe" : "safe",
"info" : "info"
}
},
"MISP_2_1" : {
"dataType" : ["url", "ip", "domain", "mail"],
"levelMapping" : {
"malicious" : "malicious",
"suspicious" : "malicious",
"safe" : "safe",
"info" : "info"
}
},
"VirusTotal_GetReport_3_0" : {
"dataType" : ["ip", "domain"],
"levelMapping" : {
"malicious" : "info",
"suspicious" : "info",
"safe" : "safe",
"info" : "info"
}
}
}
在此示例中,MISP_2_1 分析器的 "可疑" 级别被提升为 "恶意",因为这表明当前正在分析的电子邮件中的某些可观察对象已经在先前分析的电子邮件中被看到,其判决为 "恶意"。 相反,DomainMailSPFDMARC_Analyzer_1_1 分析器的 "恶意" 级别降低为 "可疑",因为许多合法域没有配置 DMARC 和 SPF 记录。此外,VirusTotal_GetReport_3_0 分析器针对 IP 地址和域给出的 "可疑" 和 "恶意" 级别被降低为 "信息",因为已观察到它们会导致大量误报。
你可以随意在此文件中添加或删除分析器,但我建议你不要更改文件中已经存在的分析器,因为这些修改是由对许多不同电子邮件执行的许多测试引起的。
5.2 测试分析器
hePhish 已使用以下分析器进行了测试:
[*]AbuseIPDB_1_0
[*]AnyRun_Sandbox_Analysis_1_0
[*]CyberCrime-Tracker_1_0
[*]Cyberprotect_ThreatScore_3_0
[*]DomainMailSPFDMARC_Analyzer_1_1
[*]DShield_lookup_1_0
[*]EmailRep_1_0
[*]FileInfo_8_0
[*]Fortiguard_URLCategory_2_1
[*]IPinfo_Details_1_0
[*]IPVoid_1_0
[*]Maltiverse_Report_1_0
[*]Malwares_GetReport_1_0
[*]Malwares_Scan_1_0
[*]MaxMind_GeoIP_4_0
[*]MetaDefenderCloud_GetReport_1_0
[*]MISP_2_1
[*]Onyphe_Summary_1_0
[*]OTXQuery_2_0
[*]PassiveTotal_Enrichment_2_0
[*]PassiveTotal_Malware_2_0
[*]PassiveTotal_Osint_2_0
[*]PassiveTotal_Ssl_Certificate_Details_2_0
[*]PassiveTotal_Ssl_Certificate_History_2_0
[*]PassiveTotal_Unique_Resolutions_2_0
[*]PassiveTotal_Whois_Details_2_0
[*]PhishTank_CheckURL_2_1
[*]Pulsedive_GetIndicator_1_0
[*]Robtex_Forward_PDNS_Query_1_0
[*]Robtex_IP_Query_1_0
[*]Robtex_Reverse_PDNS_Query_1_0
[*]Shodan_DNSResolve_1_0
[*]Shodan_Host_1_0
[*]Shodan_Host_History_1_0
[*]Shodan_InfoDomain_1_0
[*]SpamhausDBL_1_0
[*]StopForumSpam_1_0
[*]Threatcrowd_1_0
[*]UnshortenLink_1_2
[*]URLhaus_2_0
[*]Urlscan_io_Scan_0_1_0
[*]Urlscan_io_Search_0_1_1
[*]VirusTotal_GetReport_3_0
[*]VirusTotal_Scan_3_0
[*]Yara_2_0
斜体强调的分析器是已修改级别的分析器 (但可以覆盖,即使不建议这样做),而粗体强调的分析器是直接在 ThePhish 的代码中处理的分析器,或者是因为他们不遵守报告结构的约定,或者因为有错误。此外,ThePhish 的代码中处理了以下分析器,以便以最佳方式使用它们:
[*]DomainMailSPFDMARC_Analyzer_1_1:仅在应该能够发送电子邮件的域上启动。
[*]MISP_2_1:用于与 MISP 的集成。
[*]UnshortenLink_1_2:在 URL 上的任何其他分析器之前启动,以便可以取消缩短链接并将未缩短的链接添加为额外的 observable。
[*]Yara_2_0:唯一在 EML 附件上启动的。
5.3 启用 MISP 分析器
为了将 Cortex 与 MISP 集成,必须激活 MISP_2_1 分析器并使用在 MISP 上创建的用户的身份验证密钥对其进行配置,Cortex 将使用该身份验证密钥与 MISP 交互。这意味着必须事先在 MISP 上创建组织和在该组织中具有 sync_user 角色的用户 (可以了解如何执行此操作并在 此处 (推荐的 ThePhish 文档) 或 此处 (MISP 文档) 获取身份验证密钥。
5.4 启用 Yara 分析器
如果要使用 Yara_2_0 分析器,必须在运行 Cortex 的机器上创建一个文件夹,其中包含:
[*]Yara 规则,其中每个规则都是一个扩展名为 .yar 的文件
[*]一个名为 index.yar 的文件,其中包含该文件夹中每个遵循此语法的 Yara 规则的行:include "yara_rule_name.yar"
然后,必须在 Cortex 上配置此文件夹的路径。例如,如果在路径 /opt/cortex 中创建了文件夹 yara_rules,那么需要在 Cortex 上 (在 Web 界面上) 配置路径 /opt/cortex/yara_rules。
六、启用邮件响应程序
为了向用户发送电子邮件,必须启用并正确配置 Mailer 响应程序。用于启用响应程序的过程与用于启用分析器的过程相同。如果使用的是 Gmail 地址,请正确设置以下参数:
[*]from:<YourGmailEmailAddress>
[*]smtp_host :smtp.gmail.com
[*]smtp_port:587
[*]smtp_user: <你的GmailEmail地址>
[*]smtp_pwd: <YourGmailEmailAddressAppPassword>
七、使用白名单
ThePhish 允许创建白名单,以避免分析可能导致误报或分析师决定在分析期间不应考虑它们的可观察值。白名单包含在名为 whitelist.json 的文件中,由许多不同的列表组成,以便在可观察类型匹配和匹配模式方面提供极大的灵活性。它支持以下匹配模式:
[*]电子邮件地址、IP 地址、URL、domains、文件名、文件类型和哈希的精确字符串匹配
[*]电子邮件地址、IP 地址、URL、domains 和文件名的正则表达式匹配
[*]包含指定域的子域、电子邮件地址和 URL 的正则表达式匹配
这里显示了 whitelist.json 文件的示例:
{
"exactMatching": {
"mail" : [],
"ip" : [
"127.0.0.1",
"8.8.8.8",
"8.8.4.4"
],
"url" : [],
"domain" : [
"adf.ly",
"paypal.com"
],
"filename" : [],
"filetype" : [
"application/pdf"
],
"hash" : []
},
"domainsInSubdomains" : [
"paypal.com"
],
"domainsInURLs" : [
"paypal.com"
],
"domainsInEmails" : [
"paypal.com"
],
"regexMatching" : {
"mail" : [],
"ip" : [
"10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}",
"172\\.16\\.\\d{1,3}\\.\\d{1,3}",
"192\\.168\\.\\d{1,3}\\.\\d{1,3}"
],
"url" : [],
"domain" : [],
"filename" : []
}
}
虽然与精确匹配和正则表达式匹配相关的部分都在没有任何修改的情况下使用,但其余部分用于创建另外三个正则表达式列表。不需要设计复杂的正则表达式来启用这些功能,但只需将域添加到正确的列表中,其余的由 ThePhish 完成。例如,在上面显示的示例中,不仅域 "paypal.com" 被过滤,而且包含域 "paypal.com" 的任何子域、URL 和电子邮件地址也被过滤。这些正则表达式旨在避免一些不需要的行为,例如,它们可以防止像 "paypal.com.attacker.com" 这样的域被错误地列入白名单。此存储库中提供的白名单文件已经填充了一些列入白名单的可观察对象,但这只是一个示例,你可以 (并且应该) 通过删除或添加元素来编辑它以满足你的需求。
页:
[1]