01 引言
近兩年正如許多安全公司的研究員親身經曆的那樣,網絡攻擊量顯著增加,重大漏洞被相繼爆出并伴随着在野利用。如去年年底的log4shell(CVE-2021-44228)和今年爆出的spring4shell(CVE-2022-22965)在安全圈裡都掀起了不小的風浪。由于在分析spring漏洞時cve編号還沒有出來,自評影響力也沒那麼“核彈級”,後續就沒怎麼關注這個漏洞的。最近突然想看看這個漏洞的CVSS評分,看看官方是怎麼給這漏洞做影響力定義的。檢視後發現該漏洞CVSSV2.0評分為7.5,CVSS3.1的評分為9.8。那麼CVSS的評分依據究竟是什麼?2.x和3.x的評分标準差別在哪?是否分數越高就表示漏洞危害越大?近年來又有哪些CVSS評分為滿分的漏洞?本篇文章想就這些問題跟大家簡單聊一聊。
02 CVSS評分依據
2.1 CVSS評分名額
CVSS全稱為Common Vulnerability Scoring System,即“通用漏洞評分系統”,是一個行業公開的标準。其被設計用來評測漏洞的嚴重程度,并幫助确定所需反應的緊急度和重要度。CVSS是安全内容自動化協定(SCAP)的一部分,通常CVSS和CVE一同由美國國家漏洞庫(NVD)釋出并保持資料的更新。CVSS标準由FIRST制定,并由其組織團隊SIG(The CVSS Special Interest Group)改進和推廣。通過漏洞難易程度以及對機密性、完整性、可用性的影響綜合評估後,生成一個0到10分之間的評分值來評估漏洞的嚴重程度。
CVSS的評分名額由三部分組成:
1、基礎評價(Base Metric Group):
評估漏洞本身固有的一些特點及這些特點可能造成的影響。基礎評價指的是一個漏洞的内在特征,該特征随時間和使用者環境保持不變,基礎評價是CVSS評分裡最重要的一個名額,我們一般說的CVSS評分都是指漏洞的基礎評價得分。
2、生命周期評價(Temporal Metric Group):
此名額衡量目前利用技術或代碼可用性的狀态,是否存在任何更新檔或解決方法或者漏洞報告的可信度等。生命周期評價幾乎肯定會随着時間的推移而改變。
3、環境評價(Environmental Metric Group):
這些名額使分析師能夠根據受影響的IT資産對使用者組織的重要性定制CVSS評分,并根據組織基礎結構中元件的情況的配置設定分值。
2.2 基礎評價對比
不同版本的CVSS對以上三個次元的評價方式略有不同,CVSS2.0在基礎評價階段主要評估攻擊途徑、攻擊複雜度、認證、機密性、完整性和可用性幾個方面,評分要素如下表所示:
最終基礎評價的計算方式為:
基礎評價得分=10*攻擊途徑*攻擊複雜度*認證*((機密性*機密性權重)+(完整性*完整性權重)+(可用性*可用性權重))
CVSS3.1相比于2.0在評價要素和分值上都做了調整,評價因子如下表所示:
CVSS3.1基礎評價的計算方法也比2.0要複雜許多,評分由可利用性評分和影響度評分兩部分構成:
基礎評價得分=可利用性評分+影響度評分
要計算這兩個分值我們需要先了解CVSS3.0開始引用的一個新機制——“作用域”,作用域反映了軟體元件中的漏洞會否影響其以外的資源或獲得其以外的權限,有“固定”和“變化”兩種形态,分别表示:
unchanged(U) 固定:
被利用的漏洞隻能影響由同一當局管理的資源。在這種情況下,脆弱元件和受影響元件是同一個。
changed(C) 變化:
被利用的漏洞可能會影響超出脆弱元件預期授權權限的資源。在這種情況下,脆弱元件和受影響元件并非同一個。
可利用性評分的計算方式比較簡單,注意其中權限要求部分會随着作用域的變化而變化,最終計算公式為:
可利用性評分=8.22*攻擊途徑*攻擊複雜度*權限要求*使用者互動
影響度評分要稍微複雜些,其計算方式為:
當作用域=固定:影響度分值=6.42*ISCbase
當作用域=變化:影響度分值=7.52*(ISCbase−0.029)−3.25*(ISCbase-0.02)^15
其中:ISCbase=1-[(1-機密性影響)×(1-完整性影響)×(1-可用性影響)]
2.3 生命周期評價對比
CVSS2.0和CVSS3.1對生命周期評價的要素基本一緻,都包括了利用代碼成熟度、更新檔完善水準和報告可信度三個方面,差别主要在具體的分值上,評價标準對比表如下所示:
計算方式比較簡單,2.x和3.x都一樣:
生命周期評價得分=10*利用代碼成熟度*更新檔完善水準*報告可信度
2.4 環境評價對比
CVSS2.0和CVSS3.1在環境評價的要素和記分方式上差别很大。CVSS2.0的環境評價要素如下表所示:
計算公式為:
環境評價得分=[生命周期評價+(10-生命周期評價)*危害影響程度]*目标分布範圍
CVSS3.1的環境評價要素主要由保密性需求、完整性需求和可用性需求構成,如下表所示:
計算公式比較複雜,和2.2裡講的“作用域”有一定關系,同時有“有修正”和“無修正”兩種計算方式。首先我們需要計算出2.2裡基礎評分名額的“影響度評分”。
當影響度<=0時,環境評價分值為0
當影響度>0 且 “無修正”:環境評價分值為
Roundup(Roundup(Min[(M.影響度分值+M.可利用度分值),10])*利用代碼成熟度*更新檔完善水準*報告可信度)
當影響度>0 且 “有修正”:環境評價分值為
Roundup(Roundup(Min[1.08*(M.影響度分值+M.可利用度分值),10])*利用代碼成熟度*更新檔完善水準*報告可信度)
其中:
1、Roundup為保留小數點後一位并向上取整(小數點後第二位大于零則進一)
2、Min為比較前後兩值,取小者
3、M. 代表被修正後的分數,若對應項無修改,則為原值
4、影響力修正得分公式為:
作用域為固定:影響度修正分=6.42*ISCModified
作用域為變化:影響度修正分=7.52*(ISCModified−0.029)−3.25*(ISCModified-0.02)^15
其中:ISCModified=Min(1-[(1-M.機密性影響*M.機密性需求)*(1-M.完整性影響*M.完整性需求)*(1-M.可用性影響*M.可用性需求)],0.915)
5、可利用度修正得分公式為:
M.可利用度分值=8.22*M.攻擊途徑*M.攻擊複雜度*M.權限需求*M.使用者互動
2.5 漏洞等級
CVSS2.0對漏洞等級的定義有低、中、高三個級别,CVSS3.0開始補充了“嚴重”這個級别,具體如下表所示,表中的CVSS分數均代表的基礎評價分數:
03評分案例分析
那麼是否CVSS評分越高的漏洞就真的越嚴重呢?我們可以先來看看CVSS對曆史經典漏洞永恒之藍(CVE-2017-0143)的評分結果:
永恒之藍漏洞的嚴重性和影響力自然不必多說,但CVSS3.X的最終評分僅為8.1分,甚至都沒有進入嚴重級别(Critical)這一檔。由于永恒之藍爆發時還沒有3.1的标準,我們可以先通過3.0的标準(與3.1基本一緻)來分析下該漏洞為什麼在CVSS的評分不高。
永恒之藍漏洞的評分詳情為:
CVSS:3.0/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
參考2.2小節裡CVSS3.1的評分标準,這裡:
AV(Attack Vector)代表攻擊途徑
AC(Attack Complexity)代表攻擊複雜度
PR(Privileges Required)代表權限要求
UI(User Interaction)代表使用者互動
S(Scope)代表作用域
C(Confidentiality Impact)代表機密性影響度
I(Integrity Impact)代表完整性影響度
A(Availability Impact)代表可用性影響度
最終結果為:
失分項主要有兩個地方,一是攻擊複雜度評價給的高,通俗點講就是該漏洞的利用難度較高。因為永恒之藍是一個遠端溢出漏洞,poc和exp調試比較困難。
另外該漏洞的作用域評價為固定,因為該漏洞隻影響SMB協定,不涉及其他元件、服務或協定。從2.2小節裡可以看出,作用域一是會影響“權限要求”項的評分,二是會影響基礎評價裡“影響度”的評分公式。由于永恒之藍漏洞由于權限要求評價項為“無”,是以這裡隻會對“影響度”的評分造成影響,以上兩個原因造成了永恒之藍漏洞的CVSS評分并沒有大家想的那麼高。
另外一些看上去不怎麼起眼的漏洞CVSS卻會給出較高的評分,例如Samba遠端代碼執行漏洞(CVE-2021-44142),這個漏洞在Samba預設配置下并不會觸發,同時利用穩定性也不高,暴露面中規中矩,但CVSS卻給了8.8分,比永恒之藍評分還要高,評分詳情為:CVSS:3.0/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
可以看出僅因該漏洞的利用複雜度比永恒之藍低,總體評分就比永恒之藍高了,這從漏洞影響面來看顯然是不太科學的。
此外篇頭提到的兩個漏洞log4shell(CVE-2021-44228)和spring4shell(CVE-2022-22965)的評分分别為10分和9.8分,事實上這兩個漏洞在評分上所有選項都是最高分,唯一差別是一個作用域可變,一個作用域固定,最終影響了計算公式:
Log4j2:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
Spring:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
這裡CVSS對作用域的定義還是比較客觀的,因為log4j2是一個元件,隻要調用了log4j2相應版本這個系統就會受到威脅,是以作用域為可變;而Spring4Shell隻是一個架構,作用域為固定。事實上如果一個漏洞作用域為固定,換言之該漏洞隻影響某個獨立的元件,那麼該漏洞注定得不到10分,最高分也隻有9.8分,這也是為什麼我們能看到那麼多9.8分的經典漏洞的原因。