如何保护你的开源项目免遭供应链攻击

简介: 过去一年可谓是供应链安全年。如果你是一个开源维护者,当你了解了项目的攻击面以及项目整个供应链的威胁载体,你可能会感到不知所措,甚至觉得无法克服。好消息是,2021 年也是供应链安全解决方案年。虽然还有很多工作要做,现有的解决方案也有很大的改进空间,但已经可以对项目进行预防性控制,以强化供应链,免受安全威胁。

本文最初发表于谷歌开源博客,由 InfoQ 中文站翻译并分享。

在2021年All Things Open大会上,观众通过一个问答游戏了解了供应链安全的最佳实践。本文介绍了相关问题、答案和预防选项,如果你想保护自己的开源项目免受供应链攻击,那么这是一份不错的初级指南。这些建议遵循SLSA框架和OpenSSF评分标准,其中许多都可以通过Allstar项目自动实现。

一个典型的软件供应链的例子,以及链中每个环节上可能发生的攻击的例子

问题 1:如何防止你的开发者账号被接管?

  1. 答:使用多因素身份验证(可能的话,使用安全密钥)
  2. 核心维护人员共享一个账号
  3. 所有密码务必采用 rot13 加密
  4. 使用 IP 白名单

原因和方法:一个能够访问开发者账户的恶意行为者可以伪装成一个已知的贡献者并提交坏代码。鼓励贡献者使用多因素认证(MFA),不仅是在他们发送提交的平台上,也包括与贡献相关的账户,如电子邮件。在可能的情况下,安全密钥是推荐的 MFA 形式。

问题 2:如何避免合并恶意提交?

  1. 答:要求所有的提交都要由提交者之外的人审核
  2. 在所有提交上自动运行测试
  3. 在所有提交中扫描“bitcoin”一词
  4. 只接受账号年龄超过 1 年的贡献者的提交

原因和方法:自合并(也称为单边修改)会带来两种风险:(1)窃取了贡献者账号的攻击者可以直接向项目注入恶意代码;(2)心怀善意的人也可能在合并提交时意外引入安全风险。审核有助于避免恶意提交和意外风险。如果可能的话,将其设置为必然要求(比如使用GitHub的分支保护设置);Allstar等工具可以帮助执行这一要求。这对应SLSA 4级。

问题 3:如何保护 CI/CD 管道使用的秘密?

  1. 答:使用一个秘密管理工具
  2. 指派一名维护人员控制对秘密的访问
  3. 将秘密保存为环境变量
  4. 将秘密保存到单独的存储库

原因和方法:安全概念“深度防御 ”是指应用多个不同的防御层来保护系统和敏感数据,如秘密。秘密管理器工具(如 GCP 用户秘密管理器、HashiCorp Vault、CyberArk Conjur 或 Keywhiz)可以避免在源代码中对秘密进行硬编码,提供了集中化和审计能力,并引入了授权层以防止秘密泄露。

当在 CI 系统中存储敏感数据时,要确保它真的是用于 CI/CD,而不是更适合于密码或身份管理器的数据。

问题 4:如何防止 CI/CD 系统被滥用?

  1. 答:遵循最小特权原则使用访问控制
  2. 在所有拉取请求/提交上运行集成测试
  3. 通过 GitHub 角色将所有贡献者标记为“Collaborators”
  4. 在本地运行 CI/CD 系统

原因和方法:将项目存储库默认成"最小必要访问",可以保护你的 CI/CD 系统免于意外访问和滥用。虽然运行测试很重要,但在审核之前,在所有提交/拉取请求上默认运行测试,会导致对 CI/CD 系统计算资源的无意滥用或恶意滥用。

问题 5:如何避免构建过程中的破坏?

  1. 答:将构建定义和配置定义为代码,如 build.yaml
  2. 使构建过程尽快完成,让攻击者没有时间破坏你的代码
  3. 在构建系统中只使用知名组件,而且不接受替换
  4. 删除构建日志,以免给攻击者留下线索

原因和方法:使用构建脚本——定义构建及其步骤的文件,如 build.yaml——这样我们就不必再手动运行构建步骤,那可能会意外引入配置错误,也减少了恶意行为者篡改构建或插入未经审核的更改的机会。这对应SLSA 1-4级。

