【InForSec2023 年会论坛回顾】王楚涵:针对邮件安全扩展协议DKIM的大规模测量与安全性分析

2023年4月8日~9日,由InForSec、南方科技大学斯发基斯可信自主系统研究院、清华大学网络科学与网络空间研究院、复旦大学软件学院系统软件与安全实验室、国科学院计算技术研究所处理器芯片全国重点实验室、中国科学院软件研究所可信计算与信息保障实验室、中国科学院大学国家计算机网络入侵防范中心、浙江大学NESA Lab、山东大学网络空间安全学院、百度安全、奇安信集团、蚂蚁集团、阿里安全等单位联合主办的“InForSec 2023年网络空间安全国际学术研究成果分享及青年学者论坛”在南方科技大学成功召开。来自清华大学、复旦大学、浙江大学、北京邮电大学、中国科学院大学等66所高校及科研院所的230余人现场出席会议,900余人通过视频会议系统及直播系统参与了本次论坛。

我们将对会议精彩报告进行内容回顾,本文分享的是清华大学网络与系统安全实验室博士研究生王楚涵的报告——《针对邮件安全扩展协议DKIM的大规模测量与安全性分析》。

王楚涵博士首先介绍了电子邮件服务在现今互联网中的重要角色。电子邮件服务是互联网上最古老的应用之一,1982年,简单邮件传输协议SMTP协议首次作为互联网标准被写进了 RFC 文档。此后,SMTP协议作为邮件传输的基础协议已经被使用并发展了40余年。随着互联网的普及,电子邮件已经成为现代人生活和工作中最常用的通信工具之一,并被广泛用于学术交流和商业合作中。此外,由于邮件服务的通用性,大量的互联网应用依赖于电子邮件的账号进行注册,电子邮件服务成为互联网上唯一具有ID属性的基础设施。

正因为邮件服务的重要地位,其一直以来都是攻击者的重要攻击目标。这些年来,基于电子邮件服务发起的钓鱼攻击、病毒和木马攻击一直层出不穷,危害严重。在2016年希拉里邮件门事件。攻击者以一封伪造邮件骗取了希拉里竞选团队主席的信任,成功窃取了上千封机密邮件。这次事件直接影响了美国大选的结果,一定程度改变了人类历史的走向。

王博士介绍到造成邮件攻击横行的一个重要原因就是作为邮件传输的基础协议SMTP协议在设计之初并没有身份验证机制,默认情况下,攻击者可以伪装成任意其他人的身份来发送伪造邮件。为了抵御邮件伪造的攻击,近年来技术社区相继提出了多种邮件安全扩展协议。其中以SPF、DKIM、DMARC为主的邮件身份认证协议,从发送方IP、数据签名、身份标识符三个维度实现了邮件发信人验证过程,得到了主流邮件厂商的广泛支持。

随后王博士针对DKIM协议进行了展开介绍,DKIM是一个基于数字签名的电子邮件认证协议。它旨在防止电子邮件在传输过程中被伪造或篡改,于2008年被提出并标准化,至今已经被雅虎、谷歌和其他主流的邮件服务提供商广泛采用。DKIM签名是基于哈希算法和非对称加密算法(RSA)生成的。DKIM的公钥被部署在一个域名上,格式如下图中所示,selector是一个由域名所有者指定的随机字符串,example.com代表一个真实的域名。

紧接着王博士对DKIM协议的工作流程进行了详细介绍。首先,发送方需要部署DKIM协议,即使用非对称加密算法生成一个密钥对,并把DKIM记录(主要是DKIM的公钥信息)部署在一个指定域名(._domainkey.)的DNS服务器上。.接下来,当发送方发送邮件时,会给发送出的邮件计算一个DKIM签名,计算的内容包括邮件头、邮件正文还有DKIM-Signature自身;最后,当接收方收到一份含有DKIM签名的邮件后,会先访问发送方相应域名的DNS服务器,提取DKIM公钥记录,并对邮件正文还有邮件全文计算hash值,利用公钥来验证DKIM签名的正确性。

