教你在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://img-
blog.csdnimg.cn/img_convert/8e1faaf5dc9afe5004d973b45cd7307c.jpeg)

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

再导航到 GitHub
仓库,看看维护者和贡献者是如何积极推动这个项目的。它的文档是否完善?他们是否提供了基本的使用范例?(比如一个简单的YAML文件)是否容易实现?是否能与你项目的编程语言兼容?

接下来,我们来看看 GitGuardian 的实际用例。你可以直接在 Marketplace 中搜索到它。

![](https://img-
blog.csdnimg.cn/img_convert/5cfbdf139abb2a7debeea5fbb3633961.jpeg)

点击产品页,你将获得更多信息。作为项目的维护者,你将会用 OWASP Action 检查我们前面提到的要求是否达标。我们可以看到 GitHub
是否验证了该应用、应用安装数量以及更多关于该组织的其他信息。

![](https://img-
blog.csdnimg.cn/img_convert/28613e86ff593959e23401f85c8d915b.jpeg)

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

![](https://img-
blog.csdnimg.cn/img_convert/181cb6aaad04419ca30f19e0a6f8e30f.jpeg)

你可以在所有代码库上都安装 GitGuardian 或者选择其中几个。你可以为需要安全防护的每个阶段重复这一过程。

Section
2:管理开源项目

当贡献者提交PR时,它将触发流水线中集成的所有应用和action。理想状况下,就GitGuardian而言,你希望凭证不被推送到源代码中,并且在贡献者提交PR之前停止这一行为。你可以在你的CLI上采用
GitGuardian Shield(ggsheild),并与预提交的 git hook集成以增强防护,确保凭证没有被推送到源码中。

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

![](https://img-
blog.csdnimg.cn/img_convert/ceedd95b5a7454a2c6bd2c52816fc616.jpeg)

你可以让其中一些工具在主干分支上是必须触发的。要做到这一点,需要进入项目设置,在【Code and
automation】中点击【Branches】。在这里,你可以添加分支保护规则,要求在合并PR前必须通过状态检查。

![](https://img-
blog.csdnimg.cn/img_convert/13b2bdebea1d8a3af3c306665410e51e.jpeg)

如何从ChatOps中获取价值?

ChatOps
是一个协作模型,将人、工具、流程和自动化连接到一个透明的工作流程中。使用Slack进行讨论,并为特定的工具设置专门的频道,这将有助于你了解项目中发生的事情。监控和设置告警是重要的一环,可以帮助开发人员获得正确的信息。

![](https://img-
blog.csdnimg.cn/img_convert/086663a6ab01dfdf5fcbe1d462678991.jpeg)

GitHub
项目:如何利用面板追踪安全任务

在开发开源项目时,你可以利用GitHub
projects来列出你为某一特定功能所要做的所有任务。你可以创建标签和epics(milestones)来跟踪进度或用于提出问题。还可以创建一个安全标签来追踪你项目中的漏洞。

![](https://img-
blog.csdnimg.cn/img_convert/78e5f20711a50577a4583ddd3815771d.jpeg)

你可以使用自动化项目或面板,其中的卡片会根据PR的状态相应地移动。这个方式可以很好地展示功能开发进度以及你可能需要帮助的地方。

![](https://img-
blog.csdnimg.cn/img_convert/09280767d45d8071ee6883f6aa3f241d.jpeg)


README 文件中展示项目的健康状态

如果你想为你的项目吸引更多的贡献者,不要忘记使用应用及action工作流程提供的标签或tag来展示项目的健康状态,并将其添加到项目的README文件顶部。你通过GitHub文档了解更多徽章设置:

https://docs.github.com/en/actions/monitoring-and-troubleshooting-
workflows/adding-a-workflow-status-badge

Section
3:安全加固开源项目

除了在流水线各环节添加安全防护外,你还可以通过采用以下最佳实践加固开源项目:

采用最小权限:在成员权限部分将基本权限设置为无权限,这样成员只能克隆和提取公共代码库。如果要给贡献者更多的权限,维护者需要把他们加入团队或让他们成为单个代码库的协作者。创建团队、添加用户,并将他们分配到具有特定权限的特定代码库中。

![](https://img-
blog.csdnimg.cn/img_convert/784a17729511f8386d814de623a3c76a.jpeg)

让所有维护者和贡献者都必须使用2FA。到2023年底,GitHub将要求所有贡献代码的用户启用一种或多种形式的双因素认证。

![](https://img-
blog.csdnimg.cn/img_convert/8f8f6fbb3b2f425ed516f66d2be8965f.jpeg)

保护主分支:如上所述,一定要保护主分支,以免被维护者意外删除。

