先抛出两个问题
● 你们公司从超市买一桶水回去,喝之前会做检测吗?会担心水被人下毒吗?
● 你们公司的程序员从 GitHub 上 clone 一个开源项目或者组件,引入到线上项目代码中运行,你会担心有安全漏洞吗?会担心软件投毒吗?
开源技术的应用成为
驱动新一轮产业数字化升级的核心动力
“迎接数字时代,激活数据要素潜能,推进网络强国建设,加快建设数字经济、数字社会、数字政府,以数字化转型整体驱动生产方式、生活方式和治理方式变革。”
这是国家“十四五”规划中第五篇关于加快数字化发展,建设数字中国中明确提出的规划要求。软件应用作为构建数字化的必要基础元素,随着数字化变革的进程不断推进和深化,企业及社会组织对于供应链软件的需求日益提升,其中不管是开源软件还是闭源的商业软件开始被大量引入,而这些供应链软件引入的同时无疑给企业带来了越来越多的潜在安全威胁。
开源软件被企业大量引入
据统计,2020年较2015年开源项目数增长了近3倍,中国有超88%的企业在使用开源技术,开源代码占软件代码的比例已经从2015年的不到40%上升到19年的超过70%,大大提升了开发效率,加快了创新步伐。
软件供应链攻击
成为国家、企业面临的主要威胁
开源技术应用、国际形势复杂、软件供应链的多样化,供应链各个环节的攻击急剧上升,软件供应链安全风险已然成为企业及组织的主要安全威胁。当前开源软件生产、分发、使用全过程缺乏有效的风险管理及生态治理能力,导致近几年全球范围内重大软件供应链安全事件频发,这无疑给企业稳定发展带来非常大的不确定性。
- 2020年12月,SolarWinds 公司软件更新包中存在后门导致客户被入侵,该事件影响了数千家机构,包括美国国家安全局和美国能源部。
- 2021年3月,一名研究员使用“供应链“漏洞(抢注内部组件名称的方式)成功入侵了 35 家重要公司的内部系统:包括 Microsoft、Apple、PayPal、Shopify、Netflix、Yelp、Tesla 和 Uber。
- 2021年12月,log4j2 漏洞爆发,墨菲安全实验室对 log4j2 的1~4层依赖关系进行了统计分析,可以发现总共有超过173104个组件受该漏洞影响。
- 2022年3月,墨菲安全实验室连续2天全球首发预警了 Spark&Hadoop RCE漏洞及 Spring Cloud 的表达式注入漏洞;紧接着之后蚂蚁安全研究员又发现 Spring 框架远程命令执行漏洞。
这些还只是影响非常大的事件和漏洞,除此之外每天新增曝出的通用组件漏洞都在数十起至数百起之间,这些都是企业所依赖的供应链软件所存在的潜在威胁。这背后我们看到的是和新冠病毒一样具备高传染性、致命性和变异能力的安全威胁,只不过的区别是新冠病毒影响的是人类的身体,而这些漏洞缺陷影响的是全球任何接入数字化的企业。
关于墨菲安全创始团队
墨菲安全的创始团队成员都是来自百度、华为、贝壳的企业安全建设团队,过去十年大家一直在从事企业安全建设和安全攻防研究相关的工作,不管是在哪一家公司,我们每一个人都经历过太多次深夜的“安全事件应急响应”,“漏洞分析”。当然我们也时常和研发同学因为修一个漏洞而撕X,过去十年,三千多个日夜,每天几乎都在和代码、漏洞打交道。我们也很渴望每一个工程师生产的软件就像我们今天喝的矿泉水一样,安全而健康。用户不用战战兢兢的去为自己买的每一瓶水做“安全评估”。
软件供应链能不能像传统生产矿泉水
的供应链一样安全有保障
让每一个开发都能够更安全的使用开源代码,让每一家企业都能够安全的管理软件供应链。是我们最初去做这件事情的想法,墨菲安全早期(大概2020年5月,启动这个开源项目的时候)其实有另外一个名字,叫 gokusec,后来我们发现这个名字好像被其他公司用了,所以改名墨菲安全。这个过程我们一直在思考的一个问题是:如何能够为软件供应链的生态建立一个有效治理的安全能力,我们能做点什么?
不知道大家有没有想过,如果新冠疫情爆发的时候,没有核酸检测这样的工具,后果会是怎么样?大概是我们无法及时发现谁得了新冠,身边的人也没办法及时有效的防控,患病者也无法得到及时有效的治疗,今天所建立的一切防控机制其实都是空谈。开源组件的应用非常广泛且具备非常复杂的依赖关系,这使得开源软件的漏洞其实就像新冠病毒一样, 具备强大的传染性、致命性、变异能力,而今天如果我们要对这些软件供应链里的新冠进行有效的控制,似乎我们首先最缺的是一款针对开源软件漏洞缺陷检测的核酸工具?它应该具备很好的准确性、易用性和低成本,而这就是墨菲安全推出的开源项目murphysec 的核心理念,为每一个软件开发者提供一款易用、专业且高效的代码安全检测工具,当然如果他还有特效药的作用,那就更棒了。
关于 murphysec
murphysec 是墨菲安全开发的一款开源软件安全检测工具,致力于帮助每一个开发者更安全的使用开源代码。
产品特点:易用、专业、创新
话都说到这了,那么,先上链接(欢迎提 issues、PR、star)
- 开源地址:
https://github.com/murphysecurity/murphysec
- 产品官网:
https://www.murphysec.com/
核心功能:
1.化验:准确识别软件中直接依赖和间接依赖的开源组件
2.看病:准确识别这些开源组件存在的安全漏洞及许可证合规风险
3.治疗:为开发者提供简单高效的一键缺陷修复能力
支持语言:
目前支持 Java、JavaScript、Golang 、Python 语言项目的检测,后续会逐渐支持其他的开发语言。
检测原理
- 对于使用不同语言/包管理工具的项目,工具主要采用项目构建或直接对包管理文件进行解析的方式,来准确获取到项目的依赖信息
- 项目的依赖信息会上传到服务端,并基于墨菲安全持续维护的漏洞知识库来识别项目中存在安全缺陷的依赖
说明:工具只会将检测项目的依赖和基本信息发送到墨菲安全服务端,用于识别存在安全缺陷的依赖,不会上传任何本地代码。
安装
访问 GitHub Releases 页面下载最新版本的墨菲安全 CLI,或执行以下相关命令:
在 Linux 上安装
代码语言:javascript复制wget -q https://s.murphysec.com/install.sh -O - | /bin/bash
在 OSX 上安装
代码语言:javascript复制curl -fsSL https://s.murphysec.com/install.sh | /bin/bash
在 WINDOWS 上安装
代码语言:javascript复制powershell -Command "iwr -useb https://s.murphysec.com/install.ps1 | iex"
使用
- 执行 murphysec scan [your-project-path]完成开始检测
查看结果
- 执行命令增加--json参数,可以将检测结果输出为 Json 格式进行查看
- 也可以直接在墨菲安全平台上查看详细的检测结果
- 查看依赖信息
IDE 检测插件
一款基于墨菲安全开源检测工具而开发的 IDE 插件,帮助开发者在 IDE 中即可检测代码依赖的安全问题,轻松识别代码中使用了哪些存在安全缺陷的开源组件,通过准确的修复方案和一键修复功能,快速解决安全问题。
插件官方地址:
https://plugins.jetbrains.com/plugin/18274-murphysec-code-scan
支持功能
- 漏洞检测:检测Java(Maven)、JavaScript(npm)、Go代码中引入的缺陷组件
- 一键修复:不仅有清晰的修复方案,还可以通过此功能快速修复
- 实时检测:代码的依赖发生变化导致了安全问题,不用担心,插件会及时给您提醒进行处理
安装
- 在 IDE 插件市场中搜索 “murphysec”,查看详情并安装
使用
- 选择“点击开始扫描”,即可检测出代码中存在哪些安全缺陷组件
- 点击检测结果中的组件,即可查看该缺陷组件的基本信息
- 点击右侧“一键修复”,即可直接将该组件升级至“最小修复版本
详细使用说明可以查看文档
更多的使用场景
一、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:指定您的墨菲安全账户访问令牌
二、Jenkins 集成安全检测能力
可以将墨菲安全开源检测工具集成到 Jenkins 中,提高线上代码安全质量
集成方式
1. 安装墨菲安全开源检测工具
在 Jenkins 机器上安装墨菲安全开源检测工具最新版本,访问 GitHub Releases 页面下载,或执行以下命令:
代码语言:javascript复制wget -q https://s.murphysec.com/install.sh -O - | /bin/bash
2. 设置 Jenkins 全局凭据
在 Jenkins 全局凭据中添加墨菲安全访问令牌
3. 修改Jenkinsfile
为了将墨菲安全开源检测工具添加到 pipeline,需要在 Jenkinsfile 中添加一个 stage,示例如下:
代码语言:javascript复制pipeline {
agent none
stages {
stage('MurphySec Scan') {
environment {
API_TOKEN = credentials('murphysec-token-key')
}
steps {
sh 'murphysec scan . --log-level debug'
}
}
}
}