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