问题 6:在引入依赖项前如何对其进行评估?

  1. 答:使用像Scorecards和deps.dev这样的工具来评估风险和传递性变更
  2. 检查包 url 旁边的小“锁”图标
  3. 仅使用 GitHub 星数超过 1000 的依赖项
  4. 仅使用未更换过维护者的依赖项

原因和方法:没有一个明确的标准可以告诉你一个包是 "好 "还是 "坏";每个项目都有不同的安全配置和风险容忍度。收集依赖项的信息,以及它可能引入的传递性变更,可以帮助你判断在项目中使用某个依赖项是否 "安全"。像 Open Source Insights (dols.dev)这样的工具可以提供完整的依赖关系图,而 Scorecards 可以对软件包的多个风险评估指标打分,包括安全策略的使用、MFA 和分支保护。

一旦你明确了自己所使用的依赖项,就可以定期运行一个漏洞扫描工具,如 Open Source Vulnerabilities,帮助你了解最新版本和补丁。许多漏洞扫描工具还可以应用自动升级。

问题 7:如何保证构建和你想的一样(即验证)?

答:使用一个可以生成来源证明的构建服务

检查最后一次提交,确保其来自可信任的提交者

使用隐写术将项目标识嵌入构建中

每次发布都运行一致性测试

原因和方法:显示构建的来源和工件(构建的出处),向用户表明该构建没有被篡改,是正确的构建。组件来源有许多;一种提供组件的方法是使用构建服务,生成和验证可以表明出处的数据。这对应 SLSA 2-4 级。

问题 8:从注册中心选择工件时应该注意什么?

  1. 答:选择经过加密和签名验证的工件
  2. 不要使用过于古老的组件
  3. 时间戳:只使用最近创建的工件
  4. 官方认可:寻找值得信赖的品牌或标准机构的标识

原因和方法:正如你应该为项目生成带有来源证明的签名构建(SLSA 2-4 级),你在使用别人的工件时也应该做同样的验证。标识和其他基于品牌的认可形式很容易被篡改,进而被网络蟑螂(typosquatters)用来伪造合法性;寻找像签名一样的防篡改验证。例如,Sigstore 帮助开源软件项目做构建签名,并验证其他人的构建。

提高项目安全性是一个持续的过程。这些建议中有一些可能并不适用于你当前的项目,但你每采取一个提高项目安全性的步骤都是朝着正确的方向迈进。

开源项目安全性的相关资源:

SLSA:一个供应链安全等级框架

Scorecards:安全最佳实践应用评价工具

Allstar:一个确保采用安全最佳实践的 GitHub 应用

Open Source Insights:开源项目依赖项的可搜索可视化

OSV:面向开源的漏洞数据库和自动化基础设施