但是,王博士指出DKIM作为一个已经被提出10多年的重要的邮件安全协议,学术界却一直没有相关的测量研究,DKIM协议的部署现状和潜在的安全风险一直不为人知。在CCS2015、USENIX2018的两篇论文中,对另两款邮件安全协议(SPF、DMARC)的部署进行了大规模的测量,但是却缺少DKIM的相关信息。这主要是因为DKIM的协议特性导致其很难被大规模测量。技术社区至今不知道在现实网络中DKIM部署现状以及DKIM部署中潜在的安全风险。

获取DKIM信息主要有两种途径,一种是DKIM Records,另一种是DKIM Signatures。DKIM Records部署在指定的域名,因为selector是随机指定的,很难进行大规模测量。DKIM签名,只存在邮件的头部。因为用户隐私等原因也很难大规模获取。王博士介绍道,虽然直接获取相关的数据比较困难,但是这些数据依旧可以通过一些方式来间接获取,因为DKIM Records会被部署在DNS服务器上,那么我们通过Passive DNS数据集来被动收集到相关的数据。虽然完整的邮件头部可能包含很多的敏感信息,但是DKIM签名自身是不包含隐私数据的,所以他们通过主动与相应的企业建立合作,即和Coremail公司合作获得了大量的邮件服务器日志,并由此获得了DKIM签名数据。最终他们通过被动收集得到的数据集,包含500多万的独立域名和200多万的selector数据。

王博士指出他们的研究通过结合被动分析和主动扫描的方法,对DKIM的部署现状进行了首次大规模和长期的测量研究。随后,王博士介绍了他们整个数据和分析流程,主要分为三个部分,分别是数据收集、数据处理和数据分析。

王博士介绍了数据收集阶段主要通过和工业界的合作伙伴合作获取了海量的原始数据。从Passive DNS中提取了近五年的DKIM Records数据,另一方面,通过和Coremail合作,收集了六个月的邮件服务器日志,主要为邮件的DKIM Signatures数据。获取了这些数据后,王博士他们会对原始数据进行清洗、聚合、去重等一系列操作。通过对被动收集的数据进行分析,他们发现有非常多常用的selector,例如mail、default、dkim,这些selector会被很多域名所使用。基于这个发现,我们在Top 1w的小数据集上进行了验证,使用不同规模的常用的selector 对top 1w域名进行了扫描测试了,并观察发现到的DKIM记录情况。结果发现当selector数量超过40的时候新发现的DKIM域名的增速开始放缓。最后,利用从被动收集中获得的Top 40的selector对Alexa Top 1M的域名进行了大规模的扫描。

随后,他们结合主动扫描和被动收集共同获取到的DKIM数据,对结果进行了四个维度的分析。包括 DKIM部署率分析、语法分析、密钥管理分析还有DKIM签名实现的安全分析。在部署率方面,实验结果表明在Alexa Top 1M域名中有接近30%的域名部署了DKIM部署。同时他们也对全部的DKIM记录进行了语法分析,发现其中有2.9%的记录存在语法错误。此外,DKIM部署率在不同的顶级域名中差异很大:在测试的通用顶级域名(gTLDs)中,.edu域名部署率(71.3%)最高,而在国家代码顶级域名(ccTLDs)中,最高的部署率(58.6%)来自.au(澳大利亚)域名。

在密钥管理方面,王博士他们发现DKIM的密钥管理普遍存在安全缺陷,包括共享DKIM密钥(66.9%)、弱DKIM密钥(84%)、长期(超过5年)未轮换DKIM密钥(8.4%)等。

首先是大量的域名存在密钥生命周期过长的问题。DKIM的RFC建议应该定期更换DKIM密钥来降低密钥泄漏的风险。有相关组织建议,DKIM密钥应该一年轮换2次来降低安全风险。但是,很少有域名遵守这一实践。下图显示了对于Alexa top 100的域名进行的分析,黄色代表着5年没有更换的密钥,结果发现在Alexa Top 100域名中有68.5%的域名存在过去五年没有更新过的密钥的情况。此外,他们在PassiveDNS数据中还发现有8%的域名在5年内没有更换过它的密钥。因为PassiveDNS数据记录的时间并不能完全代表DKIM key的生命周期,只是对应生命周期的一个下界,所以实际情况可能会更严重。

