快捷搜索:  网络  后门  CVE  渗透  木马  扫描  黑客  as

开源软件源代码安全缺点阐发讲演:框架类软件专题

近日,CNCERT发布了《开源软件代码安全缺点阐发讲演——框架类软件专题》。本期讲演聚焦国内外知名框架类开源软件安全开发现状,通过量款知名框架类开源软件产品的安全缺点,评估开源项目的代码安全控制情形。360代码卫士团队为本期讲演提供了手艺支持。

一、概述

随着软件手艺飞速发铺,开源软件已在环球范围内得到了广泛应用。数据显示,99%的构造在其IT体系中使用了开源软件。开源软件的代码一旦存在安全问题,势必造成广泛、严重的影响。为了解开源软件的安全情形,为了解开源软件的安全情形,CNCERT持续对广泛使用的知名开源软件进行源代码安全缺点阐发,并发布季度安全缺点阐发讲演。

本期讲演聚焦国内外知名框架类开源软件安全开发现状,通过量款知名框架类开源软件产品的安全缺点,评估开源项目的代码安全控制情形。拔取关注度高的开源项目,结合缺点扫描工具以及人工审计的效果,对各开源项目安全性进行评选。

2、被测开源框架

综合考虑用户数量、受关注程度和更新频率等情形,拔取了20款具有代表性的框架类软件。表1列出了本次被测的开源框架类软件项目的概况。本次检测的软件涵盖了C,C++,Java,PHP等编程说话。这些开源软件项目都是国际、国内知名的,拥有广泛用户的软件项目,其中不乏由知名软件公司开发的软件。由于这些软件大多具有巨大的用户群体,软件中的安全缺点极可能会造成严重的后果。

表1 被测开源软件项目概览

项目名称 版本号 首要编程说话 功能说明 代码行数
Laravel 5.6.19 PHP laravel是web应用程序目录结构阐发框架 2,570
Dubbo-Spring 2.6.1 Java Spring 开发的RPC应用程序框架 4,123
Server_Framework 1.0 C Server_Framework C说话完成的异步服务器框架 920
Codelgniter 3.1.8 PHP PHP 网站开发者使用的 Web 应用程序开发框架以及工具包 195,232
Kore 2.0.0 C 可扩大web应用程序框架 3,494
Faker 1.7.1 PHP PHP加添数据的库,可以往数据库里填写大批数据用于测试使用 104,594
WaFer 1.0 C 基于C说话的轻量级,可伸缩性服务器端web应用程序框架 385
WebCollector 2.7 Java 基于Java的开源Web爬虫框架 9,676
Kumuluzee 1.0 Java Java EE应用程序微服务迁移框架 16,893
LibPhenom 1.0.0 C 一个用于构建高性能以及高可伸缩性的体系事故框架 38,355
Lce 1.0.0 C++ 一款支持线程池、异步非壅塞、高并发、高性能的linux收集编程框架 3,761
Acl 3.3.1 C 一个跨平台的收集通讯库及服务器编程框架,同时提供实勤恳能库 492,744
Kvproxy 0.1.0 C++ 一个数据库的代办署理框架 18,130
Yii2 2.0.15.1 PHP 一个适用于开发 WEB 2.0 应用的 PHP 框架 168,893
Cphalcon 3.3.2 PHP PHP说话编写的C的扩大应用,提供了高性能,低资源消费的Web框架 159,241
Datumbox 0.8.1 Java 一个快速开发机器学习以及统计应用的框架 45,986
Concordion 2.1.2 Java 一个功能测试框架 30,572
Symfony 4.0 PHP 一个基于MVC模式的面向对象的PHP5框架 433,742
Jodd 4.3.2 Java 一套友爱开发工具,微观框架 319,699
BioJava 5.0.0 Java 用于处理生物学数据的一款Java框架 311,539

三、测试内容

3.一、安全缺点种类

本次测试涵盖各类常见安全缺点。根据缺点形成的缘故起因、被行使的可能性、酿成的风险程度以及解决的难度等身分进行综合考虑,可以将常见的安全缺点分为八类:

一、输入验证与表示(Input Validation and Representation)

输入验证与表示问题一般为由特殊字符、编码以及数字表示所引起的,这种问题的发生是由于对输入的信任所酿成的。这些问题包括:缓冲区溢出、跨站脚本、SQL注入、命令注入等。

2、API误用(API Abuse)

API是调用者与被调用者之间的一个约定,大多数的API误用是由于调用者没有理解约定的目的所酿成的。当使用API欠妥时,也会诱发安全问题。

三、安全特性(Security Features)

该类别首要包含认证、走访控制、秘要性、暗码使用以及特权治理等方面的缺点。

四、时间以及状态(Time and State)

