如同世界正在经历的疫情,由于网络攻击的大幅增加,许多公司也遭受着“网络疫情”,保障代码安全迫在眉睫。阅读本文,将带您了解如何在代码发布到 GitHub 之前最大化安全权限,及查看创建计划来锁定 GitHub 开发流程中所需的多层权限和工具。
1. 了解您的 GitHub 账户类型
GitHub 有三个帐户类型,其访问控制量不等。
- 个人帐户:此帐户仅允许一个所有者添加项目协作者。
- 组织帐户:此帐户类型根据团队结构控制访问权限。它允许跨多个团队成员进行更详细的访问。
- 企业帐户:此帐户类型包括可跨多个组织的强大访问控制。为了提高安全性,它提供了一个本地托管选项。此选项可确保 GitHub 存储库在没有安全的企业网络虚拟专用网络访问下无法在互联网上进行访问。
了解您的开发团队拥有哪种类型的帐户,以便您可以充分利用所有可用的访问权限。
2. 集中访问管理
将访问权限和权限集中给管理员可以简化外部协作者的管理,还可以降低GitHub访问成本。
GitHub 服务器访问
GitHub 为开发提供以下类型的访问权限。根据开发人员角色设置访问级别。
- 阅读: 使开发人员可以查看和 Clone 代码库,同时不能对代码进行更改。
- 分类:使开发人员能够在没有写入访问权限的情况下管理拉取请求。
- 写入:使开发人员能够同时将新代码提交到存储库。
- 维护:无需授予访问敏感操作权限,使项目经理能够监督代码库。
- 管理:使开发人员能够完全控制代码库,包括保障安全性和删除代码库。
避免根据需求设置访问权限。虽然在短期内很方便,但随着项目的发展和时间的推移,项目中的角色和职位可能会发生变化。为了最大化访问安全,请指定一个人来专门处理和授予项目所需的最低权限。
组织管理访问
如果您拥有组织所有者帐户,则可以将新用户添加到存储库并控制其访问级别。您需要确定组织的基本权限配置文件。当您将新成员添加到 GitHub 存储库时,将自动应用基本权限。默认情况下,为了获得最大的安全性,请确保基本权限仅有读取访问权限。仅在需要时授予更广泛的访问权限。
3. 保护您的代码库
根据2019年发布的一项研究,对公共 GitHub 代码库的全面扫描发现该平台上共有超过57万个敏感数据实例。这些实例包括 API 密钥、私有密钥、OAuth ID、AWS 访问密钥 ID 和各种访问 token。 这些类型暴露的主要风险包括经济损失、隐私泄露、数据完整性受损以及信息滥用。尝试执行以下做法来保护您的代码库。
限制代码库可见性
配置不当的服务器或访问权限配置不当的开发人员可能会不小心更改代码库的可见性。要避免这种情况并确保最大安全性,请将代码库可见性更改限制为组织的所有者帐户或项目的管理员级别。
实施单点登录
具有 GitHub Enterprise 的组织可以使用单节点登录(Single Sign-On, SSO)。借助 SSO,组织可以使用自己的帐户和访问权限规则,而无需开发人员使用 GitHub 帐户。SSO 可限制潜在的人为错误和密码重用问题。
禁用分叉(fork)
通过有限的只读访问权限,开发人员可以使用 Fork 轻松复制整个代码库。代码仓库最初可能是私有的,但 fork 可以快速将所有内容暴露到公共空间中。风险随着每次 Fork 的发生呈指数级增加,通过暴露的敏感数据创建树状的安全漏洞链。为避免这些情况,请禁用 Fork 以获得最大的安全性。
4. 验证访问权限
若要确保 GitHub 帐户和数据的安全,请要求和管理身份验证访问。
双重身份验证
双重身份验证(2FA)通过在对登录进行身份验证时需要多个凭据来保障安全。为了获得最大的安全性,GitHub 建议使用带有使用时间限制的一次性密码(TOTP)服务,例如 LastPass 身份验证器或 Microsoft 身份验证器。
SSH 身份验证
用户设置安全系数较低的密码或在多个服务之间共享密码,从而产生安全风险。为避免此类风险,请使用 SSH 私有密钥/公有密钥对服务器上的操作进行身份验证。为了提高安全性,GitHub 支持自动 SSH 密钥过期和轮换,即使 SSH 密钥泄露,访问窗口也会受到限制。
个人访问令牌
对于较小的项目,请使用个人访问令牌。个人访问令牌的运作原理类似于 SSH 密钥,但不提供自动轮换,GitHub 帐户所有者需要手动设置。
5. 将访问限制在预批准 IP 地址列表
将 GitHub 服务器的访问锁定在预先批准的静态 IP 地址列表中,这种方法是最简单、最直接的安全访问方式之一。有了IP限制,黑客在试图访问你的 GitHub 代码仓库之前,必须识别并渗透到预先批准的名单上的计算机。即使你的登录凭证被泄露,这对他们来说也是一个重大障碍。
6. 及时撤销权限
为了保持最高的安全标准,需要细化管理访问权限,并在项目开发期间定期对其进行评估。当员工离开项目或企业时,请及时修改或撤销其访问权限。此方法遵循最小特权原则,即授予执行特定任务所需的权限。这样做将确保每个有权访问代码的人都只在其权限范围内工作。
7. 密钥管理解决方案
GitHub 代码库面临的最大安全风险之一是开发人员的粗心大意,而不是恶意组织入侵基础架构。为最大化代码库的安全性,可以考虑密钥管理解决方案。这些解决方案会自动阻止敏感信息到达 GitHub 代码库,并在敏感数据已泄露的情况下清理代码库。 多个 GitHub 工具可处理不同的安全模式,例如:
- git rebase,用于删除意外提交到代码中的已知敏感信息的命令行工具。
- truffleHog,是一款功能强大的数据挖掘工具,该工具可以帮助广大研究人员轻松从目标 Git 库中搜索出搜索高熵字符串和敏感数据(如 API 密钥,令牌和访问凭据),可以根据这些信息来提升自己代码库的安全性。
- Git-Secret,用来加密 git 项目中的文件,防止 git 项目传到网上出现泄密的情况。
密钥管理解决方案需要直接集成到 CI/CD 流水线中,还必须使用 AI 和机器学习算法来进行自动识别和阻止,然后再将其推送到 GitHub 存储库。
若要防止机密首先暴露(即便是意外泄露),请实施 “Secret Vault 机密保险库” 安全策略。Secret Vault 是一个独立的系统,用于存储敏感信息。而 Vault 是一种用于保护高度敏感数据的工具,同时提供统一的访问接口。有了 Secret Vault,可以执行更严格的访问控制和审核跟踪,并能够轻松检测漏洞和违规行为。
8. 制定安全计划保护您的代码
在制定安全计划时,请注意以下几点:
- 在组织内强制实施安全标准,并将所有敏感信息存储在 Secret Vault 或安全密钥存储中。
- 对组织中使用的敏感信息进行分类。了解组织可能出现漏洞的地方,无论是数据库密码、API 密钥、token 还是管理面板的 URL。
- 最重要的是,要意识到人为错误通常是安全漏洞的根源。处理安全漏洞的成本之高可能给企业或组织带来“灭顶之灾”。
企业可以尝试使用这些扫描工具,并将此工具集成到 CI/CD 流水线中,来有效阻止敏感信息提交到 GitHub 代码库。