这就是我们不能拥有美好事物的原因……
通常,证书机构和数字证书行业中最常见的一种观点是“永远不要让私有密钥出现问题。”不幸的是,只是说‘不好的事情可能会发生’有点含糊不清,而且缺乏力量。因此,以下这个来自于现实世界的一个真实的例子,可以对每个人起到警醒作用。
研究人员已经发现了一个恶意软件家族,该家族曾经盗用了多家台湾科技公司的凭证——其中包括生产网络设备的跨国企业D-Link——然后使用它来对其本身进行签名。
网络犯罪分子是如何偷盗私有密钥的目前还不知道,我们所知道的是,犯罪分子会用这些盗取的密钥来签名恶意软件。
对恶意软件进行签名会发生什么情况?
在我们开始介绍对恶意的东西进行签名会发生什么之前,让我们先来讨论一下代码签名。当下,代码签名是一个标准惯例,在其中,软件开发人员会经受可靠证书机构的验证,并接收可用于对脚本和可执行文档进行签名的证书和私有密钥。
现在,我们还有一点东西需要进行阐释,但最简单的阐释方式可能是,探讨一下如果你一开始没有对代码进行签名,情况会是怎样。几乎所有的设备、OS和web浏览器都进行过硬编码,以让人们信任尽可能少的资源。这完全是以安全的名义而进行的。如果你编写了一款软件,然后把它上传到网络上,但没有对其进行签名,那么这就会触发浏览器发出警告信息,让那些试图下载该软件的人引起注意。这个警告会说这个下载来自未知的来源,它的内容是不可信的。
这太好了。浏览器就应该这么处理未知来源的下载。现在,当你对软件进行签名时,你所在做的是,使用与代码签名证书相关的私有密钥来添加数字签名。浏览器不会信任你或你本身,但如果它们能将你的数字签名链回到可信的根,也就是来自于这些可信CA的证书,它们就会信任你,因为通过向你签发证书,CA能够为你提供担保。
这个解释可能有点复杂,因此让我换一种方式来说吧。当你对事物进行了恰当的签名后,浏览器就能追溯到它所信任的证书,该证书反过来又会给予你信任。
正如我之前所说,代码签名受到了广泛预期。你需要用它来从Apple和Android的app商店获取不同的app,你需要用它来让所有主要的浏览器都能下载你的软件。你完全没有办法避开它。而且为了尽可能地让这一做法变得安全,在签发之前还有一个验证流程,该流程旨在将游手好闲的人和网络犯罪分子清除在外。
如果要把所有这些归结为最简单的术语,那就是:只有受信任的开发人员才能对代码进行签名,因为数字签名能够立即授予信任。
你大概已经知道其中的工作原理了。
当私有密钥被盗后,数字签名就会被应用于恶意软件,该恶意软件之后就会骗取通常会对下载进行扫描的浏览器过滤器和反病毒程序的信任。现在,这些浏览器会认为该脚本或可执行文档来自受到信任的D-Link,而不是来自未知的来源。这是一个令人难以置信的有效的攻击途径。
被盗取的私有密钥对什么进行了签名?
正如The Hacker News所阐述的,被盗取的密钥对两类恶意软件进行了签名:
“近来,来自ESET的安全研究人员发现了两大恶意软件家族,它们在之前与网络间谍集团BlackTech有关联。这两大恶意软件家族一直就在使用一些有效的数字签名证书来对自身进行签名,而这些证书是隶属于D-Link网络设备制造商和另一家名为Changing Information Technology的台湾安全公司。”
第一类恶意软件名为Plead。六月,日本计算机安全事件响应团队(CSIRT)对Plead做了一个全面的分析。分析后发现,它是一个十分重要的后门,能够用来盗取信息和监视人员。第二类恶意软件是一个相关的密码窃取者,它的主要目标是:
Google Chrome
Microsoft Internet Explorer
Microsoft Outlook
Mozilla Firefox
研究人员向D-Link和Changing Information Technology公司告知了这一情况,并且两家公司也都在7月4日之前撤销了相关受损证书。
无论如何,Black Tech将会持续使用已被撤销的证书来签名恶意软件。这听起来可能有些愚蠢,但这个问题却暴露了许多不同的反病毒解决方案的缺陷:它们不会扫描这些代码签名证书的有效性。
就像文中随附的图片中的情形一样,应该发生的事情是,反病毒程序看到签署代码的证书被撤销之后,要么向用户发送一个通知,要么阻止下载。即使恶意软件是添加了时间戳的(顺便说一下,这也是最好的做法),系统也仍然应该发送一个通知,提示证书已经被撤销了。相反,许多反病毒程序根本不会检查有效性,是的,这意味着过期或被盗的证书仍然会构成相当大的威胁。
台湾科技公司成为这样的受害者甚至已经不是第一次了。2010年,Stuxnet蠕虫就使用了从RealTek和JMicron那里盗取来的证书来对自身进行了签名。
如何防止密钥被盗?
让我们回到文章开始的地方,你的私钥是至关重要的。密钥被盗会导致一连串的问题,不管它是用于SSL证书,代码签名,还是个人身份验证——这些都无关紧要。显然,其影响可能是灾难性的。我们希望这些已进行签名的恶意软件家族最终不会引起大的问题,但签署恶意软件——这将帮助它绕过反病毒程序和浏览器过滤器——始终是一个危险的命题。
因此,以下是我们能给你的最好的建议:
将私有密钥存储在外部硬件令牌上
现在,将密钥存储在物理硬件令牌上的这一想法主要应用于加密货币行业,该行业将其称为硬件钱包。对于不同种类的私有密钥存储,加密货币行业在某种程度上是一个有趣的测试用例,因为它就像令人讨厌的美国西部大陆,里面充斥着各类黑客和“蛇油”贩子,当看到有人失去其财富时,每个人都会竞相观望,感到唏嘘不已。
从层压纸钱包到把它雕刻在物理比特币的侧面,再到价格高昂的、处于“最前沿”的冷存储解决方案,加密货币社区(与加密社区不同)推出了一系列重要的存储解决方案。这些解决方案没有一个是新的。
最好的解决方案一直是,并且将持续是对密钥进行离线存储。如何做到这一点完全取决于你(有一些方法),但要记住要把它放在办公室的保险箱里,让它十分安全,或者放在其他一些别人不易窃取到的地方。
D-Link和Changing Information Technology公司之前如果这样做了,那么要想窃取其密钥就必须进行真正的盗窃或抢劫,而不是进行一些花哨的黑客行为。现在,谁又有时间去进行盗窃呢?