时至今日,绝大多数的开发者并不是从零开始进行软件开发,而是在创建软件时依赖第三方资源。通过使用预先构建的库和开源组件,工程师们可以加快开发进程并且降低生产成本,从而快速将产品推向市场。
因此,企业需要意识到软件并不完全在他们的掌控之中。那么是哪些流程、组件和工具构成了你所部署的软件呢?
什么是软件供应链?
现代软件的开发流程与此类似:一个软件是由多个组件组成,涉及到多个开发人员、团队和某家公司的内部与外部系统。并且像飞机一样,软件也需要通过压力测试。
因此,我们将软件供应链定义为在软件开发中所涉及到的组件、开发流程以及投入生产和最终软件产品分发的过程。
软件供应链由什么构成?
- 硬件和基础架构
- 操作系统
- 编译器和编辑器
- 驱动和依赖项
- 开源脚本和打包好的软件
- 代码仓库引擎、测试套件以及CI/CD工具
- 云服务和数据中心
同时,供应链会包含公司外部的人员配置,比如外包公司、咨询师以及供应商等。因此,软件供应链安全的首要关注点是将风险管理和网络安全原则相结合,这一做法可以检测到第三方组件给软件带来的风险,并将其最小化。
软件供应链管理
这些列表被称为软件材料清单,或 SBOM(另一个取自制造业的术语),它们由官方发布并且计算机可以直接对其进行处理。这些清单里详细说明了软件中的各种组件和依赖项。
除了可见性这一优势外,构建这份清单还能够与客户建立信任,证明企业具备安全意识以及确保许可证的合规性。基于此,你不需要向客户开放所有源代码,同时可以根据需要与客户分享他们所需要的信息。
在急速变化的环境中,避免数据泄露或敏感信息的丢失比以往任何时候都更加重要。为了保护数据,公司需要实施强有力的 IAM 策略和数据治理程序。部分企业甚至采用 DevSecOps 的方式来确保协作中的安全性。
首当其冲:软件供应链是恶意攻击的首要目标
Sonatype在《2021年软件供应链的现状》报告中指出,传统软件供应链攻击集中在公开披露的漏洞。在过去3年里攻击者已经改变了攻击策略并且频繁向连接全球供应链的开源项目注入恶意代码。
换言之,他们的目标是“上游”组件,或者是分发软件工作流程和更新的服务。这会影响到大量位于下游的终端用户,最终会牵涉到多家组织。
如何保障软件供应链安全?
2. 保持高度的供应链可见性
- 开发生命周期的每一步都涉及什么?
- 外包员工是否拥有代码权限?
- 谁安装了软件更新并且是如何安装的?
企业应该审计其所有的应用程序以及授予内部和外部各方的访问权限。理想情况下,这一切应该是有据可查的,并且是自动化的,所以当一个漏洞发生时,你可以迅速找出拥有该访问权限的人员。
将过时的代码留在应用程序中会导致漏洞,进而影响整个软件供应链。因此,一旦你得知某个代码库或项目要关闭或停止维护,就必须将其移除或使用替代项目。
因此,安全团队应该密切监控特权账户的异常活动——密码变更、登录活动以及权限更改等,并且应该及时响应。假设一个域名管理员账户多次尝试输入错误的密码,那么安全团队应该立即开始进行调查并且锁定该账号,直到他们确定这只是一次合法的行为。
管理员应该采用最小权限原则——只有在必要时才应授予高等级的访问权限。系统管理员应该使用自动化和配置管理工具来控制和监控账户管理。这就使得人为干预的空间大大缩小了。
总结
参考链接:
1. State of Software Security v11: Open Source Edition, https://info.veracode.com/fy22-state-of-software-security-v11-open-source-edition.html2. Software Supply Chain Management: An Introduction, https://www.sonatype.com/resources/software-supply-chain-management-an-introduction
3. 2021 State of the Software Supply Chain Report, https://www.sonatype.com/resources/state-of-the-software-supply-chain-2021