![](https://img-
blog.csdnimg.cn/img_convert/43d5735ccced80505e2edeb758023258.jpeg)

启用提醒和告警:更新email地址以保证你能收到来自项目的提醒信息

添加正确的许可证:OSS许可证可以保护贡献者和用户。如果你不确定应该选择哪个许可证,可以查看这篇文章进行简单的入门,并且确保在你的代码库中有 LICENSE.md 或 LICENSE.txt 文件。

![](https://img-
blog.csdnimg.cn/img_convert/e4870170bc988826e26827de09fd7056.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你的密钥!

如果你也想学习:黑客&网络安全的SQL攻防

在这里领取:

![](https://img-
blog.csdnimg.cn/img_convert/d6f09a07b59af3c6cfbcfd59819ef3c4.png)

这个是我花了几天几夜自整理的最新最全网安学习资料包免费共享给你们,其中包含以下东西:

1.学习路线&职业规划

![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/a75ac242398c41dda98cdd4fd739ce8d.png#pic_center)
![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/8b82dd4edd07450c9074a7bd12e1b89a.png#pic_center)

2.全套体系课&入门到精通

![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/da5380b7a1dc45c9be6045ec5e413eaa.png#pic_center)

3.黑客电子书&面试资料

![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/c41dc121bf364201976731c5eba454cc.png#pic_center)

学习网络安全技术的方法无非三种:

第一种是报网络安全专业,现在叫网络空间安全专业,主要专业课程:程序设计、计算机组成原理原理、数据结构、操作系统原理、数据库系统、 计算机网络、人工智能、自然语言处理、社会计算、网络安全法律法规、网络安全、内容安全、数字取证、机器学习,多媒体技术,信息检索、舆情分析等。

第二种是自学,就是在网上找资源、找教程,或者是想办法认识一-些大佬,抱紧大腿,不过这种方法很耗时间,而且学习没有规划,可能很长一段时间感觉自己没有进步,容易劝退。

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

第三种就是去找培训。

image.png

接下来,我会教你零基础入门快速入门上手网络安全。

网络安全入门到底是先学编程还是先学计算机基础?这是一个争议比较大的问题,有的人会建议先学编程,而有的人会建议先学计算机基础,其实这都是要学的。而且这些对学习网络安全来说非常重要。但是对于完全零基础的人来说又或者急于转行的人来说,学习编程或者计算机基础对他们来说都有一定的难度,并且花费时间太长。

第一阶段:基础准备 4周~6周

这个阶段是所有准备进入安全行业必学的部分,俗话说:基础不劳,地动山摇
image.png

第二阶段:web渗透

学习基础 时间:1周 ~ 2周:

① 了解基本概念:(SQL注入、XSS、上传、CSRF、一句话木马、等)为之后的WEB渗透测试打下基础。
② 查看一些论坛的一些Web渗透,学一学案例的思路,每一个站点都不一样,所以思路是主要的。
③ 学会提问的艺术,如果遇到不懂得要善于提问。
image.png

配置渗透环境 时间:3周 ~ 4周:

① 了解渗透测试常用的工具,例如(AWVS、SQLMAP、NMAP、BURP、中国菜刀等)。
② 下载这些工具无后门版本并且安装到计算机上。
③ 了解这些工具的使用场景,懂得基本的使用,推荐在Google上查找。

渗透实战操作 时间:约6周:

① 在网上搜索渗透实战案例,深入了解SQL注入、文件上传、解析漏洞等在实战中的使用。
② 自己搭建漏洞环境测试,推荐DWVA,SQLi-labs,Upload-labs,bWAPP。
③ 懂得渗透测试的阶段,每一个阶段需要做那些动作:例如PTES渗透测试执行标准。
④ 深入研究手工SQL注入,寻找绕过waf的方法,制作自己的脚本。
⑤ 研究文件上传的原理,如何进行截断、双重后缀欺骗(IIS、PHP)、解析漏洞利用(IIS、Nignix、Apache)等,参照:上传攻击框架。
⑥ 了解XSS形成原理和种类,在DWVA中进行实践,使用一个含有XSS漏洞的cms,安装安全狗等进行测试。
⑦ 了解一句话木马,并尝试编写过狗一句话。
⑧ 研究在Windows和Linux下的提升权限,Google关键词:提权
image.png
以上就是入门阶段

第三阶段:进阶

已经入门并且找到工作之后又该怎么进阶?详情看下图
image.png

给新手小白的入门建议:
新手入门学习最好还是从视频入手进行学习,视频的浅显易懂相比起晦涩的文字而言更容易吸收,这里我给大家准备了一套网络安全从入门到精通的视频学习资料包免费领取哦!

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值