GitLab结合fortify实现自动化代码审计实践

news2024/11/19 7:46:32

一、背景

在甲方做安全的同学可能会有一项代码审计的工作,通常需要从gitlab把代码拉取下来,然后使用代码审计工具进行扫描,然后对结果进行人工确认;

在这个流程中需要做的事情比较繁琐,比如说gitlab如何配置token、如何自动化把代码拉取到本地、如何调用fortify实现批量扫描等诸多繁琐问题。

本篇文章以甲方安全代码安全建设为主线,分享如何让代码审计工具自动化扫描gitlab仓库里的代码。并且提供了一个便捷的实验环境供大家测试。

本文实验中调用了多款代码审计工具(包含semgrep、fortify、墨菲、河马,其中fortify软件属于商业性质,本文章无法提供该软件,如需自备此软件并存放在主机/data/share/fortify目录),完成试验后可以看到各代码审计工具的效果对比。

二、准备环境

为了方便大家,我把我的实验gitlab地址直接共享出来,大家可以优先使用此共享环境。

URL:http://123.249.6.139:1880/
用户名:root
密码:qingtingtest
token:glpat-SMsSWy6xzB4x8B6rFryB

配置gitlab环境

为了真实模拟fortify扫描gitlab仓库的代码,我需要快速搭建一个gitlab仓库,这里实验docker的方式最为简单,只需要执行以下的命令

docker run --detach --hostname gitlab.thinkpad --publish 8443:443 --publish 880:80 --publish 222:22 --name gitlab --restart always --volume /data/gitlab/config:/etc/gitlab --volume /data/gitlab/logs:/var/log/gitlab --volume /data/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce

命令执行之后,docker会自动拉取docker镜像,并创建一个gitlab的容器,服务启动之后会随机生成一个root用户的密码,可以通过以下命令查看root用户的初始化密码

docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password

命令执行之后,可以在终端中看到如下所示密码

Password: UnSoOs7l8YN6dYDQRP/1/dzpKswF7dq7fpyhKBey95A=

现在可以使用浏览器访问gitlab的页面,访问地址是http://x.x.x.x:880/,然后浏览器会自动跳转到登录页面,如下图所示

在登录页面,我们在用户名处输入root,密码处输入刚才得到的密码;登录成功之后会自动跳转到工作台的首页,如下图所示。

创建API访问的token

为了让fortify能够访问到gitlab仓库的代码,我们需要创建一个token,用于API访问;在头像位置展开下拉菜单,选择preferences->Access Tokens ,填下相关参数,界面如下所示

创建完成,把生成的token复制出来,后续要用到

glpat-ggjo6Z6aQXWCZ2FNJcsz

gitlab搭建完后,默认里面有一个空项目,fortify无法扫除有价值的漏洞,为了方便测试,需要在新建项目的位置导入项目进去,打开URL地址
http://10.1.1.140:880/projects/new#import_project,然后选择Repository by URL,然后填入一个可以被拉取的仓库地址,这里我提供一个供大家实验,如下图所示

https://gitee.com/songboy/QingScan

导入项目之后,gitlab会自动拉取代码到服务器,如下图所示

三、配置参数

现在已经有了gitlab的实验环境,可以正式开始做实验,首先打开蜻蜓的市场页面,URL地址如下

http://qingting.starcross.cn/scenario/store

可能会提示要求登录,如果是首次进入蜻蜓安全控制台,扫描登录之后会自动注册

然后需要在服务器执行添加节点的shell命令,按照提示进行操作即可,如下图所示

现在回到市场页面,找到快速挖掘0day漏洞,在下方有个按钮,添加到工作流,如下图所示

添加到工作流之后,会看到工作流的信息,这里可以把gitlab的配置信息填写进去,需要点击进入编排流程,如下图所示

在编排工作流页面,上方有一个设置全局变量的小图标,按照提示配置必要参数,如下图所示

四、运行程序

运行全局变量完成之后,可以右键点击第一个节点,再次点估运行选项,就可以运行这个工作流,运行过程中节点状态会发生变化

节点会按照自上而下运行,运行过程中状态图标会一直旋转,当运行完成时,可以看到成功的小图标

运行完成之后,可以去数据中心查看运行结果,可以根据节点和任务ID等方式筛选,如下图所示

我选中fortify代码扫描节点,筛选出来的列表页面如下所示

在列表页面只展示了一小部分数据,可以点击查看按钮,在详情页查看详细的漏洞信息,用于审计标注,如下图所示。

上面节点的代码已经在GitHub中开源,有需要的小伙伴也可以在GitHub

https://github.com/StarCrossPortal/QingTing

GitHub地址:https://github.com/StarCrossPortal/QingTing

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

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

相关文章

.net开发安卓入门 - 基本交互(Button,输入EditText,TextView,Toast)

.net开发安卓入门 - 基本交互前言TextViewEditTextButtonxml代码如下C#代码如下运行效果优化代码先看原生Android给一个View添加点击事件的三种方式在Xamarin.Android中添加onClick也的两种办法使用onClick绑定前后台调用处理逻辑第一步:第二步:第三步&a…

【实操篇】Linux组管理

目录 ●组管理 ●linux组的基本介绍 ●组的创建以及对用户的操作(复习) ●查看文件的所有者 ●改变文件所有者 ●修改文件所在的组 ●改变用户所在组 ●linux组的基本介绍 在Linux中的每个用户必须属于一个组,不能独立于组外。并且在Li…

