开源软件源代码安全缺陷分析报告——人工智能类开源软件专题

近日,CNCERT宣布了《开源软件代码安然缺陷阐发申报——人工智能类开源软件专题》。本期申报聚焦国内外有名机械进修、人工智能类开源软件安然开拓明状,经由过程阐发多款有名人工智能类开源软件产品的安然缺陷,评估开源项目的代码安然节制环境。360代码卫士团队为本期申报供给了技巧支持。

以下是申报全文:

开源软件源代码安然缺陷阐发申报

——人工智能类开源软件专题

1、概述

跟着软件技巧飞速成长,开源软件已在举世范围内获得了广泛利用。数据显示,99%的组织在其IT系统中应用了开源软件。开源软件的代码一旦存在安然问题,必将造成广泛、严重的影响。为解开源软件的安然环境,CNCERT持续对广泛应用的有名开源软件进行源代码安然缺陷阐发,并宣布季度安然缺陷阐发申报。

“人工智能”近年来成长迅猛,已成为高精尖科技立异的代名词。本期申报聚焦国内外有名机械进修、人工智能类开源软件安然开拓明状,经由过程阐发多款有名人工智能类开源软件产品的安然缺陷,评估开源项目的代码安然节制环境。拔取关注度高的开源项目,结合缺陷扫描对象和人工审计的结果,对各开源项目安然性进行比较。

2、被测开源软件

综合斟酌用户数量、受关注程度以及更新频率等环境,拔取了20款具有代表性的人工智能(以下简称AI)类开源软件。表1列出了本次被测的开源人工智能类软件项目的概况。本次检测的软件涵盖了C++,C#,Java,Python等编程说话。这些开源软件项目都是国际、海内有名的,拥有广泛用户的软件项目,此中不乏由有名软件公司开拓的软件。因为这些软件大年夜多具有伟大年夜的用户群体,软件中的安然缺陷很可能会造成严重的后果。

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

项目名称

版本号

主要编程说话

功能阐明

代码行数

叮当(dingdang-robot)

0.2.1

Python

事情在 Raspberry Pi上的中文语音对话机械人

6,574

Serenata de Amor

1.0.0

Python

公共社会治理的AI项目

11,877

Snake

1.0.0

Python

AI的饕餮蛇游戏

3,123

Simple AI

0.8.1

Python

AI算法对象包

5,963

EasyAI

1.0.0

Python

一个AI游戏框架

3,487

Mycroft

0.8.5

Python

可编程的开源语音助手

27,236

AI_Challenger

1.0

Python

开放数据集和编程比赛的AI寻衅平台

198,422

OpenNERO

1.0.0

C++

面向AI钻研和教导的开放平台

234,302

Polyworld

2.6.0

C++

AI仿人工生命系统

49,673

AIKIDO

0.2.0

C++

一个办理机械人运动筹划和决策问题的C++库

32,830

Quackle

1.0.3

C++

填字游戏的AI阐发对象

13,908

Caffe

0.9999

C++

一个深度进修开拓框架

92,761

SUSI.AI Server

2.1.0

Java

一个智能开源小我助理法度榜样

37,400

gdxAi

1.8.1

Java

基于libGDX的游戏开拓框架

35,200

onyx

1.1.4

Java

一个应用人工智能,机械进修和深度进修等技巧的android库,可闪开拓职员懂得他们在利用中显示的内容

15,100

AIMA3e-Java

3.0.0

Java

Russell和Norvig的AI算法的Java实现

97,600

ABAGAIL

1.0.0

Java

机械进修和人工智能的算法包

26,700

Malmo

0.35.6

Java

一个基于Minecraft的AI实验和钻研平台

54,100

OCR_densenet

1.0.0

Java

采纳densenet的图片翰墨识别软件(第一届西安交通大年夜学人工智能实践大年夜赛第一名)

5,267

BrainSimulator

0.6.0

C#

AI架构的可视化原型设计开拓平台

295,300

3、测试内容

3.1 安然缺陷种类

