DataCon2023邮件安全赛道,冠军战队WP分享
2023-12-7 11:45:13 Author: mp.weixin.qq.com(查看原文) 阅读量:4 收藏

由中国通信学会数据安全委员会指导,奇安信集团、清华大学网络研究院、北京市大数据中心、蚂蚁集团、腾讯安全大数据实验室、Coremail广东盈世、赛尔网络主办的DataCon大数据安全分析竞赛最终排名已揭晓。

清华大学TrickorTech战队、武汉大学N0nE429战队、中国科学院信息工程研究所404NOTFOUND战队、中国科学院信息工程研究所Hematopoiesisbshjdkvhbj战队、社会联合跃哥我真不会啊战队分别获得AI安全赛道、软件安全赛道、邮件安全赛道、互联网威胁溯源赛道、漏洞分析赛道冠军。

本期404NOTFOUND战队将为大家分享邮件安全赛道解题思路。

1
题目回顾 
1.1 赛道背景
随着互联网的普及,电子邮件已经成为现代人生活和工作中最常用的通信工具之一。与此同时,电子邮件服务也成为了攻击者的重要攻击目标。本赛道立足于电子邮件安全领域的新型威胁,引导选手熟悉了解新型的邮件攻击方式并思考解决方案。
1.2 题目概述
挑战一:新型钓鱼邮件检测
挑战内容:近年来新兴的钓鱼邮件攻击层出不穷,危害严重。选手需要基于现实网络中真实的垃圾邮件数据设计并实现一个不依赖于威胁情报的钓鱼邮件检测引擎。
挑战二:新型邮件炸弹攻击
挑战内容:因为电子邮件身份验证机制和反垃圾邮件策略的部署, 传统的邮件炸弹攻击攻击 效果不佳。选手需要寻找正常的邮件发送服务等, 在指定时间(2 小时) 内向指定邮箱大量 发送垃圾邮件实现邮件炸弹攻击。
2
新型钓鱼邮件检测解题思路 
该问题属于分类问题,做研究时需要首先明确样本是什么。本题的样本是邮件原文,即eml文件。本题的输出结果是该样本是否是钓鱼邮件,如是钓鱼邮件则其标签为1,如非钓鱼邮件则其标签为0。所有待检测样本组成的集合构成本题的测试数据集,测试数据集划分出10%∼20%的样本作为选手获得的训练数据集。
2.1 邮件类型定义
测试数据集中共包含 4 种类型的邮件,分别是正常邮件、垃圾邮件、钓鱼邮件和误报邮件。
正常邮件是指合法的、非垃圾邮件的电子邮件。这些邮件通常包含个人或商业通信、订阅的新闻或信息更新、工作相关的邮件等。总数据集中的正常邮件约为 10000封。
垃圾邮件是指未经请求或未经授权发送给大量用户的不需要或无意义的电子邮件。这 些邮件通常包含广告、促销信息、诈骗信息、色情内容等, 它们的目的是向用户发送垃圾信 息或欺骗用户获取个人信息。总数据集中的垃圾邮件约为 10000 封。
钓鱼邮件是指一种试图欺骗接收者以获取其敏感信息(如用户名、密码、信用卡信息等) 的电子邮件。这些邮件通常伪装成合法的机构或服务提供商(如银行、社交媒体平台、电子 支付系统等),要求接收者点击链接或提供个人信息。总数据集中的钓鱼邮件约为10000封。
误报邮件是指被错误地标记为钓鱼邮件的合法邮件。这些邮件可能是由于邮件网关过 滤器的误判或用户设置的错误导致的。误报邮件可能包含重要的通信、订阅的服务更新或其 他合法信息,但被错误地归类为钓鱼邮件而被误报。总数据集中的误报邮件约为1000封。
训练数据集仅给了总体数据的13.8%,共计4277封邮件, 这些邮件仅包含垃圾邮件和钓鱼邮件2种类型,二者在训练集中各占约一半。
2.2 数据可视化与初期思路
由于eml邮件原文正文部分包含大量HTML标签与Base64编码, 难以直观地观察到样本特征,因此需要首先使用解析脚本帮助我们快速浏览训练数据集,以确定提取哪些特征用于编写检测规则。最终获得对eml文件的解析结果如图1、图 2所示。根据观察我们发现所有邮件的主题主要分成以下六方面:金钱补助类、软件更新类、科 研培训类、广告营销类、色情邮件类、开票开户类。考虑到本题侧重点在钓鱼邮件的检测上,而非正常邮件和垃圾邮件的区分,所以我们将 特征提取的工作重心放在钓鱼邮件的技战术上。
图 1: 解析结果预览
图 2: 解析正文示例
2.3 特征筛选思路
钓鱼邮件的常见目标是获得用户的身份凭证。其实现手法通常有两种:一种是让受害者直接点击邮件中的链接或扫码进入页面填写凭证信息, 另一种方式是通过诱导受害者点击附件使得恶意代码在受害者主机执行。根据这两种实现思路, 我们可以从以下三种强特征入 手组合开展钓鱼邮件的检测:邮件标题及正文中的敏感词汇、邮件正文url链接、附件。另外在实践中也看到了一种内联图片的手法,我们同样将其纳入强特征中。
2.3.1 邮件关键词黑白名单
由于规则检测简洁清晰, 运算效率较高,于是我们主要考虑首先维护好一套黑名单用于 检测直白的钓鱼邮件,另外再维护一套白名单用于筛掉大量已知的非垃圾邮件,留下少量模 糊样本进行深度特征提取。根据之前观察获得的六大主题,我们认为金钱补助类和软件更新类有较大概率是钓鱼邮件,因此可以将诸如“邮箱系统在线升级” 、系统通知” 、您的账号存在安全隐患” 、邮箱停用” 、邮箱迁移” 、 财政补贴” 、高温补” 、及时申领” 等关键字纳入黑名。比赛中期观察到有些样本的关键词可能存在中间字符截断、谐音字、近形字绕过的现象,比如“邮箱 xxxx 后将停用”、“部贴”、“开漂”这类词无法通过先前的黑名单进行匹配, 所以我们在黑名单中的某些关键词内部加入通配符进行非贪婪匹配并扩充了模糊词黑名单,大幅优化了匹配广度和运行效率。
2.3.2 邮件正文url链接
url链接是钓鱼邮件检测的一个重要判断依据。由于比赛检测代码在断网环境下执行, 无法访问目标页面获取特征, 所以我们只能从url 链接本身入手完成检测。那么什么是恶意的url,什么是合法的url呢?恶意的url可以通过威胁情报平台进行获取,但本题明确禁 止使用威胁情报进行辅助解题,因此只能从合法url 处入手解题。通过解析邮件正文中href标签中的url并使用urlparse库提取出链接中的 domain,我们可以组合使用赛题二给出的 Tranco TOP1M 域名进行白名单匹配, 这样能够筛选出使用了使用频率在 TOP1M的域名的邮件,我们姑且认为这些邮件是非钓鱼邮件。
ps:实际上在人工提取特征时发现有些钓鱼邮件采用合法域名进行 Payload 投递, 我们这种通过高频域名对邮件标白的方法会带来一定程度的漏报, 某一次提交得分的漏检率上升也表明了这一点。
2.3.3 附件
这部分内容由于时间原因只对是否有附件做了检测。我们虽然维护了一个白名单用于校验合法后缀名文件,其中包括常用的 office 程序、图片、音频文件、视频文件, 也考虑对office程序的宏代码包含情况做了检测, 但最终因为时间原因并未测试、集成到终版代码中。
2.3.4 邮件内联图片
训练数据集中有不少邮件采用内联图片的方式增加邮件信息,针对这些图片我们考虑采用OCR库进行文本提取和QRcode处理,最终因为识别效果不佳回退代码。经过观察和思索,考虑到垃圾邮件的目标是解释清楚自己的目的并吸引接收方参与活动, 那么这类邮件的习惯性正文有极大概率是以文本加图片的形式出现,我们谨慎地将利用只包含内联图 片、不包含文本这种技战法的邮件判别为钓鱼邮件。
2.4 检测算法思路
初期我们考虑采用规则检测加机器学习检测的方式协同完成整项任务, 后来发现时间不够做后半部分检测了,因此采用几种强规则的组合运用作为钓鱼邮件检测的终版答案。
当一个样本进入检测算法时,我们会首先判别它是否命中黑名单中的关键词,如果命中了黑名单则判定为钓鱼邮件;其次是判别它是否命中白名单中的关键词,如果命中了白名单则判别为非钓鱼邮件;接着当邮件中只包含内联图片而没有正文时, 判别其为非钓鱼邮件;然后当邮件中既没有url链接、也没有图片、还没有附件, 判别其为非钓鱼邮件;最后如果它包含url链接且其该链接中的域名位于TOP1M domain白名单中,判别其为非钓鱼邮件,否则为钓鱼邮件。剩下的邮件将其处理为非钓鱼邮件。以上策略便是最终版答案的策略。
未来如果有机会我们会将这些特征细化成低维特征向量,并将稀疏值处理成高维特征 投入基于树的机器学习算法中进行尝试,相信效果会比目前这版优异,且剩下的邮件也有机会被判别为钓鱼邮件。
3
 新型邮件炸弹攻击解题思路 
