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