• 开源组件漏洞检查工具实践分析


    Murphysec开源组件漏洞检查工具

    介绍

    muphysec 是墨菲安全开发的一款开源软件安全检测工具。该工具主要提供如下功能:
    【代码安全检测】:识别您代码项目中存在的开源组件安全漏洞,并快速修复它。
    【许可证合规评估】:识别您代码项目中使用的开源组件许可证,检查合规的风险。
    【软件成分分析】:识别您代码和基础环境中的三方组件依赖资产,并有效管理。
    在这里插入图片描述

    支持语言:
    目前支持 Java、JavaScript、Golang 、Python 语言项目的检测,后续会逐渐支持其他的开发语言。

    检测原理

    【1】对于使用不同语言/包管理工具的项目,工具主要采用项目构建或直接对包管理文件进行解析的方式,来准确获取到项目的依赖信息
    【2】项目的依赖信息会上传到服务端,并基于墨菲安全持续维护的漏洞知识库来识别项目中存在安全缺陷的依赖
    在这里插入图片描述

    【3】工具只会将检测项目的依赖和基本信息发送到墨菲安全服务端,用于识别存在安全缺陷的依赖,不会上传任何本地代码。

    JetBrains IDE插件MurphySec Code Scan工具使用

    介绍

    MurphySec Code Scan 是墨菲安全推出的一款 JetBrains IDE 插件。

    该插件让开发者在 IDE 中即可检测代码依赖的安全问题,轻松识别代码中使用了哪些存在安全缺陷的开源组件,通过准确的修复方案和一键修复功能,快速解决安全问题。

    支持功能

    目前 Murphysec Code Scan 支持的功能如下:
    【1】漏洞检测:检测 Java(Maven)、JavaScript(npm)、Go(gomod)、Python(pip) 代码中引入的缺陷组件
    【2】一键修复:不仅有清晰的修复方案,还可以通过此功能快速修复
    【3】实时检测:代码的依赖发生变化导致了安全问题,不用担心,插件会及时给您提醒进行处理
    注意 此插件不支持2020.1之前版本的JetBrains IDE

    插件安装

    【1】打开 IDE 并进入插件市场
    【2】在插件市场中搜索 “Murphysec Code Scan”,查看详情并安装
    在这里插入图片描述

    插件配置

    【1】安装完成之后会在IDEA的底部出现MurphySec工具组件
    【2】点击该组件,进入到设置页面
    【3】在弹窗中输入您的访问令牌,也可以点击快速认证按钮按照引导完成认证。
    在这里插入图片描述
    配置参数说明:
    【1】token:进入墨菲安全控制台,点击“个人设置”,如下图所示:
    【2】企业配置 - 服务地址:如果想使用墨菲安全私有化部署的服务,请填写服务地址(如果没有,可以不填写)
    在这里插入图片描述

    一键扫描

    【1】点击开始扫描
    在这里插入图片描述
    【2】整个过程大概持续2~5分钟左右。
    在这里插入图片描述
    【3】扫描结果如上所示,左侧展示了安全风险评级,中间部分展示了本次扫描的漏洞问题列表。右侧部分展示了对应漏洞组件的描述信息,该组件支持一键快速修复,点击【快速修复】会将对应漏洞组件升级至【最小修复版本】。
    在这里插入图片描述
    【4】在本地扫描的信息也会被上传至平台中,上面截图就是相关的扫描信息。
    在这里插入图片描述
    【5】在平台上可以看到扫描更加详细的报告和依赖信息
    序号1:本次检测的漏洞项目,可以看到本次不仅扫描了maven管理的模块,还扫描了前端的静态文件代码,该工具会搜索项目目录下所有管理依赖包描述信息。
    序号2:缺陷组件。本次扫描检测的漏洞信息
    序号3: SBOM清单,本项目下组件的依赖信息,比如jar项目的maven依赖树信息
    序号4:许可证信息,描述关联组件的许可证信息,这个可以帮助我们了解到引入依赖的许可证信息,避免出现许可证合规风险。

    一键修复功能

    修复代码中的缺陷组件时,不知道该怎么修?不知道要升级到哪个版本?能不能点一下就把问题解决了?
    一键修复功能,是为了解决上述困扰而推出的功能。

    最小修复版本:针对某个存在漏洞的组件,已知在特定的版本进行了修复,那么该版本就属于最小修复版本,
    漏洞随时都有可能被公开,因此最小修复版本永远都不是一个固定的版本。

    注意事项:
    墨菲安全 JetBrains IDE 插件 (since v2.0.3) 目前仅支持语言:Java (maven)

    实践测试

    【1】一个是在父模块的dependencyManagement配置版本信息,一个是在多个pom.xml配置相同依赖信息,都可以正常自动修复。
    【2】对于这种依赖于父模块管理的,比如SpringBoot集成的,
    在这里插入图片描述

    命令行工具CLI

    墨菲安全提供的 CLI 工具,可用于在命令行检测指定目录代码的依赖安全问题,也可以基于 CLI 工具实现在 CI 流程的检测。
    适用于对于集成到CI环境中对代码项目进行检测以及日常开发中不使用JetBrains IDE开发工具的人员。

    【1】安装
    软件下载地址:
    https://github.com/murphysecurity/murphysec/releases
    【2】配置访问令牌
    CLI 工具需要使用墨菲安全账户的访问令牌进行认证才能正常使用,令牌可以在后台控制面板个人设置页面获取。
    执行murphysec auth login命令,粘贴访问令牌即可。认证后下次使用墨菲安全 CLI 无需再次执行此操作,如果需要更换访问令牌,可以重复执行此命令来覆盖旧的访问令牌。
    在这里插入图片描述
    【3】检测
    使用murphysec scan命令进行检测,可以执行以下命令:

    murphysec scan [your-project-path]
    可用的参数
    
    --token:指定访问令牌
    --log-level:指定命令行输出流打印的日志级别,默认不打印日志,可选参数为silent、error、warn、info、debug
    --json:指定检测的结果输出为json,默认不展示结果详情
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述
    【4】进入后台查看详细检测结果

    MurphySec功能特性整理

    MurphySec Code Scan工具

    上面已经介绍了MurphySec Code Scan工具在JetBrains IDE 上以及Cli命令行工具的一个简单使用,可以看到整体的使用入门是非常简单的。这个对于开发人员来说非常的友好。开发人员在开发阶段、引入一个第三方依赖或者提交代码阶段可以随时检测漏洞安全问题。

    集成Jenkins

    与 Jenkins CI 的集成是通过墨菲安全的 CLI 工具实现的。墨菲安全 CLI 可以在命令行检测指定目录代码的依赖安全问题。

    【1】在jenkins机器上安装CLI客户端
    可以在GitHub页面下载最新版本的墨菲安全 CLI,或执行以下命令:

    wget -q https://s.murphysec.com/install.sh -O - | /bin/bash
    
    • 1

    【2】在Jenkins上配置凭据
    点击个人设置,复制页面中的访问令牌,并在Jenkins上进行配置。
    在这里插入图片描述
    【3】运行测试
    为了快速演示,我手动上传了项目的pom.xml文件到Linux机器上,模拟项目代码,墨菲安全也是针对这个文件做分析的。
    创建一个流水线项目,并添加如下配置,/home/test/code下面就是一个pom.xml文件

    pipeline {
        agent any
        stages {
            stage('MurphySec Scan') {
                environment {
                    API_TOKEN = credentials('murphysec-token-key')
                }
                steps {
                    sh 'murphysec scan /home/test/code --log-level debug'
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述
    扫描报告如下所示
    在这里插入图片描述

    GitLab 代码库检测工具

    基于墨菲安全开源检测工具开发,可以帮助您快速对企业 GitLab 上所有项目进行检测

    工具地址:https://github.com/murphysecurity/murphysec-gitlab-scanner

    【功能】
    自动化拉取 GitLab 上代码进行检测
    支持增量代码检测(基于 GitLab Webhook 功能)

    【使用】
    拉取工具最新代码
    执行命令 python3 scan_all.py -A [your gitlab address] -T [your gitlab token] -t [your murphysec token]

    【参数说明】
    -A:指定您的 GitLab 服务地址
    -T:指定您的 GitLab 个人访问令牌
    -t:指定您的墨菲安全账户访问令牌

    每周报告推送

    在个人设置中可以看到一个通知设置栏目,我们可以通过该配置进行设置每周报告的推送。
    该模块有如下的一些作用:
    1:存在部分开发人员未使用或者忘记使用漏洞扫描造成部分漏洞组件导入,那么在每周可以做一个定期检查。
    2:某个组件在当前阶段未被发现,几天后被公开则需要及时的解决。
    3:作为每周项目安全的核查和记录。
    在这里插入图片描述

    情报订阅

    目前可以订阅的情报类型主要分为三种:公开漏洞、墨菲安全独家 0day、投毒情报。可以通过企业微信、邮箱或者API等方式订阅最新的漏洞公开信息。
    【公开漏洞】推送内容:最新公开的漏洞,经过安全专家的验证和评估后,对于影响范围较大或漏洞级别较高的漏洞进行推送。非所有新公开的漏洞都会推送
    【墨菲安全独家】推送内容:由墨菲安全自主挖掘的漏洞或独家发现的安全情报,在满足《网络产品安全漏洞管理规定》的要求后,一定时间内进行公开
    【投毒情报】推送内容:软件供应链投毒情报,包含公开以及由墨菲安全监控到的情报

    详细参见:
    https://www.oscs1024.com/docs/vuln-warning/intro/
    在这里插入图片描述

    OpenSCA对比

    产品背景

    SCA,Software Composition Analysis,软件成分分析是一种对二进制软件的组成部分进行识别、分析和追踪的技术。软件成分分析产品通常在开发过程中对应用程序进行分析,以检测开源软件组件是否带有已知的漏洞,例如具有可用安全补丁程序的过期库,以及需要相应授权许可(法律风险)的商业软件或第三方产品。SCA致力于确保企业软件供应链的安全,从而支撑安全的应用程序开发和组装。

    调查显示,平均每个应用有七成以上的代码通过调用第三方组件实现,然而大部分用户对于第三方组件存在的安全问题并未重视起来,因此,解决软件成分中第三方组件的安全问题迫在眉睫,软件成分分析(SCA,Software Composition Analysis)应运而生。

    OpenSCA

    OpenSCA是SCA技术原理的实现。作为悬镜安全 (opens new window)旗下源鉴OSS开源威胁管控产品 (opens new window)的开源版本,OpenSCA继承了源鉴OSS的多源SCA开源应用安全缺陷检测等核心能力,通过软件成分分析、依赖分析、特征分析、引用识别、合规分析等方法,深度挖掘组件中潜藏的各类安全漏洞及开源协议风险,保障应用开源组件引入的安全。

    【文档地址】
    https://opensca.xmirror.cn/docs/v1/

    OpenSca也提供IDEA的插件给开发者使用,插件名称:OpenSCA Xcheck
    在这里插入图片描述

    在这里插入图片描述
    URL:http://opensca.xmirror.cn:8003
    Token可以访问https://opensca.xmirror.cn/pages/auth-token地址注册登录并获取其提供的Token

    【插件执行流程】
    首次安装使用可能比较慢,之后速度大约在几分钟内可以扫描完成。
    在这里插入图片描述
    【检测能力】
    在这里插入图片描述
    上图对于主流的SCA工具都是适用的,主流的SCA大都基于上面的方式去进行检测的。

    简要分析

    【1】上面简单介绍了另一款SCA检测工具OpenSCA,二者在Github上的Star基本上差不多,murphysec在500多,OpenSCA在700左右。根据Github的releases记录,OpenSCA在2021年发布V1开源版本,murphysec最早是在2022年3月发布开源版本。
    【2】二者对软件开发人员都很友好,都提供了IDEA插件扫描工具。
    【3】二者提供的功能也都差不多,基本上都是根据SCA描述来实现的。
    【4】二者都是仅开源客户端扫描工具,后台平台都属于商业版本。
    【5】下面使用两款工具进行参与项目的pom.xml漏洞扫描,
    murphysec扫描结果
    在这里插入图片描述
    OpenSCA扫描结果
    在这里插入图片描述

    可以看到OpenSCA扫描发现的漏洞更多,但是这仅仅是拿一个项目为例,不具备一定的说服力,仅做参考。其实,综合来看二者基本上是差不多的,OpenSCA可能说平台库积累的更加丰富些,murphysec还处于初期阶段。
    【6】OpenSCA和murphysec管理后台差距有些大,OpenSCA后台我不确定是不是下面这个,但是这是我在官网找到的唯一入口,只看到一个token信息,过于简单了。而murphysec的后台功能就比较丰富了。
    在这里插入图片描述
    【7】对于能够集成到IDE安全检测工具,上面两款工具都是很优秀的,还有诸如洞态IAST和Dependency-Check等都是可以帮助我们提早发现和解决安全漏洞风险的,关键在于有效的去使用这些工具,尽可能减少安全隐患。

    【Tips】
    上面仅仅是个人的使用和分析,比较片面,这里强烈推荐下面这篇测评报告:
    《免费SCA工具横向测评》
    http://www.ctfiot.com/40275.html

    JavaScript和Golang项目扫描

    下面是针对我参与开发的一个GoLang的项目进行的扫描,项目比较小,依赖的组件也不多,主要针对的go.mod和go.sum文件
    在这里插入图片描述
    下面是拿前端模块进行的扫描,主要针对的是package.json文件:
    在这里插入图片描述

    小结

    【1】muphysec 入门使用非常简单,直接在IDEA中进行操作,对于开发人员非常友好。
    【2】扫描速度较快,以一个实例项目为例大概依赖组件300多个,整个扫描过程大概也就2分钟。
    【3】该工具可以在每次引入一个新的开源组件或者提交代码前扫描,提早识别组件风险并能一键修复。很大程度上提高了项目安全性。
    【4】 墨菲安全 JetBrains IDE 插件提供的一键修复功能,可直接将该组件升级至最小修复版本,还是很实用的。
    【5】在开发阶段引入开源组件并进行实时的漏洞扫描可以提前发现有漏洞的开源组件,并进行适当的替换;如果在部署阶段或者后期安全检查阶段被发现,那么需要调整依赖组件并进行代码调整,以及代码测试,耗费的成本就会更大。
    【7】合理的去使用一些SCA工具在源头避免带有漏洞的组件被提交至公司代码私库,镜像仓库或者发布CI/CD平台等等。
    【8】合规问题 :很多开发人员因不了解开源协议,导致违反了开源协议的约束,引发了法务或者知识产权问题。有的许可证对软件的使用方式几乎没有限制,用户几乎不用关心需要承担的责任,但是也存在一些限制性比较强的许可证,如果不小心调用,可能会带来较大的法律风险和知识产权的损失。
    【9】muphysec 这类的SCA工具可以全面对整个代码仓库,比如GitLab进行扫描,这对于公司级别安全组件汇总统计,在整个代码仓库做扫描并做统计提供了有效的统计手段。当收到安全告警时可以完全将关联的项目都检索出来,主动排查项目,而不是仅仅按各项目组去排查。
    【10】安全问题,SCA分析一般针对的都是包管理工具对应的文件,比如maven的pom.xml,JavaScript的package-lock.json package.json,Go语言的go.mod等等,我们在扫描的时候也可以仅针对这些文件进行扫描,不用担心代码或者其他信息被第三方平台上传搜集到。
    【11】在处理漏洞时升级修复的成本远远大于主动安全分析的成本,通过这类工具做好源头的排查还是有一定价值的。

  • 相关阅读:
    基于8086汽车智能小车控制系统
    ubuntu 24.04 beta server NAT模式上网设置
    深耕全面预算管理 拥抱企业数字未来
    十三、函数式编程(1)
    # 从浅入深 学习 SpringCloud 微服务架构(三)注册中心 Eureka(3)
    一文彻底讲透@Async注解的原理和使用方法
    复习三:线性表
    docker容器化搭建mysql8.0的主从复制 [详细说明,步骤简洁]
    Jitamin 安装与配置
    《Java 算法与数据结构》第 2 章:数组
  • 原文地址:https://blog.csdn.net/Octopus21/article/details/126567423