内容简介:近日,CNCERT发布了《开源软件代码安全缺陷分析报告——人工智能类开源软件专题》。本期报告聚焦国内外知名机器学习、人工智能类开源软件安全开发现状,通过分析多款知名人工智能类开源软件产品的安全缺陷,评估开源项目的代码安全控制情况。360代码卫士团队为本期报告提供了技术支持。以下是报告全文:随着软件技术飞速发展,开源软件已在全球范围内得到了广泛应用。数据显示,99%的组织在其IT系统中使用了开源软件。开源软件的代码一旦存在安全问题,必将造成广泛、严重的影响。为解开源软件的安全情况,CNCERT持续对广泛使用
近日,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)
该类缺陷是源代码之外的问题,例如运行环境配置问题、敏感信息管理问题等,它们对产品的安全仍然是至关重要的。
前七类缺陷与源代码中的安全缺陷相关,它们可以成为恶意攻击的目标,一旦被利用会造成信息泄露、权限提升、命令执行等严重后果。最后一类缺陷描述实际代码之外的安全问题,它们容易造成软件的运行异常、数据丢失等严重问题。
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架构方面的问题,攻击者可以利用允许无限制元素的架构,发起拒绝服务攻击。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 世界最大实验室:CERN 放弃微软软件拥抱开源软件
- 阿里开源软件替换指南
- 开源软件如何盈利
- 开源软件源代码安全缺陷分析报告:物联网软件专题
- 物联网软件专题 | 开源软件源代码安全缺陷分析报告
- 中国开源云联盟耿航:中国开源软件的发展趋势
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
复杂:信息时代的连接、机会与布局
罗家德 / 中信出版集团股份有限公司 / 2017-8-1 / 49.00 元
信息科技一方面创造了人们互联的需要,另一方面让人们在互联中抱团以寻找归属感,因此创造了大大小小各类群体的认同和圈子力量的兴起,即互联的同时又产生了聚群,甚至聚群间的相斥。要如何分析这张网?如何预测它的未来变化?如何在网中寻找机会,实现突围?本书提出了4个关键概念──关系、圈子、自组织与复杂系统: • 关系 关系是人与人的连接,又可以被分为强关系和弱关系。强关系就是和你拥有亲密关系的人,......一起来看看 《复杂:信息时代的连接、机会与布局》 这本书的介绍吧!