蜻蜓:GitLab结合fortify实现自动化代码扫描实践

简介: 在甲方做安全的同学可能会有一项代码审计的工作,通常需要从gitlab把代码拉取下来,然后使用代码审计工具进行扫描,然后对结果进行人工确认;在这个流程中需要做的事情比较繁琐,比如说gitlab如何配置token、如何自动化把代码拉取到本地、如何调用fortify实现批量扫描等诸多繁琐问题。本篇文章以甲方安全代码安全建设为主线,分享如何让代码审计工具自动化扫描gitlab仓库里的代码。并且提供了一个便捷的实验环境供大家测试。

一、背景

在甲方做安全的同学可能会有一项代码审计的工作,通常需要从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

目录
相关文章
|
16天前
|
运维 安全 Devops
DevOps实践:自动化部署的脚本编写技巧
【9月更文挑战第24天】在DevOps文化中,自动化部署是提升效率、减少人为错误的关键。本文将引导读者了解自动化部署脚本的编写方法,从基础命令到复杂逻辑,逐步深入。你将学会如何用代码简化日常任务,让重复工作变得轻松愉快。让我们一起探索自动化的世界,释放你的创造力!
|
21天前
|
机器学习/深度学习 运维 Prometheus
构建高效运维体系:从自动化部署到智能监控的全方位实践
在当今数字化时代,企业对运维效率和稳定性的要求越来越高。本文将探讨如何构建一个高效的运维体系,从自动化部署、持续集成与持续交付(CI/CD)、智能监控、故障管理以及数据驱动决策等方面进行深入分析和实践指导。通过这些方法,企业可以实现更快速、更可靠的软件发布和问题解决,提升整体运营效率。
|
22天前
|
Kubernetes 持续交付 开发者
探索并实践Kubernetes集群管理与自动化部署
探索并实践Kubernetes集群管理与自动化部署
55 4
|
12天前
|
敏捷开发 机器人 Java
自动化测试之美:从理论到实践
【9月更文挑战第28天】在软件开发的海洋中,自动化测试是一艘航向高效、精确和快速交付的船。它不仅减轻了手动测试的负担,还提升了软件质量的保障。本文将带你了解自动化测试的核心概念、流行的工具以及如何将这些理论应用到实践中去。我们将通过实际代码示例,探索自动化测试的魅力所在。
118 70
|
4天前
|
运维 Devops jenkins
DevOps实践:自动化部署与持续集成的实现
【9月更文挑战第36天】本文通过深入浅出的方式,向读者展示了在现代软件开发中,DevOps如何通过自动化部署和持续集成提高开发效率和软件质量。文章不仅介绍了相关概念,还提供了实用的代码示例,帮助读者理解如何在实际工作中应用这些技术。
|
10天前
|
监控 Devops 测试技术
DevOps实践:持续集成与部署的自动化之路
【9月更文挑战第30天】在软件工程的世界中,DevOps已成为提升开发效率、确保软件质量和加快交付速度的关键策略。本文将深入探讨如何通过自动化工具和流程实现持续集成(CI)与持续部署(CD),从而优化软件开发周期。我们将从基础概念出发,逐步深入到实际操作,最终展示如何构建一个高效的自动化流水线,以支持快速迭代和高质量发布。
35 7
|
20天前
|
Devops jenkins Java
DevOps实践:持续集成和部署的自动化之旅
【9月更文挑战第20天】在软件开发的世界里,速度和质量是至关重要的。本文将带领读者踏上一场自动化之旅,深入探索DevOps文化中的两大支柱——持续集成(CI)和持续部署(CD)。我们将通过一个实际的案例,展示如何利用现代工具和技术实现代码从编写到部署的无缝转换,确保软件交付的高效性和可靠性。准备好让你的开发流程变得更加流畅和高效了吗?让我们开始吧!
|
12天前
|
运维 应用服务中间件 持续交付
自动化运维的利器:Ansible入门与实践
【9月更文挑战第28天】在追求高效、稳定的IT运维时代,自动化工具Ansible凭借其简洁性、易用性和强大的功能脱颖而出。本文旨在通过实际案例引导读者理解Ansible的核心概念和操作流程,并分享如何通过Ansible简化日常运维任务,提升工作效率。从基础安装到高级应用,我们将一步步揭开Ansible的神秘面纱,让初学者也能轻松掌握自动化运维的要诀。
|
11天前
|
Devops jenkins 测试技术
DevOps实践:持续集成与自动化测试的融合之道
【9月更文挑战第29天】在软件开发的快节奏竞赛中,DevOps如同一位智慧的舵手,引领着船只驶向效率与质量的彼岸。本文将揭开DevOps的神秘面纱,探索其核心理念如何通过持续集成(CI)和自动化测试的实践,实现软件开发流程的优化与加速。我们将一同见证代码从构思到部署的旅程,以及这一过程中的关键技术和工具如何协同工作,确保软件质量和交付速度的双重提升。
|
12天前
|
运维 Devops 应用服务中间件
DevOps实践:使用Ansible进行自动化部署
【9月更文挑战第28天】在当今快节奏的软件开发环境中,DevOps的实践已成为提升效率和可靠性的关键。本文将探讨如何利用Ansible这一强大的自动化工具来简化部署流程。通过实际示例,我们将展示如何配置Ansible playbook,实现代码的自动部署和服务器管理任务的自动化,从而帮助团队减少人为错误,加快发布周期,确保软件交付的一致性和可预测性。