第二题的挑战是要求我们在规定时间内尽可能地向目标邮箱发送垃圾邮件, 比赛中将 垃圾邮件发送到目标邮箱收件箱中且能够通过身份验证机制(SPF/DKIM/DMARC),并且邮件的发件人域名隶属于Tranco域名列表中的 Top 10000域名,才会计入得分。
3.1 初期邮件伪造构思
在刚拿到题目要求的时候,我们首先考虑的就是尝试邮件伪造,对于SPF协议和 DKIM 协议,我们很容易就可以想到通过中转并篡改FROM Header的思路来让邮件通过这两个校验。一开始的思路是借助未做严格限制的SMTP服务来进行中转, 我们找到了163 邮箱和88完美邮箱均符合该要求,这两个邮箱提供 SMTP 中转服务时,没有做Sender字段与From字段的校验,我们可以修改From头,将其修改为我们想伪造的域名,并发送SMTP请求,脚本如下图所示。
图 3: smtp中转伪造
最终收件箱中会收到这样一封邮件,如下图所示,邮件的发件人显示的是From 头设置 的发件人,然后会跟随一个代发提示,显示 Sender 字段指向的邮箱。
图 4: 邮件中转伪造效果
查看邮件原文可以发现,SPF校验和DKIM校验均显示通过,但是在 Authentication- Results 中还记录了通过的域,该域与From头不匹配因此 DMARC的校验不会通过。