[附源码]Python计算机毕业设计SSM基于云服务器网上论坛设计(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

软件测试 | 版本控制神器GitHub的基本使用与踩坑,教你一铲子填平!

首先需要申请GitHub帐号,这个就不多说了,大家自行百度或Google吧哈。这里默认大家都已经有GitHub账号了~ PS:(如果已经配置好的小伙伴可以跳过配置GitHub这部分) 配置GitHub 踩坑时刻 - 配置 第一次使用,如果没有配…

Photoshop使用蓝湖 cutterman插件快速切图

快速切图便于节约我们的开发时间 一 蓝湖插件 1.蓝湖官网下载插件 2.ps加载插件 一般都会自动加载 3.开始使用蓝湖插件切图 点击蓝湖插件选择对应的团队点击面板上的切图,选中图层进行标记 标记完成后选择上传全部面板 会提示到蓝湖官网下载对应的切图选择对应的…

mac OS 环境下安装 Redis(使用Homebrew终端安装)

使用Homebrew终端安装Redis(好处后面会介绍) 获取安装Homebrew(复制如下代码到终端运行): /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"选择好克隆原后按提示…

【学习经验分享NO.15】本科硕士学位论文和学术论文查重及降重方法

文章目录前言一、查重方法1、查重指标的含义2、查重方法二、如何修改论文重复三、常见问题答疑总结前言 学术小论文以及本科和硕士大论文在发表前需要进行降重处理,不然重复率过高会影响论文的发表,小论文一般查重要至少在20%以下,有些sci期…

pandas设置和显示数据框行列的数量

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 pandas设置和显示数据框行列的数量 [太阳]选择题 以下python代码结果错误的一项是? import pandas as pd pd.set_option(display.max_columns, None) pd.set_option(display.max_rows, None…

vue集成ant-design-vue

因为需要集成ant-design-vue,所以我在老的vue项目上进行集成,这不集成不要紧,一集成项目都起不来,下面进行下梳理 1遇到问题: BrowserslistError: Unknown browser query dead 查资料得到; 1.删除package.json文件里…

Docker[3]-Docker的常用命令

1 帮助命令 命令说明docker version查看docker的版本信息docker info查看docker详细的信息docker --helpdocker的帮助命令,可以查看到相关的其他命令 docker version docker info docker --help 2 镜像命令 镜像命令说明docker images列出本地主机上的镜像docker …

论文投稿指南——中国(中文EI)期刊推荐(第3期)

🚀 EI是国际知名三大检索系统之一,在学术界的知名度和认可度仅次于SCI!🎄🎈 【前言】 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊。其中&#xf…

DBCO试剂Acrylate-PEG5-DBCO,DBCO-PEG5-Acrylate应用生物标记

基础产品数据(Basic Product Data): CAS号:N/A 中文名:二苯并环辛炔-五聚乙二醇-丙烯酸酯 英文名:DBCO-PEG5-Acrylate,Acrylate-PEG5-DBCO 结构式(Structural)&#xff1…

JAVA SCRIPT设计模式--行为型--设计模式之Interpreter解释器模式(15)

JAVA SCRIPT设计模式是本人根据GOF的设计模式写的博客记录。使用JAVA SCRIPT语言来实现主体功能,所以不可能像C,JAVA等面向对象语言一样严谨,大部分程序都附上了JAVA SCRIPT代码,代码只是实现了设计模式的主体功能,不代…

企业微信如何设置文件权限?

当企业使用企业微信移动办公时,有些员工想要上传一些私人文件到企业微信微盘中“我的文件”里保存,但是又担心管理员可以看到,那么该如何设置文件权限呢? 前言 企业微信的会话内容存档功能可以在员工与客户知情的情况下存储聊天记…

linux系统怎么远程进服务器

linux系统怎么远程进服务器 我是艾西,还是有很多小白同学问我linux系统服务器怎么远程连接。那么今天我们重点来教教大家如何用电脑远程服务器配上图文教程,让不懂的新手小白一看就会,分分钟上手教程 远程服务器需要一台电脑俗称“PC”就是我…

i.e., namely, that is区别

i.e. 用作同位语,“即” To buy the car that I really want (i.e., a Tesla), I will have to work a lot of overtime. namely 用作插入语,表示列举,”也就是” The present paper evaluates the effect of major weather variables, nam…

阿里云国际版代充-对象存储OSS可应用哪些场景?

阿里云国际版对象存储OSS是一款海量、安全、低成本、高可靠的云存储服务,可提供99.9999999999%(12个9)的数据持久性,99.995%的数据可用性。多种存储类型供选择,全面优化存储成本。 阿里云国际版OSS具有与平台无关的RE…

谷粒商城6:反向代理与性能优化

0.thymeleaf的复习 1.nginx反向代理 nginx的整体框架 访问流程 域名访问->在本地host文件中查找对应ip->找到了访问 找不到->DNS域名解析来解析域名到ip->找到了访问整体配置流程: 本机内: 查看域名的映射规则 在host文件中增加gulimall.co…

立创EDA极速入门(2)——完成一个STM32最小系统板

请提前观看:立创EDA极速入门(1)——熟悉PCB和立创EDA基本操作; 邀请加入嵌入式社区,您可以在上面发布问题,博客链接,公众号分享,行业消息,招聘信息等。 立创EDA绘制PCB只…

javaweb系统实现中遇到的问题

1.顶部导航栏 2.字符串转换成double 3.session的使用 4.eclipse如何debug 5.debug的查看变量的窗口 6.navicat设置默认值失效 7.javax.servlet.ServletException: 8.java.lang.NoSuchMethodError/java.lang.nullpointerexception 1.[html 简单顶部导航栏top-bar实现 csshtml](h…