针对GitHub的八项安全实践
GitHub可谓世界上最大、最受欢迎的社交开发平台。根据其《2019年Octoverse的态势报告》:GitHub当时拥有超过4000万名用户,而且该社区每天都在不断地壮大。
由于各类开发人员频繁地使用由该平台所提供的开源代码去构建软件,那么大量可以被重复使用的代码往往会增加漏洞从一个依赖项或存储库,迁移到另一个依赖项或存储库的潜在风险。可见,基于此类高度互联性,Github平台及内容的安全性显得尤为重要。每个贡献者和用户都应当专注于创建安全可靠的开发环境。
01
加强访问控制
实施适当的访问控制是增强安全性的最佳实践之一。这不仅仅体现在GitHub上,对于任何需要保障代码安全性的环境皆是如此。
目前,GitHub提供了多种选项,让用户减少不当的泄漏风险。其中,我们最常用的当属最小特权(least privilege)模型。该模型仅向用户授予基本必要的权限。以下是我们在使用过程中,需要遵循的各种基本访问控制准则:
限制存储库的创建,以防止用户在公共存储库中公开其组织的相关信息;
启用分支保护和状态检查,以确保用户可以合并各种提交或安全地操作分支;
禁用或有条件地允许fork私有存储库,以确保用户不会暴露或向未经授权方共享所在组织的代码;
撤消那些不再属于贡献者的、所有非活动用户的访问权限;
定期检查对GitHub项目的访问权限;
确保用户不会共享GitHub帐户或密码;
确保每个贡献者在其帐户上启用双因素身份验证;
定期更换个人访问的令牌和SSH密钥。
02
不要在GitHub文件中存储密钥
你是否注意到代码、配置文件或提交的消息,都可能成为被攻击的网关,向其他GitHub存储库泄露机密信息。
为了防止敏感数据被添加到存储库中,请考虑使用诸如git-secrets或vault之类的密钥管理工具。这些工具会扫描您的代码库,并在代码或配置文件中检测到敏感信息时,立即终止构建。
你也许会在意识到GitHub存储库里有敏感信息泄漏时,立即将其删除。但是,GitHub会在存储库中保留所有提交的历史记录。因此仅删除数据是远远不够的,需要从GitHub存储库的历史记录中清除掉相应的文件。
同时,为了提高安全性,我们也需要将那些已经泄露出去的密钥(包括:密码和令牌),及时设置为失效状态。
03
启用安全警报
如上图所述,GitHub安全警报源自(美国)国家漏洞数据库,GitHub安全公告和WhiteSource漏洞数据库。它们提供了200多种语言的漏洞数据,通过GitHub上提供的实时安全警报服务,用户可以更加安全地使用各种开源库。
04
验证GitHub应用程序
GitHub的市场里包含了丰富的由第三方开发人员和组织所编写的应用程序。我们往往需要仔细验证那些被添加到GitHub存储库中的每个应用程序。也就是说,在安装GitHub应用程序时,请注意遵循以下规范:
强制执行最小特权原则。切勿向应用程序授予超出其要求的访问权限;
对应用请求的访问权限始终保持谨慎的态度,要及时考虑到授予某项访问权限可能带来的损害;
在给GitHub的访问主体授权时,请进行背景检查,以确保应用程序背后的组织或开发人员合法且可信;
需要验证应用程序的安全状态是否可靠,以避免整体的安全态势遭受破坏。
根据木桶原理,应用程序的安全性取决于其最薄弱的链接,而GitHub存储库也是如此。因此,在授予应用程序对存储库的恰当访问权限之前,请务必验证它的来源,以确保其真实可信。
05
审核所有导入GitHub的代码
开发人员往往需要将外部代码导入GitHub中。那么,请在每次导入项目时,务必考虑对源代码执行完整性审核。这看上去非常繁琐,甚至对于一些较小的项目来说有些吹毛求疵,但是这是一种非常好的安全实践,可以在源头上避免向存储库中引入潜在的安全漏洞。
向GitHub导入代码可能带来的另一个风险是:代码中可能包含诸如密码之类的敏感信息。而如果将其存储到GitHub文件中,那么就会提高应用的整体风险值。可见,我们在将代码推送到GitHub之前,必须进行安全态势的审核与评估,以便发现其中的安全风险点。
值得一提的是:在被导入的过程中,代码实际上是从一种封闭的环境,转换到了一种可以被相互调用和影响的环境中。因此,环境的变化也会促使我们重新进行安全关系和执行层面上的审查。
06
使用自动静态源代码分析
WhiteSource Bolt通过扫描你的存储库,以检测出所有开源组件中的漏洞。与此同时,它还能提供详细的漏洞信息,以及对应的修复建议。
当然,你也可以使用其他开源的分析工具,对目标GitHub存储库开展自动化的,源代码级的安全分析。
07
选择合适的GitHub产品
大多数组织,特别是政府部门和金融机构,都会通过规定来限制其开发团队使用GitHub之类的社交开发平台,以防止其他方通过平台访问到本组织的源代码。
如果贵组织确有此项严格的规定,那么请考虑使用GitHub Enterprise。它允许用户在内部托管的GitHub存储库环境中执行各项操作。此举既允许内部开发团队访问到手头所有的项目,又不必担心被GitHub上的其他用户所“剽窃”到,因此,企业软件开发包会得到更加安全的保护。
08
采用全面的安全策略
常言道,安全是一项集体的责任。如果你是一名企业安全经理,那么当务之急就是实施那些能够让所有利益相关者都应遵循的安全策略。理想情况下,应该在计划阶段,就将安全和开发团队召集在一起,以确保他们能够通力协作。这样,在项目的开发过程中,实施安全控制将会变得更加容易。而随着人员意识的提高,各种所谓在存储库中直接存储密码的行为,也就不会频繁出现。
此外,通过清晰的记录,团队成员还可以及时报告,并协同解决存储库中暴露的各项安全问题。
每位开发人员都应当专注于保护自己的代码,以及在GitHub中的安全问题。上述提供的各项安全实践,值得大家在开发过程中持续尝试与践行。
你可以在使用GitHub原生安全服务的同时,实施适当的身份验证和访问控制,并通过集成其他工具的方式,来增强开发工作流程中的安全态势。
墙 裂 推 荐