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


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

 

以下内容整理自本次直播。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. 配置如下:

 

密钥检测

 

 

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