本次测试涵盖种种常见安然缺陷。根据缺陷形成的缘故原由、被使用的可能性、造成的迫害水平和办理的难度等身分进行综合斟酌,可以将常见的安然缺陷分为八类:

1.输入验证与表示(Input Validation and Representation)

输入验证与表示问题平日是由特殊字符、编码和数字表示所引起的,这类问题的发生是因为对输入的相信所造成的。这些问题包括:缓冲区溢出、跨站脚本、SQL注入、敕令注入等。

2.API误用(API Abuse)

API是调用者与被调用者之间的一个约定,大年夜多半的API误用是因为调用者没有理解约定的目的所造成的。当应用API欠妥时,也会激发安然问题。

3.安然特点(Security Features)

该种别主要包孕认证、造访节制、机密性、密码应用和特权治理等方面的缺陷。

4.光阴和状态(Time and State)

散播式谋略与光阴和状态有关。线程和进程之间的交互及履行义务的光阴顺序每每由共享的状态抉择,如旌旗灯号量、变量、文件系统等。与散播式谋略相关的缺陷包括竞态前提、壅闭误用等。

5.差错和非常处置惩罚缺陷(Errors)

这类缺陷与差错和非常处置惩罚有关,最常见的一种缺陷是没有恰当的处置惩罚差错(或者没有处置惩罚差错)从而导致法度榜样运行意外终止,另一种缺陷是孕育发生的差错给潜在的进击者供给了过多信息。

6.代码质量问题(Code Quality)

低劣的代码质量会导致弗成猜测的行径。对付进击者而言,低劣的代码使他们可以以意想不到的要领要挟系统。常见的该种别缺陷包括逝世代码、空指针解引用、资本透露等。

7.封装和暗藏缺陷(Encapsulation)

合理的封装意味着区分校验过和未经查验的数据,区分不合用户的数据,或区分用户能看到和不能看到的数据等。常见的缺陷包括暗藏域、信息透露、跨站哀求捏造等。

8.代码运行情况的缺陷(Environment)

该类缺陷是源代码之外的问题,例如运行情况设置设置设备摆设摆设问题、敏感信息治理问题等,它们对产品的安然仍旧是至关紧张的。

前七类缺陷与源代码中的安然缺陷相关,它们可以成为恶意进击的目标,一旦被使用会造成信息泄露、权限提升、敕令履行等严重后果。着末一类缺陷描述实际代码之外的安然问题,它们轻易造成软件的运行非常、数据损掉等严重问题。

[1] [2] [3]下一页

3.2 安然缺陷级别

我们将源代码的安然问题分为三种级别:高危(High)、中等(Medium)和低(Low)。衡量级其余标准包括两个维度,置信程度(confidence)和严重程度(severity)。置信程度是指发明的问题是否准确的可能性,比如将每个strcpy()调用都标记成缓冲区溢有缺陷的可托程度很低。严重程度是指假设测试技巧真实可托的环境下检出问题的严重性,比如缓冲区溢出(buffer overflow)平日是比空指针引用(null pointer dereference)更严重的安然问题。将这两个身分综合起来可以准确的为安然问题划分级别,如图1所示。

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

4、开源人工智能类软件项目的安然缺陷环境

本部分首先展示从被测项目中检出安然缺陷的数量,由此对被测项目的安然性进行大年夜致的评估。然落后一步评论争论被测项目中安然缺陷的散播环境,懂得项目中呈现较多的、轻易被轻忽的安然问题。

4.1 安然缺陷环境概览

本部分展示被测项目查有缺陷的数量,由此对被测项目的安然性进行大年夜致的评估。图2分手展示了项目不合级别缺陷的数量,并按照高危缺陷数量对项目进行了排序,图顶用蓝色折线图展示了每千行包孕缺陷数。

图2 开源软件项目缺陷环境

从中可以看出,本次拔取的人工智能类开源软件都存在不合程度的安然问题。本次检测从这些项目中总计发明高危缺陷173个,中危缺陷355个。缺陷数量排名靠前的项目处于极易被进击者使用的状态,实际应用者需经由过程安装补丁或者更新版本的要领进行修复和进级。

