Help us learn about your current experience with the documentation. Take the survey.

应对安全事件

当安全事件发生时,您应主要遵循贵组织定义的流程。GitLab 安全运营团队创建了本指南:

  • 针对 GitLab 自托管实例和 GitLab.com 上群组的管理员和维护人员。
  • 提供有关如何应对与 GitLab 服务相关的各种安全事件的额外信息和最佳实践。
  • 作为贵组织处理安全事件流程的补充。不是替代方案

使用本指南,您应该能够自信地处理与 GitLab 相关的安全事件。在必要时,本指南会链接到 GitLab 文档的其他部分。

使用本指南中提到的建议/推荐时,请自行承担风险。

常见安全事件场景

凭证暴露到公共互联网

此场景指的是由于配置错误或人为错误导致敏感身份验证或授权信息暴露到互联网上的安全事件。此类信息可能包括:

  • 密码。
  • 个人访问令牌。
  • 群组/项目访问令牌。
  • Runner 令牌。
  • 流水线触发令牌。
  • SSH 密钥。

此场景还可能包括通过 GitLab 服务暴露的第三方敏感凭证信息。例如,意外提交到公共 GitLab 项目或 CI/CD 设置配置错误都可能导致暴露。更多信息请参见:

应对措施

与凭证暴露相关的安全事件严重程度可能从低到不等,具体取决于令牌类型及其关联权限。应对此类事件时,您应该:

  • 确定令牌的类型和范围。
  • 根据令牌信息识别令牌所有者和相关团队。
  • 在评估了令牌范围和潜在影响后,撤销轮换该令牌。撤销生产环境令牌需要在暴露令牌带来的安全风险与撤销令牌可能导致的可用性风险之间取得平衡。仅在以下情况下撤销令牌:
    • 您确信自己理解令牌撤销的潜在影响。
    • 遵循贵公司的安全事件响应指南。
  • 记录凭证暴露时间和凭证撤销时间。
  • 查看 GitLab 审计日志,识别与暴露令牌相关的任何未授权活动。根据令牌范围和类型,搜索与以下内容相关的审计事件:
    • 新创建的用户。
    • 令牌。
    • 恶意流水线。
    • 代码更改。
    • 项目设置更改。

事件类型

  • 查看您群组或命名空间可用的审计事件
  • 攻击者可能会尝试创建令牌、SSH 密钥或用户账户以维持持久性。查找与此类活动相关的审计事件
  • 关注 CI 相关的审计事件,识别对 CI/CD 变量的任何修改。
  • 查看由攻击者运行的任何流水线的作业日志

怀疑用户账户被入侵

应对措施

如果您怀疑用户账户或机器人账户已被入侵,您应该:

事件类型

查看您可用的审计事件,识别任何可疑的账户行为。例如:

  • 可疑的登录事件。
  • 创建或删除个人、项目和群组访问令牌。
  • 创建或删除 SSH 或 GPG 密钥。
  • 创建、修改或删除双因素身份验证。
  • 对仓库的更改。
  • 对群组或项目配置的更改。
  • 添加或修改 runner。
  • 添加或修改 webhook 或 Git hook。
  • 添加或修改授权的 OAuth 应用程序。
  • 对连接的 SAML 身份提供商的更改。
  • 对电子邮件地址或通知的更改。

CI/CD 相关安全事件

CI/CD 工作流是现代软件开发的重要组成部分,主要由开发人员和 SRE 使用来构建、测试和部署代码到生产环境。由于这些工作流连接到生产环境,它们通常需要访问 CI/CD 流水线中的敏感凭证。与 CI/CD 相关的安全事件可能因您的设置而异,但大致可分为以下几类:

  • 与暴露的 GitLab CI/CD 作业令牌相关的安全事件。
  • 通过配置错误的 GitLab CI/CD 暴露的凭证。

应对措施

暴露的 GitLab CI/CD 作业令牌

当流水线作业即将运行时,GitLab 会生成一个唯一令牌并将其作为 CI_JOB_TOKEN预定义变量注入。您可以使用 GitLab CI/CD 作业令牌对特定 API 端点进行身份验证。该令牌对 API 的访问权限与导致作业运行的用户相同。该令牌仅在流水线作业运行时有效。作业完成后,令牌过期且无法再使用。

在正常情况下,CI_JOB_TOKEN 不会显示在作业日志中。但是,您可能会无意中通过以下方式暴露这些数据:

  • 在流水线中启用详细日志。
  • 运行将 shell 环境变量回显到控制台的命令。
  • 未能正确保护 runner 基础设施可能会无意中暴露这些数据。

在这种情况下,您应该:

  • 检查仓库中是否有对源代码的任何最近修改。您可以检查修改文件的提交历史以确定进行更改的操作者。如果您怀疑有可疑的编辑,请使用怀疑用户账户被入侵指南调查用户活动。
  • 任何对该文件调用的代码的可疑修改都可能导致问题,应进行调查并可能导致凭证暴露。
  • 在确定撤销的生产影响后,考虑轮换暴露的凭证。
  • 查看您可用的审计日志,识别对用户和项目设置的任何可疑修改。