图 5: 中转伪造邮件原文
后续由于考虑到大量发包可能会受到这些SMTP服务商的风控,我们又尝试魔改 USS20 的邮件伪造论文中给出的邮件伪造工具Espoofer,来将自己伪装成一个 MTA来跟目标MTA直接交互,使用自己的域名, 配好SPF记录和DKIM记录,测试可以直接发送邮件到收件箱中,通过了SPF记录和DKIM 记录,如下图所示。


图 6: 工具伪造邮件原文

期间还挖到了题目用的这个 Coremail 的小漏洞,在mailfrom 字段设置空发件人,即 “<> ”这种格式,发出的报文中可以实现代发字段的隐藏。
到了比赛后五天,我们发现题目这种伪造邮件没法通过题目的checker,题目的校验不仅检查 FROM 头的域名,还会检查SPF和DKIM通过时对应的域名是否与FROM头对应,对应才会判断为通过SPF和DKI 检查。相当于自己又进行了一次 DMARC的校验。
3.2 SPF 错误配置利用

之后我们还想到了可能会存在部分域名配置了错误的SPF记录,如配置了“+all”这 样的规则,导致所有ip发出的包都可以通过SPF检查。所以我们写了一个脚本跑了一下,最终发现有三个域名存在错误的SPF配置,可以用我们魔改的Espoofer发包并通过SPF校验。

