今天分享的论文主题是围绕Windows代码签名证书的撤销有效性进行大规模测量研究,主要由美国马里兰大学的研究人员完成。根据测量结果,该论文发现目前的代码签名证书撤销过程存在严重的安全问题,致使签名的恶意软件在证书撤销后仍有可能被客户端信任。作者收集了大量代码签名证书与证书撤销相关信息的数据集,首次对代码签名证书撤销过程进行端到端的测量,并分析了撤销过程中存在的安全威胁。论文发表于国际网络安全顶级学术会议 USENIX Security"18(录取率:19.1%)。
01【研究背景】
代码签名公钥基础设施(Public key infrastructure, PKI)是验证软件发布者真实性与二进制可执行文件完整性的安全机制,建立该信任机制的前提是签名私钥不受恶意攻击者控制。然而,安全研究人员发现了大量为恶意软件与潜在垃圾程序(Potentially Unwanted Program,PUP)进行签名的真实案例,而这些证书也被终端系统所信任[1]。但是,这些受信任证书的私钥可能已被泄露,或者直接颁发给恶意软件的作者,给代码签名证书生态体系造成了极大的安全威胁[2] 。安全社区认为,抵御这种安全威胁的主要防御措施是撤销滥用的代码签名证书。
代码签名PKI与传统Web PKI存在一些区别。首先,由于受到可信时间戳 (Time-Stamping Authority, TSA)机制的影响,即使证书已经过期,滥用证书造成的安全威胁仍然存在。这也意味着签发与管理证书的证书授权厂商 (Certificate Authority, CA)需要无限期维护证书撤销列表或提供撤销查询服务。其次,针对Web PKI,可以通过网络扫描的方式发现滥用证书。然而,代码签名证书的分布式且封闭的特性使测量工作极为困难。具体来说,在代码签名PKI中发现滥用证书,需要在遍布世界各地的终端主机上发现签名的恶意软件或PUP样本。
图表 1:证书撤销时间线示意图
图表1展示了撤销过程中的几个重要时间点:ti~te代表证书有效期范围,tb与tm分别代表良性软件和恶意软件的签名时间,tr代表CA设置的有效撤销时间,td代表滥用证书被检测到的时间,tp代表撤销信息发布的时间。完整的证书撤销过程主要包括三个步骤,如图表2所示:(1)首先,发现滥用的证书;(2)随后,有效撤销滥用证书;(3)最后,传播证书撤销信息至客户端。
由图表1可知,即便发现了滥用证书,设置合适的证书撤销时间也极具挑战。因为硬撤销(ti=tr)可能导致大量良性软件的签名失效,而软撤销(ti<tr≤te)可能不能涵盖未发现的签名恶意软件。此外,CA还必须妥善维护其撤销基础设施,以便将撤销信息传播给客户端,否则也会破坏证书撤销的有效性。
图表 2:撤销过程的三个步骤
为了深入分析与了解代码签名PKI中的证书撤销问题,该论文首次通过端到端的测量,评估了滥用证书从发现到传播撤销信息过程的证书撤销有效性,并分析了错误的撤销实践造成的安全威胁,根据测量分析提出相关防御建议。
02【数据收集】
作者首先收集了恶意软件中的滥用证书,其次通过证书本身字段值、监测CRL和OCSP的证书撤销信息以及分析安全公司提供的附加信息等,得到了撤销流程中几个重要时间节点的信息,以实现对证书撤销的端到端测量。下面介绍了数据收集的主要来源和数据类型。
1. 代码签名证书与撤销信息
该论文收集的基础数据包括代码签名证书与撤销相关信息。目前没有公开的大型代码签名数据集,因此作者从不同的数据来源进行数据收集,图表3显示了主要的数据来源。在收集到的145,582张叶子证书中,作者发现94.1%的证书同时包含CRL与OCSP,5.3%的证书只包含CRL,0.06%的证书只包含OCSP。最终去除非有效数据与重复数据,确定了215个CRL列表与131个OCSP站点作为论文的观察对象。
图表 3:基础数据集的主要数据来源
2. 撤销信息发布的时间列表数据
论文可以从CRL中包含的撤销时间收集有效撤销时间(tr),但撤销信息发布时间(tp)无法直接获取。因此,作者设计并实现了“撤销信息发布时间的收集系统”。从215个CRL中,作者观察到在2017年4月16日至2017年9月10日期间向CRL添加了2,617个唯一的证书。
3. 二进制样本信息数据
作者从3个数据集中收集有关已签名二进制文件的信息:WINE、Symantec 与VirusTotal。
从WINE数据集中提取以下信息:文件的SHA256哈希值、服务器端时间戳以及从代码签名证书中提取的发布者与CA的名称;
从Symantec数据集中提取以下信息:签名证书的序列号、二进制样本的SHA256哈希值、二进制样本首次出现的时间戳;
从VirusTotal数据集中提取以下信息:二进制样本的证书签名日期、检测到该样本为恶意样本的AV(Anti-Virus)引擎数量,以及首次向VirusTotal提交该二进制样本的时间戳。
4. CRL与OCSP的可达性历史数据
对于从证书数据集中收集的CRL列表,作者从2017年8月10日到2017年9月10日每天检查CRL的可达性。针对OCSP信息,作者开发了一个OCSP可达性检查器,每30分钟测试一次从4个数据集中发现的每个OCSP的可达性。
基于论文收集的数据集,作者从代码签名证书撤销的三个过程出发,深入分析证书撤销的过程。
03【滥用证书发现】
标记重捕法:估计滥用证书数量
为了评估滥用证书的数量,作者设计了如图表4所示的基于标记重捕法的评估方法。其中,N是滥用证书数量的估计值,n1和n2分别是来自Symantec和VirusTotal的滥用证书数量的观测值,p是两个数据集中滥用证书重合的部分。图表5显示了根据标记重捕法估计的结果:(a)显示了滥用证书数量的趋势,滥用证书数量的估计值约为实际观测值的2.74倍;(b)显示估计值占近期被撤销证书数量的95.1%。
图表 4:标记重捕法公式
图表 5:标记重捕法估计结果
分析证书的撤销延迟
根据图表1所示,证书撤销的延迟为tp-td。其中撤销发布时间tp可由“撤销信息发布时间收集系统”获取,滥用证书发现时间td为VirusTotal首次观测到滥用证书签名的恶意样本时间。作者发现,证书撤销延迟从1天到1553天不等。图表6显示了撤销延迟时间的累积分布情况,其中平均延迟为171.4天(5.6个月,标准为324.9天,中位数为38天)。
图表 6:撤销延迟测量结果
04【有效撤销滥用证书分析】
作者发现,82.8%被撤销的证书采用软撤销,只有17.2%的证书执行硬撤销策略。图表7展示了采取软撤销和硬撤销数量的趋势。
图表 7:有效撤销日期设置趋势
如图表8所示,大多数CA在撤销证书时同时应用硬撤销与软撤销。除了Wosign外,其他CA采用软撤销比硬撤销更为常见。特别是Startcom在论文的观察中从未执行过硬撤销。有趣的是,作者发现GoDaddy、Verisign与Digicert这三个CA厂商将有效撤销日期设置在其证书颁发日期之前。
图表 8:前10名CA的有效撤销日期设置策略
对于标记的恶意软件样本,作者提取签名日期tm。如果签名恶意软件的签名日期早于有效撤销时间,即tm<tr,那么论文将这种情况认定为有效撤销日期设置错误,该软件仍然可被客户端信任。作者发现5.3%恶意样本的滥用证书被设置了无效的撤销时间。图表9显示了证书的有效撤销日期(tr)与已签名恶意软件的最旧签名日期(tm)之间的差异,其中最短相差1天,最长相差1019天(2.8年)。
图表 9:撤销时间设置错误情况
05【传播撤销信息至客户端】
Windows中的执行情况
Windows将使用已撤销证书签名的二进制样本视为未签名样本,并在安全警告消息中显示“未知发布者”。但Windows也采用了软故障策略,除非明确发现证书撤销,对于未知和意外的情况予以放行。因此,在某些情况下,即使撤销信息传播中存在一些问题,Windows也可能允许客户端在没有收到安全警告消息的情况下执行具有撤销证书的二进制文件。
撤销信息不可用
如图表10所示,除了有效撤销时间设置错误外,很多CA还存在撤销信息不可用的问题。比如,部分证书既不包含CRL也不包含OCSP、部分证书的CRL和OCSP站点不可达。这些都导致客户端无从得知证书撤销状态。
图表 10:前10名CA中撤销信息发布存在的问题
CRL与OCSP管理不善
如图表10所示,部分CA还存在CRL与OCSP管理不善的问题,包括:
1. 不再更新CRL。在215个CRL中,作者发现57个已经不再更新;
2. CRL中存在临时证书,即作者发现某证书添加至CRL后又被删除的情况;
3. CRL与OCSP响应不一致。作者发现了19张证书存在CRL与OCSP响应不一致的现象;
4. 来自OCSP的未知或未经授权的响应。CA对自己颁发证书的撤销状态未知,或客户端收到无权访问OCSP的应答。
这些都表明CA在证书撤销基础设施维护方面存在缺陷和失误。
06【总结】
该论文的测量结果表明,当前代码签名证书撤销的各个环节都存在障碍和缺陷,证书撤销有效性面临极大的安全风险。首先,在代码签名PKI中发现被滥用的证书是极具挑战的,而从发现到撤销该证书又存在较大的延迟。同时,设置无效的撤销日期也会使削减对恶意软件的防御能力。最后,撤销信息维护不当也会使整个撤销过程无效化。
根据测量分析结果,作者提出了若干针对性建议,包括:(1)建立类似证书透明度(Certificate Transparency, CT)的机制,这有助于CA设置正确的有效撤销时间;(2)各个CA厂商要维护好证书撤销基础设施,以更好地传播撤销信息;(3)建议Windows采用更保守的撤销检查策略,比如当发现证书CRL与OCSP响应不一致时及时作出安全防御措施。这些建议将有助于完善代码签名证书撤销流程,保证证书撤销的有效性。
原文链接
https://obj.umiacs.umd.edu/usenix_papers/Broken_Shield.pdf
开源数据
http://users.umiacs.umd.edu/~tdumitra/signedmalware/usenix18/usenix18.html
参考文献
[1] ALRAWI, O., AND MOHAISEN, A. Chains of distrust: Towards understanding certificates used for signing malicious applications. In Proceedings of the 25th International Conference Companion on World Wide Web (Republic and Canton of Geneva, Switzerland, 2016), WWW ’16 Companion, International World Wide Web Conferences Steering Committee, pp. 451–456.
[2] KIM, D., KWON, B. J., AND DUMITRA , S, T. Certified malware: Measuring breaches of trust in the windows code-signing pki. In Proceedings of the 2017 ACM SIGSAC Conference on Computer and Communications Security (2017), CCS ’17.
赵汉卿,编辑&审校 | 刘明烜
声明:本文来自NISL实验室,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。