C6:确保组件安全
描述
在软件开发中,利用库和框架是一种常见做法。嵌入了安全功能的安全库和软件框架有助于软件开发者预防与安全相关的设计和实现缺陷。
从头开始编写应用程序的开发者可能没有足够的知识、时间或预算来正确实现或维护安全功能。利用安全框架(包括开源和供应商提供的)有助于更高效、更准确地实现安全目标。
在可能的情况下,重点应放在利用框架现有的安全功能上,而不是引入又一个需要定期更新和维护的第三方库。最好是让开发者利用他们已经在使用的东西,而不是强制他们使用另一个库。
将第三方库或框架整合到您的软件中时,务必考虑以下两类最佳实践:
- 识别可引入到您软件中的可信赖库和框架。
- 监控和更新软件包,以确保您的软件不会受到第三方组件可能引入的安全漏洞的影响。
威胁
- 攻击者可能利用过时第三方组件中的已知漏洞来获取未经授权的访问或执行恶意代码。
- 攻击者可能通过损害开发过程中使用的库或框架来发动供应链攻击,从而可能将恶意代码植入最终产品。
- 攻击者可能通过利用未正确加固的第三方组件中的不安全配置来提取敏感信息。
- 攻击者可能通过针对外部库中的已知漏洞来发起拒绝服务攻击,从而可能中断服务的可用性。
实施
下面将详细介绍这些类别,以帮助您保护软件安全。
识别可信赖库的最佳实践
下面列出了一些您可以用来为您的软件选择下一个库或框架的标准。这并非一份详尽列表,但却是一个良好的开端。
-
来源:通过安全链接从官方来源下载推荐的安全库,并优先选择已签名的软件包,以减少包含修改过的恶意组件的可能性(参见 A08:2021-软件和数据完整性故障)。
-
流行度:利用被许多应用程序使用并拥有庞大社区的库和框架。考虑诸如软件包源代码库获得的 GitHub 星数以及包管理器内的下载次数等数据点。
-
活跃度:确保库/框架得到积极维护,问题得到及时解决。
-
成熟度:使用稳定版本。处于早期开发阶段的项目对您的软件风险更高。
-
复杂性:一个拥有大量依赖项的庞大复杂库,更难以整合到您的软件中。此外,大量的依赖项意味着未来需要更多的升级,以确保所有这些依赖项都是最新的和安全的。
-
安全性:如果软件包是开源的,您可以利用静态应用程序安全测试 (SAST) 或软件组成分析 (SCA) 来帮助在首次包含它们之前识别恶意代码或安全弱点。
保障其安全的最佳实践
新的安全漏洞每天都在披露,并发布在公共数据库中,例如 NIST 国家漏洞数据库 (NVD),该数据库使用常见漏洞和披露 (CVE) 来识别公开已知漏洞。此外,公共数据库中提供的漏洞利用工具允许攻击者自动化其攻击。因此,定期确保您的软件没有已知安全漏洞至关重要。
-
维护一个清单目录:维护所有第三方组件的清单目录。建议在构建管道中自动创建 SBOM(软件物料清单)。SBOM 包含所有使用的第三方依赖项及其版本,并且可以由各种供应链管理工具自动监控。
-
执行持续检查。将您的 SBOM 与 OWASP dependency-track 等定期或持续监控工具结合使用,以自动检测已知的公开披露漏洞。
-
尽早并经常验证安全性 - 在软件开发早期阶段集成 SCA 工具,以从软件开发生命周期的每个阶段了解软件及其依赖项的安全漏洞数量和严重性。
-
主动更新库和组件。软件更新必须是应用程序或产品从构思到淘汰的整个生命周期中持续进行的任务。
防止的漏洞
安全框架和库有助于预防各种Web应用程序漏洞。至关重要的是,要按照使用已知漏洞的易受攻击和过时组件 OWASP Top 10 2021中所述,保持这些框架和库的最新状态。
参考资料
工具
- OWASP Dependency-Check - 用于识别项目依赖项并检查公开披露的漏洞
- OWASP Dependency-Track - 定期监控 SBOM 文件以发现新漏洞
- Retire.JS JavaScript 库扫描器
- Renovate 自动化依赖更新工具
- Harbor : 一个开源的制品注册表,通过策略和基于角色的访问控制来保护制品安全