10分钟 对公司的 gitlab代码仓库 来一次安全体检

简介: 10分钟 对公司的 gitlab代码仓库 来一次安全体检

本文来自用户南瓜投稿

去年log4j漏洞爆发时候就已经很痛苦了,当时把所有的线上服务排查了一遍。没想到这都已经过去3个月了,上周又遇到了一个服务仍在使用低版本,被外部攻击,有点受伤。

这件事后,老板让我全量扫一遍我们的代码库,看还有哪些服务还在用老版本的log4j,统一推一波修复,防止后续在发生此类事件。


方案调研


方案一(放弃)


当时我第一反应是写个脚本,遍历所有项目,再拉取项目到本地,通过正则匹配的方式识别代码中是否使用了log4j,并提取版本,并根据版本号判断是否有漏洞。但后面想了下,这个漏洞检测方式不具备通用性。一是组件判断很麻烦,我们通常说的组件名和配置文件中的组件名根本不是一回事,不是很好对应,二是如果后边再有其他漏洞,还要重新写正则,着实麻烦。


方案二(成功)


在github上搜了下开源项目,看看有没有能对项目做组件扫描的工具,找了半天找到了一个叫Murphyscan的开源项目,比较满足我的需求。思路是写个脚本,先通过gitlab接口获取项目列表,然后clone代码到本地,然后通过Murphyscan提供的客户端扫描,处理扫描结果获取目标漏洞组件。


脚本流程


为寻求便捷、高效,使用python3编写脚本,具体流程如下:


1、通过python-gitlab包,调用gitlabapi,获取项目列表及clone链接。

2、clone代码到本地

3、调用Murphyscan客户端,扫描项目

4、处理扫描结果(扫描结果为json类型),遍历漏洞,发现目标漏洞打印项目名及项目提交者。

5、删除clone代码


进一步,增量检测


全量检测搞定,老板交代的任务算是搞完,心情愉悦,但有一个问题,如果哪个程序员手抖,引用组件时候,又引入一个低版本的,那老板岂不是要杀我祭天。怀着忐忑的心情调研了下怎么扫描增量服务。


经过调研发现,gitlab有一个叫webhook功能。他的功能是,管理员可以指定push、merge等动作触发时,向某个指定接口通知该事件,这样我就可以知道有代码更新或者创建。拿到通知后我就去拉取最新代码,再扫描一次,发现有漏洞后通过机器人提醒我,这样增量检测就搞定了。


gitlab配置


进入Gitlab平台,点击顶部【菜单】-【管理员】进入管理中心

1.png

1、选择系统钩子进入Webhook设置页面

2、URL处填写python起的webapi接口地址

3、下方触发器中确保【仓库更新事件】处于勾选状态

4、去掉【启用SSL验证】的默认勾选

5、点击【添加系统钩子】完成设置


webapi


通过fastapi起了一个web服务,其功能主要是接收gitlab的webhook事件推送,收到事件后,拉取项目代码,并进行扫描,同样扫描结果会通过飞书机器人将有问题的项目检测结果推送给我。


待优化


目前代码还有些问题,主要是目前流程还是单线程的,我们公司项目量和代码更新量比较少的情况下还可以,如果代码更新比较频繁,可能会导致使用webapi线程过多,服务崩溃。后续会通过任务队列形式,将webhook接口和漏洞检测拆开,通过任务队列管理检测任务。


项目地址


该项目已贡献给MurphySecurity,项目地址:https://github.com/murphysecurity/murphysec-gitlab-scanner.git

相关文章
|
12月前
|
jenkins 网络安全 持续交付
微服务轮子项目(44) -GitLab代码仓库
微服务轮子项目(44) -GitLab代码仓库
102 0
|
Linux Shell 网络安全
CentOS7上使用GitLab搭建私有git代码仓库(超详细)(下)
CentOS7上使用GitLab搭建私有git代码仓库(超详细)(下)
213 1
|
Linux 网络安全 开发工具
CentOS7上使用GitLab搭建私有git代码仓库(超详细)(上)
CentOS7上使用GitLab搭建私有git代码仓库(超详细)(上)
435 0
|
前端开发 Unix Linux
私有化代码仓库Gitlab的落地与应用(一)
本文主要介绍了:gitlab安装搭建步骤、部署常见问题及解决办法、gitlab常用操作命令示例、代码仓库数据迁移、代码仓库自动备份
私有化代码仓库Gitlab的落地与应用(一)
|
运维 Kubernetes 监控
Docker安装GitLab代码仓库
Docker安装GitLab代码仓库
Docker安装GitLab代码仓库
|
存储 开发工具 数据安全/隐私保护
【GitLab】使用Docker和Docker-Compose部署-个人、私有代码仓库
GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。 GitLab和GitHub一样是仓库管理系统,不一样的是GitLab可以自己搭建,自己或企业内部使用。
927 0
【GitLab】使用Docker和Docker-Compose部署-个人、私有代码仓库
|
Linux 程序员 网络安全
|
NoSQL 关系型数据库 Redis
|
3月前
|
Shell Docker 容器
GitlabCI学习笔记之一:安装Gitlab和GitLabRunner
GitlabCI学习笔记之一:安装Gitlab和GitLabRunner