乐趣区

关于开源:从工具到实践如何在GitHub上保障开源项目安全

1998 年,Christine Peterson 发明了“开源软件”这个词。她解释道:“这是刻意为之,为了让其他人更容易了解这个畛域”。同年,O’Reilly 组织了首届“开源峰会”。

开源软件受到更多人青眼起因在于,用户对软件领有更多的控制权因为他们能够查看代码。对于长期我的项目来说,开源软件被认为是稳固的,因为这些我的项目遵循凋谢的规范,即使维护者进行工作,也不会凭空隐没。沉闷的开发者社区非常重要。

比起闭源软件,开源须要更多地思考平安问题,因为任何人都能够查看并批改代码。贡献者能够发现错误并提交一个 PR 对代码进行变更。与此同时,这也随同着一系列的平安问题。

什么是软件供应链攻打?

当有人利用内部供应商或可能拜访你的企业的数据和零碎的第三方组件来浸透你的数字基础设施时,就会产生软件供应链攻打。供应链攻打的类型多种多样,本文将聚焦于开源供应链。

任何人都能够通过开源动作为我的项目的开发做出奉献。利用这个切入点,黑客能够将破绽编入开源我的项目中,当企业将该我的项目引入其软件中时也引入了新的威逼,而且往往是在不知情的状况下,通过遍历依赖或间接依赖引入。

Web 利用平安的重要性

Web 利用平安是一个概念,它涵盖了一系列嵌入 Web 应用程序的平安管控,以爱护其资产免受潜在的歹意行为的影响。它波及平安开发实际,在整个软件开发生命周期(SDLC)中施行安全措施,以发现我的项目及其配置中的安全漏洞。

好消息是你能够通过应用不同的应用程序及 action 在 GitHub 内实现平安爱护,不论是一个简略的 demo 我的项目,还是大型开源我的项目。基于此,开源我的项目能够领有与闭源软件雷同的平安程度。

Section 1:GitHub Marketplace 及 GitGuardian 利用

什么是 GitHub Marketplace?

2016 年的 GitHub Universe 上,首次引入 GitHub Marketplace。它是一个开发者能够找到集成插件并将其落实到工作流程中的中央。

如何利用平安工具创立根底流水线并实现防护?

你能够利用 GitHub Marketplace 中的平安利用和 action 来爱护你的流水线每个开发阶段的平安。

一个根底的流水线包含:

  • 软件成分剖析工具,专一于辨认代码库中的开放源码,以便维护者和贡献者可能治理它们的平安和许可证合规问题
  • 避免密钥泄露的工具
  • 代码剖析工具,它是一种在程序运行之前通过查看源代码进行调试的办法,个别依据一组编码规定分许一组代码

如何为你的项目选择相干利用?你须要思考些什么?

抉择工具、利用或是 action 次要取决于你的我的项目或团队的工作流程。你们应用的是什么类型的技术栈?你们是部署到 Docker 还是应用 K8S?在你们的流水线中有多少个步骤?你能在每个步骤都施行防护吗?

而后,你将会找到许多满足你需要的工具和利用。而对于开放源码软件的维护者来说,好消息是这些应用程序通常对公开的代码库或开源软件我的项目是收费的。

你能够在一个阶段中采纳 2 个工具,比方 Synk 和 Mend 扫描你的依赖项。这两种工具在覆盖率方面都会有其长处和毛病,并会帮忙你更好地理解你的我的项目的依赖项。如果你认为一个工具比另一个好,你依然能够删除你不须要的那个。

让咱们来看看 OWASP Zap 基线扫描这个 GitHub action,它会扫描指标 URL 的破绽,并在你提交 PR 时将其反馈给你的我的项目。

当你打算在我的项目中采纳一个 action 或一个利用时,你应该在我的项目页上看到各种信息——GitHub 是否验证该 action?上图中显示为已验证,你能够在右侧看到一个蓝色的小勾。有多少贡献者在为这个我的项目工作?该我的项目取得了多少颗星?有多少 issue 和 PR?

再导航到 GitHub 仓库,看看维护者和贡献者是如何踊跃推动这个我的项目的。它的文档是否欠缺?他们是否提供了根本的应用范例?(比方一个简略的 YAML 文件)是否容易实现?是否能与你我的项目的编程语言兼容?

接下来,咱们来看看 GitGuardian 的理论用例。你能够间接在 Marketplace 中搜寻到它。

点击产品页,你将取得更多信息。作为我的项目的维护者,你将会用 OWASP Action 查看咱们后面提到的要求是否达标。咱们能够看到 GitHub 是否验证了该利用、利用装置数量以及更多对于该组织的其余信息。

划到页面底部,你将看到价格及装置信息。GitGuardian 为公开的代码库提供收费的监控。抉择你想要装置的账号,并点击“Install it for free”。

