共计 3741 个字符,预计需要花费 10 分钟才能阅读完成。
💡 近日,在「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。
别离对应机制是:
- 极狐 GitLab 本人的 token:如已开启 Token Revocation 开关,极狐 GitLab 会主动撤销删除密钥,Token 信息生效;
- 三方平台 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 解决架构
如上图所示,次要流程为:
- 密钥扫描生成密钥检测报告(secret detection report)JSON 文件,记录检测到的各类 Token 泄露问题;
- 收集并存储所有的密钥扫描报告,通过 Sidekiq 触发定时工作;
- 循环检测是否存在未解决的 Revocation 申请;
- 如果存在,确认须要修复的问题所对应 Token 的类型,确定调用的撤销接口;
- 返回 Sidekiq;
- 调用相应的 Token 撤销接口,提交参数信息申请撤销对应问题;
- 接口返回“accepted”,示意相干 Token 已被胜利撤销。
残缺的 Token Revocation 流程实现了从检测到修复的全生命周期密钥平安治理。精确的 Revocation 状态机制能够清晰理解每个问题的修复进度,使用户能够高效修复各类密钥 /Token 泄露问题,确保代码平安。
如何配置本人的 Token Revocation 服务?
要实现本人的 Token Revocation API 服务,至多须要蕴含两个次要 API:
➤ 获取可撤销 Token 列表 API
返回须要被 Revocation API 解决的 Token 类型列表。
➤ 提交撤销申请 API
该 API 容许调用方提交针对某个泄露 Token 的撤销申请。这使检测到 Token 泄露的零碎能够被动调用该 API 发动撤销流程。
极狐 GitLab 密钥检测次要设置命令及其形容如下表:
具体实现:
- 进入极狐 GitLab Rails 控制台;
- 配置如下:
密钥检测是避免软件系统密钥与凭证破绽的无效办法,是进步利用与数据安全的重要伎俩。心愿明天的分享对大家有帮忙,让平安编码与运维成为宽广开发者的共识与口头。