最近, 360 安全卫士连续发表了两篇文章:《国内首现有“身份证”的木马“执照凶手” 9 天感染百万用户》和《木马也办 “ 身份证 ” 数字签名面临信任危机》,此文几乎在所有网站都都有转载,闹得沸沸扬扬。WoSign( 沃通 ) 在得到 360 举报后及时采取了行动:向有关单位提供了证书申请单位详细信息,并及时吊销已经数字签名恶意软件的代码签名证书,并修改吊销列表,使得使用此代码签名证书签名的所有数字签名都失效,从而确保了恶意软件不能假借数字签名而祸害用户。
从此事件可以看出两点:其一:作为一个专业杀毒服务提供商,必须加强软件数字签名的常识和了解软件数字签名的作用;其二:相信大家能从此事件中能看出对软件进行数字签名的威力,只要软件有数字签名,就可以非常容易地让有关部门 ( 包括杀毒软件公司 ) 识别出软件签名单位名称,并第一时间联系证书拥有者和证书颁发机构,证书颁发机构就可以采取有效措施 ( 吊销证书,并按照有关规定提供证书申请单位信息 ) ,这样就可以使得数字签名永远失效,并可以非常容易地让有关部门和机构追究造毒者的法律责任。而对于没有数字签名的软件,即使杀毒软件发现有毒,也无法找到造毒者而无法采取相关的有效遏制行动。从这点来看,我们都应该倡导所有软件都必须进行数字签名,只有这样才能从根本上遏制病毒和恶意软件。
而对于软件使用者,为了保护您的电脑安全,请一定不能安装没有数字签名的软件,以免中毒。而一旦发现有数字签名的软件是恶意软件就应该马上向其证书颁发机构举报,以便相关部门及时采取行动防止恶意软件的传播。本文将介绍有关软件数字签名的基本原理和基本常识。
一、 如何识别软件已经有数字签名
对于从网上下载的软件,建议您一定要先下载到电脑上,检查是否有数字签名后再安装,而不要下载完成后直接安装。
以 MSN 保护盾软件为例 (http://im.live.cn/safe/) 下载后,右键查看软件属性,就会看到有“数字签名”属性,如下图示,这就说明此软件是有数字签名的:

点击“数字签名”属性就能看到此软件的公司名称 ( 颁发给 ) 和证书颁发机构名称 ( 颁发者 ) ,如下图 2 、图 3 和图 4 所示,点击图 4 中的“颁发者说明”就能查看证书颁发机构是如何验证证书申请单位的身份的。请注意:为了保证代码签名证书过期后数字签名仍然有效,一般都会在数字签名时加上时间戳,证明此软件是什么时候签名的。

 
还有一种方式是 ActiveX 控件方式网页安装,如下图 5 所示,会提示您安装有关控件,能显示此提示就表明此控件已经有数字签名,否则浏览器直接拦截而不显示:

如下图 6 所示,点击安装就会显示此软件的名称和软件发行者名称,点击发行者名称就会显示数字签名信息(如图7所示),点击“查看证书”,如上图 3 所示就会显示证书信息,就可以看到证书颁发机构名称:

二、 软件数字签名的原理和签名时间戳的原理 下面以最常用的用于微软操作系统的微软代码签名证书为例,来讲解软件数字签名的原理和时间戳的原理。为了保证微软 Windows 系统的安全和用户安全,微软推出了 Microsoft Authenticode 技术,即微软认证码技术,此技术保证了只有使用了 Windows 的受信任的根证书颁发机构颁发的代码签名证书对软件代码数字签名后才允许在 Windows 上运行,从而保证了软件代码来自真实的发行者和保证软件代码没有被非法篡改。
(1) 软件数字签名原理
软件代码数字签名仍然采用 PKI 双钥技术,整个数字签名过程如图 8 所示:

软件开发商在自己电脑上生成私钥 (.pvk) 和证书请求文件 (CSR) 提交给证书颁发机构, 同时提交有关身份证明文件 ( 如营业执照和第三方证明文件等 ) 给证书颁发机构用于身份验证, 在完成身份验证后用自己的私钥给 CSR 文件签名后生成代码签名证书,也就是公钥 (.spc) 给软件开发商。这样就完成了证书的申请和颁发。
软件开发商用代码签名工具 ( 如: SignCode.exe) 给要签名的代码生成一个 Hash 表,再用其私钥加密 Hash 表产生认证摘要,接着就把认证摘要连同其公钥与软件代码一起打包生成签名后的新的软件代码,软件开发商就可以把已经签名的代码放到网上发行了。
最终用户从网上下载已经签名的代码时,浏览器会从签名代码中解读出其签名证书 ( 公钥 ) 和 Hash 表摘要,并与 Windows 的受信任的根证书相比较查验公钥证书的有效性和合法性,验证签名证书正确后,就可以确认此代码确实是来自真实的软件开发商。
接着,再使用签名时使用的同样算法对软件代码生成一个 Hash 表,并使用公钥也同样生成一个 Hash 表认证摘要,比较从代码中解包出来的 Hash 表认证摘要与生成的 Hash 表认证摘要是否一致,如果一致,则表明此代码在传输过程中未有任何修改,从而可以确认软件代码的一致性。
可见,软件代码签名后不仅保证了此软件的开发商的真实身份,而且还保证了代码的完整性,以免代码被病毒干扰和被非法篡改,一旦软件被篡改,而由于 Hash 摘要不一致而操作系统会显示数字签名无效。
(2) 时间戳的工作原理
考虑到软件的生命周期一般比代码签名证书的有效期长,所以,为了保证代码签名证书过期后的数字签名仍然有效,则需要在数字签名时加上一个权威的时间戳,来证明所签名的代码是在证书有效期内签名的。
时间戳服务就是将经过时间戳服务器签名的一个可信赖的日期和时间与特定电子数据绑定在一起,为服务器端和客户端应用提供可信的时间证明。 其工作原理示意图如图 9 所示:

时间戳服务工作流程:
◆ 用户对文件数据进行 Hash 摘要处理;
◆ 用户提出时间戳的请求, Hash 值被传递给时间戳服务器;
◆ 时间戳服务器对哈希值和一个日期 / 时间记录进行签名,生成时间戳;
◆ 时间戳数据和文件信息绑定后返还,用户进行下一步电子交易操作。
当您使用 WoSign 微软代码签名证书对电脑文件进行数字签名时,会提示您添加 WoSign 免费提供的时间戳 URL : http://timestamp.wosign.com/timestamp , WoSign 的时间戳服务器会反签名附上签名时间 ( 请注意:不是您的电脑时间,是 WoSign 时间戳服务器上的格林威治标准时间换算成您电脑设置的时区的当地时间 ) 。
由此可见:如上图 3 所示的签名时间是 2009 年 9 月 4 日 ,如果有人讲“我是 8 月 4 日 安装此软件的”,这显然是撒谎!因为时间戳证明,只能是 9 月 4 日 以后才有可能安装此软件。而360的第一篇文章称“ 最早出现在 12 月 17 日清晨 , 360 捕获木马样本后发现,该木马采用了数字签名 ”,请看该木马的签名截图,数字签名时间是 2009 年 12 月 24 日,此时间是有时间戳证明的。实际签名时间是 24 日, 360 怎么会在 17 日就截获有数字签名的的木马呢?

(3) 证书吊销列表原理
为了防止证书私钥被泄露或证书使用者违反证书使用规定,证书系统都有一个完整的证书吊销列表,证书颁发机构可以根据证书拥有者的申请或根据需要主动吊销某个证书。 Windows 在验证软件是否有数字签名会先查验此用于数字签名的证书是否已经被吊销,如果已经吊销,而被签名软件又没有使用时间戳,则此数字签名失效。而如果签名时已经使用时间戳,则即使证书已经吊销,此代码的数字签名仍然有效,但证书拥有者不能再使用此证书进行数字签名。这种情况下,只能由数字证书颁发机构人工处理修改吊销列表中有关参数,把吊销时间改为与颁发时间相同,这样,即使使用了时间戳,也会认为数字签名签名无效,因为时间戳一定在颁发时间之后。如下图 10 所示:

三、 如何举报有数字签名的恶意软件
从以上知识,您应该已经可以了解到如何查看证书拥有者名称和证书颁发者名称,如果您发现有恶意软件有数字签名,则可以向证书颁发机构举报,以下介绍国内市场使用最多的 WoSign 代码签名证书和 VeriSign 代码签名证书的如何举报。
WoSign 举报网址: https://www.wosign.com/support/code-signing-misuse.asp
VeriSign 举报网址: http://www.verisign.com/support/contact/code-signing-misuse/index.html
软件开发商可以使用 WoSign 代码签名证书数字签名其开发的软件,从而保证软件在发行过程中没有被篡改和损坏。当您看到某个软件使用了 WoSign 代码签名证书进行了数字签名, WoSign 能保证的是: WoSign 已经严格验证了证书使用者的真实身份。然而, WoSign 不会执行对该软件的任何审查和做出任何声明或保证有关该软件的质量。
用户在购买 WoSign 代码签名证书时已经签订合同同意“ 不得使用其购买的代码签名证书为间谍软件、流氓软件、黑客软件等恶意软件和盗版软件进行数字签名,也不得在违反国家有关法律法规的网站上使用,否则,一经用户举报和查实,乙方可以立刻吊销此证书,不但不退款,而且还会配合公安部门追究可能由此带来的一切法律责任 ”。
WoSign 会在收到您的举报后 1-3 个工作日内按照举报预案及时处理,并及时向举报人 / 单位回复处理结果。
|