分布式计算与时间以及状态有关。线程以及进程之间的交互及执行义务的时间顺序往往由同享的状态决定,如旗子灯号量、变量、文件体系等。与分布式计算相干的缺点包括竞态前提、壅塞误用等。

五、错误以及异常处理缺点(Errors)

这种缺点与错误以及异常处理有关,至多见的一种缺点是没有恰当的处理错误(或者没有处理错误)从而导致程序运行不测停止,另一种缺点是产生的错误给潜伏的攻击者提供了过量信息。

六、代码质量问题(Code Quality)

拙劣的代码质量会导致不可预测的举动。对于攻击者而言,拙劣的代码使他们可以以意想不到的方式威胁体系。常见的该类别缺点包括死代码、空指针解引用、资源泄漏等。

七、封装以及隐躲缺点(Encapsulation)

合理的封装象征着区别校验过以及未经检验的数据,区别不同用户的数据,或区别用户能看到以及不能看到的数据等。常见的缺点包括隐躲域、信息泄漏、跨站要求伪造等。

八、代码运行环境的缺点(Environment)

该类缺点是源代码之外的问题,例如运行环境设置问题、敏感信息治理问题等,它们对产品的安全仍旧是相等重要的。

前七类缺点与源代码中的安全缺点相干,它们可以成为恶意攻击的目标,一旦被行使会造成信息泄露、权限抬举、命令执行等严重后果。最后一类缺点描摹实际代码之外的安全问题,它们容易造成软件的运行异常、数据丢失等严重问题。

3.2、安全缺点级别

我们将源代码的安全问题分为三种级别:高危(High)、中等(Medium)以及低(Low)。衡量级其它标准包括两个维度,置信程度(confidence)以及严重程度(severity)。置信程度是指发现的问题是否准确的可能性,譬如将每一个strcpy函数调用都标记成缓冲区溢出缺点的可托程度很低。严重程度是指假设测试手艺真实可托的情形下检出问题的严重性,譬如缓冲区溢出一般为比变量未初始化更严重的安全问题。将这两个身分综合起来可以准确的为安全问题划分级别,如图1所示。

1.png

图1 缺点级别与严重程度、置信程度的关系

四、开源框架类软件项目的安全缺点情形

本部分起首铺示从被测项目中检出安全缺点的数量,由此对被测项目的安全性进行大致的评估。然落后一步讨论被测项目中安全缺点的分布情形,了解项目中出现较多的、容易被忽略的安全问题。

4.一、安全缺点情形概览

本部分铺示被测项目查出缺点的数量,由此对被测项目的安全性进行大致的评估。图2分别铺示了项目不同级别缺点的数量,并按照高危缺点数量对项目进行了排序,图中用蓝色折线图铺示了每一千行包含缺点数 。

2.png

图2 开源软件项目缺点情形

从中可以看出,本次拔取的框架类开源软件都存在不同程度的安全问题。本次检测从这些项目中合计发现高危缺点234个,中危缺点105个。缺点数量排名靠前的项目处于极易被攻击者行使的状态,实际使用者需通过装置补丁或者更新版本的方式进行修复以及升级。

在所有被测软件中,中高危缺点总数至多的是框架类开源软件Biojava,包含107个高危缺点以及21个中危缺点。值得一提的是,这128个高中危缺点包括路径遍历、资源未开释、XML外部实体注入等缺点,一旦有恶意攻击者进行攻击或者恶意组织数据,可能导致非授权走访敏感目录、拒尽服务攻击等严重问题。此外,Java微框架 Jodd团体危害也较高,包含33个高危缺点以及17个中危缺点,高中危缺点中大多数为跨站脚本、权限绕过,这种问题一样可能被恶意攻击者行使,导致非授权走访、拒尽服务攻击等严重问题。

整个被测软件中,两款开源框架软件Wafer以及Server_Framework虽然每一千行代码缺点较高,但由于这两款软件本身代码行数也较小,所以认为统计阐发的指标性意义并不大。

4.2、高危安全缺点分布情形

本部分对高危缺点的分布情形进行阐发说明。图3铺示了被测项目中高危缺点大类的分布情形。数据表明,大多数缺点为“输入验证”类缺点,该类缺点主若是由于对用户输入未做充分验证导致的,易造成缓冲区溢出、路径遍历、跨站脚本及各类注入问题,一旦攻击者组织恶意输入,可能造成任意命令执行、任意文件读取等严重安全问题。

3.png

图3 被测项目中高危安全缺点的分布情形

(按大类划分)