通过配置错误的 GitLab CI/CD 暴露的凭证

当存储为 CI 变量的凭证未进行屏蔽时,它们可能会在作业日志中暴露。例如,回显环境变量或遇到详细的错误消息。根据项目可见性,作业日志可能在您的公司内部可访问,或者如果您的项目是公开的,则可能在互联网上访问。为了缓解此类安全事件,您应该:

  • 通过遵循暴露的凭证指南撤销暴露的凭证。
  • 考虑屏蔽变量。这将防止它们直接反映在作业日志中。但是,屏蔽并非万无一失。例如,屏蔽的变量仍可能被写入工件文件或发送到远程系统。
  • 考虑保护变量。这确保它们仅在受保护的分支中可用。
  • 考虑禁用公共流水线,以防止公共访问作业日志和工件。
  • 审查工件保留和过期策略。
  • 遵循 CI/CD作业令牌安全指南获取有关最佳实践的更多信息。
  • 审查暴露的凭证系统的审计日志,例如 AWS 的 CloudTrail 日志或 GCP 的 CloudAudit 日志,以确定在暴露时是否进行了任何可疑更改。
  • 查看您可用的审计日志,识别对用户和项目设置的任何可疑修改。

怀疑实例被入侵

GitLab 自托管客户和管理员负责:

  • 其基础架构的安全性。
  • 保持其 GitLab 安装为最新版本。

定期更新 GitLab、更新操作系统及其软件,并根据供应商指导加固主机非常重要。

应对措施

如果您怀疑您的 GitLab 实例已被入侵,您应该:

  • 查看您可用的审计事件,识别可疑的账户行为。
  • 查看所有用户(包括管理员 root 用户),必要时遵循怀疑用户账户被入侵指南中的步骤。
  • 查看凭证清单(如果可用)。
  • 更改任何敏感凭证、变量、令牌和密钥。例如,位于实例配置、数据库、CI/CD 流水线或其他地方的凭证。
  • 更新到最新版本的 GitLab,并制定在每次安全补丁发布后更新的计划。
  • 此外,当服务器被恶意行为者入侵时,事件响应计划中通常采取的以下建议步骤:
    1. 将任何服务器状态和日志保存到一次性写入位置,供以后调查。
    2. 查找未识别的后台进程。
    3. 检查系统上的开放端口。我们的默认端口指南可用作起点。
    4. 从已知良好的备份或从头开始重建主机,并应用所有最新的安全补丁。
    5. 查看网络日志中的异常流量。
    6. 建立网络监控和网络级控制。
    7. 仅限制授权用户和服务器的入站和出站网络访问。
    8. 确保所有日志都路由到独立的只写入数据存储。

事件类型

查看系统访问审计事件,确定与系统设置、用户权限和用户登录事件相关的任何更改。

配置错误的项目或群组设置

由于项目或群组设置配置不当,可能导致安全事件发生,可能导致对敏感或专有数据的未授权访问。这些事件可能包括但不限于:

  • 项目可见性的更改。
  • 对 MR 审批设置的修改。
  • 项目删除。
  • 向项目添加可疑的 webhook。
  • 受保护分支设置的更改。

应对措施

如果您怀疑对项目设置进行了未授权的修改,考虑采取以下步骤:

  • 首先查看可用的审计事件,识别负责该操作的用户。
  • 如果用户账户看起来可疑,请遵循怀疑用户账户被入侵指南中的步骤。
  • 考虑通过参考审计事件并咨询项目所有者和维护者以获取指导,将设置恢复到原始状态。

事件类型

  • 可以根据 target_type 字段过滤审计日志。根据安全事件上下文,对该字段应用过滤器以缩小范围。
  • 查找合规管理群组和项目审计事件的特定审计事件。

寻求 GitLab 协助处理安全事件

在向 GitLab 寻求帮助之前,请先搜索GitLab 文档。当您在端完成了初步调查并有额外问题或需要协助时,您应该联系支持。GitLab 支持的协助资格由您的许可证决定

安全最佳实践

查看GitLab 安全文档获取有关管理您环境的建议。

加固建议

有关提高 GitLab 环境安全态势的更多信息,请参见加固建议

您还可以考虑实施如Git 滥用速率限制中详细描述的滥用速率限制。设置滥用速率限制可能有助于自动缓解某些类型的安全事件。

检测规则

GitLab SIRT 在GitLab SIRT 公共项目中维护一个活跃的检测规则库。

此存储库中的检测规则基于审计事件,并采用通用的 Sigma 规则格式。您可以使用 sigma 规则转换器获取您所需格式的规则。访问存储库获取有关 Sigma 格式及其相关工具的更多信息。确保您已将 GitLab 审计日志摄取到您的 SIEM 中。您应遵循审计事件流式传输指南针对您的自托管实例GitLab.com 顶级群组,将审计事件流式传输到您所需的目标。