返回文章列表
运维 | 安全 | 汽车 | 医疗 | 互联网 2023-06-28

1 行代码开启「密钥检测」,给敏感数据加上防护锁

极狐GitLab
一体化安全 DevOps 平台

💡 近日,在「DevSecOps 软件安全开发实践」课程上,极狐(GitLab) 高级专业服务交付工程师韩飞、极狐(GitLab) 前端工程师任治桐,分享了密钥检测的背景、应用及处理,并演示了极狐 GitLab 密钥检测功能,快用 1 行代码开启密钥检测功能,给敏感信息加上安全锁。

 

以下内容整理自本次直播,你也可以点击👉观看视频回放或下载 PPT。Enjoy~

 

在应用程序开发过程中,开发人员为了本地 debug 方便,会 hardcode 一些信息,比如连接数据库的用户名、密码、连接第三方 APP 的 token、certificate 等,如果在提交代码的时候没有及时删除这些信息,则非常容易造成敏感信息泄漏,带来被拖库、撞库等风险。

 

举个例子:某公司一名工程师无意中将与客户往来的邮件以及系统登录信息(包括密码、密钥对和私钥)上传到公开的存储库上,黑客就使用公开的密码和密钥进入企业内部系统,进行偷窃数据、发布非法信息等操作,给企业造成了重大经济损失,严重影响客户信任与企业名誉。

 

类似的密钥信息泄漏案例屡见不鲜。有没有一种办法,能够在开发人员提交代码前,就提前发现代码中的密钥信息,规避密钥泄露风险?密钥检测应运而生。

 

密钥检测常见做法

 

企业进行密钥检测常用的方法包括:自研检测工具、开源工具整合、第三方检测服务、混合使用等。这些方法都有其优劣势,例如:

 

  • 自研检测工具:最大限度契合企业环境与需求,但需要投入大量人力与资源;
  • 开源工具整合:依赖开源工具的检测能力,需要自行维护与升级;
  • 第三方检测服务:可以快速建立密钥检测能力,但需要承担服务费用,功能上也受制于服务提供商,可持续性低;
  • 混合使用:工具链复杂,需投入资源进行管理与维护。

 

极狐 GitLab 密钥检测优势

 

极狐 GitLab 认为密钥检测是 DevSecOps 的重要话题,与软件开发全生命周期中的每一个人息息相关,最好的方式就是将密钥检测集成到 CI/CD 中,在开发人员提交代码时就同步进行检测,真正做到安全左移,持续监测

 

 

一体化:简化管理难度与复杂度

 

密钥检测作为七大 DevSecOps 功能之一,内置于极狐 GitLab 中,无需繁琐的软件部署,实现扫描报告、配置、计划任务等统一界面管理,无需在多个软件系统之间切换,充分简化管理难度与复杂度。

 

 

配置简单:一行代码,即可启用

 

只需在极狐 GitLab CI  配置文件中增加一行代码,即可将密钥扫描模板导入流水线,轻松启动密钥扫描,发现并修复项目的密钥安全问题。

 

 

覆盖全面:100 + 密钥扫描选项

 

极狐 GitLab 密钥检测包含 100 + 种规则集,覆盖密钥安全检测方方面面,包括是否泄露或重复使用,密钥选择、长度、加密算法是否存在安全隐患等,帮助用户发现在日常使用中容易忽略的风险与漏洞。

 

 

开源开放:每一行源代码公开可见

 

极狐 GitLab 作为开源软件,用户可以自由查看密钥检测功能的每一行代码,根据企业安全需求开发自定义和扩展默认功能。

 

并且,极狐 GitLab 持续更新与改进密钥检测的规则与检测方式,以适应新的安全威胁与需求变化。用户可以随时查看更新的具体代码变更,获得更强的检测能力。

 

 

密钥检测「基础」使用方式

 

如前文所言,极狐 GitLab 可通过一行代码,启用密钥检测。这是最基础的使用方法,可快速试用与评估密钥检测功能。

 

导入 CI 模板 .gitlab-ci.yml

 

在极狐 GitLab CI/CD 中导入密钥检测的 CI 模板,模板仅包含一条启动密钥检测的作业,导入后可立即执行密钥扫描。

 

自动添加密钥检测作业

 

在 CI/CD 流水线部署阶段,自动添加一条启动密钥检测作业,使每个流水线在部署前自动执行密钥扫描,形成持续检测机制,发现密钥安全问题及早修复。

 

显示密钥检测报告

 

密钥检测作业完成后,在极狐 GitLab 流水线界面展示扫描报告,说明检测到的各个密钥中存在的安全问题以及修复建议,辅助用户高效修复或更换不安全密钥。

 

 

密钥检测「进阶」使用方式

 

定制扫描范围

 

极狐 GitLab 密钥检测支持定制扫描范围,用户可以根据安全策略与需求进行选择,如:

 

历史扫描

 

对仓库所有历史提交与标签运行密钥检测,发现仓库生命周期中任何时间点存在的密钥安全问题,进行系统性修复。

 

默认分支扫描

 

每次有合并请求被合并到默认分支时,自动运行密钥检测,确保默认分支的每次更新都符合安全标准,不存在密钥 related 问题。

 

合并请求扫描

 

