当前位置: 首页 > 科技观察

从工具到实践:如何保护GitHub上的开源项目?

时间:2023-03-20 20:25:33 科技观察

1998年,ChristinePeterson创造了“开源软件”一词??。“这是故意的,让其他人更容易理解这个领域,”她解释道。同年,O'Reilly组织了第一届“开源峰会”。开源软件之所以更受欢迎,是因为用户对软件有更多的控制权,因为他们可以检查代码。开源软件被认为对于长期项目是稳定的,因为这些项目遵循开放标准,并且不会在维护者停止工作时消失。一个活跃的开发者社区非常重要。开源软件比闭源软件需要更多的安全考虑,因为任何人都可以查看和修改代码。贡献者可以发现错误并提交PR以更改代码。与此同时,这也伴随着一系列的安全问题。什么是软件供应链攻击?当有人利用可以访问您企业的数据和系统的外部供应商或第三方组件来渗透您的数字基础设施时,就会发生软件供应链攻击。供应链攻击有多种类型,本文将重点关注开源供应链。任何人都可以通过开源计划为项目的开发做出贡献。使用这个入口点,黑客可以将漏洞编程到开源项目中,当企业将该项目引入他们的软件时,通常在他们不知情的情况下,通过遍历或间接依赖引入新的威胁。Web应用程序安全的重要性Web应用程序安全性是一个概念,涵盖了一组嵌入到Web应用程序中以保护其资产免受潜在恶意行为侵害的安全控制。它涉及安全开发实践,在整个软件开发生命周期(SDLC)中实施安全措施,以发现项目及其配置中的安全漏洞。好消息是,无论是简单的演示项目还是大型开源项目,您都可以通过使用不同的应用程序和操作来实现GitHub内部的安全保护。基于此,开源项目可以拥有与闭源软件同等的安全级别。第1部分:GitHubMarketplace和GitGuardianApp什么是GitHubMarketplace?在2016年的GitHubUniverse上,首次引入了GitHubMarketplace。在这里,开发人员可以找到集成插件并将它们实施到他们的工作流程中。如何使用安全工具创建基础管道并实现保护?您可以利用GitHubMarketplace中的安全应用程序和操作来保护管道的每个开发阶段。一个基本的管道包括:软件组成分析工具,专注于识别代码库中的开源代码,以便维护者和贡献者可以管理他们的安全和许可合规性问题程序运行,一般是按照一套编码规则来划分一组代码如何为你的项目选择相关应用?你需要考虑什么?选择工具、应用程序或操作主要取决于您的项目或团队的工作流程。您使用的是什么类型的技术堆栈?你是部署到Docker还是使用K8S?您的管道中有多少个步骤?能做到步步为营吗?然后,您会找到许多适合您需求的工具和应用程序。对于开源软件的维护者来说,好消息是这些应用程序通常对于公共代码库或开源软件项目是免费的。您可以使用Synk和Mend等2种工具在一个阶段扫描您的依赖项。这两种工具在覆盖率方面各有利弊,将帮助您更好地了解项目的依赖关系。如果您认为一种工具比另一种更好,您仍然可以删除不需要的工具。让我们看一下OWASPZapBaselineScanGitHub操作,它扫描目标URL中的漏洞并在您提交PR时将其反馈给您的项目。当你要在项目中采用一个动作或应用程序时,你应该会在项目页面上看到各种信息——GitHub是否验证了该动作?如上图所示,可以看到右边有一个蓝色的小勾。有多少贡献者在为这个项目工作?该项目获得了多少星?有多少问题和PR?然后导航到GitHub存储库,查看维护者和贡献者如何积极推动项目。它有据可查吗?他们是否提供基本用法示例?(比如一个简单的YAML文件)实现起来容易吗?它与您项目的编程语言兼容吗?接下来,让我们看一下GitGuardian的实际用例。您可以直接在Marketplace中搜索它。单击产品页面,您将获得更多信息。作为项目的维护者,您将使用OWASP操作来检查是否满足我们前面提到的要求。我们可以看到GitHub是否验证了该应用程序、应用程序安装数量以及有关该组织的更多信息。滚动到页面底部,您将看到定价和安装信息。GitGuardian为公共代码存储库提供免费监控。选择您要安装的帐户,然后单击“免费安装”。您可以在所有存储库上安装GitGuardian或选择几个。您可以为需要安全性的每个阶段重复此过程。第2部分:管理开源项目当贡献者提交PR时,它将触发管道中集成的所有应用程序和操作。理想情况下,就GitGuardian而言,您不希望将凭据推送到源代码中,并在贡献者提交PR之前停止此行为。您可以在CLI上使用GitGuardianShield(ggsheild)并与预提交git挂钩集成以增加保护,确保凭证不会被推送到源中。如果未设置ggshield,在存储库上推送密钥的贡献者将在提交PR时收到警告。在下面的虚拟PR提交过程中,您可以看到一些工具被触发。您可以在master分支上强制使用其中一些工具。为此,您需要进入项目设置并单击[代码和自动化]中的[分支]。在这里,您可以添加分支保护规则,要求在合并PR之前通过状态检查。如何从ChatOps中获取价值?ChatOps是一种协作模型,可将人员、工具、流程和自动化连接到一个透明的工作流中。使用Slack进行讨论并为特定工具设置专用频道将帮助您跟踪项目中发生的事情。监视和设置警报是帮助开发人员获取正确信息的重要部分。GitHub项目:如何使用仪表板跟踪安全任务在开发开源项目时,您可以使用GitHub项目列出您必须为特定功能执行的所有任务。您可以创建标签和史诗(里程碑)来跟踪进度或提出问题。还可以创建安全标记来跟踪项目中的错误。您可以使用自动化项目或看板,其中卡片会根据PR的状态相应移动。这是展示功能进展情况以及您可能需要帮助的地方的好方法。在README文件中显示项目健康状态如果你想吸引更多的贡献者到你的项目中,不要忘记使用应用程序和操作工作流提供的标签或标签来显示项目的健康状态并将其添加到项目的README中文件顶部。您可以通过GitHub文档了解有关徽章设置的更多信息:https://docs.github.com/en/actions/monitoring-and-troubleshooting-workflows/adding-a-workflow-status-badge第3节:安全加固开源项目除了在pipeline中为每个环节添加安全保护之外,还可以通过采用以下最佳实践对开源项目进行加固:采用最小权限:在成员权限部分将基本权限设置为无权限,这样成员只能克隆并提取公共代码库。为了赋予贡献者更多权限,维护者需要将他们添加到团队中或让他们成为单个存储库的协作者。创建团队、添加用户,并将他们分配给具有特定权限的特定存储库。使所有维护者和贡献者都必须使用2FA。到2023年底,GitHub将要求所有贡献代码的用户启用一种或多种形式的双因素身份验证。保护master分支:如上所述,一定要保护master分支不被维护者误删。启用提醒和警报:更新电子邮件地址以确保您收到来自项目的提醒添加正确的许可证:OSS许可证保护贡献者和用户。如果您不确定选择哪个许可证,请查看这篇文章以获得简单的入门知识,并确保您的代码库中有LICENSE.md或LICENSE.txt文件。查看应用程序、工具和webhook列表:如果您在管道中的一个步骤中使用多个应用程序、工具或webhook,请查看它们是否仍然适用并删除任何过时或未使用的组件。如果您依赖GitHubActions来构建、测试和部署您的项目,请务必检查您的工作流程配置。请访问以下链接查看GitHubActions安全最佳实践:https://blog.gitguardian.com/github-actions-security-cheat-sheet/总结开源组件可能成为大规模网络攻击的媒介。去年我们发现了ApacheLog4j中的漏洞,这是一个开源Java包,用于支持许多Java应用程序的活动日志记录。虽然并非所有用Java编写的软件都容易受到攻击,但受影响的软件包已被开发人员广泛使用,许多应用程序和服务都使用该库。微软、VMWare、亚马逊、IBM等大型科技公司受到影响。使用不同的工具和防御措施获得整个管道的可见性对于减少攻击面至关重要,在本文中,我们已经了解了在GitHubMarketplace的帮助下的应用程序和操作如何帮助实现这一目标。软件供应链安全管理平台SEAL也可以帮助用户获得项目的全球安全可见性,目前提供免费试用:seal.io/trial。作为维护者和贡献者,您可以从创建一个小型管道开始,并尝试其中的一些工具来为每个贡献者安全地强化您的GitHub项目。不断练习是保持安全的关键部分,但更重要的是,不要将你的密钥推送到GitHub上!