代码签名就是软件发布者使用全球可信的证书颁发机构CA颁发的代码签名证书对软件代码进行签名,由此来验证软件开发者的真实身份,确保软件代码的完整性和可信任性。然而,攻击者一直试图渗透代码签名,意将恶意软件嵌入可信代码中。由此,为了降低被攻破的风险,本文将介绍8大代码签名最佳实践。
1、安全密钥存储
如果用于签名的私钥被泄露或从组织窃取,它就会被用来对嵌入恶意软件的软件进行签名,这样发布的软件就会被注册为源自该组织的合法软件。由此,私钥应存储在硬件安全模块(HSM)进行保护中,或在静态时加密。根据 CA/Browser (CA/B) 论坛的要求,用于公共信任的密钥必须存储在 HSM 中。
2、执行密钥和签名访问控制
设置策略并执行密钥访问控制,确保只有经过授权的开发人员和用户才能在需要时使用特定密钥签名。在云中生成密钥,以免密钥被共享、丢失或窃取。实施职责分离,即把生成密钥的人和签名的人的职责分开。实施多因素身份验证(MFA),确保访问签名的人确实是本人。取消已离职人员或不再需要访问签名或生成密钥的人员的访问权限。
3、监控和审核密钥签名工作流程
跟踪什么人在什么时间签署了什么,以便对未经授权的签署做出快速反应,并采取适当的补救措施。定期审核与密钥对相关的所有操作,包括生成、证书操作以及分配密钥和签名行动。
比如采用统一数字证书管理系统UCM,申请、管理、部署数字证书,并对包含代码签名证书在内的所有数字证书定期扫描、监控和检测,给予预警通知。
4、与时俱进,在全公司范围内执行加密标准政策
为了帮助企业在威胁形势中保持领先,行业要求会与时俱进。CA/B论坛的规定要求,自2021年6月1日起,公众信任的代码签名和时间戳证书的最低密钥要求为3072位RSA。组织内的开发人员和用户在生成密钥或签署代码时可能不会意识到这些变化,而企业必须执行行业要求,防止用户使用弱算法或不符合要求的算法、密钥大小或曲线生成密钥或申请证书。
5、在 SDLC 流程中启用自动代码签名
在 SDLC 流程(如 CI/CD 管道)中集成签名并实现签名自动化,从而降低未签名代码或签名不合规的风险。可以设置安全控制自动化,在持续、快速的软件开发过程中构建安全、合规的软件。
6、比较来自不同构建服务器的签名:
在发布之前,对来自不同构建服务器的软件哈希值进行签名和比较,以确定服务器构建之间是否存在任何差异。两个或更多相同构建的法定数量可确保构建中没有包含未知代码,构建是安全的。
7、撤销受损代码签名证书
如果发现密钥泄露或签名了恶意软件,请向证书颁发机构(CA)报告,需要撤销代码签名证书,以使软件失效从而阻止恶意软件进一步传播。
8、为已签名的代码打上时间戳
为已签名的代码打上时间戳,避免代码签名证书过期时软件意外失效的风险。代码签名证书的有效期一般为1~3 年,代码签名证书过期后,已签名软件的有效性也将过期,除非软件在签名时有时间戳。系统会记录时间戳,只要软件还在生产中,就会继续有效。
给代码打上时间戳的另一个原因是尽量减少证书吊销的影响。一旦发现恶意软件,相关证书必须被吊销,而时间戳会将影响降到最低,因为吊销只会影响到吊销日期之后发布的软件。