代码签名不是一个新概念,事实上,它从上世纪90年代末就已经存在了。简单说一下代码签名证书的工作原理,签名代码在软件周围创建了一个隐喻收缩包装,使其不受篡改。对签名代码的任何修改都将立即显现出来。此外,对代码的签名提供了真实性,并显示了谁签署了代码,以及他们何时签署了代码。这有助于建立软件在构建过程中的来源。
随着由硬件/软件和固件组成的越来越复杂的采购,确保系统中第三方代码的安全性和可靠性变得越来越困难。一种解决方案是要求软件材料清单(SBOM)与每个项目购买。此列表将进行数字签名以防止篡改,并将包含最终构建(自定义开发和开放源代码)中包含的所有代码的列表,以及自定义代码(或修改后的开放源代码)的历史记录。此历史记录将显示在构建周期中积累的所有数字签名,并将确保代码不被入侵者篡改。虽然代码签名并不阻止内部人员引入威胁,但它确实提供了一个源,可以用来追溯到插入威胁的时间点。
传统的代码签名涉及将私钥传递给所有开发人员,然后将私钥用于对代码进行签名。这种方法的问题是,在桌面上拥有多个私钥与多个开发人员坐在一起,可以让攻击者通过恶意软件获取这些密钥。这也使得无法确定哪个开发人员签署了代码。
解决方案是使用基于云的代码签名服务,它允许服务对代码(或哈希)的上传进行签名并返回给开发人员。使用服务的好处是多方面的,但总之,服务可以集中保护密钥,跟踪谁上传了要签名的代码(通过双因素身份验证),与现有的开发平台集成,并允许用唯一的密钥对代码进行签名。所有这些好处对于开发人员和使用代码签名的组织都是有价值的。
在最近对公共服务中使用的软件进行了高调攻击之后,确保了在公共服务中使用的软件代码的安全性。