在所有被测软件中,游戏框架easyAI、可视化AI原型开拓平台BrainSimulator和深度进修开拓框架Caffe不存在高危缺陷,同时中危缺陷数量也较少,总体安然性较高。

人工智能实验和钻研平台Malmo在本次被测的20款软件里高危缺陷居多,包孕64个高危缺陷和1其中危缺陷。此中大年夜部分高危缺陷为XML Schema问题,因为未指定元素的最大年夜呈现次数(maxOccurs),导致进击者可构造特定的XML文档以耗尽系统资本。

AI寻衅平台AI_Challenger总体风险也较高,包孕44个高危缺陷和2其中危缺陷。大年夜多半缺陷为路径遍历问题,因为未对用户可节制的输入做完善的校验,导致进击者可越权造访受保护的文件。

此外,中高危缺陷总数最多的是AI仿人工生命系统Polyworld,包孕8个高危缺陷和138其中危缺陷。绝大年夜部分中危缺陷是因为应用了C++的strcpy、sprintf等不安然的字符串操纵函数,导致存在缓冲区溢出的风险。

斟酌到项目的绝对缺陷数量可能与项目大年夜小相关,是以本申报谋略了每千行缺陷数,用该数据反应缺陷在项目中的散播密度。根据该数据,代码安然性较好的项目依次是原型设计开拓平台BrainSimulator、游戏开拓框架gdxAi、深度进修开拓框架Caffe和AI算法对象AIMA3e,这些项目匀称每一万行代码呈现1个以下的中高危缺陷。缺陷散播密度相对较高的项目是AI仿人工生命系统Polyworld、机械人运动库AIKIDO,这些项目匀称每一千行代码中就会呈现2-3其中高危缺陷。

4.2 高危安然缺陷散播环境

本部分对高危缺陷的散播环境进行阐发阐明。图3展示了被测项目中高危缺陷大年夜类的散播环境。数据注解,大年夜多半缺陷为“输入验证”类缺陷,该类缺陷主如果因为对用户输入未做充分验证导致的,易造成缓冲区溢出、路径遍历、跨站脚本及种种注入问题,一旦进击者构造恶意输入,可能造成随意率性敕令履行、随意率性文件读取等严重安然问题。

图3 被测项目中高危安然缺陷的散播环境(按大年夜类划分)

“代码运行情况”类缺陷也盘踞了必然份额,主要涵盖脆弱的XML架构方面的问题,进击者可以使用容许无限定元素的架构,提议回绝办事进击。

图4进一步展示了被测项目中各类详细的高危安然缺陷的散播环境。为方便展示,将呈现不跨越5次的缺陷统一归入“其他”,主要包括空指针解引用、变量未初始化、整数溢出、不安然的随机数等问题。在被测的20个项目中,呈现较多的几类详细缺陷是路径遍历(29%,50个)、脆弱的XML架构(26%,45个)和开释后应用(10%,18个)。下面对这三种缺陷进行简要阐明,并给出警备建议。

图4 被测项目中高危安然缺陷的散播环境

(按详细缺陷划分)

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

迫害:利用法度榜样对用户可节制的输入未经合理校验,就传送给文件造访API。进击者可能会应用一些特殊的字符(如“..”和“/”)开脱受保护的限定,造访一些受保护的文件或目录。 警备:严格验证用户的输入,建议创建合法资本名的列表,并规定用户只能造访此中的文件。

2.脆弱的XML架构(属于代码运行情况类缺陷)

迫害:进击者可以使用容许无限定元素的架构,构造特定的XML文档,导致利用法度榜样耗尽系统资本。 警备:将 maxOccurs 限定在合理的数值。

3.开释后应用(代码质量问题)

迫害:假如内存在开释后继承应用,可能会造成无法猜测的结果。应用已经开释的内存将会导致合法数据毁坏,或者履行随意率性代码,详细取决于当时的运行状态。 警备:避免开释后再应用问题,可以采取以下几种步伐:

(1)在指针被开释后将其设为空值。 (2)确保全局变量仅被开释一次。 (3)审慎处置惩罚轮回或前提语句中的开释内存或从新分配内存操作。

4.3 安然缺陷总体散播环境

上一页[1] [2] [3]下一页

上文针对被测项目中的高危缺陷的检出环境对项目的安然状况进行了阐发。平日来说,与高危缺陷比拟,中危缺陷在实际运行情况中的迫害相对较小,但仍不容漠视,且能在必然程度上反应出项目的代码质量、开拓职员对代码安然问题的注重程度等。为了更周全的懂得被测项目的安然状况,本节进一步展示包括中危缺陷在内的安然缺陷的总体散播环境。

图5展示了被测项目中安然缺陷大年夜类的散播环境。与高危级其余缺陷散播环境比拟,API误用类、代码质量类缺陷占连大年夜幅提升。项目中应用了相称数量的不安然的字符串处置惩罚函数、内存拷贝函数等,可能会导致缓冲区溢出等严重风险。“类的构造函数未对成员进行初始化”、“欠妥的类型对照”等代码质量类问题可反应出开拓者的不良编程习气;与输入验证类问题比拟,这类问题被直接用于发动进击的可能性较小,但仍旧会造成法度榜样运行可能发生弗成预知的差错,低落了系统的稳定性,严重环境下也会导致系统运行非常、以致系统崩溃。建议开拓者帮助应用自动化检测对象进行扫描和验证,以削减此类问题的发生。

图5 被测项目中的中高危安然缺陷的散播环境

(按大年夜类划分)

图6进一步展示了被测项目中的各类详细的中高危安然缺陷的散播环境。本次检测结果中有35种呈现不跨越10次的缺陷,如“Session中存储非序列化工具”、“设置设置设备摆设摆设文件中的明文密码”、“Random.setSeed参数为特定值”、“Activity挟制”、 “未设置HttpOnly标记”等,为方便展示,将其统一归入“其他”。在被测的20个项目中,呈现较多的缺陷是“不安然的字符串处置惩罚函数”(41%,144个)、“类的构造函数未对成员进行初始化”(14%,51个)和“不安然的内存拷贝函数”(9%,33个)。下面对这几种缺陷进行简要阐明,并给出警备建议。

图6 被测项目中的中高危安然缺陷的散播环境

(按详细安然缺陷种类划分)

1.不安然的字符串处置惩罚/内存拷贝函数(属于API误用类缺陷)

迫害:部分C/C++字符串处置惩罚函数如strcpy、strcat、strncpy、strncat、strlen等,以及内存拷贝函数如memcpy等未对界限进行反省,导致存在缓冲区溢出等严重风险。 警备:避免应用这些不安然的函数,选用其它更为安然的函数。对付应用Microsoft编译器的用户,斟酌应用StrSate库中的函数。对付应用Gcc编译器的用户,斟酌应用libssp库。别的可以应用支持C/C++标准的新版本编译器,并应用新的安然标准库函数。

2.类的构造函数未对成员进行初始化(属于代码质量类缺陷)

迫害:应用类成员中的未初始化的成员数据,会导致法度榜样运行弗成预知的动作,以致造成安然隐患。 警备:完善类的构造函数实现,确保类的成员都得以精确初始化。

“关于本申报的阐明”

一、本申报仅从代码角度进行缺陷阐发。本申报中统计的缺陷是指因为代码编写不规范导致的有可能被进击者使用的安然隐患。在实际系统中,因为软件实际支配情况、安然设备等的限定,部分缺陷可能无法经由过程渗透测试获得验证。

二、本申报中的缺陷仅适用于表1中列出的特定软件版本。当软件版本有任何更新、改动和优化时,本申报不再适用。

三、本申报由360代码卫士团队供给部分技巧支持。

上一页[1] [2] [3]

赞(0) 打赏
分享到: 更多 (0)
免责申明:本站所有资料均来自于网络,版权归原创者所有!本站不提供任何保证,不保证真实性,并不承担任何法律责任

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

阿里云优惠网 更专业 更优惠

阿里云优惠券阿里云大礼包