如何使用极狐GitLab 进行敏感信息检测?【上】

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab :https://gitlab.cn/install?channel=content&utm_source=csdn 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。

更多关于极狐GitLab :https://gitlab.cn 或者 DevOps 的最佳实践,可以关注文末的极狐GitLab 公众号。

学习极狐GitLab 的相关资料:

  1. 极狐GitLab 官网:https://gitlab.cn
  2. 极狐GitLab 官网文档:https://docs.gitlab.cn
  3. 极狐GitLab 论坛:https://forum.gitlab.cn/
  4. 极狐GitLab 安装配置:https://gitlab.cn/install
  5. 极狐GitLab 资源中心:https://resources.gitlab.cn

搜索【极狐GitLab】公众号,后台输入加群,备注gitlab,即可加入官方微信技术交流群。

极狐GitLab 公众号后台回复新手指南,免费领取极狐GitLab 新手指南一份,从零到一快速上手极狐GitLab。

前言

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

因此,敏感信息管理是 DevSecOps 中一个非常重要的话题。诚然,敏感信息的管理需要软件开发中的每一个人来负责,有安全意识,但是是人就总有疏忽犯错的时候,所以最好的方式之一就是将敏感信息的检测集成到 CI/CD 中,做到持续监测,而且能在开发人员提交代码的时候就进行,真正做到安全左移。

极狐GitLab 提供开箱即用的 DevSecOps 功能,包括七大功能:容器镜像扫描、静态应用安全测试 (SAST)、动态应用安全扫描(DAST)、密钥检测、License合规、依赖项扫描以及模糊测试。

极狐GitLab 敏感信息检测

极狐GitLab 敏感信息检测(Secret Detection)功能是开箱即用的,在 11.9 版本中引入。既可以对提交代码中的敏感信息进行检测,也可以对远程仓库进行重复性的扫描来进行敏感信息检测;既可以使用默认的规则进行敏感信息检测,也可以通过自定义规则来完成敏感信息检测。极狐GitLab 敏感信息检测是与语言无关的,也就以为是“全谱”可用的

检测原理

敏感信息检测的思路一般是:读取文件内容 --> 根据定义规则进行内容匹配 -> 出具检测报告。极狐GitLab 敏感信息检测依旧是通过特定的分析器(analyzer)来完成的,而分析器的核心组件是开源的 Gitleaks。

Gitleaks

Gitleaks 是一款开源的 SAST 工具,可以用来对 hadrcode 的密码、API key、token 等敏感信息做检测。Gitleaks 具有安装容易,使用方便的特点。

Gitleaks 的安装

Gitleaks 的安装有多种方式,本文以 macOS 为例来演示,使用下面的命令即可在 macOS 上安装 Gitleaks:

$ brew install gitleaks

可以使用 gitleaks -h 或者 gitleaks --version 来检查是否安装成功:

$ gitleaks --version
7.6.1

Gitleaks 的使用

Gitleaks 可以直接扫描本地文件,也可以直接扫描远端仓库。

  • 使用 Gitleaks 来扫描本地文件

先来看看对于本地文件的扫描。新建一个包含敏感信息的文件,诸如:

$ cat > secret.txt <<  EOF
password="12232"
token="ADB#@DC"
EOF

添加一个 gitleaks.toml 文件,写入匹配规则:

$ cat > config.toml << EOF
title = "gitleaks config"
[[rules]]
description = "Password Type"
regex = '''[0-9]'''
tags = ["gitlab", "security"]
EOF

gitleaks 的匹配规则是用 TOML 来定义的

利用上述匹配规则,能够对全部是数字的信息进行匹配,并且将其标记为敏感信息,可以用如下命令进行扫描检测:

$ gitleaks --config-path=config.toml \--path=secret.txt --no-git \-v --report=report.json

参数说明:

  • –config-path:指定写入了匹配规则的配置文件,一般是 xx.toml
  • –path:指定要扫描检测的文件或者目录
  • –report:指定输出报告的路径
  • –no-git:将扫描目录视为普通目录去扫描检测,否则会去查找 .git 目录,找不到就提示失败

可以看到如下的扫描结果:

{"line": "password=\"12232\"","lineNumber": 1,"offender": "1","offenderEntropy": -1,"commit": "","repo": "","repoURL": "","leakURL": "","rule": "Password Type","commitMessage": "","author": "","email": "","file": ".","date": "0001-01-01T00:00:00Z","tags": "gitlab, security"
}
INFO[0000] scan time: 224 microseconds
WARN[0000] leaks found: 1

