近日,CNCERT發(fā)布了《開源軟件代碼安全缺陷分析報告——框架類軟件專題》。本期報告聚焦國內(nèi)外知名框架類開源軟件安全開發(fā)現(xiàn)狀,通過多款知名框架類開源軟件產(chǎn)品的安全缺陷,評估開源項目的代碼安全控制情況。360代碼衛(wèi)士團隊為本期報告提供了技術(shù)支持。
1、概述
隨著軟件技術(shù)飛速發(fā)展,開源軟件已在全球范圍內(nèi)得到了廣泛應用。數(shù)據(jù)顯示,99%的組織在其IT系統(tǒng)中使用了開源軟件。開源軟件的代碼一旦存在安全問題,必將造成廣泛、嚴重的影響。為了解開源軟件的安全情況,為了解開源軟件的安全情況,CNCERT持續(xù)對廣泛使用的知名開源軟件進行源代碼安全缺陷分析,并發(fā)布季度安全缺陷分析報告。
本期報告聚焦國內(nèi)外知名框架類開源軟件安全開發(fā)現(xiàn)狀,通過多款知名框架類開源軟件產(chǎn)品的安全缺陷,評估開源項目的代碼安全控制情況。選取關(guān)注度高的開源項目,結(jié)合缺陷掃描工具和人工審計的結(jié)果,對各開源項目安全性進行評比。
2、被測開源框架
綜合考慮用戶數(shù)量、受關(guān)注程度以及更新頻率等情況,選取了20款具有代表性的框架類軟件。表1列出了本次被測的開源框架類軟件項目的概況。本次檢測的軟件涵蓋了C,C++,Java,PHP等編程語言。這些開源軟件項目都是國際、國內(nèi)知名的,擁有廣泛用戶的軟件項目,其中不乏由知名軟件公司開發(fā)的軟件。由于這些軟件大多具有巨大的用戶群體,軟件中的安全缺陷很可能會造成嚴重的后果。
表1 被測開源軟件項目概覽
項目名稱
版本號
主要編程語言
功能說明
代碼行數(shù)
Laravel
5.6.19
PHP
laravel是web應用程序目錄結(jié)構(gòu)分析框架
2,570
Dubbo-Spring
2.6.1
Java
Spring 開發(fā)的RPC應用程序框架
4,123
Server_Framework
1.0
C
Server_Framework C語言實現(xiàn)的異步服務器框架
920
Codelgniter
3.1.8
PHP
PHP 網(wǎng)站開發(fā)者使用的 Web 應用程序開發(fā)框架和工具包
195,232
Kore
2.0.0
C
可擴展web應用程序框架
3,494
Faker
1.7.1
PHP
PHP填充數(shù)據(jù)的庫,可以往數(shù)據(jù)庫里填寫大量數(shù)據(jù)用于測試使用
104,594
WaFer
1.0
C
基于C語言的輕量級,可伸縮性服務器端web應用程序框架
385
WebCollector
2.7
Java
基于Java的開源Web爬蟲框架
9,676
Kumuluzee
1.0
Java
Java EE應用程序微服務遷移框架
16,893
LibPhenom
1.0.0
C
一個用于構(gòu)建高性能和高可伸縮性的系統(tǒng)事件框架
38,355
Lce
1.0.0
C++
一款支持線程池、異步非阻塞、高并發(fā)、高性能的linux網(wǎng)絡編程框架
3,761
Acl
3.3.1
C
一個跨平臺的網(wǎng)絡通信庫及服務器編程框架,同時提供實用功能庫
492,744
Kvproxy
0.1.0
C++
一個數(shù)據(jù)庫的代理框架
18,130
Yii2
2.0.15.1
PHP
一個適用于開發(fā) WEB 2.0 應用的 PHP 框架
168,893
Cphalcon
3.3.2
PHP
PHP語言編寫的C的擴展應用,提供了高性能,低資源消耗的Web框架
159,241
Datumbox
0.8.1
Java
一個快速開發(fā)機器學習和統(tǒng)計應用的框架
45,986
Concordion
2.1.2
Java
一個功能測試框架
30,572
Symfony
4.0
PHP
一個基于MVC模式的面向?qū)ο蟮腜HP5框架
433,742
Jodd
4.3.2
Java
一套友好開發(fā)工具,微觀框架
319,699
BioJava
5.0.0
Java
用于處理生物學數(shù)據(jù)的一款Java框架
311,539
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í)行任務的時間順序往往由共享的狀態(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ù)丟失等嚴重問題。
3.2、安全缺陷級別
我們將源代碼的安全問題分為三種級別:高危(High)、中等(Medium)和低(Low)。衡量級別的標準包括兩個維度,置信程度(confidence)和嚴重程度(severity)。置信程度是指發(fā)現(xiàn)的問題是否準確的可能性,比如將每個strcpy函數(shù)調(diào)用都標記成緩沖區(qū)溢出缺陷的可信程度很低。嚴重程度是指假設測試技術(shù)真實可信的情況下檢出問題的嚴重性,比如緩沖區(qū)溢出通常是比變量未初始化更嚴重的安全問題。將這兩個因素綜合起來可以準確的為安全問題劃分級別。
|