本文来自微信公众号“数世咨询”,作者/茉泠。
01
实况报道
最近的新闻报道称,远程访问解决方案公司AnyDesk遭到了黑客的入侵。这也引发了业界对于代码签名实践以及软件供应链安全的关注与重视。
代码签名的用途在于为软件、固件或应用添加数字签名,以确保用户的代码来自可信源并且在上次签名后未被篡改。但代码签名的实际效用取决于其执行情况,不当的实践可能会导致恶意软件注入、代码和软件篡改以及冒充攻击。
虽说私钥的安全保护至关重要,但许多开发者出于便利性考虑,经常将其保存在本地电脑或构建服务器中来进行自行管理。这使得私钥更容易被盗用和误用,同时也给安全团队制造了盲点。
自2020年SolarWinds黑客攻击事件之后,证书颁发机构/浏览器论坛(CA/B Forum)发布了一套新的基线要求,用于维护代码签名证书,其中要求强制使用HSM(hardware security modules,硬件安全模块),以及专门用于保护和管理加密密钥的设备,并实施其他相关措施来保护私钥。
虽说HSM提供了最高级别的安全性,但同时也带来了更高的成本、更复杂的操作以及维护需求。除非它们能被集成到DevOps团队使用的代码签名工具中,否则这种脱节很可能会使得代码签名过程变得更加复杂并造成一定的延迟。
随着行业资产与服务向云端的迁移,安全性成为了更高的优先级,同时云解决方案也为代码签名提供了新的可能。云端代码签名和HSM不仅加快了开发速度,增强了灵活性,同时还支持分布式开发团队的集中控制,使得整个开发流程更加顺畅,且更容易被安全团队监控。
02
集成代码签名之旅
随着CA/B论坛最近的改革,各组织需要启动他们的现代化代码签名之旅,引入集中控制机制以对开发团队进行支持。目前,许多公司仍旧处于“临时”阶段——密钥被本地管理,且开发者采用多样化的代码签名工具和流程。然而,有些公司则已经通过部署HSM来对密钥进行保护,实现了集中控制,以便安全团队可以实现更好的监督和管理,但独立的代码签名工具使用仍会对软件开发速度造成影响。
一个理想且成熟的体系应该将密钥安全、代码签名工具与开发工作流程进行集成,确保整个编码、容器化、工件处理和执行过程的无缝流畅与高效。安全团队需要负责管理HSM,从而实现对代码签名过程的完全掌握,同时开发者也能享受到敏捷且灵活的开发通道。
以下几项最佳实践能够有效地支持这一转变过程:
密钥保护:将代码签名密钥存储在安全的位置,例如符合CA/B论坛加密要求的HSM(FIPS 140-2第2级或共同标准EAL 4+)中。HSM具有防篡改功能,且可防止私钥被导出。
访问控制:通过基于角色的访问控制来最小化未经授权访问和误用私钥的风险。定义审批工作流程并执行安全策略,只允许必要的员工访问,并保留审计日志,记录谁触发了签名请求,谁访问了密钥,以及访问理由。
密钥轮换:一旦密钥泄露,所有相关的签名发布都可能会受到影响。定期更换代码签名密钥,并为不同的发布使用不同的密钥,覆盖各个DevOps团队。
给代码加上时间戳:代码签名证书的有效期通常只有一到三年。在代码签名时添加时间戳可以在证书过期或被撤销后,仍然证明签名的有效性,延长代码和软件的信任期限。
代码完整性核查:在签名并发布最终版本前,进行彻底的代码审查,对比构建服务器中与源代码库中的代码,验证所有开发者的签名以确保代码未被篡改。
集中式管理:在全球化的商业环境中,实施集中式代码签名流程可以对整个企业的签名活动以及证书状态进行监控,提高管理的透明度,确保责任分明并减少安全风险。
执行政策:通过定义和应用一套详细的政策来对代码签名流程进行标准化,包括管理密钥使用权限、审批流程、密钥过期时间、CA类型、密钥大小以及签名算法等。实现这些政策的自动化执行,确保所有代码、文件和软件的签名都符合政策要求以及行业标准。
简化代码签名流程:通过将代码签名与CI/CD工具集成和自动化,简化DevOps团队的工作流程。不仅保证安全性,同时提高效率和灵活性。
在当今软件开发的持续集成(CI)和持续部署(CD)环境中,实施强大的代码签名流程成为了提高安全性的关键策略。这种最佳实践不仅为建立开发过程中的信任机制提供了可靠的方法,同时也还有助于确保软件供应链的整体安全性得到加强。