写点什么

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

  • 2022-04-01
  • 本文字数:2388 字

    阅读完需:约 8 分钟

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

摘要


过去一年可谓是供应链安全年。如果你是一个开源维护者,当你了解了项目的攻击面以及项目整个供应链的威胁载体,你可能会感到不知所措,甚至觉得无法克服。好消息是,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. 答:使用像Scorecardsdeps.dev这样的工具来评估风险和传递性变更

  2. 检查包 url 旁边的小“锁”图标

  3. 仅使用 GitHub 星数超过 1000 的依赖项

  4. 仅使用未更换过维护者的依赖项


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

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


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

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

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

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

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


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


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

  1. 答:选择经过加密和签名验证的工件

  2. 不要使用过于古老的组件

  3. 时间戳:只使用最近创建的工件

  4. 官方认可:寻找值得信赖的品牌或标准机构的标识


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


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


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


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

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

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

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

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


查看原文:Protect your open source project from supply chain attacks

2022-04-01 09:304126

评论

发布
暂无评论
发现更多内容

小程序中如何显示Markdown文本

Changing Lin

10月月更

stm32-HAL使用stop模式后DMA初始化的问题

良知犹存

stm32

一文带你盘点“微服务”中的技术点

Simon郎

微服务 Spring Cloud spring cloud alibaba java

技术公众号小白互助网络

Felix

GitHub 微信公众号 自媒体

马拉车算法,其实并不难!!!

秦怀杂货店

数据结构 算法 LeetCode

10. python入门速通教程之类、继承类、类中的特殊方法

梦想橡皮擦

10月月更

容器 & 服务:Kubernetes API Server访问问题

程序员架构进阶

架构 Kubernetes 容器 Helm Charts 10月月更

大神Jeff Dean相关的一些项目

春秋易简

SpringBoot 实战:优雅的使用枚举参数(原理篇)

看山

Java Spring Boot Effective Spring 10月月更

别被vector最后一个元素erase错误

良知犹存

c++

业务中台数据一致性方案

慕枫技术笔记

后端 引航计划

微博评论高性能高可用计算架构

白开水又一杯

#架构实战营

Android使用adb工具及root权限完成手机抓包

杨清强

adb

敬畏用户

FunTester

软件测试 测试 用户 FunTester 用户思维

012云原生之微服务

穿过生命散发芬芳

云原生 10月月更

数据库优化之explain 的使用和常用的SQL优化或索引优化

Regan Yue

数据库 数据库优化 Regan Yue 10月月更

5款良心工具,专治各种流氓顽固软件!

Jackpop

半年时间,拍摄8省市10个案例,我们见到了这样的智能中国

脑极体

设计千万级学生管理系统的考试试卷存储方案

Rabbit

产品经理职业发展框架

俞凡

产品经理 产品管理 认知

iOS开发独家秘籍-代码块Code Snippets

iOSer

ios 代码 ios开发

模块9

脉动

stm32-HAL使用usart发送中断判断发送标志库问题

良知犹存

stm32

模块九毕业设计

以吻封笺

模块九作业:设计电商秒杀系统

Felix

如何进行用户故事估算——Ethan分享观后感

Bruce Talk

敏捷 随笔 Agile User Story Product Owner

MacBook的隐藏功能

IT蜗壳-Tango

10月月更

在开源项目或工作项目中使用git建立fork仓库

良知犹存

git

Linux开发coredump文件分析实战分享

良知犹存

Linux

【SpringCloud技术专题】「Hystrix源码」分析故障切换的运作流程

洛神灬殇

源码分析 SpringCloud Hystrix 熔断器 10月月更

架构实战营 - 模块九作业

思梦乐

如何保护你的开源项目免遭供应链攻击_架构_Anne Bertucio_InfoQ精选文章