其次是弱密钥的使用,早在2010年美国NIST就已经建议不要任何需要使用RSA加密的地方使用小于等于1024位的密钥,同样在RFC8301中明确要求建议使用至少为2048位的DKIM密钥。但是这个问题至今仍然没有得到很好的解决,王博士的研究结果显示在他们的数据集中至今依然有84%的域名使用小于等于1024位的密钥。他们进一步分析了每年新增加的DKIM密钥的长度。可以看到,1024比特的DKIM密钥仍然是当前实践中的主流。长度不超过512比特的密钥的比例正在下降,而2048比特的密钥的比例正在逐步上升。结果表明,邮件管理员在更新DKIM配置时倾向于使用更安全的密钥,但推进过程非常缓慢。

第三个是广泛存在的共享密钥问题。对Passive DNS的数据研究发现,其中存在着大量相同的公钥记录。研究通过按DKIM密钥(公钥)对域名进行聚类发现,有61,062个DKIM密钥被一个以上的域共享,本项研究共发现2,427,682个(66.9%)域名使用了共享DKIM密钥。下表显示了共享DKIM密钥的前10个域名簇。排名第一的DKIM密钥被超过289120个域名共享,该密钥也用于谷歌的电子邮件服务。

在DKIM的签名实现中,王博士发现同样存在一系列的问题。在DKIM的RFC6376中只明确要求了From字段一定要备签名,但是一封邮件往往包含的头部非常的多,From、to、subject等等。那么这就引入了一个新的问题,究竟应该对哪些头字段签名呢?但是协议对一方面描述得比较模糊,RFC只提供了一个基本的准则,那就是DKIM签名需要对邮件信息的核心内容进行保护。因为缺少协议的规范,现实世界对于邮件头字段的保护往往参差不齐,取决于邮件管理员对于邮件安全的认识。他们统计了数据集中所有的DKIM签名,下面的表展示了被高频签名的top 10字段,但可以看出实际实现中并没有达成一个共识,签名比例下降得非常快,排名第10的reply-to字段就已经只有10%的签名比例了。

为了防止添加重复的头域,DKIM的设计者提出了一种Oversigning的方法,这意味着一个头的名称应该在 “h=”标签中出现次数应该多于其在电子邮件中的该头的实际数量。超额签名机制有助于保护用户免受使用多个邮件头的邮件欺骗攻击。王博士他们测量了有多少域名使用超额签名来保护自己免受多重头信息攻击。遗憾的是,结果发现在他们的DKIM签名数据集中只有2.2%的域名使用了超额签名机制。

此外,在DKIM records中,“l=” 标记用于限制邮件体的长度,该长度应该由DKIM签名计算而来,但是王博士发现通过滥用该标记可以实现在不破坏DKIM签名的情况下向用户展示欺诈内容,实验发现有0.3%的域名仍然在DKIM签名中使用该标记,其中1273个域名属于Alexa前一百万域名。

王博士他们负责任地将发现的所有漏洞报告给相关的电子邮件管理员。4个电子邮件供应商和24个相关的电子邮件管理员已经承认他们的报告。他们还根据测量和分析脚本,开发了一个用于DKIM部署的在线工具。这个工具可以帮助电子邮件管理员检查和部署他们的DKIM记录,进一步改善DKIM部署的现状。

最后,王博士对DKIM协议的设计提出了两点建议。

演讲者简介

王楚涵,清华大学网络与系统安全实验室博士研究生,研究方向为网络安全、数据驱动安全,导师为段海新教授与陈建军助理教授。曾在网络安全顶级学术会议USENIX Security上发表多篇论文。目前主要从事电子邮件相关安全研究,研究成果帮助Google,Apple,Yandex 等知名互联网公司修复了漏洞。同时作为清华大学CTF战队Redbud队员,曾获得2020年ByteCTF冠军等奖项。

Bookmark the permalink.

Comments are closed.