近日,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)
该类缺陷是源代码之外的问题,例如运行环境配置问题、敏感信息管理问题等,它们对产品的安全仍然是至关重要的。
前七类缺陷与源代码中的安全缺陷相关,它们可以成为恶意攻击的目标,一旦被利用会造成信息泄露、权限提升、命令执行等严重后果。最后一类缺陷描述实际代码之外的安全问题,它们容易造成软件的运行异常、数据丢失等严重问题。
|