3.3 DKIM 重放攻击
我们在后几天的测试中发现,题目的checker并没有检查ToHeader必须是目标本身,也就是说像抄送和密送这种邮件也可以得分。那么我们就可以将发送给测试邮箱的邮件进行重放,通过魔改Espoofer发送给目标邮箱,对邮箱的信头和原文不做任何修改,这样邮件就可以通过DKIM的签名校验。这样虽然基本上只能通过 DKIM校验,但可以做到批量重复发包,保证较快的邮件投递速度,实际发出重放报文如下图所示。


图 8: DKIM 重放邮件报文

3.4 手工Fuzz滥用点
但是由于能够DKIM重放的邮件样本找起来比较消耗精力,并且得分期望较低,最后我们考虑部分采用手工Fuzz各域名发送邮件功能的方式来实现目标。根据题干给出的域名得分系数,我们针对Tranco域名列表的前1000个域名进行人工功能测试,最终得到了约200个可用域名,其可利用功能点包括SMTP服务、注册页面邮箱验证、注册后用户配置处邮箱校验、登录页面重置功能、资讯获取这5种大类功能。这些大类功能下各页面的细分实现逻辑不一致,需要根据实际情况达成发送十封邮件的目标。
未来可以考虑采用selenium库等无头浏览器对这一任务做自动化功能发掘,目前已有研究人员在自动化页面登录、自动化短信轰炸等方向有所尝试,我们认为本题的正确解题思路可能是这个方向。
4
总结 
4.1 比赛总结
在本次DataCon比赛的邮件安全赛道中,我们不仅对钓鱼邮件的特征进行了细致的梳理,增进了对钓鱼邮件识别任务的认识;还通过深入探索邮件的身份验证机制,找到了一些现实中邮件服务供应商可能被滥用的功能点。
就第一道题而言,我们针对识别任务提出了四种类型的强特征,分别包括内容关键词、url链接、附件及内联图片。这四种类型的特征组合可以在本次比赛的题目上达成各分类90%左右的识别准确率,但是在现实生活中这样的算法仍然是一个不太成熟的算法,也就是说低漏检率和低误报率是未来的优化目标。此外,真实世界中的正常邮件样本和钓鱼邮件样本数量差异可能较为悬殊,本次比赛已经将相关样本的分布调整为接近一致,从而降低了识别难度,处理少样本任务也是未来可以精进的方向。
针对第二题,我们探索出了三种绕过身份校验机制的方式并完成自动化利用,第一种方式能够绕过SPF及DKIM身份验证机制的校验,第二种方式能够绕过SPF及 DMARC身份验证机制的校验,第三种方式能够至少绕过DKIM身份验证机制的校验。我们发现邮件安全方面的工作的确有前人做了大量的努力和建设,但目前仍存在不少能够影响服务供应商和用户体验的安全问题。
4.2 竞赛感悟
经过10 天的鏖战,线下赛终于落下了帷幕,这10 天里分数起起落落,心情也跟着 起起落落。一开始我们感觉提前写好了第二题的Espoofer利用脚本,应该会相比很多队伍有些优势,再加上第一题暂列第一,感觉赢面较大。然而到了第六天发现写好的脚本过不了checker,第一题也被大佬们超了过去,感受到了巨大的压力。不过我们很快调整好了心情, 开始双线程推进第一题和第二题, 渐渐地找到了第二题的一些绕过思路, 也在疯狂加班后迭代出了第一题的一版成熟的规则, 最终打到了第一。就这样度过了大家一起战斗、共同经历喜悦与悲伤的两周,很难忘也学到了许多,祝 Datacon 越办越好!

【推荐阅读】


文章来源: https://mp.weixin.qq.com/s?__biz=MzU5Njg1NzMyNw==&mid=2247487722&idx=1&sn=131a01e88b9b43405ecc860bc78dfcb2&chksm=fe5d086ac92a817ccfcfa7273b03c36b9aefcf948da97e73b712c7839c304d8c2c555b05ab1b&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh