TL博士
近年来,科技行业大力倡导软件开发中的“左移”概念,主张尽早将安全实践融入到开发生命周期中。这一运动旨在赋予开发人员从项目一开始就确保其代码安全的责任。然而,虽然这种方法背后的意图是崇高的,但现实却描绘了一幅更加微妙的画面——仅依靠开发人员来维护的简单化概念 软件供应链安全 证明是不够的。在本文中,我将提出一种补充平衡方法:CISO 指导的 SDLC 护栏 - 管理或执行 SDLC 安全策略的自动控制措施。
谁移走了我的奶酪?
左移范式本质上是为了解决开发初期的安全问题,期望开发者主动在代码中嵌入安全措施。这是一种很有吸引力的理念,其中开发人员的任务是在编写和部署代码时识别漏洞并实施安全控制。
然而,这种理想主义的方法在实际实施中遇到了重大挑战。尽管精通编码,但开发人员可能缺乏安全技术和最佳实践方面的全面专业知识。他们的主要关注点是满足功能需求,期望他们对不断发展的网络安全格局有详尽的了解是不现实的。
此外,时间限制和项目压力常常导致安全性和按期完成之间的权衡。由于急于及时交付功能,开发人员可能会无意中忽视潜在的安全漏洞或采用不太安全的编码实践,从而导致漏洞直到后期才得到解决。归根结底,他们的 KPI 是以速度为导向的,对于大多数人来说,安全性永远是第二位的。
进入 CI/CD 护栏
这就是在持续集成/持续部署 (CI/CD) 管道中实施安全“护栏”的必要性变得显而易见的地方。护栏充当嵌入开发管道中的自动检查点,确保安全措施不仅仅依赖于手动干预或个人开发人员的专业知识或动机。
Guardrails 充当主动的看门人,在整个软件开发生命周期 (SDLC) 中持续监控和执行安全标准、策略和规则。这些自动检查可以涵盖各种安全方面,包括但不限于将坏包列入黑名单、停止包含关键漏洞的代码、静态代码分析测试失败或具有有问题的依赖项,以及遵守合规性标准或安全 SDLC 策略(例如,代码对每个提交进行审查)。
使用策略即代码概念,人们可以创建几乎任何他们可以想象的作为护栏实施的规则。以下是一些符合护栏规则的示例 NIST 800-204D:
护栏规则示例:
- 开发者工作站
- 验证开发者工作站的端点安全套件
- SCM
- 验证分支保护规则:强制执行多个\特定审查
- 验证 CI 文件仅由允许的人员修改
- 验证秘密扫描是否到位并且未检测到秘密。
- CI
- 验证代码扫描是否到位。
- 验证代码扫描结果位于预定义栏下方
- 依赖
- 验证开源许可。
- 验证开源漏洞是否符合组织政策
- 文物
- 验证正确的身份标志工件。
- 验证最终工件漏洞。
护栏,不是扶手
通过将护栏集成到 CI/CD 管道中,组织可以系统地执行安全协议并生成安全的产品,而无需仅依赖开发人员来确保全面的安全措施。考虑到开发人员可能会为了开发速度而绕过安全措施,护栏方法使这些决策变得不可能或至少是可见的,因此可以在单个构建级别上考虑它们(例如,决定工件的可信度) )和组织层面(了解组织开发人员可以期望什么和不能期望什么)。 在新版本发布到生产环境或交付给客户之前,自动化工具可以标记甚至阻止潜在的漏洞或不合规问题。毕竟,在开发阶段而不是交付后处理安全问题确实更容易、更快、更便宜。
必须认识到,虽然左移鼓励开发人员参与安全实践,但它不应该免除其他利益相关者(安全专业人员、DevOps 工程师和质量保证团队)的角色。如果您是产品安全、AppSec、DevSecOps 或 CISO,那么您已经知道将责任“左移”给开发人员并不能免除您肩上的责任。由于大多数 CISO 及其团队并非来自研发部门,因此软件开发环境历来不在他们的视线范围内。传统上,他们会关注运营安全、网络安全和跨组织连接。护栏方法是一种“巧妙地”让 CISO 进入开发环境的狂野西部的方法,重新获得对其职责的控制. 我所说的“微妙”是指“协作”。由于产品安全是安全和开发团队的共同努力,因此这些实体之间的协作对于设计和实施强大的护栏至关重要,这些护栏可以在不影响开发速度的情况下增强 CI/CD 管道抵御潜在的安全威胁。
将左移原则与 CI/CD 管道中护栏的建立相结合是一个很好的平衡。开发人员仍然负责编写安全代码并了解基本安全原则,而安全团队则决定产品发布所需满足的标准。然后,护栏相应地自动化为工具和流程,充当安全网,持续监控和强化安全标准和 SDLC 政策。护栏是实现设计和默认安全产品的重要一步。
总结
总之,左移的概念虽然出发点是好的,但仅通过开发人员的参与不足以确保全面的软件安全。为了增强最终软件工件的完整性和可信度,组织必须在 CI/CD 管道中实施护栏。这种组合方法不仅提高了软件的安全状况,而且还营造了一个协作环境,让开发人员、安全专业人员和自动化工具协同工作,以实现创建安全软件的共同目标。
此内容由领先的端到端软件供应链安全解决方案提供商 Scribe Security 为您提供 - 为整个软件供应链中的代码工件以及代码开发和交付流程提供最先进的安全性。 了解更多