目录
相关文章
|
7月前
|
供应链 安全 Shell
供应链投毒预警 | 开源供应链投毒 202401 最新月报来啦!
悬镜供应链安全情报中心通过持续监测全网主流开源软件仓库,结合程序动静态分析方法对潜在风险的开源组件包进行分析和监测,捕获大量开源组件恶意包投毒攻击事件。2024 年 1 月份,悬镜供应链安全情报中心在 Npm 官方仓库(https://www.npmjs.com/)和 Pypi 官方仓库(https://pypi.org/)上共捕获 675 个不同版本的恶意投毒包,其中 Npm 仓库投毒占比 90.48%, Pypi 仓库投毒占比 9.52%, 从每日捕获的投毒包数据来看,Npm 仓库仍然是开源组件投毒的重灾区。
160 1
|
2月前
|
SQL 安全 算法
网络安全的守护神:漏洞、加密与意识的三位一体
【10月更文挑战第6天】在数字化时代,网络安全的重要性不言而喻。本文将探讨网络安全的三大支柱:安全漏洞的识别与防御、加密技术的应用以及提升个人和组织的安全意识。我们将通过具体案例分析,了解如何有效防范网络攻击,保护数据安全,并培养必要的安全习惯。文章旨在为读者提供实用的网络安全知识和建议,帮助构建更安全的网络环境。
|
6月前
|
存储 安全 网络安全
《护航网络安全:漏洞探寻、加密技术与安全意识》
在当今数字化时代,网络安全已成为人们关注的焦点。本文将深入探讨网络安全漏洞的危害、加密技术的重要性以及如何提升个人和组织的安全意识,助您建立更坚实的网络安全防线。
30 2
|
7月前
|
SQL 安全 算法
网络防御先锋:洞悉安全漏洞与应用加密技术的实战指南
【5月更文挑战第25天】在数字信息时代,网络安全和信息安全已成为维护数据完整性、确保信息传输保密性和保障系统可用性的关键。本文将深入探讨网络安全领域的重要议题——安全漏洞的识别与防护,以及加密技术的应用与实践。通过对常见安全威胁的分析,结合最新的加密方法,文章旨在提升读者对网络防御策略的理解,并增强个人及组织的安全防护意识。
|
7月前
|
存储 监控 安全
网络防御前线:洞悉漏洞、加密与意识
【5月更文挑战第2天】在数字化时代,网络安全已成为维护信息完整性、确保通信保密性和保障系统可用性的基石。本文将探讨网络安全的关键领域,包括识别和防范安全漏洞的策略、加密技术的应用以及提升个体和企业的安全意识。通过深入分析这些领域,我们旨在为读者提供一套综合的网络防护方法,以应对不断演变的安全威胁。
|
7月前
|
存储 安全 算法
网络防御先锋:洞悉漏洞、加密术与安全意识
【4月更文挑战第25天】 在数字化时代,网络安全与信息安全成为维系现代社会运行的基石。随着技术的发展,攻击手法不断进化,网络安全漏洞愈发难以防范。本文将深入探讨网络安全中的关键要素:漏洞识别与利用、加密技术的进展以及提升个体和企业的安全意识。通过分析这些关键要素,我们旨在为读者提供一套全面的知识框架,以应对日益复杂的网络威胁,并推动构建更加稳固的信息安全环境。
|
7月前
|
存储 人工智能 安全
网络安全与信息安全:防御前线的构筑与维护
【4月更文挑战第14天】在数字化时代,网络安全与信息安全已成为个人和企业不可忽视的重要议题。本文将深入探讨网络安全漏洞的概念、加密技术的进展以及提升安全意识的必要性。通过对网络攻击手段的分析,我们揭示了安全漏洞的本质及其对信息系统的潜在威胁。继而,文中细述了从古典到现代的加密技术,强调了它们在保护数据传输和存储中的核心地位。此外,文章还讨论了培养安全意识的有效途径,包括教育培训、模拟演练和安全政策的制定。通过全方位的分析和建议,旨在为读者提供一个关于如何构筑和维护网络安全防线的清晰蓝图。
|
7月前
|
安全 测试技术 网络安全
网络安全防线:漏洞、加密与意识的三位一体
【4月更文挑战第28天】 在数字时代的浪潮中,网络安全和个人信息安全成为维护社会稳定、保护个人隐私的重要屏障。本文深入剖析了网络安全领域的关键要素:安全漏洞、加密技术以及用户安全意识。通过探讨这些要素如何相互作用和影响整体安全架构,揭示了构建坚固网络防线的策略。文章还提供了针对普通用户和企业的安全实践建议,以增强整个社会对网络威胁的抵御能力。
|
7月前
|
安全 网络安全 区块链
网络安全的行业黑话 ——攻击篇 之攻击工具
网络安全的行业黑话 ——攻击篇 之攻击工具
75 0
|
安全 网络安全 数据库
企业网络安全漏洞分析及其解决_kaic
为了防范网络安全事故的发生,互联网的每个计算机用户、特别是企业网络用户,必须采取足够的安全防护措施,甚至可以说在利益均衡的情况下不惜一切代价。事实上,许多互联网用户、网管及企业老总都知道网络安全的要性,却不知道网络安全隐患来自何方,更不用说采取什么措施来防范胃。因此,对于互联网用户来说,掌握必备的网络安全防范措施是很有必要的,尤其是网络管理人员,更需要掌握网络安全技术,架设和维护网络系统安全。 本论文前四章介绍了网络安全的概述,网络安全技术和网络安全漏洞分析;介绍了我国网络安全的现状和网络安全面临的挑战,以及漏洞的分类的分析。第五章主要讲了漏洞扫描系统的必要性,只有发现漏洞才能更好的维持企业网
下一篇
DataWorks