一个不眠之夜

“叮叮叮,叮叮叮”,一阵急促的微信消息声将正在熟睡中的小安吵醒,小安下意识的拿起枕边的手机一看,凌晨三点半,手机屏幕上满满的都是源代码托管服务器发来的告警,他赶紧查看告警详情,内容都是:用户:小蓝,IP:192.168.0.100,正在克隆xx仓库。多条告警显示,小蓝正在大量克隆公司内部项目仓库。起初,小安以为是源代码仓库遭到了恶意攻击,但是仔细一看用户信息,明显是公司内部人员,而且只克隆与公司近期研发的 AI 医疗相关的仓库,其他产品线的并未克隆,小安认为公司内部人员不会在半夜三更还进行产品研发。来不及多想,为了保证公司代码安全,小安将 IP 和用户名纳入了代码仓库管理的黑名单中,告警戛然而止,代码托管服务器日志也没有其他异常。小安悬着的心终于落地了,带着疑惑小安又眯了一会儿,等待上班。

第二天上班,小安将昨晚的事情告诉了 SRE 团队的其他成员,顺便说起了那个用户 ID,结果其中一位同事说,那个 ID 是一个核心研发的,一直在负责公司创新项目 AI 医疗的研发工作,听说前段时间,有一家初创企业给了难以拒绝的待遇,所以近期已经在办理离职了。小安觉得事情不简单,于是立马将此情况向安全合规经理进行了汇报。安全合规经理非常重视这件事,立马去研发负责人进行了沟通。

事后得知,小蓝即将加入一家初创公司,他想把自己曾经编写的一些算法代码带过去,而这也是他高薪待遇的一个条件,于是小蓝在晚上大家都进入梦乡的时候,用自己尚有权限的账号将过往的代码克隆下来,没想到克隆刚开始不久突然账号就被封锁,无法执行任何操作。

在月度安全合规复盘的时候,小安因为敏锐的安全感和及时采取的止损措施受到了安全合规经理的表扬,小安有些腼腆地说:都是源代码托管平台的安全审计帮了忙

源代码托管:最容易被从内部攻破的堡垒

上面小安公司遇到的情况就是软件研发领域非常常见的源代码泄漏事件。现如今随着企业数字化转型的逐步深入,软件已经成为支撑企业数字化转型的重要支点,而作为软件原材料的源代码自然也成为了企业的核心资产,源代码的泄漏或者受损也就意味着企业核心资产的受损。

然而,企业源代码泄漏的事件却频繁发生,比如 2018 年,某国际知名电子产品消费厂商发生了源代码泄漏事件,起因是一名实习生在离职的时候带走了部分源代码,然后将其分享给了做安全研究的朋友,随后朋友将代码上传到了 GitHub 仓库上面,最终导致源代码泄漏,影响了大量使用该公司电子产品的用户;再比如 2022 年,某国际知名汽车厂商发生了严重的数据泄漏事故,多达 300,000 万的客户数据被泄漏,里面包含大量的个人敏感信息,事后分析得知,数据泄漏的原因是分包商不小心将代码上传到了公共仓库,而这些代码包含了重要的敏感信息,从而影响了 2017 - 2022 年间注册了厂商某 App 的所有客户。

源代码的安全防护是一个重要话题,需要采取多种手段来构建立体的防护机制,比如用户登陆认证授权(事前)、用户访问权限控制(事中)以及安全审计(事后)等。针对上面的几个代码泄漏事件,如果用好源代码托管的审计事件功能,是可以进行规避的。

审计事件,构建源代码安全防护的“最后一道防线”

所谓审计事件是对于重要事件进行追踪,通过对事件操作行为的分析来及时阻止不合规的操作,最终保障事务主体的安全性。

对于源代码托管来讲,审计事件主要是对于源代码托管平台的操作进行追踪,诸如用户增删、代码仓库权限及访问等,以便及时发现不合规的操作,避免源代码遭遇泄漏。

源代码托管审计事件三要素

源代码托管的审计事件的关键要素是三个“W”:

源代码托管审计事件的价值

审计事件是构建源代码托管平台安全防护网的重要一环,完整的审计事件具备以下价值:

极狐GitLab 审计事件功能

极狐GitLab 作为一体化的 DevSecOps 平台,具备完整的审计事件体系,包含从实例级到群组级再到项目级,而且覆盖从用户管理、认证授权、项目管理、代码写作、CI/CD 等方面。截止到 16.2 版本,极狐GitLab 共有 132 项审计事件,而且还有部分审计事件在积极开发中。

jh-audit-events

极狐GitLab 审计事件功能特点

极狐GitLab 审计事件功能是极狐GitLab 安全合规能力的重点功能之一,是付费功能(仅在专业及以上版本中可用),具备以下特点:

极狐GitLab 审计事件功能使用

针对实例级别的审计事件,可以通过管理中心 –> 监控 –> 审计事件来查看。比如可以在实例级别的审计事件中看到 SSH key 添加、个人访问令牌创建、群组/项目创建、删除等事件。

audit-events-admin

审计事件会明确记录事件的操作主体(Author)、操作内容(Action)、操作时间(Date)及操作源 IP 地址等信息。

