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