每当有新的合并请求被创建时,自动运行密钥检测,检测合并请求中引入的 SSH 密钥是否存在任何安全问题,在代码被正式合并前发现与修复问题,实现安全的 Pull Request 流程。

 

推送事件扫描

 

每当有代码被推送至仓库时,自动运行密钥检测,实现持续的密钥安全检测,尽早发现和解决每次更新引入的任何密钥问题。

 

 

自定义规则级

 

不同企业可能有不同产品特点,需要匹配不同的安全规范。

 

极狐 GitLab 密钥检测支持自定义规则级别,用户可根据企业安全要求,自定义规则级,生成最符合业务安全标准的检测报告。

 

 

极狐 GitLab 密钥检测支持通过 .gitlab/secret-detection-ruleset.toml 文件,对检测规则进行高度自定义,例如:

 

Slack Token 扫描规则定义

 

对仓库代码中泄露的 Slack Token 进行检测,防止未授权访问企业的 Slack 工作区。

 

 

Tencent Cloud Secret 扫描规则定义

 

对腾讯云 Secret 的详细检测规则,有效防止重要凭证/敏感数据在代码仓库中遭到泄露,被未授权访问。

 

 

密钥检测后的处理

 

通过密钥检测发现密钥泄漏了,该怎么办?首先要做就是删除对应的密钥信息

 

泄露情况一般分两种:极狐 GitLab 自己的 token 或第三方平台如腾讯云或 AWS token。

 

分别对应机制是:

 

  1. 极狐 GitLab 自己的 token:如已开启 Token Revocation 开关,极狐 GitLab 会自动撤销删除密钥,Token 信息失效;
  2. 三方平台 token:需手动配置撤销服务,极狐 GitLab 调用自定义密钥撤销服务(Token Revocation API)进行处理。

 

整体流程

 

 

Step 1:在流水线中开启 Secret Detection Job 服务;

 

Step 2:通过流水线密钥扫描 Job 扫描代码库是否存在泄露密钥;

 

Step 3:判断泄漏的密钥信息是否为极狐 GitLab 密钥;

 

Step 4:如果是极狐 GitLab 密钥则自动删除;如果不是极狐 GitLab 密钥,判断是否配置对应 Token Revocation API;

 

Step 5:如果是第三方密钥并配置了对应 Token Revocation API,则主动发送请求处理。

 

如何判断是否为极狐 GitLab 密钥?

 

那么,极狐 GitLab 是如何判断密钥信息是否为极狐 GitLab 密钥?

 

极狐 GitLab 通过 gitleaks 文件进行匹配,通过定义不同类型密钥的正则匹配模式,来判断检测到的密钥信息是否为极狐 GitLab 密钥。

 

主要的判断规则如下图,如果检测到的密钥信息前缀是 glpat 或 glptt 则认为是极狐 GitLab 密钥信息,进行自动删除处理。

 

 

如何自定义 Access Token 前缀?

 

极狐 GitLab 默认密钥信息前缀是 glpat 或 glptt 类型,但也可以通过自定义方式来修改 token 前缀。

 

进入 Admin Area

 

 

点击 Settings → General

 

 

展开 Account and limit

 

 

填写 Personal Access Token prefix

 

添加自定义任意业务需要的字符串作为极狐 GitLab token 前缀信息,极狐 GitLab 对应的 token 将会生成以该前置为规则的密钥信息。

 

 

Token Revocation 处理架构

 

 

如上图所示,主要流程为:

 

  1. 密钥扫描生成密钥检测报告(secret detection report)JSON 文件,记录检测到的各类 Token 泄露问题;
  2. 收集并存储所有的密钥扫描报告,通过 Sidekiq 触发定时任务;
  3. 循环检测是否存在未处理的 Revocation 请求;
  4. 如果存在,确认需要修复的问题所对应 Token 的类型,确定调用的撤销接口;
  5. 返回 Sidekiq ;
  6. 调用相应的 Token 撤销接口,提交参数信息请求撤销对应问题;
  7. 接口返回“accepted”,表示相关 Token 已被成功撤销。

 

完整的 Token Revocation 流程实现了从检测到修复的全生命周期密钥安全管理。准确的 Revocation 状态机制可以清晰了解每个问题的修复进度,使用户可以高效修复各类密钥/Token 泄露问题,确保代码安全。

 

如何配置自己的 Token Revocation 服务?

 

要实现自己的 Token Revocation API 服务,至少需要包含两个主要 API:

 

获取可撤销 Token 列表 API

 

返回需要被 Revocation API 处理的 Token 类型列表。

 

 

提交撤销请求 API

 

该 API 允许调用方提交针对某个泄露 Token 的撤销请求。这使检测到 Token 泄露的系统可以主动调用该 API 发起撤销流程。

 

 

极狐 GitLab 密钥检测主要设置命令及其描述如下表:

 

 

具体实现:

 

  1. 进入极狐 GitLab Rails 控制台;
  2. 配置如下:

 

 

密钥检测是防止软件系统密钥与凭证漏洞的有效方法,是提高应用与数据安全的重要手段。希望今天的分享对大家有帮助,让安全编码与运维成为广大开发者的共识与行动。

极狐GitLab 一体化DevOps平台 专为中国用户研发,免费试用60天专业版高级功能
售前咨询
联系电话
在线支持
预约演示