结果显示,扫描出一处匹配(leaks found: 1),扫描时长(scan time: 224 microseconds,可以看出非常快)。而这一处泄漏就是第一行 password=“12232”。这和最开始设置匹配规则时候的设想是一样的。

同时会在当前目录下看到一个 report.json 的文件:

$ls -ltr report.json
-rw-r--r--  1 xiaomage  wheel  328 Oct 26 14:24 report.json

里面记录的内容和上述标准输出的内容是一致的。

需要注意的是,如果检测出敏感信息,则扫描命令的退出结果为非 0 值:

$ gitleaks --config-path=config.toml --path=secret.txt --no-git -v --report=report.json
$ echo $?
1

如果想要指定执行命令的退出结果,则可以使用参数 --leaks-exit-code:

$ gitleaks --config-path=config.toml --path=secret.txt --no-git -v --report=report.json --leaks-exit-code=0
$ echo $?
0
  • 使用 Gitleaks 扫描远端仓库

将上述的 secret.txt 文件和 gitleaks.toml 文件存放到极狐GitLab 的仓库中,如下:

在这里插入图片描述
执行如下命令进行远端仓库扫描:

$ gitleaks --repo-url=git@gitlab.cn:majinghe/secret-detection.git \
--username=jhma@gitla.cn --access-token=personal-token \
--ssh-key=path-to-ssh-key --repo-config-path=gitleaks.toml \
--report=report.json

参数说明:

  • –repo-url:指定远端仓库的地址
  • –username:扫描私有仓库时指定仓库的用户名
  • –access-token:扫描私有仓库时指定的 personal access token,用来做权限验证;如果 --repo-url 是用 https 的方式,则此参数可换成 --password
  • –ssh-key:指定访问私有仓库所需的 ssh-key
  • –repo-config-path:指定远端仓库中的规则匹配文件
  • –report:指定扫描报告的名称

扫描结果如下:

INFO[0000] cloning... git@gitlab.cn:majinghe/secret-detection.git
INFO[0000] scan time: 999 microseconds
INFO[0000] commits scanned: 9
WARN[0000] leaks found: 9

很奇怪的是看到了 9 处检测点,但是文件里面只有一处啊,到底怎么回事呢?

对于 Gitleaks 来讲,如果不做额外的参数指定,则上述扫描命令会对远端仓库的所有 commit 进行扫描,上述仓库有 9 个 commit,所以扫描了 9 次。可以通过参数来制定针对某一个 commit 或者某一个范围的 commit 信息进行扫描。若指定某个 commit 进行扫描,可看到:

$ gitleaks --repo-url=https://gitlab.cn/majinghe/secret-detection.git --username=极狐GitLab-username --password=极狐GitLab-password --repo-config-path=gitleaks.toml --report=report.json --commit=83c4c5e364bc249e410a5aa92716a35da8080111
INFO[0000] cloning... https://gitlab.cn/majinghe/secret-detection.git
INFO[0001] scan time: 204 microseconds
INFO[0001] commits scanned: 1
WARN[0001] leaks found: 2

出现了 2 处匹配检测点,是因为将 gitleaks.toml 也进行了扫描:

{"line": "regex = '''[0-9]'''","lineNumber": 4,"offender": "0","offenderEntropy": -1,"commit": "83c4c5e364bc249e410a5aa92716a35da8080111","repo": "secret-detection.git","repoURL": "https://gitlab.cn/majinghe/secret-detection.git","leakURL": "https://gitlab.cn/majinghe/secret-detection.git/blob/83c4c5e364bc249e410a5aa92716a35da8080111/config.toml#L4","rule": "Password Type","commitMessage": "add files\n","author": "xiaomage","email": "jhma@gitlab.cn","file": "config.toml","date": "2021-10-26T14:38:20+08:00","tags": "gitlab, security"}

可以通过在 gitleaks.toml 中定制化一下匹配规则来只扫描 secret.txt 文件:

title = "gitleaks config"
[[rules]]
description = "Password Type"
file = '''secret.txt'''
regex = '''[0-9]'''
tags = ["gitlab", "security"]

重新扫描检测:

