从工具到实践:怎样在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时将其反馈给你的项目。
https://i-blog.csdnimg.cn/blog_migrate/4c47cedd3b04061d646026830f5a75fe.jpeg
当你计划在项目中采用一个action或一个应用时,你应该在项目页上看到各种信息——GitHub是否验证该action?上图中显示为已验证,你可以在右侧看到一个蓝色的小勾。有多少贡献者在为这个项目工作?该项目获得了多少颗星?有多少issue和PR?
再导航到 GitHub 仓库,看看维护者和贡献者是怎样积极推动这个项目的。它的文档是否完善?他们是否提供了基本的利用范例?(好比一个简单的YAML文件)是否容易实现?是否能与你项目的编程语言兼容?
接下来,我们来看看 GitGuardian 的现实用例。你可以直接在 Marketplace 中搜索到它。
https://i-blog.csdnimg.cn/blog_migrate/21b0c89185df7d1d07521c4d7e80a2ac.jpeg
点击产品页,你将获得更多信息。作为项目的维护者,你将会用 OWASP Action 查抄我们前面提到的要求是否达标。我们可以看到 GitHub 是否验证了该应用、应用安装数目以及更多关于该组织的其他信息。
https://i-blog.csdnimg.cn/blog_migrate/c521fa9e0585b90e0afe1a80cfa0eb32.jpeg
划到页面底部,你将看到代价及安装信息。GitGuardian为公开的代码库提供免费的监控。选择你想要安装的账号,并点击“Install it for free”。
https://i-blog.csdnimg.cn/blog_migrate/d07c6cdf9527336b523b5bc83304511f.jpeg
你可以在所有代码库上都安装 GitGuardian 或者选择其中几个。你可以为必要安全防护的每个阶段重复这一过程。
Section 2:管理开源项目
当贡献者提交PR时,它将触发流水线中集成的所有应用和action。理想状态下,就GitGuardian而言,你渴望凭据不被推送到源代码中,而且在贡献者提交PR之前停止这一活动。你可以在你的CLI上采用 GitGuardian Shield(ggsheild),并与预提交的 git hook集成以增强防护,确保凭据没有被推送到源码中。
如果没有设置 ggshield,在代码库上推送密钥的贡献者会在提交PR时收到告警。下图虚拟PR提交的过程中,你可以看到一些工具被触发。
https://i-blog.csdnimg.cn/blog_migrate/b2ac934d0394b8c857308ea604ce54d9.jpeg
你可以让其中一些工具在主干分支上是必须触发的。要做到这一点,必要进入项目设置,在【Code and automation】中点击【Branches】。在这里,你可以添加分支掩护规则,要求在归并PR前必须通过状态查抄。
https://i-blog.csdnimg.cn/blog_migrate/44a71ead94fe53cb25005bfddc2e7a37.jpeg
怎样从ChatOps中获取代价?
ChatOps 是一个协作模子,将人、工具、流程和自动化连接到一个透明的工作流程中。利用Slack举行讨论,并为特定的工具设置专门的频道,这将有助于你了解项目中发生的事情。监控和设置告警是重要的一环,可以帮助开发人员获得准确的信息。
https://i-blog.csdnimg.cn/blog_migrate/bd97c8dfe5a85235562a40daf4ccb057.jpeg
GitHub 项目:怎样利用面板追踪安全任务
在开发开源项目时,你可以利用GitHub projects来列出你为某一特定功能所要做的所有任务。你可以创建标签和epics(milestones)来跟踪进度或用于提出问题。还可以创建一个安全标签来追踪你项目中的毛病。
https://i-blog.csdnimg.cn/blog_migrate/fd979fa3b1eac017088435ea72440abc.jpeg
你可以利用自动化项目或面板,其中的卡片会根据PR的状态相应地移动。这个方式可以很好地展示功能开发进度以及你大概必要帮助的地方。
https://i-blog.csdnimg.cn/blog_migrate/977359601a7bc5d180c1a36bb922aa45.jpeg
在 README 文件中展示项目的健康状态
如果你想为你的项目吸引更多的贡献者,不要忘记利用应用及action工作流程提供的标签或tag来展示项目的健康状态,并将其添加到项目的README文件顶部。你通过GitHub文档了解更多徽章设置:
https://docs.github.com/en/actions/monitoring-and-troubleshooting-workflows/adding-a-workflow-status-badge
Section 3:安全加固开源项目
除了在流水线各环节添加安全防护外,你还可以通过采用以下最佳实践加固开源项目:
采用最小权限:在成员权限部门将基本权限设置为无权限,这样成员只能克隆和提取公共代码库。如果要给贡献者更多的权限,维护者必要把他们加入团队或让他们成为单个代码库的协作者。创建团队、添加用户,并将他们分配到具有特定权限的特定代码库中。
https://i-blog.csdnimg.cn/blog_migrate/b6aea4877bff68a0aafba37b4270ff7c.jpeg
让所有维护者和贡献者都必须利用2FA。到2023年底,GitHub将要求所有贡献代码的用户启用一种或多种情势的双因素认证。
https://i-blog.csdnimg.cn/blog_migrate/4e36fb7fbd4b72bc2e6e84984196e43b.jpeg
掩护主分支:如上所述,一定要掩护主分支,以免被维护者意外删除。
https://i-blog.csdnimg.cn/blog_migrate/aa5eb5aa5325d6c4644c592c03fae60f.jpeg
启用提醒和告警:更新email所在以保证你能收到来自项目的提醒信息
添加准确的许可证:OSS许可证可以掩护贡献者和用户。如果你不确定应该选择哪个许可证,可以检察这篇文章举行简单的入门,而且确保在你的代码库中有 LICENSE.md 或 LICENSE.txt 文件。
https://i-blog.csdnimg.cn/blog_migrate/dfaa5a684ee2cd5d861fd24275177f94.jpeg
检察应用程序、工具和Webhooks的列表:如果你在流水线中的一个步骤中利用了多个应用程序、工具或webhooks,请review 它们是否仍然实用,并删除任何陈旧过时的或未利用的组件。
如果你依赖 GitHub Actions 来构建、测试和摆设你的项目,一定要查抄你的工作流程配置。访问下方链接可以检察 GitHub Actions 安全最佳实践:
https://blog.gitguardian.com/github-actions-security-cheat-sheet/
总 结
开源组件可以成为大规模网络攻击的一个载体。客岁我们已经看到了Apache Log4j 的毛病,这是一个开源的Java包,用于支持很多Java应用程序的活动记载。固然不是所有用Java编写的软件都有毛病,但受影响的软件包被开发人员广泛利用,有很多应用程序和服务都利用这个库。大型科技公司,如微软、VMWare、亚马逊、IBM等都受到影响。
利用不同的工具和防护在整个流水线中拥有可见性对于减少攻击面至关重要,在本文中我们已经看到借助 GitHub Marketplace 的应用和Action可以帮助达成这一目标。软件供应链安全管理平台SEAL 也可以帮助用户获取项目的全局安全可见性,现在已开放免费试用:seal.io/trial。
作为维护者和贡献者,可以先创建一个小型流水线,并尝试试用其中一些工具,为每个贡献者安全加固GitHub项目。
不绝地实践是保证安全的关键一环,但更重要的是,不要在GitHub上push你的密钥!
题外话
黑客&网络安全怎样学习
今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。
1.学习路线图
https://img-blog.csdnimg.cn/direct/6b23c375be664af6a9486fdd6b4d8520.png
攻击和防守要学的东西也不少,详细要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。
2.视频教程
网上固然也有很多的学习资源,但基本上都残破不全的,这是我本身录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。
内容涵盖了网络安全法学习、网络安全运营等保测评、排泄测试根本、毛病详解、计算机根本知识等,都是网络安全入门必知必会的学习内容。
https://img-blog.csdnimg.cn/direct/33337b025b97437ba0bdd1130f88ceff.png
(都打包成一块的了,不能一一展开,统共300多集)
因篇幅有限,仅展示部门资料,必要见下图即可前往获取
https://i-blog.csdnimg.cn/direct/5f724add5c7e42c185e61d87cdc46565.bmp
页:
[1]