GitHub 最佳安全实践
-
切勿在 GitHub 上存储凭据和敏感数据;GitHub 的目的是托管代码存储库。除了在帐户上设置的权限之外,没有其他安全方法可以确保您的密钥、私钥和敏感数据保留在受控且受保护的环境中。
Git code commit 保存了已添加和删除内容的历史记录,从而使敏感数据永久保留在分支上。当分支合并和 Fork 时,潜在的数据或基础架构安全风险可能会呈指数级增长。降低此风险的最简单方法是,在提交到分支之前不要在代码中存储凭据和敏感数据。可以在 CI/CD 流水线中使用 git-secreits 等工具。另一个方法是使用机密和身份管理工具,如 Vault 和 Keycloak。
禁用 Fork;分叉(fork)是一种 git 技术,它允许开发人员在不涉及原始代码的情况下创建代码仓库的副本。虽然 fork 非常适合实验和沙箱,但它也可能导致无法跟踪敏感数据和私有凭据的最终位置。代码仓库最初可能是私有的,但 fork 可以快速将所有内容暴露到公共空间中。风险随着每次分叉的发生呈指数级增加,通过暴露的敏感数据创建树状的安全漏洞链。为了防止这种情况发生,请禁用 Fork 存储库以帮助降低敏感数据进入代码的风险。
禁用可见性更改;有时开发人员拥有的权限和权限比其角色范围所需的权限更多。对于没有安全概念的开发人员来说,很容易不小心更改代码库的可见性。如果代码存储库中存在敏感数据,有权访问此更改可见性功能的人员越多,则潜在的风险就越高。要防止此类情况,可以将更改存储库可见性的功能设置为仅对组织所有者开放,或允许管理员特权成员使用权限。
验证 GitHub 应用程序;现在的开发团队有时由外部和第三方团队组成,因此验证 GitHub 应用程序涉及跟踪第三方开发人员及其可访问性级别。这也意味着,一旦他们离开项目,或者不再处理代码,就需要撤销他们的访问权限。不同程度的可访问性也应与他们在项目中的作用和参与程度挂钩。比如,代码审核只需要提取代码的能力,而不需要创建提交。只有在具有相应权限的人进行一系列检查和代码验证之后,才应进行拉取和合并请求。
执行双重认证;双重身份验证(2FA)现在是帐户安全的行业标准。它也应当成为组织的标准安全要求,来防止通过不安全的帐户泄漏代码。2FA 在登录 GitHub 时增加了一层额外的安全保护,并且可以通过组织的设置在组织级别强制执行。当保存设置后,系统可能会提示有关未激活 2FA 的个人详细信息。这些信息将从组织中删除,并且只有在其帐户上实施 2FA 后才能重新添加。可以在组织的审核日志中查看已删除的成员。
实行单节点登陆(仅限 GitHub Enterprise);SAML 单点登录 (Single Sign-On, SSO)是一项仅适用于 GitHub Enterprise 的功能。借助此功能,GitHub 上的组织可以通过显示授予对特定资源(如单个代码仓库、拉取请求和引发的问题)的访问权限来控制可访问性。这允许组织对代码推送、拉取和审阅过程的不同部分的可访问性进行分段。SAML SSO 还允许企业设置已批准的身份提供商。这意味着,企业可以限制用户仅使用组织的帐户登录,而不是使用个人 GitHub 帐户。这能够有效缓解在向 GitHub 帐户授予可访问性时可能发生的潜在安全风险。
限制访问允许的 IP 地址;对于大型企业而言,跟踪访问用户既困难又耗时。防止不必要的访问的方法是限制通过IP地址的访问。这意味着只有内部部署的成员或有权访问公司维护的静态 IP 远程网络的成员才能进入企业的代码存储库和相关代码工作。要限制、管理和将 IP 地址列入白名单,在这里可以以 CIDR 表示法配置特定 IP 地址或范围的列表。
严格管理外部参与者权限;企业可能通过外包来加快项目的进展,或者引入外部专业知识来帮助填补团队空白。外部成员的参与越多,相应的安全风险就越高。通过严格管理外部协作者和参与者,企业可以减少冗余用户数量及其对代码存储库的可访问性。管理外部协作者的一种方法是将访问权限和权限授予权限集中给管理员。这样做还可以降低由于 GitHub 的长期访问成本。
及时撤销权限;一个好的安全策略,需要考虑到团队成员离开企业或项目时,对应的权限进行怎样的修改和调整。这包括撤销不同类型帐户的可访问性的时间。有时团队成员可能仍需要访问代码,但不需要参与,因此撤销更改权限或将其切换为维护者角色可能更适合。此方法遵循最小特权原则,即授予执行特定任务所需的权限。这样做将确保每个有权访问代码的人都只在其权限范围内工作。
要求提交签名;提交签名是对代码合并进行加密签名以进行验证和可跟踪性的过程。这对于代码审核跟踪非常重要,因为恶意攻击者伪装成其他人并不难,只需在 git 配置中更改其用户名和电子邮件地址并推送剥削性代码合并。可以将 Git 设置为通过 GPG(GNU Privacy Guard)对提交进行签名,并在 git 配置中使用私有密钥配置提交。完成此操作后,您可以将 GPG key 添加到 GitHub。在提交时,提交旁边会显示一个“已验证”标志。
执行提交前代码审查;强制执行代码审查可以防止恶意代码正式合并到分支中。代码审查也是检测代码异常的良好做法,能够帮助企业避免导致未来的漏洞和长期的安全风险问题。GitHub 有一个拉取请求工具,允许授权的团队成员在合并到基本分支之前讨论和查看潜在的更改。发出拉取请求时,可以将工作负责人附加到拉取请求,来通知他们查看待处理的审核。
西南地区IT社群(QQ)
- 云南
- 【昆明网页设计交流吧】243627302
- 【昆明nodejs交流吧】 243626749
- 【VUE】838405306
- 【云南程序员总群】343606807
- 【昆明UI设计】104031254
- 【云南软件外包】15547313
- 贵州
- 【PHP/java源码/站长交流群】55692114
- 四川
- 【成都Java/JavaWeb交流】86669225
- 【vaScript+PHP+MySql】116270060
- 【UI设计/设计交流学习群】135794928
- 重庆
- 【诺基亚 JAVA游戏博物馆】 559479780
- 【PHP,Java,Python,C++接单】 442103442
- 西藏