近日,CNCERT發(fā)布了《開(kāi)源軟件代碼安全缺陷分析報(bào)告——人工智能類開(kāi)源軟件專題》。本期報(bào)告聚焦國(guó)內(nèi)外知名機(jī)器學(xué)習(xí)、人工智能類開(kāi)源軟件安全開(kāi)發(fā)現(xiàn)狀,通過(guò)分析多款知名人工智能類開(kāi)源軟件產(chǎn)品的安全缺陷,評(píng)估開(kāi)源項(xiàng)目的代碼安全控制情況。360代碼衛(wèi)士團(tuán)隊(duì)為本期報(bào)告提供了技術(shù)支持。
以下是報(bào)告全文:
開(kāi)源軟件源代碼安全缺陷分析報(bào)告
——人工智能類開(kāi)源軟件專題
1、概述
隨著軟件技術(shù)飛速發(fā)展,開(kāi)源軟件已在全球范圍內(nèi)得到了廣泛應(yīng)用。數(shù)據(jù)顯示,99%的組織在其IT系統(tǒng)中使用了開(kāi)源軟件。開(kāi)源軟件的代碼一旦存在安全問(wèn)題,必將造成廣泛、嚴(yán)重的影響。為解開(kāi)源軟件的安全情況,CNCERT持續(xù)對(duì)廣泛使用的知名開(kāi)源軟件進(jìn)行源代碼安全缺陷分析,并發(fā)布季度安全缺陷分析報(bào)告。
“人工智能”近年來(lái)發(fā)展迅猛,已成為高精尖科技創(chuàng)新的代名詞。本期報(bào)告聚焦國(guó)內(nèi)外知名機(jī)器學(xué)習(xí)、人工智能類開(kāi)源軟件安全開(kāi)發(fā)現(xiàn)狀,通過(guò)分析多款知名人工智能類開(kāi)源軟件產(chǎn)品的安全缺陷,評(píng)估開(kāi)源項(xiàng)目的代碼安全控制情況。選取關(guān)注度高的開(kāi)源項(xiàng)目,結(jié)合缺陷掃描工具和人工審計(jì)的結(jié)果,對(duì)各開(kāi)源項(xiàng)目安全性進(jìn)行對(duì)比。
2、被測(cè)開(kāi)源軟件
綜合考慮用戶數(shù)量、受關(guān)注程度以及更新頻率等情況,選取了20款具有代表性的人工智能(以下簡(jiǎn)稱AI)類開(kāi)源軟件。表1列出了本次被測(cè)的開(kāi)源人工智能類軟件項(xiàng)目的概況。本次檢測(cè)的軟件涵蓋了C++,C#,Java,Python等編程語(yǔ)言。這些開(kāi)源軟件項(xiàng)目都是國(guó)際、國(guó)內(nèi)知名的,擁有廣泛用戶的軟件項(xiàng)目,其中不乏由知名軟件公司開(kāi)發(fā)的軟件。由于這些軟件大多具有巨大的用戶群體,軟件中的安全缺陷很可能會(huì)造成嚴(yán)重的后果。
表1 被測(cè)開(kāi)源軟件項(xiàng)目概覽
項(xiàng)目名稱
版本號(hào)
主要編程語(yǔ)言
功能說(shuō)明
代碼行數(shù)
叮當(dāng)(dingdang-robot)
0.2.1
Python
工作在 Raspberry Pi上的中文語(yǔ)音對(duì)話機(jī)器人
6,574
Serenata de Amor
1.0.0
Python
公共社會(huì)管理的AI項(xiàng)目
11,877
Snake
1.0.0
Python
AI的貪吃蛇游戲
3,123
Simple AI
0.8.1
Python
AI算法工具包
5,963
EasyAI
1.0.0
Python
一個(gè)AI游戲框架
3,487
Mycroft
0.8.5
Python
可編程的開(kāi)源語(yǔ)音助手
27,236
AI_Challenger
1.0
Python
開(kāi)放數(shù)據(jù)集和編程比賽的AI挑戰(zhàn)平臺(tái)
198,422
OpenNERO
1.0.0
C++
面向AI研究和教育的開(kāi)放平臺(tái)
234,302
Polyworld
2.6.0
C++
AI仿人工生命系統(tǒng)
49,673
AIKIDO
0.2.0
C++
一個(gè)解決機(jī)器人運(yùn)動(dòng)規(guī)劃和決策問(wèn)題的C++庫(kù)
32,830
Quackle
1.0.3
C++
填字游戲的AI分析工具
13,908
Caffe
0.9999
C++
一個(gè)深度學(xué)習(xí)開(kāi)發(fā)框架
92,761
SUSI.AI Server
2.1.0
Java
一個(gè)智能開(kāi)源個(gè)人助理程序
37,400
gdxAi
1.8.1
Java
基于libGDX的游戲開(kāi)發(fā)框架
35,200
onyx
1.1.4
Java
一個(gè)使用人工智能,機(jī)器學(xué)習(xí)和深度學(xué)習(xí)等技術(shù)的android庫(kù),可讓開(kāi)發(fā)人員了解他們?cè)趹?yīng)用中顯示的內(nèi)容
15,100
AIMA3e-Java
3.0.0
Java
Russell和Norvig的AI算法的Java實(shí)現(xiàn)
97,600
ABAGAIL
1.0.0
Java
機(jī)器學(xué)習(xí)和人工智能的算法包
26,700
Malmo
0.35.6
Java
一個(gè)基于Minecraft的AI實(shí)驗(yàn)和研究平臺(tái)
54,100
OCR_densenet
1.0.0
Java
采用densenet的圖片文字識(shí)別軟件(第一屆西安交通大學(xué)人工智能實(shí)踐大賽第一名)
5,267
BrainSimulator
0.6.0
C#
AI架構(gòu)的可視化原型設(shè)計(jì)開(kāi)發(fā)平臺(tái)
295,300
3、測(cè)試內(nèi)容
3.1 安全缺陷種類
本次測(cè)試涵蓋各類常見(jiàn)安全缺陷。根據(jù)缺陷形成的原因、被利用的可能性、造成的危害程度和解決的難度等因素進(jìn)行綜合考慮,可以將常見(jiàn)的安全缺陷分為八類:
1.輸入驗(yàn)證與表示(Input Validation and Representation)
輸入驗(yàn)證與表示問(wèn)題通常是由特殊字符、編碼和數(shù)字表示所引起的,這類問(wèn)題的發(fā)生是由于對(duì)輸入的信任所造成的。這些問(wèn)題包括:緩沖區(qū)溢出、跨站腳本、SQL注入、命令注入等。
2.API誤用(API Abuse)
API是調(diào)用者與被調(diào)用者之間的一個(gè)約定,大多數(shù)的API誤用是由于調(diào)用者沒(méi)有理解約定的目的所造成的。當(dāng)使用API不當(dāng)時(shí),也會(huì)引發(fā)安全問(wèn)題。
3.安全特性(Security Features)
該類別主要包含認(rèn)證、訪問(wèn)控制、機(jī)密性、密碼使用和特權(quán)管理等方面的缺陷。
4.時(shí)間和狀態(tài)(Time and State)
分布式計(jì)算與時(shí)間和狀態(tài)有關(guān)。線程和進(jìn)程之間的交互及執(zhí)行任務(wù)的時(shí)間順序往往由共享的狀態(tài)決定,如信號(hào)量、變量、文件系統(tǒng)等。與分布式計(jì)算相關(guān)的缺陷包括競(jìng)態(tài)條件、阻塞誤用等。
5.錯(cuò)誤和異常處理缺陷(Errors)
這類缺陷與錯(cuò)誤和異常處理有關(guān),最常見(jiàn)的一種缺陷是沒(méi)有恰當(dāng)?shù)奶幚礤e(cuò)誤(或者沒(méi)有處理錯(cuò)誤)從而導(dǎo)致程序運(yùn)行意外終止,另一種缺陷是產(chǎn)生的錯(cuò)誤給潛在的攻擊者提供了過(guò)多信息。
6.代碼質(zhì)量問(wèn)題(Code Quality)
低劣的代碼質(zhì)量會(huì)導(dǎo)致不可預(yù)測(cè)的行為。對(duì)于攻擊者而言,低劣的代碼使他們可以以意想不到的方式威脅系統(tǒng)。常見(jiàn)的該類別缺陷包括死代碼、空指針解引用、資源泄漏等。
7.封裝和隱藏缺陷(Encapsulation)
合理的封裝意味著區(qū)分校驗(yàn)過(guò)和未經(jīng)檢驗(yàn)的數(shù)據(jù),區(qū)分不同用戶的數(shù)據(jù),或區(qū)分用戶能看到和不能看到的數(shù)據(jù)等。常見(jiàn)的缺陷包括隱藏域、信息泄漏、跨站請(qǐng)求偽造等。
8.代碼運(yùn)行環(huán)境的缺陷(Environment)
該類缺陷是源代碼之外的問(wèn)題,例如運(yùn)行環(huán)境配置問(wèn)題、敏感信息管理問(wèn)題等,它們對(duì)產(chǎn)品的安全仍然是至關(guān)重要的。
前七類缺陷與源代碼中的安全缺陷相關(guān),它們可以成為惡意攻擊的目標(biāo),一旦被利用會(huì)造成信息泄露、權(quán)限提升、命令執(zhí)行等嚴(yán)重后果。最后一類缺陷描述實(shí)際代碼之外的安全問(wèn)題,它們?nèi)菀自斐绍浖倪\(yùn)行異常、數(shù)據(jù)丟失等嚴(yán)重問(wèn)題。
|