这款牛逼的开源安全工具让我这个运维也变成“安全专家”

背景

我是一家互联网公司的 DevOps 工程师(其实就是运维),平常负责公司服务的上线发布流程。我和墨菲安全的这款开源的漏洞检测工具结缘,主要是因为前段时间 log4j2 的漏洞,最近我们公司的研发频繁的上线基本上都是修复 log4j2 的漏洞,我被他们整烦了。就找他们研发的负责人讨论是不是能够在上线前集成一些自动化的工具来检测这样的漏洞,比如 log4j2 或者 fastjson 类似这样的问题。经过一番调研,公司刚好有几个研发正在用墨菲安全的 IDE 插件,我看他也有一个命令行的工具,可以集成到 jenkins 里面,于是就试了试,效果还不错。现在他们都叫我安全专家(手动狗头)

核心问题解决

将代码安全检测能力集成至 CI 流程,在代码打包前即对代码进行安全扫描,保证公司代码库内项目的质量,同时也会减少项目发布时的压力。且持续集成中的任何一个环节都是自动完成的,无需太多人工干预,有利于减少重复过程以节省时间和工作量。

目前实现的效果

1.每次 jenkins 构建的时候自动检测代码中存在的三方开源组件,并识别漏洞

2.配置规则,识别到严重漏洞就中断构建

3.结果推送到飞书群里,相关研发都能看到

集成流程

  1. Jenkinsfile

在项目根目录放一个 Jenkinsfile 文件(因为 Jenkins 为单节点,为了防止机器故障造成数据丢失,所以 Jenkinsfile 文件都会存在项目里,而不是存在 Jenkins 这台机器上)

这款牛逼的开源安全工具让我这个运维也变成“安全专家”

下图为 Jenkinsfile 内集成墨菲安全CLI的代码块:逻辑为代码下拉后,通过墨菲安全 CLI 对代码进行检测,然后通过 Linux 工具 jq 来对检测出的数据进行解析,如检测结果存在’强烈建议修复’则终止打包流程。

pipeline{
    agent { label "xxxxx"}    // 指定在哪台节点上执行构建操作,这里指定执行节点的标签
    options {
        timestamps()    // 日志记录时间
        buildDiscarder(logRotator(numToKeepStr: '10'))    // 只保留10个构建历史
        timeout(time: 1, unit: 'HOURS')   //流水线超时设置1h
    }
    stages {
        stage("pull code"){    // 拉取代码阶段
            steps{
                script{
                    git credentialsId: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx', url: 'https://xxx.xxxxxx.com/xxxx/xxxxxxxxxxx.git'
                }
            }
        }
        stage("Test"){    // 代码测试阶段,因各种因素影响,不能直接将公司测试代码发出来,参照即可
            steps{
                sh 'echo "build project"'
            }
        }
        stage("murphysec scan") {    // 墨菲安全CLI检测阶段
            environment {
                API_TOKEN = credentials('murphysec-token')    // {murphusec-token}是Jenkins内创建的墨菲安全访问令牌凭据,墨菲安全CLI工具默认会读取{API_TOKEN}这个变量名当作自己的{--token}参数
                }
            steps{
                sh '''
                    NUM=`murphysec scan . --server http://xxx.xxxxx.com/ --json | jq . | jq ".comps | map(select(.show_level == 1)) | length"`
                    if [ $NUM -ne 0 ];then
                        false
                    fi
                '''
            }
        }
        stage("build"){    // 代码构建阶段,因各种因素影响,不能直接将公司测试代码发出来,参照即可
            steps{
                sh 'echo "build project"'
            }
        }
        stage("publish project"){    // 代码上传阶段,因各种因素影响,不能直接将公司测试代码发出来,参照即可
            steps{
                sh 'echo "publish project"'
            }
        }
    }
    post {    // 构建后的操作
        success {    // 步骤全部执行成功后执行
            script{
                currentBuild.description = "n 打包成功!"
                sh '''
                    DATE=`date "+%Y-%m-%d_%H:%M:%S"`
                    sh /usr/local/script/feishu.sh "项目:'$JOB_NAME'\n结果:打包成功!已触发发布流程\n时间:'$DATE'\n节点:'$NODE_NAME'"
                '''
            }
        }
        failure {    // 步骤只要有一个执行失败就执行
            script{    // feishu.sh脚本是一个简单的shell脚本,存放在构建机器上,用于将构建返回的结果信息通过脚本发送至飞书群内
                currentBuild.description = "n 打包失败!" 
                sh '''
                    DATE=`date "+%Y-%m-%d_%H:%M:%S"`
                    sh /usr/local/script/feishu.sh "项目:'$JOB_NAME'\n结果:打包失败!\n时间:'$DATE'\n节点:'$NODE_NAME'\n原因:项目中存在强烈建议修复组件!"
                '''
            }
        }
    }
}

feishu.sh 内容

#!/bin/bash
## 调用飞书群机器人的webhooks接口将信息发送至群内
api=https://open.feishu.cn/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
curl -X POST 
  $api 
  -H 'Content-Type: application/json' 
  -d '{
    "msg_type": "post",
    "content": {
        "post": {
            "zh_cn": {
                "title": "Jenkins",
                "content": [
                    [
                        {
                            "tag": "text",
                            "un_escape": true,
                            "text": "'$1'"
                        }
                    ],
                    [
                    ]
                ]
            }
        }
    }
}'
  1. 在Jenkins上设置脚本路径

在 Jenkins 后台找到项目后,配置管理 Advanced Project Options -> Pipeline -> Script Path = Jenkinsfile ,这样Jenkisn CI 执行的时候,pipline 流程就会执行 Jenkinsfile 里的逻辑。

这款牛逼的开源安全工具让我这个运维也变成“安全专家”
  1. 配置Webhooks

配置 Webhooks 以便项目在更新后,能够自动触发 Jenkins

注意:Jenkins 需安装插件,Git、Gitlab Plugin

这款牛逼的开源安全工具让我这个运维也变成“安全专家”

Jenkins配置

构建触发器勾选 Build when a changs is ……选项,该 URL 在 gitlab 项目 webhooks 中会用到

这款牛逼的开源安全工具让我这个运维也变成“安全专家”

创建 Secret token,用于 Gitlab Webhooks 做验证

这款牛逼的开源安全工具让我这个运维也变成“安全专家”

Gitlab配置

网址是 GItlab [构建触发器] Build when a changs is ……处的 URL

Sercet 令牌为Jenkins项目内创建的 Secret token

这款牛逼的开源安全工具让我这个运维也变成“安全专家”
  1. 飞书通知

做好异常处理,某个stage抛出异常后,要及时做出通知,避免影响打包。

下图为构建流程:

这款牛逼的开源安全工具让我这个运维也变成“安全专家”

通过 post 来对不同的构建结果做出通知,我这里采用的飞书群组机器人,调用机器人 webhooks 将构建结果发送到群内。项目检测未通过时,可以在后台将检测结果导入发送给开发人员做修复参考。

这款牛逼的开源安全工具让我这个运维也变成“安全专家”

关于墨菲安全CLI

墨菲安全推出的一款开源工具,用于在命令行检测指定目录代码的依赖安全问题,也可以基于 CLI 工具实现在 CI 流程的检测

开源地址 :https://github.com/murphysecurity/murphysec ,欢迎大家的反馈和交流!

发布者:墨菲安全,转发请注明出处:https://www.murphysec.com/blog/product-presentation/4188.html

(1)
上一篇 2023年1月4日 17:31
下一篇 2023年1月4日 17:37

相关推荐

  • 看到我们的IDE插件代码被友商复制粘贴了,所以我们做了一个愉快的决定

    昨天看到一个朋友给我发了一篇文章,某友商也发布了一款关于代码安全检测的 IDE 插件,其中UI和代码特征上,与我们的MurphySec Code Scan 插件有一些非常相似的地方。于是我们也简单做了一些分析: UI 对比,icon好像是一样的? 友商 IDE 插件代码中出现的murphysec字样,而且友商的插件里面并没有看到快速认证这个功能,可能是后端不…

    2023年1月5日
  • 墨菲安全软件供应链安全产品v3.0正式公测之产品特性简介及用户升级

    墨菲安全 2.0 产品 3 月份发布以来过去了 9 个月的时间,在这期间收获了超过 10000+ 开发者用户,700+ 的开源项目 star 以及包括蚂蚁、平安、快手等在内的数十个企业版客户;在这个过程中我们一共收集到 283 个用户给我们产品提交的 350 个反馈和建议。在12月8日,我们也开启了3.0产品的内测,内测期间感谢来自 31 个用户,反馈的 1…

    2023年1月5日
  • 墨菲安全软件供应链安全产品v3.0正式公测之快速入门

    标题:墨菲安全软件供应链安全产品v3.0正式公测之快速入门 全新 3.0 版本帮您3分钟从代码分析、风险检测到一键修复,快速提升代码安全性 一、视频演示 以 Gitlab 全量检测为例,展示一次完整检测流程: 二、操作流程介绍 流程图展示了墨菲安全平台的基本操作流程,可供参考。 暂时无法在飞书文档外展示此内容 1、创建团队、加入团队或直接使用默认团队 已为您…

    2023年1月5日
  • 拥抱大模型-大语言模型在墨菲安全产品中的应用

    近年来大模型的飞速发展,让人们看到了AI的无限可能,业界在积极探索大模型在各个领域的应用。在过去的一段时间里,墨菲安全也在积极探索大模型在软件供应链安全场景中的应用。 大模型在漏洞知识库中的应用 墨菲安全后端的漏洞、软件知识库构建过程涉及到大量的语义理解工作,包括自然语言的语义、代码的语义。在过去我们通常会构建一系列的小模型来完成这些工作,例如模型A用于提取…

    2023年6月11日
  • 滚蛋吧,安全漏洞!这款 IDE 插件帮你轻松解决安全问题,核心引擎已开源

    滚蛋吧,安全漏洞!这款 IDE 插件帮你轻松解决安全问题,核心引擎已开源 还记得去年爆发的log4j漏洞吗?还记得经常因为代码漏洞被安全工程师追着修复的场景吗?是不是不想花太多时间去修复漏洞,又或者是不知道怎么修。 最近我们推出了一款 IDE 插件,帮助各位开发者轻松解决代码安全问题,推荐给大家! MurphySec Code Scan 简介 这款插件可以让…

    2023年1月4日

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-180-9568

邮件:hi@murphysec.com

工作时间:周一至周五,10:00-19:00,节假日休息

关注公众号

20230105-100741