保护GitHub存储库免受恶意提交

Mozilla试图保护其在GitHub上的存储库免受恶意更改。 正如最近的Gentoo事件所表明的那样,此类攻击是真实的。


Mozilla最初使用GitHub作为备份托管。 像Gentoo一样,原始存储库也存储在自己的基础架构中。 尽管大多数Firefox代码仍使用其自己的基础结构进行分发,但是许多项目仅存在于GitHub上。 有些只是实验,有些则用于生产中(例如Firefox帐户 )。 需要保护此类“敏感”存储库免受恶意编辑,同时又不使普通人的提交复杂化。

此处描述了针对从受损存储库中分发(或部署)代码的实际步骤。 我们分享经验和一些审核工具 。 这样的保护几乎不会干扰GitHub中的正常工作流程。

在这里,我们考虑通过此站点的独特机制来入侵GitHub帐户的风险。 正如Gentoo案和其他事件所显示的那样,如果发生黑客入侵,用户可以访问的所有代码都会受到威胁。

问题的实质


GitHub是一个很棒的生态系统,具有许多扩展或“应用程序”,可简化特定的工作流程。 应用程序收到用户的许可,可以代表他执行操作。 他们可能会请求权限,包括更改或添加其他帐户。 GitHub清楚地显示了这些请求:用户必须通过Web界面批准它们,但并不是每个人都对后果很熟悉。 许多人不理解访问个人存储库的权限会代表用户对GitHub上的任何存储库授予相同的访问权限。

过多的权限会通过机密信息危害存储库,而存储库的管理员则看不到任何内容。 他所能做的最好的事情就是在事发后注意到恶意提交。 GitHub和Git都无法配置为阻止或标记这种恶意提交。 仅外部监控。

实作


以下建议来自我们的安全系统 ,仅针对本文已删除Mozilla的特定功能。 我们尽可能地借鉴Internet的最佳实践,使用GitHub的功能,并尽量避免使开发人员的生活变得过于复杂。

给组织的建议


  • 所有员工必须执行2FA。
  • 对于所有或至少具有更高权限的用户:
    • 向组织或管理员提供联系人(电子邮件,IM)(GitHub允许您隐藏联系人信息以保护隐私)。
    • 确保将您的帐户可能受到的威胁(例如,关于笔记本电脑被盗的情况)告知组织或管理员。

存储库准则


  • 重要存储库仅应在遵循上述建议的组织中托管。
  • 定义和配置生产分支:
    • 禁止强行推。
    • 只提交给少数用户的权限。
    • 将这些限制也应用于管理员和所有者。
    • 使用先前已知的GPG密钥签署所有提交。

工作流程建议


  • 应当使用与先前已知的GPG密钥签名的标签来记录值得审核的部署,发行和其他事件。
  • 仅在对所有已签名的提交和正确密钥的标签进行审核之后,才应发布所有部署和发行版。

这些保护措施的实施需要一定的成本,尤其是与承诺的签署有关。 我们已经开发了用于审核配置的工具,并计划发布用于审核提交的工具。 所有这些都在我们的存储库中



这是一个审计示例。 首先,我们获得octo_org组织的数据的本地副本,然后为每个存储库编译一个报告:

 $ ./get_branch_protections.py octo_org 2018-07-06 13:52:40,584 INFO: Running as ms_octo_cat 2018-07-06 13:52:40,854 INFO: Gathering branch protection data. (calls remaining 4992). 2018-07-06 13:52:41,117 INFO: Starting on org octo_org. (calls remaining 4992). 2018-07-06 13:52:59,116 INFO: Finished gathering branch protection data (calls remaining 4947). 

现在,使用本地缓存的数据,您可以生成任何报告。 例如,一份报告显示符合上述建议:

 $ ./report_branch_status.py --header octo_org.db.json name,protected,restricted,enforcement,signed,team_used octo_org/react-starter,True,False,False,False,False octo_org/node-starter,False,False,False,False,False 

如您所见,只有octo_org/react-starter包含防止在生产分支上强制推送的保护。 结果为CSV格式,可轻松插入电子表格中。

你怎么能帮忙


我们仍在执行这些建议并一直学习。 如果您认为我们的存储库安全建议适合您,请帮助简化实施。 在提示页面上分享您的经验,或在GitHub-Audit存储库中打开 故障单

Source: https://habr.com/ru/post/zh-CN423321/


All Articles