同样地,可以通过群组 –> 安全 –> 审计事件查看与群组操作有关的事件:

group-audit-events

由于极狐GitLab 群组可以进行嵌套,因此可以用同样的方法查看子群组的审计事件信息。

通过项目–> 安全 –> 审计事件查看与项目操作有关的事件:

project-audit-events

此外,还可以将审计事件报告进行导出,然后发送给审计人员,审计人员可以在报告中通过过滤去查看对应的审计事件详情。

export-audit-events

关于极狐GitLab 审计事件的所有类型(实例级、群组级、项目级、其他)可以查阅极狐GitLab 审计事件官方文档

审计事件能够记录用户对于源代码托管平台的各种操作,但是不具备异常行为(可配置)的告警功能,以便在异常行为发生时,快速操作,及时止损。为此,极狐GitLab 提供安全审计事件流功能,将审计事件发送到第三方,配合第三方的事件分析 + 告警功能来实现异常行为的告警。

审计事件流(audit events streaming)为旗舰版功能。

源代码托管的金丝雀:极狐GitLab 审计事件流

极狐GitLab 审计事件流功能可以将审计事件流发送到外部的流数据系统(可以接受并处理 JSON 格式的数据),然后再由流数据系统对数据进行分析、存储、可视化及告警等操作。

audit-events-streaming

可以为极狐GitLab 实例、群组、子群组及项目设置外部流数据系统。针对实例、群组/子群组及项目的操作事件就会以事件流的方式发送到配置好的外部流数据系统。审计事件流中除了上述的审计事件外,还包括对于 Git 操作的信息,比如对于代码的克隆(SSH 或 HTTPS)/推送、仓库的 Fork、MR 的创建等,而且审计事件流的功能会跟随版本的更新而持续迭代。

audit-events-icon

更多关于极狐GitLab 审计事件流的内容可以查看极狐GitLab 官方文档

极狐GitLab 审计事件流的使用需要首先配置外部流数据系统,以实例级别的配置来讲,可以通过管理中心 –> 监控 –> 审计事件 –> 事件流 –> 添加流目的地来完成:

instance-audit-events-streaming

极狐GitLab 审计事件流服务会将审计事件信息推送到配置好的服务里面,以克隆仓库来讲,如果授权用户克隆了某个仓库,那么外部流数据系统会收到如下的 JSON 信息:

{
  "id": "5e194963-79bc-43ce-99f3-4190ff105b23",
  "author_id": 1,
  "entity_id": 6,
  "entity_type": "Project",
  "details": {
    "author_name": "Administrator",
    "author_class": "User",
    "target_id": 6,
    "target_type": "Project",
    "target_details": "jh-gitlab-audit-events",
    "custom_message": {
      "protocol": "ssh",
      "action": "git-upload-pack"
    },
    "ip_address": "127.0.0.1",
    "entity_path": "xiaomage/jh-gitlab-audit-events"
  },
  "ip_address": "127.0.0.1",
  "author_name": "Administrator",
  "entity_path": "xiaomage/jh-gitlab-audit-events",
  "target_details": "jh-gitlab-audit-events",
  "created_at": "2023-08-24T02:38:24.945Z",
  "target_type": "Project",
  "target_id": 6,
  "event_type": "repository_git_operation"
}

上面信息表明了操作人员信息(author_name)、执行动作(details.action)、操作仓库(details.entity_path 或 target_details)还有操作日期(created_at)、IP(details.ip_address 或 ip_address)等信息。可以将上述信息进行存储、分析、可视化及告警来事件审计事件闭环。下面以 EFK(elasticsearch、filebeat、kibana)为例来演示整个过程。

audit-events-elk

将 filebeat 配置外部的流数据系统,直接接受来自极狐GitLab 的审计事件流信息,然后 filebeat 将数据处理之后存储到 elasticsearch 中,再利用 kibana 的可视化能力实现对于审计事件信息的可视化处理,最后借助 kibana 的 alert 功能实现对异常操作的告警(发送邮件、slack 消息或推送到其他系统)。

可以在 kibana 中看到的审计事件信息,诸如密码变更、仓库可见性变更(从公开到私有或者相反)、项目删除等:

audit-events-log

如果配置对应的 alert,当某项操作发生或者超过一定阈值时就触发告警,通知相关人员做进一步的处理。诸如当一个项目在一定时间内被某一个人频繁克隆,则可以触发告警,发送告警邮件到指定邮箱:

email-notification

或者发送到钉钉等 IM 系统上:

dingding-notification

源代码作为企业的核心资产,应该受到重视,需要打造全方位的安全防护体系,而安全审计是作为保障代码核心资产外泄的一个重要手段。极狐GitLab 审计事件和审计事件流能够形成代码安全审计的闭环,可以让用户对源代码仓库的操作都“活在阳光下”,及时发现违规、异常的操作来避免企业核心资产受损。

60天免费试用极狐GitLab专业版

极狐GitLab不仅是源代码管理或CI/CD工具,它是一个覆盖完整软件开发生命周期和DevOps的开放式一体化平台。

企业版试用
售前咨询
联系电话
在线支持
预约演示