你的应用有漏洞吗?使用第三方依赖需谨慎

引言

开源对软件的发展可以说具有深远的意义,它帮助我们共享成果,重复使用其他人开发的软件库,让我们能够专注于我们自己的创新,它推进了技术的快速发展。据不完全统计78% 的企业都在使用开源,但是其中有多少企业关注第三方开园依赖的安全呢?其中仅有13% 将安全作为第一考虑因素。可喜的是仍然有50% 的企业将安全列为第二或第三位考虑因素,越来越多的公司开始重视第三方依赖的安全性。

为什么要关住第三方依赖的安全性

想象我们交付的软件 Application 是一张饼,我们自己开发的代码仅占其中很小一部分,见下图:

而开源依赖并不等于是安全的,当然也不等于不安全,自2000年,仅有几家大厂贡献开源,其中有Apache, Linux, IBM, OpenSSL等,而到了2015年之后,任何人都在贡献开源社区,下图是主流软件库的发展 ,数量庞大

而我们在使用这些依赖的时候,一定要意识到:

  1. 开源依赖往往很少有进行安全性测试的
  2. 开源软件开发人源对安全意识普遍不高
  3. 开源软件提供方没有多余的预算进行安全性测试
  4. ***的主要***目标是开源,因为***一个,影响范围很大

让我们一起看几组第三方依赖安全的调查数据:

如何管理第三方依赖安全

我们看到第三方依赖是存在非常大的安全隐患的,那我们应该如何做呢?不使用第三方依赖显然是不现实的,我们总结了四个步骤

  1. 了解你都使用了哪些依赖
  2. 删除你不需要的依赖
  3. 查找并修复当前已知的漏洞
  4. 持续监听新发现的漏洞,重复前三个步骤

依赖分析

相对简单,我们使用目前的依赖管理工具可以轻松做到,如maven的dependency tree

删除不需要的依赖

我们发现很对开发人员在维护依赖的时候,即使该依赖已经不适用,但不会删除,这显然会扩大***的***范围,因此我们需要定期检查删除不需要的依赖

发现并修复漏洞

第三步开始较为复杂,所幸已有很多开源组织提供了免费的漏洞库,如US-CERT,NVD,OSVDB等漏洞广播源,该类组织集中维护发现的已知漏洞,对外提供表述漏洞数据描述以及漏洞广播,为开源社区安全提供数据支持,有了漏洞数据源之后,判断我们的依赖中是否有依赖就简单了,我们仅需要根据我们的依赖包与漏洞数据库进行对比,就可以发现我们发布的应用中是否包含已知的漏洞,甚至有些开源组织会在漏洞库的基础上提供关于漏洞的修复建议,如 Synk.io,JFrog 和 Sync 合作贡献了一个漏洞数据源(JXray),其中包含主流漏洞数据源,包括刚才提到的几个,这样我们就可以对我们包含对漏洞进行漏洞升级。

JXray 漏洞数据源

持续监听新的漏洞

我们知道漏洞是持续增长的,近几年每年平均都有900左右的新漏洞,我们需要持续监听这些新产生的漏洞,并与我们内部软件生命周期集成,与DevOps有机结合(DevSecOps),这显然需要一套平台或系统帮助我们系统的管理第三方漏洞安全,下面我们整理了一个漏洞扫描平台技术需求设计

漏洞扫描平台技术需求设计

JFrog Xray 介绍

JFrog Xray 是一个通用的漏洞扫描平台,可以满足我们对第三方漏洞安全管理的所有需求,其主要有以下几个特性

支持多语言漏洞扫描

Java,Docker,Npm,Python,Ruby Gems,Nuget,Rpm,Debian等主流语言漏洞扫描,统一对所有开发技术栈进行安全管理

深入扫描能力

我们会深入分析软件的依赖及其传递依赖,甚至是Docker 镜像中的操作系统层,如Docker 镜像中ubuntu操作系统Layer中某一个debian包存在漏洞。下图是一个Docker 镜像中包含的一个基础maven jar包含漏洞的分析图

影响范围分析

当我们监听到一个新的漏洞后,我们往往很难定为其被哪些项目依赖并试用,极为耗时,且总会有遗漏的情况出现,提高了企业损失的几率。
JFrog Xray 会根据所有收集到的依赖拓扑,进行反向依赖性分析,逐层找到所有包含漏洞包的上层应用。快速分析漏洞的影响范围,评估漏洞上线风险,指导企业进行漏洞修复

开放式集成

可以扩展与其他第三方漏洞数据平台集成,如Whitesource,Blackduck等,通过Xray 平台提供的Rest Api,甚至可以与企业自己漏洞数据源进行集成,形成企业安全的统一管理闭环。

DevOps 集成能力(DevSecOps)

我们可以在软件持续交付流水线中集成漏洞扫描能力,将安全机制集成进来,作为企业软件质量关卡中的一部分,当发现漏洞的时候,阻止漏洞包交付到生产环境,如下图

JFrog Xray 架构介绍

JFrog Xray 采用微服务架构设计,其中主要包含以下几个微服务,
? Server,主服务,UI
? Indexer,索引层,进行软件包索引
? Persist,持久层,存储漏洞及扫描结果
? Analysis,分析层,分析依赖拓扑及反向依赖,发现漏洞并告警
JFrog Xray同时支持高可用集群方式,针对企业级安全管理,提高漏洞扫描的效率及稳定性,并且与 JFrog Artifactory 通用二进制包管理系统原生集成,共同组成制品管理统一管理方案。

微服务数据流

总结

本次分享,介绍了在使用第三方依赖时的安全隐患,以及针对该类问题,我们应该如何管理第三方依赖的安全,同时介绍了JFrog Xray 的安全管理特性,帮助企业轻松管理第三方漏洞,降低企业安全风险,避免含有漏洞的包上线到生产环境或客户环境中。

扩展阅读
JFrog Xray试用地址:http://www.jfrogchina.com/artifactory/free-trial/

原文地址:https://blog.51cto.com/jfrogchina/2467257

时间: 2024-10-15 20:57:21

你的应用有漏洞吗?使用第三方依赖需谨慎的相关文章

Mapreduce部署与第三方依赖包管理

Mapreduce部署是总会涉及到第三方包依赖问题,这些第三方包配置的方式不同,会对mapreduce的部署便捷性有一些影响,有时候还会导致脚本出错.本文介绍几种常用的配置方式: 1. HADOOP_CLASSPATH 在hadoop的相关配置文件中,添加CLASSPATH路径,那么在hadoop的各个进程启动时都会载入这些包,因此对于mapreduce-job jar中则不需要额外的引入这些jars,所以mapreduce-job jar会比较小[瘦jar],便于传输:但它的问题也比较明显,如

spark-shell导入第三方依赖

对于spark下已经有的依赖,直接 import SparkContext 但是有些第三方依赖,需要从外部引入 spark-shell --jars /home/wangtuntun/下载/nscala-time_2.10-2.12.0.jar 如果有多个jar包需要导入,中间用逗号隔开

Maven 手动添加第三方依赖包及编译打包和java命令行编译JAVA文件并使用jar命令打包

一,实例:新建了一个Maven项目,在eclipse中通过 build path –> configure path-.将依赖包添加到工程中后,eclipse不报错了.但是用Maven命令 mvn clean compile 时出错如下: 原因是在eclipse中添加了 exteneral jar后,还需要在maven中再添加依赖的jar包 Maven手动添加第三方依赖包有两种方法: 参考:maven 添加第三方依赖              maven中把依赖的JAR包一起打包 第一种方法是使

【Android笔记】Android引用第三方依赖包library报错解决方法

在Android工程项目中,我们经常需要引用第三方依赖包library,有可能遇到以下引用报错的问题: 在设置完library后重新打开显示管理错误,就是reference那里有个红叉叉,eclipse没有报错. 那么有可能是因为: 在windows系统下,你的工程项目跟要引用的library工程项目不是在同一个盘符或跟目录下. 因为如果在不同盘符,project.properties中的android.library.reference.1值变成绝对路径,而ADT推荐是在ubuntu下使用的,

eclipse打jar包解决第三方依赖包

在项目根目录下手动MANIFEST.MF(eclipse无法自动生成) MANIFEST.MF Manifest-Version: 1.0 Class-Path: lib/kafka-clients-0.9.0.1.jar lib/slf4j-log412-1.7.6.jar Main-Class: cn.Test 注意: 第一行:号后面一定要有个空格 每个依赖jar包前面和后面必须有个空格,如果有很多jar包不能全写在一行,必须转到下一行 空格lib/kafka-clients-0.9.0.1

ASP.Net Core on Linux (CentOS7) 共享第三方依赖库部署

原文:ASP.Net Core on Linux (CentOS7) 共享第三方依赖库部署 背景: 这周,心情来潮,想把 Aries 开发框架 和 Taurus 开发框架 给部署到Linux上,于是开始折腾了. 经过重重非人的坑,终于完成了任务: Aries on CentOS7:mvc.aries.cyqdata.com Taurus on CentOS7:mvc.taurus.cyqdata.com 不过在发布的过程中,发现有大堆共同的dll(100多个,20多M): 看见一大堆这些dll,

Maven配置、第三方依赖jar包打包以及Profiles多环境配置

由一次打包部署失败引发的深入探索┑( ̄▽  ̄)┍ 一.Maven配置 1.概览 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/

Maven中通过parent项目的pom维护第三方依赖

Maven的核心就是pom.xml.如果要引入一个第三方依赖,在pom文件中加上<dependency></dependency>就可以依赖相应的jar包. 为了使不同的子项目中的相同依赖的版本保持一致,一般在parent项目的pom文件中维护相关依赖. 场景一 多个子项目依赖同一个jar包 如果分别在各个子项目的pom文件中引入其依赖,那么当依赖版本发生变化时,需要在每个子项目中分别修改版本号,有可能造成遗漏和错误. 此时就可以在parent项目的pom文件中维护相关依赖,子项目

flutter如何使用配置文件pubspec.yaml(位于项目根目录)来管理第三方依赖包

官方文档 在软件开发中,很多时候有一些公共的库或SDK可能会被很多项目用到,因此,将这些代码单独抽到一个独立模块,然后哪个项目需要使用时再直接集成这个模块,便可大大提高开发效率.很多编程语言或开发工具都支持这种“模块共享”机制,如Java语言中这种独立模块会被打成一个jar包,Android中的aar包,Web开发中的npm包等.为了方便表述,我们将这种可共享的独立模块统一称为“包”( Package). 一个APP在实际开发中往往会依赖很多包,而这些包通常都有交叉依赖关系.版本依赖等,如果由开