“安全特性”类缺点也盘踞了一定份额,这种缺点首要涵盖身份认证、数据加密等方面的问题,攻击者可行使该类缺点完成越权走访,窃取隐衷信息等。根据此次检测效果,多个软件存在“不安全的随机数”问题,这将严重降低软件抵御加密攻击的能力。图4进一步铺示了被测项目中的种种详细的高危安全缺点的分布情形。为方便铺示,将出现不超过5次的缺点统一回入“其他”,首要包括空指针解引用、API误用等问题。在被测的20个项目中,出现较多的几类缺点是路径遍历(19%,43个)、走访说明符操纵(18%,42个)以及XML外部实体注入(16%,38个)。下面对这三种缺点进行简要说明,并给出防范建议。

4.png

图4 被测项目中高危安全缺点的分布情形

(按详细缺点划分)

1)路径遍历(属于输入验证与表示类缺点)

风险:应用程序对用户可控制的输入未经合理校验,就传送给文件走访API。攻击者可能会使用一些特殊的字符(如“..”以及“/”)脱节受维护的制约,走访一些受维护的文件或目录。防范:严格验证用户的输入,建议创建合法资源名的列表,并规定用户只能走访其中的文件。

2)走访说明符操纵(属于输入验证与表示类缺点)

风险:程序员可以绕过由java走访说明符提供的接入控制检查,导致程序私有字段、私有要领以及举动被反向调用,可能产生未授权的命令执行等严重安全隐患。防范:对走访说明符进行合理的权限定约。

3)XML外部实体注入(属于代码注入缺点)

风险:攻击者通过引入组织恶意内容的外部实体,可导致读取任意文件、执行体系命令,从而达到提权,获取敏感信息的目的。防范:验证所有输入数据,有用检测攻击。

4.三、安全缺点团体分布情形

上文针对被测项目中的高危缺点的检出情形对项目的安全状况进行了阐发。通常来说,与高危缺点相比,中危缺点在实际运行环境中的风险相对于较小,但仍不容忽视,且能在一定程度上反映出项目的代码质量、开发人员对代码安全问题的重视程度等。为了更周全的了解被测项目的安全状况,本节进一步铺示包括中危缺点在内的安全缺点的团体分布情形。

图5铺示了被测项目中安全缺点大类的分布情形。与高危级其它缺点分布情形相比,输入验证类、资源治理类、安全特性类缺点仍旧占比较大。其中,资源治理类缺点问题一般为由于开发者脱漏了对体系资源的开释处理导致的,例如,流资源未开释,产生竞价前提等。与输入验证类问题相比,这种问题被直接用于发动攻击的可能性较小,但仍旧会造成性能降低、程序不稳定等危害,严重情形下也会导致体系运行异常、甚至体系崩溃。

5.png

图5 被测项目中的中高危安全缺点的分布情形

(按大类划分)

图6进一步铺示了被测项目中的种种详细的中高危安全缺点的分布情形。本次检测效果中有24种出现不超过10次的缺点,黑客网,如“文件包含”、“操纵配置”等,为方便铺示,将其统一回入“其他”。在被测的20个项目中,出现较多的缺点是是路径遍历(14%,47个)、资源流未开释(14%,46个)以及走访说明符操纵(12%,42个)。下面对这几种缺点进行简要说明,并给出防范建议。

6.png

图6 被测项目中的中高危安全缺点的分布情形

(按详细安全缺点种类划分)

1)路径遍历(属于输入验证与表示类缺点)

风险:应用程序对用户可控制的输入未经合理校验,就传送给文件走访API。攻击者可能会使用一些特殊的字符(如“..”以及“/”)脱节受维护的制约,走访一些受维护的文件或目录。防范:严格验证用户的输入,建议创建合法资源名的列表,并规定用户只能走访其中的文件。

2)资源流未开释(属于资源治理类缺点)

风险:应用程序未开释申请的资源,可能导致程序运行效劳低下、资源耗绝等安全问题。防范:提高代码编写质量,及时开释使用完毕的资源。

3)走访说明符操纵(属于输入验证与表示类缺点) 

风险:程序员可以绕过由java走访说明符提供的接入控制检查,导致程序私有字段、私有要领以及举动被反向调用,可能产生未授权的命令执行等严重安全隐患。防范:对走访说明符进行合理的权限定约。 

关于本讲演的说明

1、本讲演仅从代码角度进行缺点阐发。本讲演中统计的缺点是指由于代码编写不规范导致的有可能被攻击者行使的安全隐患。在实际体系中,由于软件实际部署环境、安全设备等的制约,部分缺点可能没法通过渗透排泄测试得到验证。

二、本讲演中的缺点仅适用于表1中列出的特定软件版本。当软件版本有任何更新、修改以及优化时,本讲演再也不适用。

3、本讲演由360代码卫士团队提供部分手艺支持。

*

您可能还会对下面的文章感兴趣: