当前位置: 首页 > 科技观察

为什么代码安全扫描还不足够

时间:2023-03-19 17:47:32 科技观察

为什么代码安全扫描还不够这是怎么发生的?Equifax使用ApacheStruts框架来运行其网站。2017年3月上旬,Apache公司发现ApacheStruts存在安全漏洞(CVE-2017-5638),并于3月7日发布安全补丁修复上述漏洞。3月9日,Equifax管理员接到通知为受影响的软件打补丁,但他们没有这样做。3月12日,网络攻击者获得了对Equifax内部服务器的访问权限,导致了历史上最大的数据泄露事件之一。本文将讨论如何通过一些步骤来控制代码质量,并简要描述文中的安全扫描过程。然而,这次我们讨论的不仅仅是如何扫描代码以确保安全,还讨论了扫描依赖关系。第三方依赖有什么问题需要了解软件行业中第三方组件的使用。以下是开源技术提供商BlackDuck对1,000多个商业代码存储库进行审计的主要发现:96%的扫描应用程序包含开源组件。2017年,开源代码的使用率从36%增加到57%。每个应用程序的平均开源组件数为257。此外,根据Veracode的调查:应用程序由高达90%的开源代码组成。开发人员在2017年下载了超过520亿个Java组件(和120亿个DockerHub组件)。开源软件的使用在过去5年中增长了5倍。很明显,今天的软件主要是从开源依赖项构建的,并且未来第三方依赖项的数量将会增长。(1)应用安全风险不幸的是,随着第三方依赖越来越多,软件引入安全漏洞的风险也越来越大。开源全球安全组织OWASP在2013年就意识到了这个问题,并将“使用具有已知漏洞的组件”项添加到OWASP的前10大应用程序安全风险列表中。库、框架和其他软件模块等组件以与应用程序相同的权限运行。如果利用易受攻击的组件,可能会导致严重的数据丢失或服务器接管。使用存在已知漏洞的组件的应用程序和API可能会危及应用程序的安全防御并遭受各种网络攻击和不利影响。这并不意味着开源软件比专有组件风险更高,并且不必避免使用它。那么这种风险有多大呢?根据Veracode的软件安全状况报告,风险相当高:将近88%的Java应用程序在组件中至少存在一个漏洞。在讨论解决这个问题之前,让我们检查一下运行一个简单的SpringBoot应用程序需要多少依赖项。(2)SpringBoot应用依赖示例使用Springinitializer生成一个SpringBoot示例工程,其中包含一些流行的依赖,如下图所示:SpringBoot初始化示例工程设置:因此,对于SpringBoot应用示例,需要额外的55个JAR(37MB)来使应用程序成功启动和运行。此外,JAR的数量取决于一个人想要使用的附加功能/工具,它可能会变得更大。例如,在我目前正在做的一个项目中,有262个依赖项。但是,大量的第三方依赖使得整个安全检查过程非常困难。为什么?让我们先看看如何检测手动检查的依赖项是否有已知的安全漏洞。(3)第三方依赖扫描过程以下手动依赖检查过程的步骤:首先,收集给定的依赖标识信息(例如供应商、产品和版本)以构建通用平台枚举(CPE)。例如,org.springframework:spring-core:5.2.0.RELEASE的CPE将是cpe:/a:pivotal_software:spring_framework:5.2.0其次,使用上一步中的标识符搜索CommonVulnerabilitiesandExposures(CVE)类似于NVD数据库,并检查给定依赖项的任何漏洞。然后,重复前两个步骤55次(在本例中),这样看起来还不错。此处忽略以上述方式进行依赖扫描需要一些时间并且需要人工劳动的事实。真正的问题在于,CVE数据库中随时可能出现新的漏洞。用户不能仅仅因为过去检查过它们就认为它们的依赖项总是安全的。这意味着必须在开发/测试阶段以及软件在生产中运行时检查其依赖关系。自动依赖扫描依赖检查是客户必须定期做的事情。此外,需要检查已发布软件的依赖关系,以便在客户发现软件中的安全漏洞之前准备好补丁版本。这没什么不寻常的。世界各地的公司越来越关注软件安全。看看下面是否有任何工具可以帮助保护依赖项免受漏洞影响。以下是Java世界中两个最流行的工具,它们允许用户根据漏洞数据库快速轻松地检查依赖项:WASPDependency-Check-这是一个简单的工具,可以扫描Java和.Net应用程序以识别已知易受攻击的依赖项的使用情况。可以将OWASPDC用作独立的命令行工具。此外,您可以将它与您最喜欢的构建工具(Maven/Gradle)集成,或将其用作持续集成(CI)/持续交付(CD)管道(例如Jenkins)中的一个步骤。SnykOpenSource-该工具比OWASPDC先进得多(但它仅对每月有限数量的扫描免费)。它不仅扫描应用程序依赖关系并显示潜在问题。该工具可以优先考虑最有价值的修复并推荐自动更新,因此它会检查应用程序代码是否可以访问易受攻击的功能,并检查是否在运行时调用了漏洞。简而言之,这些工具有助于列出应用程序中的第三方依赖项并指出那些具有已知漏洞的依赖项。此外,他们还提供有关调查结果严重性的信息。但是,并非每个安全漏洞都会对应用程序构成风险。例如,受影响的功能可能根本不会在代码中使用。这当然需要比简单地依赖漏洞扫描更深入的分析。总之,第三方依赖扫描是左移安全方法的支柱之一。换句话说,这意味着应该在开发生命周期的早期集成安全扫描。为此,您需要:工具-您可以使用它来扫描应用程序的依赖项,例如OWASPDC。自动扫描(定期和频繁)——这可以通过将扫描工具与持续集成(CI)服务器(例如JenkinsOWASPDC插件)或构建工具(例如GradleOWASPDC插件)集成来实现。漏洞审查和修复过程——一旦发现漏洞,应仔细查看并决定是忽略它还是将依赖项升级到最接近的安全版本。上面提到的最后一点可能是最有问题的。首先,信息安全团队应该参与审查依赖扫描工具的发现。根据严重性和对应用程序的实际影响,除了忽略它外,可能不需要做任何事情。但需要记住的是,这必须是经过深思熟虑的决定。其次,一旦您决定需要修补漏洞,您就应该准备好快速交付应用程序的修补版本。特别是当该版本已经投入生产时。原标题:你的代码安全扫描还不够,作者:ArturKluz