近日,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)
該類缺陷是源代碼之外的問題,例如運行環境配置問題、敏感信息管理問題等,它們對產品的安全仍然是至關重要的。
前七類缺陷與源代碼中的安全缺陷相關,它們可以成為惡意攻擊的目標,一旦被利用會造成信息泄露、權限提升、命令執行等嚴重后果。最后一類缺陷描述實際代碼之外的安全問題,它們容易造成軟件的運行異常、數據丟失等嚴重問題。
|