乐趣区

关于devops:1-行代码开启密钥检测给敏感数据加上防护锁

💡 近日,在「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. 配置如下:

密钥检测是避免软件系统密钥与凭证破绽的无效办法,是进步利用与数据安全的重要伎俩。心愿明天的分享对大家有帮忙,让平安编码与运维成为宽广开发者的共识与口头。

退出移动版