$ gitleaks --repo-url=https://gitlab.cn/majinghe/secret-detection.git --username=jhma@gitlab.cn --password=GitOpsIsMyMainJobIn2021 --repo-config-path=gitleaks.toml --report=report.json --commit=83c4c5e364bc249e410a5aa92716a35da8080111
INFO[0000] cloning... https://gitlab.cn/majinghe/secret-detection.git
INFO[0000] scan time: 130 microseconds
INFO[0000] commits scanned: 1
WARN[0000] leaks found: 1

此次扫描只匹配到一处检测点,内容如下:

[{"line": "password=\"12232\"","lineNumber": 1,"offender": "1","offenderEntropy": -1,"commit": "83c4c5e364bc249e410a5aa92716a35da8080111","repo": "secret-detection.git","repoURL": "https://gitlab.cn/majinghe/secret-detection.git","leakURL": "https://gitlab.cn/majinghe/secret-detection.git/blob/83c4c5e364bc249e410a5aa92716a35da8080111/secret.txt#L1","rule": "Password Type","commitMessage": "add files\n","author": "xiaomage","email": "jhma@gitlab.cn","file": "secret.txt","date": "2021-10-26T14:38:20+08:00","tags": "gitlab, security"}
]

可以看到成功匹配到 secret.txt 里面的敏感信息。

下篇文章我们介绍 gitleaks 在极狐GitLab 中的具体使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3031409.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

解决VSCode中Debug和运行路径不一致

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 当尝试调试程序时&#xff0c;程序的运行路径与预期不符。这通常会导致程序无法正确读取文件或访问资源&#xff0c;从而影响调试过程。为了解决这个问题&#xff0c;可以在launch.json文件中配置CWD参数&#xff0c…

论文笔记:PRIVACY ISSUES IN LARGE LANGUAGE MODELS: A SURVEY

1 intro 1.1 motivation 2022年11月ChatGPT的推出引起了全球轰动&#xff0c;推动了人工智能研究、初创企业活动以及大型语言模型&#xff08;LLM&#xff09;的消费者采用。到2023年底&#xff0c;LLM的进展持续加速&#xff0c;但人们普遍认为&#xff0c;尽管LLM带来了变革…

软件无线电系列——软件无线电硬件系统结构设计

微信公众号上线&#xff0c;搜索公众号小灰灰的FPGA,关注可获取相关源码&#xff0c;定期更新有关FPGA的项目以及开源项目源码&#xff0c;包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 本节目录 一、软件无线电硬件系统…

机器学习-Padans

机器学习-Padans 面对人生的烦恼与挫折&#xff0c;最重要的是摆正自己的心态&#xff0c;积极面对一切。再苦再累&#xff0c;也要保持微笑。笑一笑&#xff0c;你的人生会更美好&#xff01; 目录 机器学习-Padans 1.DataFrame 2.画图 3. 扩展&#xff1a; 1.DataFrame #…

SwiftUI 调整视图内容周围间隙(Content Margins)的“时髦”方法

概述 在 SwiftUI 开发的应用中,往往在小屏设备(比如 iPhone)上布局良好的 App 放到大屏(iPad)上后就会“一塌糊涂”。因为它们一味的只想着“占据”却不知道“舍弃”。 从 iOS 17.0(iPad 17.0)开始苹果提供了原生的视图修改器方法专注于处理此事。 在本篇博文中,您将…

免费白嫖ChatGPT4(国内可用)

邀请链接 https://burn.hair/register?aff=2MdD网站首页 https://burn.hair使用github账号登录 登录完成之后记得进行签到,签到的token是大家能够聊天的基础,每天进行签到然后就可以免费白嫖ChatGPT4了,一般每天签到,聊天应该是够了的。

自定义el-select下拉菜单的内容以及数据回显的内容

最终的效果 下拉选项的自定义内容好实现&#xff0c;因为他有默认插槽&#xff0c;所以直接在el-option标签里面写自定义内容就可以实现 <el-selectref"seriesBorderTypeRef"class"series-border-type"change"changeSeriesBorderType"v-model…

使用Vue调用ColaAI Plus大模型,实现聊天(简陋版)

首先去百度文心注册申请自己的api 官网地址&#xff1a;LuckyCola 注册点开个人中心 查看这个文档自己申请一个ColaAI Plus定制增强大模型API | LuckyColahttps://luckycola.com.cn/public/docs/shares/api/colaAi.html来到vue的页面 写个样式 <template><Header …

社交媒体数据恢复:九信极速版