你能够在所有代码库上都装置 GitGuardian 或者抉择其中几个。你能够为须要平安防护的每个阶段反复这一过程。

Section 2:治理开源我的项目

当贡献者提交 PR 时,它将触发流水线中集成的所有利用和 action。现实情况下,就 GitGuardian 而言,你心愿凭证不被推送到源代码中,并且在贡献者提交 PR 之前进行这一行为。你能够在你的 CLI 上采纳 GitGuardian Shield(ggsheild),并与预提交的 git hook 集成以加强防护,确保凭证没有被推送到源码中。

如果没有设置 ggshield,在代码库上推送密钥的贡献者会在提交 PR 时收到告警。下图虚构 PR 提交的过程中,你能够看到一些工具被触发。

你能够让其中一些工具在骨干分支上是必须触发的。要做到这一点,须要进入我的项目设置,在【Code and automation】中点击【Branches】。在这里,你能够增加分支爱护规定,要求在合并 PR 前必须通过状态查看。

如何从 ChatOps 中获取价值?

ChatOps 是一个合作模型,将人、工具、流程和自动化连贯到一个通明的工作流程中。应用 Slack 进行探讨,并为特定的工具设置专门的频道,这将有助于你理解我的项目中产生的事件。监控和设置告警是重要的一环,能够帮忙开发人员取得正确的信息。

GitHub 我的项目:如何利用面板追踪平安工作

在开发开源我的项目时,你能够利用 GitHub projects 来列出你为某一特定性能所要做的所有工作。你能够创立标签和 epics(milestones)来跟踪进度或用于提出问题。还能够创立一个平安标签来追踪你我的项目中的破绽。

你能够应用自动化我的项目或面板,其中的卡片会依据 PR 的状态相应地挪动。这个形式能够很好地展现性能开发进度以及你可能须要帮忙的中央。

在 README 文件中展现我的项目的衰弱状态

如果你想为你的我的项目吸引更多的贡献者,不要遗记应用利用及 action 工作流程提供的标签或 tag 来展现我的项目的衰弱状态,并将其增加到我的项目的 README 文件顶部。你通过 GitHub 文档理解更多徽章设置:

https://docs.github.com/en/ac…

Section 3:平安加固开源我的项目

除了在流水线各环节增加平安防护外,你还能够通过采纳以下最佳实际加固开源我的项目:

  • 采纳最小权限: 在成员权限局部将根本权限设置为无权限,这样成员只能克隆和提取公共代码库。如果要给贡献者更多的权限,维护者须要把他们退出团队或让他们成为单个代码库的协作者。创立团队、增加用户,并将他们调配到具备特定权限的特定代码库中。
  • 让所有维护者和贡献者都必须应用 2FA。 到 2023 年底,GitHub 将要求所有奉献代码的用户启用一种或多种形式的双因素认证。
  • 爱护主分支: 如上所述,肯定要爱护主分支,免得被维护者意外删除。
  • 启用揭示和告警: 更新 email 地址以保障你能收到来自我的项目的揭示信息
  • 增加正确的许可证: OSS 许可证能够爱护贡献者和用户。如果你不确定应该抉择哪个许可证,能够查看这篇文章进行简略的入门,并且确保在你的代码库中有 LICENSE.md 或 LICENSE.txt 文件。
  • 审查应用程序、工具和 Webhooks 的列表: 如果你在流水线中的一个步骤中应用了多个应用程序、工具或 webhooks,请 review 它们是否依然实用,并删除任何古老过期的或未应用的组件。
  • 如果你依赖 GitHub Actions 来构建、测试和部署你的我的项目,肯定要 查看你的工作流程配置。拜访下方链接能够查看 GitHub Actions 平安最佳实际:

https://blog.gitguardian.com/…

总 结

开源组件能够成为大规模网络攻击的一个载体。去年咱们曾经看到了 Apache Log4j 的破绽,这是一个开源的 Java 包,用于反对许多 Java 应用程序的流动记录。尽管不是所有用 Java 编写的软件都有破绽,但受影响的软件包被开发人员宽泛应用,有许多应用程序和服务都应用这个库。大型科技公司,如微软、VMWare、亚马逊、IBM 等都受到影响。

应用不同的工具和防护在整个流水线中领有可见性对于缩小攻击面至关重要,在本文中咱们曾经看到借助 GitHub Marketplace 的利用和 Action 能够帮忙达成这一指标。软件供应链平安治理平台 SEAL 也能够帮忙用户获取我的项目的全局平安可见性,目前已凋谢收费试用:seal.io/trial。

作为维护者和贡献者,能够先创立一个小型流水线,并尝试试用其中一些工具,为每个贡献者平安加固 GitHub 我的项目。

不停地实际是保障平安的要害一环,但更重要的是,不要在 GitHub 上 push 你的密钥!

退出移动版