九信极速版是一款功能强大的社交软件&#xff0c;但在使用过程中&#xff0c;您可能会遇到数据丢失的问题&#xff0c;如聊天记录、好友等。不用担心&#xff0c;九信极速版提供了数据恢复功能&#xff0c;帮助您找回丢失的数据。以下是详细的恢复步骤&#xff1a; 一、恢复聊…

【CCF-CSP】202403-4 十滴水

题目描述 十滴水是一个非常经典的小游戏。 小 C 正在玩一个一维版本的十滴水游戏。我们通过一个例子描述游戏的基本规则。 游戏在一个 1c 的网格上进行&#xff0c;格子用整数x(1≤x≤c) 编号&#xff0c;编号从左往右依次递增。网格内 m 个格子里有 1∼41∼4 滴水&#xff0…

无限免费泛域名SSL证书申请

如今https访问已经成为了网络安全的标识&#xff0c;SSL证书也成为了保护网站内用户信息安全和加密信息交互的手段之一。自2019年等保2.0的相应政策出台后&#xff0c;实现网站https访问也是必经环节之一。 当下SSL证书的相关政策也一直备受关注&#xff0c;有免费的SSL证书也…

探索Python循环:索引值的获取与应用

在Python编程中&#xff0c;我们经常需要在循环中使用索引值来访问列表、元组或其他序列类型的元素。本文将详细讲解如何在’for’循环中访问索引值&#xff0c;并提供示例代码及运行结果&#xff0c;帮助初学者更好地理解和应用这一概念。 基本原理 在Python中&#xff0c;f…

Failed to start tomcat.service: Unit is not loaded properly: Bad message 如何解决?

错误 “Failed to start tomcat.service: Unit is not loaded properly: Bad message” 通常意味着的 tomcat.service systemd 配置文件存在语法错误或配置不正确。为了解决这个问题&#xff0c;一步步检查和修正这个服务文件。 1. 检查 tomcat.service 文件 首先&#xff0c…

【机器学习】AI时代的核心驱动力

机器学习&#xff1a;AI时代的核心驱动力 一、引言二、机器学习的基本原理与应用三、机器学习算法概览四、代码实例&#xff1a;线性回归的Python实现 一、引言 在数字化浪潮席卷全球的今天&#xff0c;人工智能&#xff08;AI&#xff09;已经不再是科幻小说中的遥远概念&…

Spring MVC 介绍及其使用(详细)

目录 一.什么是SpringMVC呢&#xff1f; 1.1MVC的介绍 1.2SpringMVC和MVC的关系 二.SpringMVC的学习 第一步&#xff1a;创建项目 第二步&#xff0c;SpringMVC的连接 第三步&#xff0c;Spring MVC获取参数 第四步 SpringMVC的输出 总结 特点和优势 核心组件 一.什…

GA-CNN-LSTM多输入时序预测|遗传算法-卷积-长短期神经网络|Matlab

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译&am…

基于JAVAEE的停车场管理系统(论文 + 源码)

【免费】基于JAVAEE的停车场管理系统.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89292324 基于JAVAEE的停车场管理系统 摘 要 如今&#xff0c;我国现代化发展迅速&#xff0c;人口比例急剧上升&#xff0c;在一些大型的商场&#xff0c;显得就格外拥挤&…

支付宝小程序如何去除页面下拉回弹

描述&#xff1a;支付宝小程序页面下拉时会产生回弹&#xff0c;如果页面上有拖拽功能&#xff0c;会有影响 解决方法&#xff1a; 页面xx.config.js中设置&#xff1a;allowsBounceVertical: “NO” 官方文档&#xff1a;https://opensupport.alipay.com/support/FAQ/7110b5d…

使用 AI Assistant for Observability 和组织的运行手册增强 SRE 故障排除

作者&#xff1a;Almudena Sanz Oliv, Katrin Freihofner, Tom Grabowski 通过本指南&#xff0c;你的 SRE 团队可以实现增强的警报修复和事件管理。 可观测性 AI 助手可帮助用户使用自然语言界面探索和分析可观测性数据&#xff0c;利用自动函数调用来请求、分析和可视化数据…

Polygon

挨个判断每一个1的出现是否合法: 合法条件:要么在某一个行或列最后一个要么后面有1 #include<iostream> #include<string> #include<cstring> #include<algorithm> using namespace std; char g[1000][1000]; int n,t; int main() {cin>>t;whil…