黃康宇,楊 林,徐偉光,張 濤,李華波
1(陸軍工程大學,南京 210007) 2(軍事科學院,北京 100091) E-mail:kangyu.huang@outlook.com
軟件是當前人們生活中至關重要的部分,由于軟件開發(fā)者往往缺乏安全知識或生產(chǎn)安全軟件的技術、軟件配置不正確或執(zhí)行環(huán)境復雜,使得軟件存在漏洞和弱點.如果漏洞或弱點被惡意用戶所利用,它們將帶來嚴重的破壞.軟件安全性對開發(fā)商和用戶而言都是一個重要的關注點,可以使用安全度量來測量軟件系統(tǒng)中特定的安全特性.安全度量是一個可以量化的指標,能夠指出系統(tǒng)某些屬性的安全級別.目前學術界、工業(yè)界和政府提出并使用了若干軟件安全度量,例如相對漏洞度量、靜態(tài)分析工具有效性度量、攻擊面度量、漏洞密度、Web應用安全性評分向量、通用漏洞評分系統(tǒng)評分等[1].這些度量都建立在各自特定的視角、目標和假設上,測量軟件安全性的不同屬性,可以用來幫助決策者進行資源分配、方案規(guī)劃、風險評估和產(chǎn)品服務選擇.
攻擊面(attack surface)度量是近十年來關注比較多的一種安全度量,可應用于軟件、硬件、網(wǎng)絡、物理系統(tǒng)的安全性分析,目前大部分的攻擊面研究的目標是軟件系統(tǒng).本文通過梳理國內(nèi)外軟件系統(tǒng)攻擊面研究的相關文獻,深入分析和歸納攻擊面研究的相關工作和問題.第2節(jié)概述了攻擊面及其相關研究工作,并給出軟件系統(tǒng)攻擊面的一般化定義,作為后面綜述的基礎;第3節(jié)根據(jù)攻擊面元素之間的關系將現(xiàn)有攻擊面模型分為枚舉、關聯(lián)和圖模型三種,并對它們進行了詳細地介紹和比較;第4節(jié)介紹了攻擊面識別和測量;第5節(jié)圍繞減小、操作和移動攻擊面三種方式來了解攻擊面在增強系統(tǒng)安全性中的應用;第6節(jié)列舉了評估攻擊面度量的一些觀點和方法;第7節(jié)進行了總結和展望.
攻擊面的概念最早由Howard于2003年提出,用于分析評估Windows操作系統(tǒng)的安全性[2],隨后出現(xiàn)了不少針對軟件系統(tǒng)攻擊面的研究.這些研究一般認為:攻擊面是系統(tǒng)相關元素中可被攻擊者利用來實施攻擊的元素的集合,系統(tǒng)的攻擊面越大,其面臨的安全風險就越大.系統(tǒng)相關的元素,可以是系統(tǒng)的組成部分,例如接口、方法、數(shù)據(jù)、協(xié)議等,也可以是系統(tǒng)日志、配置或策略等信息.攻擊面不代表軟件代碼質(zhì)量,攻擊面大不一定意味著代碼中存在很多安全缺陷,它表示系統(tǒng)存在更大的安全風險.
攻擊面研究主要是找出并理解系統(tǒng)中那些因為安全風險而需要審查和測試的部分,使得開發(fā)者和安全專家知道系統(tǒng)的哪些部分對攻擊開放,以此尋求減小它們的方法,并注意攻擊面何時和如何改變,以及這種改變從安全風險的角度上看意味著什么.攻擊面研究主要圍繞以下幾個工作進行:
1)提出攻擊面模型.需要提出有效的攻擊面模型,刻畫攻擊面包含系統(tǒng)中哪些元素以及元素的種類、元素間的關系、元素在攻擊面所處的地位等,并在此基礎上設計攻擊面的量化方法.攻擊面的量化能夠量化系統(tǒng)的安全風險,量化方法與攻擊面模型密切相關,是一個重要且很有挑戰(zhàn)性的工作.
2)識別和測量攻擊面.根據(jù)事先提出的抽象的攻擊面模型,使用手動或自動的方法識別系統(tǒng)中的攻擊面元素,從而構建出系統(tǒng)具體的攻擊面.在識別的過程中測量攻擊面每個元素的貢獻值,根據(jù)模型提出的量化方法綜合求得整個攻擊面的度量值.
3)增強系統(tǒng)安全性.測量系統(tǒng)攻擊面是了解系統(tǒng)的安全風險,下一步工作就要在攻擊面研究的基礎上尋找增強系統(tǒng)安全性的措施.由于攻擊面越大,系統(tǒng)的安全風險就越大,因此不少工作通過研究減小系統(tǒng)攻擊面的方法來增強系統(tǒng)安全性.
4)評估攻擊面度量.采取一定的方法來評估攻擊面度量的有效性;或者判斷是否能夠根據(jù)提出的攻擊面度量,有效地實施相應的增強系統(tǒng)安全性措施.
定義1.設有軟件系統(tǒng)S,其所有相關元素集合為Elements,則S的攻擊面模型為一個n元組:
AS=
(1)

攻擊面AS中的一個維描述了系統(tǒng)的一個屬性(例如系統(tǒng)開放的端口),在具體的系統(tǒng)中,一個維是一個包含多個攻擊面元素的集合,這些元素是系統(tǒng)的元素實例(例如端口號80、15555等).根據(jù)定義1,可將相關研究工作描述為:
1)提出攻擊面模型:定義多元組AS中的各維M1,M2,…,Mn,描述它們在系統(tǒng)中的地位、類型和維間關聯(lián)關系,確定量化函數(shù)f.
2)識別攻擊面:針對系統(tǒng)S,從Elements集合中找出屬于E的元素,并映射到多元組AS中的各個維中.
3)測量攻擊面:對E中的所有元素,測量元素貢獻值,再根據(jù)量化函數(shù)f計算攻擊面度量值Metric.
根據(jù)多元組AS中維間或元素間的關系,可將現(xiàn)有攻擊面模型分為枚舉模型、關聯(lián)模型和圖模型三種.
枚舉模型中AS各個維相互獨立,各元素相互獨立.模型沒有清晰地指明或者不關注元素間的關系(如相互依賴、訪問次序等關系).因此這種攻擊面模型只是簡單地枚舉攻擊面的維及其元素,攻擊面中一個元素的識別不依賴于其他元素,一個元素的貢獻值不影響其他元素貢獻值的計算和測量.一般按照以下兩個步驟來得到整個攻擊面的度量值:
1.維內(nèi)元素貢獻值求和.
維內(nèi)元素一般是屬于同一量綱的屬性,直接將一個維內(nèi)所有元素貢獻值的和作為該維的攻擊面度量值,即:
score(Mi)=∑e∈Miscore(e)
(2)
2.求整個攻擊面度量.
計算出每一個維的貢獻值后,通常有三種方法來處理整個攻擊面的度量值:
1)分離法.不同的維關注系統(tǒng)安全的不同屬性,保持各維貢獻值的獨立可以給用戶提供考慮上的選擇.此時直接使用各維的貢獻值作為攻擊面度量,即:
Metric=
(3)
2)求和法.當各維貢獻值量綱相同或模型作者認為量綱不產(chǎn)生影響時,可直接將各維的貢獻值相加,作為整個攻擊面的度量值:
(4)
3)求向量模長.各個維貢獻值量綱往往不相同,不能直接相加.把AS看成多維空間中的一個向量,向量模長為攻擊面大小.即求AS向量的歐幾里德范數(shù):
(5)
因為枚舉模型是最簡單的攻擊面模型,上述攻擊面度量的描述可以作為關聯(lián)模型和圖模型的基礎.
3.1.1 無權枚舉模型
無權枚舉模型中不區(qū)分元素的重要程度,此時可令攻擊面中每個元素的貢獻值為score(e)=1.在這種情況下,貢獻值為0的元素不在攻擊面中,貢獻值為1的元素則在攻擊面中.這種攻擊面模型通常是單維多元素模型,無權和枚舉兩種特性表明,攻擊面的大小就是它所包含元素的數(shù)量.
盧森堡大學的Abgrall等人對各種流行版本的瀏覽器進行跨站腳本攻擊(Cross-Site Scripting,XSS)測試[3],如果測試向量被瀏覽器執(zhí)行,則認為該XSS測試通過,意味著瀏覽器存在可能的漏洞.瀏覽器的攻擊面就是它的所有通過的測試結果集合,集合大小表示瀏覽器的威脅暴露程度,瀏覽器攻擊面間的漢明距離用來比較兩個瀏覽器對XSS攻擊向量的敏感度.Nayak等人提出了一個執(zhí)行攻擊面的概念[4].執(zhí)行攻擊面為一個給定月內(nèi)主機中一個軟件系統(tǒng)被利用的不同漏洞的集合,執(zhí)行攻擊面度量值即這些漏洞的數(shù)量.文獻[5]對SEAndroid的訪問控制策略進行攻擊面分析,識別超出容許范圍的訪問模式,并使用二分圖來展示這些訪問模式帶來的安全風險.文獻[6]在比較Linux容器和基本Linux系統(tǒng)的攻擊面時,使用系統(tǒng)漏洞的數(shù)量來比較攻擊面大小.
無權枚舉模型中不考慮元素貢獻值的差異,使得這種模型在量化時存在著固有的缺陷.Nayak也在他的執(zhí)行攻擊面中指出,這樣的度量難以評估利用不同漏洞的攻擊的破壞力之間的差異.所以,攻擊面元素的數(shù)量不能充分地測量系統(tǒng)的安全風險,還需要考慮每一個元素對攻擊面貢獻的程度.
3.1.2 加權枚舉模型
很多模型考慮了元素不同的貢獻程度,給出取值范圍或計算函數(shù)來確定元素貢獻程度的大小.使得AS中每一個e都能在實際系統(tǒng)中測量其不同的score(e);而對于不同的e,通過不同的取值范圍或函數(shù)來體現(xiàn)它們不同的重要性.
比較典型的加權枚舉模型是Howard的17個攻擊向量的Windows系統(tǒng)攻擊面模型,稱為相對攻擊面商(Relative Attack Surface Quotient,RASQ)[2].其中每個攻擊向量都是潛在的攻擊點,都有一個權值或偏移值(取值范圍為0.1至1.0).該模型直接將17個相互獨立的攻擊向量作為攻擊面中的元素,攻擊面的大小為這些攻擊向量貢獻值之和.
其他還有德國哈根大學提出的22維向量的Web應用程序攻擊面[7,8],每一個維都包含了若干個描述Web應用程序特性、存在離散取值范圍的參數(shù),在實際應用中測得每個參數(shù)的取值,從而計算每個維的值,再根據(jù)公式(5)計算AS的模長,得到量化的攻擊面度量值.美國馬里蘭大學提出系統(tǒng)代碼級別、枚舉可達元素的攻擊面模型[9],元素表示攻擊者可利用來影響系統(tǒng)數(shù)據(jù)或控制流的機會,攻擊面通過枚舉可達元素的不同貢獻值來進行測量(根據(jù)公式(2)計算).Skybox Security公司在2016年的一份白皮書[10]上使用暴露指標(Indicators of Exposure,IOEs)來表示系統(tǒng)攻擊面,IOEs指出了系統(tǒng)被暴露給攻擊的地方,例如軟件漏洞、系統(tǒng)配置錯誤、過于寬松的規(guī)則、違背安全策略和規(guī)則等.該公司還開發(fā)了攻擊面可視化工具Skybox Horizon,將多種不同嚴重程度的IOEs收集在一起,映射到系統(tǒng)的拓撲結構上,為安全專家和管理員提供了一個可視化的表示方式.
關聯(lián)模型中各元素并非是相互獨立的.而實際情況往往也是如此,系統(tǒng)中通常不存在絕對獨立的元素.系統(tǒng)是復雜的,存在各種關聯(lián)情況.
3.2.1 度量關聯(lián)模型
在很多情況中,一個元素的貢獻值往往成為另一個元素貢獻值的影響因子,各維度量值的計算或測量存在關聯(lián)關系.一個典型的例子是訪問權限對元素貢獻值的影響,直觀上來看,攻擊者在某個元素上的訪問權限越高,他利用該元素進行破壞的可能性越大.這種模型將訪問權限A作為攻擊面的一個維,此時攻擊面為AS=
在RASQ向量模型的基礎上,微軟的Howard、Pincus與卡內(nèi)基梅隆大學的周以真[11]將訪問權限從其關聯(lián)的攻擊向量中剝離出來,提出的攻擊面模型為:
AS=
該攻擊面模型包含如下幾個大維:
1)目標和因子(targets and enablers).目標為攻擊者在實現(xiàn)其目的的過程中起著關鍵作用的進程或數(shù)據(jù)資源;因子是其他作為攻擊者攻擊手段的進程或數(shù)據(jù)資源.
2)通道和協(xié)議(channels and protocols).通信通道是攻擊者能夠訪問系統(tǒng)目標的手段;協(xié)議確定了通道通信參與方之間的交互規(guī)則.
3)訪問權限(access rights).每一個進程和數(shù)據(jù)資源都關聯(lián)一個訪問權限.
在具體的系統(tǒng)中,每個大維都包含了若干個類型,從而劃分成更細的維.不同系統(tǒng)包含的類型不一樣,元素貢獻值的計算方法不一樣,攻擊面量化函數(shù)f也不一樣.即使給定一個系統(tǒng),定義其準確的f也是極其困難的.作者分析了Windows系統(tǒng),在17個RASQ向量的基礎上增加了3個向量,形成了20個RASQ攻擊向量,然后將這20個向量映射到攻擊面的幾個大維中.并給出了一個簡單的函數(shù)f:
Metric=score(CH,A)+score(PT,A) +score(DT,A)+score(PE,A)
(6)
即攻擊面大小等于一系列通道類型、進程目標類型、數(shù)據(jù)目標類型、進程因子類型實例元素貢獻值之和,實例元素的貢獻值受其關聯(lián)的訪問權限的約束.
3.2.2 結構關聯(lián)模型
攻擊面是系統(tǒng)相關元素中可被攻擊者利用來實施攻擊的元素的集合,在某些方面可以刻畫攻擊者的行為,也可以描述系統(tǒng)的部分視圖.因此可用使用系統(tǒng)論的思想來分析攻擊面,將攻擊面看作一個系統(tǒng)結構.結構關聯(lián)模型中,維間、元素間有機結合,形成一個系統(tǒng)的攻擊面整體,在隨后識別和測量攻擊面、進行安全分析或者增強系統(tǒng)安全的工作中,也會體現(xiàn)出攻擊面元素間相互作用、相互依賴的特點.
許多結構關聯(lián)模型使用系統(tǒng)的入口點(entry points)和出口點(exit points)作為攻擊面結構的重要部分,它們描述了攻擊者如何進入系統(tǒng)和如何從系統(tǒng)取出數(shù)據(jù)的方式.其中最著名的是Manadhata和周以真提出的攻擊面模型[12].作者受到了RASQ度量的啟發(fā),他們指出,攻擊者使用在特定環(huán)境中出現(xiàn)的系統(tǒng)方法、通道和數(shù)據(jù)項來攻擊系統(tǒng)(如圖1所示),這些方法、通道和數(shù)據(jù)項統(tǒng)稱為資源.系統(tǒng)S在給定環(huán)境下的攻擊面為包含三個維的元組AS=

圖1 Manadhata攻擊面模型Fig.1 Manadhata attack surface model
其中M是入口點和出口點方法的集合,C是通道的集合,I是不可信任數(shù)據(jù)的集合.系統(tǒng)的入口點是數(shù)據(jù)從環(huán)境進入系統(tǒng)的方式,而出口點是數(shù)據(jù)從系統(tǒng)出去到環(huán)境的方式,攻擊者使用通道連接到系統(tǒng)并調(diào)用系統(tǒng)的入口出口點方法.作者以系統(tǒng)I/O自動機模型(I/O Automata Model)為基礎,對攻擊面的三個分量進行定義.例如,將入口點和出口點定義為I/O自動機模型中的直接和間接的與外部有數(shù)據(jù)交互的行為;通道則通過直接入口點(或出口點)的前置條件中加入一條狀態(tài)參數(shù)進行定義;不可信任數(shù)據(jù)則直接定義為一個子I/O自動機.這樣使得攻擊面模型的確定、各分量元素的識別都在統(tǒng)一的I/O自動機上進行.
作者另一個重要的貢獻是他們提出的攻擊面量化的方法.攻擊面中資源元素的貢獻值依賴于該資源的破壞可能性(damage potential)和攻擊者獲取資源必需的訪問權限所耗費的努力(effort)兩個度量.元素的damage potential根據(jù)元素的屬性(如方法權限、通道協(xié)議類型和數(shù)據(jù)項類型等)來取值;元素的effort根據(jù)元素關聯(lián)的訪問權限來取值.Manadhata使用兩個度量的比值(damage potential-effort ratio,DPER)來計算元素的貢獻值,即:
(7)
該模型的攻擊面度量符合公式(3)的分離法,即:
Metric=<∑m∈Mscore(m),∑c∈Cscore(c),∑d∈Iscore(d)>
(8)
Manadhata攻擊面模型的展現(xiàn)出了它的影響力,許多攻擊面研究都使用[13]或者擴展了該模型,尤其是使用其中入口點/出口點和DPER的概念.Atighetchi等人[14]指出攻擊面模型需要表示位于不同層的概念和防御,將Manadhata模型擴展為包含多個垂直和水平層,形成多層攻擊面模型.美國羅切斯特理工學院[15]在Manadhata模型的入口點/出口點基礎上,增加危險點(進行危險系統(tǒng)調(diào)用的函數(shù))的概念,從系統(tǒng)的調(diào)用圖中識別出入口點、出口點和危險點,作為系統(tǒng)的攻擊面.愛爾蘭沃特福德理工學院[16]使用服務中入口和出口點的集合作為單個服務的攻擊面,每個點通過關聯(lián)的資源和安全面的值來計算其貢獻值DPER.單個服務的攻擊面度量是所有入口/出口點的貢獻值之和,而當組件服務集成組合服務時,需通過安全組合來最小化組合后的攻擊面.組合服務CS的度量值等于組件服務優(yōu)化后的入口/出口點貢獻值加上新增的非組件入口/出口點貢獻值.令n為組件服務的數(shù)量,z為非組件入口/出口點的數(shù)量,CS的度量值為:
(9)
圖模型是一種特殊的結構關聯(lián)模型.在很多情況下,為了描述更復雜的維間關系或元素間關系,往往借助圖模型進行攻擊面研究.這種圖模型往往由系統(tǒng)函數(shù)調(diào)用圖、資源訪問圖、攻擊圖或系統(tǒng)狀態(tài)機模型等分析得出.
定義2.系統(tǒng)攻擊面圖模型是一個加權有向圖GAS=
圖模型往往描述了從入口元素出發(fā)可利用的系統(tǒng)相關元素的集合,元素結點之間的有向邊描述了元素間的調(diào)用、訪問或依賴等關系,邊上的權值則賦予了元素間關系的重要程度.圖模型能夠使用圖論的方法進行構建攻擊面、確定攻擊面度量、識別和測量攻擊面和系統(tǒng)安全分析等相關研究.結合定義2和現(xiàn)有研究,攻擊面圖模型的構建方式可以分為生長法、移植法和剪枝法.
3.3.1 生長法
生長法不斷地識別結點元素,確定結點之間的關系,它有多種表現(xiàn)形式.可以首先確定結點集合V,根據(jù)結點間的關系添加有向邊(如圖2上部所示),從而確定邊集C和權集W;也可以首先確定入口結點結合V0,然后從入口結點開始逐漸構建整個攻擊面(如圖2下部所示).最終構造出整個攻擊面圖模型.

圖2 生長法構建圖模型Fig.2 Growth method to build the graph model
文獻[17]首先識別系統(tǒng)中所有可能的賬戶AC(點集),然后查找賬戶相關資源,檢查這些資源是否與其他賬戶交互,從而推導出賬戶之間的超行為SA(邊集),最終構造賬戶圖AG=

文獻[19]使用組件級別上的包依賴性來構建攻擊面,提出了漏洞攻擊面(Vulnerability Attack Surface,VAS)模型.VAS是一個加權有向圖,以組件為結點,組件間依賴關系為邊,有向邊
3.3.2 移植法
在有些系統(tǒng)安全分析中,系統(tǒng)攻擊面相關的信息往往可以以一個或多個圖的形式表示,可以將這些圖的表示形式移植到圖模型的攻擊面中,可以按照以下步驟來實現(xiàn):
① 將攻擊面相關信息轉化為圖的表現(xiàn)形式(如圖3左方框所示);
② 合并多個圖至單個圖.涉及到重復結點合并、多條路徑篩選等操作;
③ 將攻擊面相關信息映射到符合攻擊面定義的結點(圖3中方結點轉化成圓結點).

圖3 移植法構建圖模型Fig.3 Transplantation method to build the graph model
Theisen等人使用堆棧跟蹤記錄來近似攻擊面[20].堆棧跟蹤記錄主要用于調(diào)試,定義了外部輸入和系統(tǒng)崩潰之間的邏輯路徑.通過解析堆棧跟蹤記錄,識別其中的二進制、函數(shù)和源文件信息,將堆棧根據(jù)路徑映射到圖路徑中,結合多個堆棧跟蹤記錄,就形成一個攻擊面圖.每一個堆棧跟蹤記錄貢獻一條路徑到整個攻擊面中,所有路徑之和就構成了系統(tǒng)攻擊面.模型并沒有量化攻擊面,而是通過代碼實體在攻擊面中出現(xiàn)的頻率等信息來確定安全工作的重心.
3.3.3 剪枝法
由于攻擊面元素實際上是系統(tǒng)相關元素的子集,因此有研究通過在系統(tǒng)相關的圖模型(如代碼函數(shù)調(diào)用圖)基礎上剪去不屬于攻擊面的元素和路徑,剪除入口結點不可達的結點,最終構建出攻擊面圖模型(如圖5所示).

圖4 剪枝法構建圖模型Fig.4 Pruning method to build the graph model
IBM研究院[21,22]尋求量化與減小系統(tǒng)內(nèi)核攻擊面的方法,通過靜態(tài)代碼分析獲得內(nèi)核代碼的函數(shù)調(diào)用圖G=
該攻擊面代表了攻擊者可以利用的函數(shù)的集合.攻擊面度量是一個與代碼質(zhì)量度量μ相關的一個非負值,滿足:入口函數(shù)越多,攻擊面度量越高;障礙函數(shù)越多,攻擊面度量越低.作者提出了如下兩種滿足要求的攻擊面度量:
1) 攻擊面中所有函數(shù)的代碼質(zhì)量度量值之和,即:
Metric1=∑i∈FASμ(i)
(10)
(11)
Metric2利用了函數(shù)在調(diào)用圖中的位置,它包含一個二次型,用來處理函數(shù)與它的調(diào)用者和被調(diào)用者之間的相對復雜度:如果一個函數(shù)調(diào)用一個更加復雜的函數(shù)(或被一個更加復雜的函數(shù)調(diào)用),它的相對貢獻值應該增加,反之亦然.
不同類型的攻擊面模型都有著它的應用場景,因此不能簡單地指出哪個模型更好.在有些結構關聯(lián)模型中,如果使用邊來表示元素間的關聯(lián)關系,模型也可以轉化為圖模型.表1給出了各種模型的比較.

表1 各種攻擊面模型的比較Table 1 Comparison of various attack surface models
建立的多維元組攻擊面模型是一個抽象模型,在對具體系統(tǒng)研究時,需要識別具體的元素實例,并映射到攻擊面模型的維中.攻擊面模型指明了系統(tǒng)哪些元素屬于攻擊面,識別操作只需要遵循攻擊面中元素的定義即可.手動識別效率比較低,而且需要領域專家的經(jīng)驗知識,使得攻擊面分析無法應用于軟件系統(tǒng)設計、開發(fā)、部署的各個階段,因此有不少研究尋求自動識別的方法,如文獻[23]通過設計攻擊面量化識別算法,自動地從大量的數(shù)據(jù)集中識別出符合要求的攻擊面域名.
4.1.1 借助現(xiàn)有工具方法
成熟的工具或方法可以協(xié)助識別攻擊面.例如可以使用OWASP_Zed_Attack_Proxy_Project、Arachni、Skipfish、w3af等動態(tài)測試和漏洞掃描工具來尋找Web應用程序中哪些部分是可訪問的,有些Web應用程序防火墻也能夠導出一個Web應用程序的入口點模型*https://www.owasp.org/index.php/Attack_Surface_Analysis_Cheat_Sheet.文獻[24]以動態(tài)分析的方式,對Windows系統(tǒng)使用進程監(jiān)控器,對Linux系統(tǒng)使用SystemTap工具,嘗試從系統(tǒng)代碼或者運行時行為中識別Manadhata攻擊面模型中的三種資源.
4.1.2 使用系統(tǒng)模型進行識別
現(xiàn)有的識別攻擊面元素大多數(shù)屬于基于系統(tǒng)模型的識別方法.可以使用某種模型對軟件系統(tǒng)本身進行建模,然后從系統(tǒng)模型中識別出屬于攻擊面的元素,這種方法是比較直觀的方法.根據(jù)系統(tǒng)的形式化模型定義攻擊面元素的識別規(guī)則,或提出攻擊面元素的識別算法,使得不少識別工作可以自動在系統(tǒng)模型的基礎上完成.
20個向量的RASQ模型使用狀態(tài)機來對系統(tǒng)建模,攻擊面各維的元素直接從狀態(tài)機模型中得到.Manadhata攻擊面模型使用I/O自動機模型給出了入口出口點、通道和不受信任數(shù)據(jù)的形式化定義,根據(jù)定義使用cflow*http://www.gnu.org/software/cflow生成系統(tǒng)的調(diào)用圖來自動識別入口和出口點,并通過運行時監(jiān)控自動識別通道和不受信任數(shù)據(jù).文獻[25]使用體系結構建模工具AcmeStudio對系統(tǒng)建模,使用Acme規(guī)范定義Manadhata攻擊面模型三個維,從而在實際系統(tǒng)中識別這些元素.文獻[26]使用分層狀態(tài)機模型來表示系統(tǒng)模塊的層次結構,并從中識別出攻擊面輸入口.文獻[27]構建了系統(tǒng)的完整性墻模型,使用系統(tǒng)訪問控制策略來自動區(qū)分攻擊者控制數(shù)據(jù)和可信數(shù)據(jù),那些訪問完整性墻外部對象的方法被識別為攻擊面入口點.另外還可以建立系統(tǒng)賬戶圖[17]、SysML活動圖[28]等系統(tǒng)模型來協(xié)助攻擊面元素的識別.這些方法在建立系統(tǒng)模型的時候需要一定的手工操作,形式化的語言和建模工具可以降低操作的門檻,而一旦建立了系統(tǒng)模型和相應的識別規(guī)則,剩下的工作就可以開發(fā)自動工具來完成.有些情況下,系統(tǒng)模型的建立也可以自動完成,例如可以使用自動分析工具來構建系統(tǒng)的組件依賴圖[19]、函數(shù)調(diào)用圖[29]等.
4.1.3 從系統(tǒng)文檔中識別
部分研究從系統(tǒng)相關文檔(規(guī)范文檔、日志文檔等)中識別攻擊面元素.3.3.2小節(jié)中的模型使用的是使用系統(tǒng)崩潰的堆棧跟蹤記錄來識別攻擊面,文獻[16]使用的是服務描述來識別服務的入口和出口點,文獻[24]提出在調(diào)用堆棧記錄中識別系統(tǒng)的入口和出口點.如果這些文檔具有規(guī)范的格式,那么可以開發(fā)自動工具來識別攻擊面元素.
在識別攻擊面的過程中,可以同時識別攻擊面元素的類型、屬性、關聯(lián)的訪問權限等信息,從而測量每一個元素的貢獻值,最終得到整個攻擊面度量值.
在無權枚舉模型中,一般測量元素的數(shù)量;在加權的情況下,一般先測量攻擊面中元素的貢獻值,再根據(jù)模型中的量化方法f求出整個攻擊面的度量值.很多情況下,元素貢獻值是一個專家估值,和它的類型、包含的安全屬性或參數(shù)、關聯(lián)的訪問權限等屬性有關,元素的屬性不同,其貢獻值計算方式不同;具體的系統(tǒng)和系統(tǒng)所在環(huán)境不同,元素測量值也會不同.有些研究使用其他成熟的度量模型來確定元素貢獻值,如使用函數(shù)的源代碼行數(shù)、循環(huán)復雜度、或基于CVE的度量來表示代碼質(zhì)量度量,然后使用代碼質(zhì)量度量表示攻擊面中函數(shù)元素的貢獻值[21,22];使用CVSS評分確定入口點貢獻值,并使用圖論方法求出其他結點元素貢獻值[19];使用結構化保證用例模型來確定元素安全屬性的值[14].有時元素的原始測量值需要預處理,例如將連續(xù)的原始值映射到離散的重要程度取值范圍中[7].
攻擊面研究的主要目的是對系統(tǒng)進行安全性分析,量化的攻擊面測量了系統(tǒng)的安全性,攻擊面越大,系統(tǒng)面臨的安全風險越大.根據(jù)攻擊面度量的內(nèi)涵可知,它能夠以一種顯而易見的方式發(fā)揮其作用:通過減小(reduce)攻擊面來減小系統(tǒng)安全風險.除了這種最常見的方式之外,攻擊面研究針對不同的問題有不同的應用,下面主要介紹減小、操縱和移動攻擊面三種增強系統(tǒng)安全性的方式.
文獻[25]提出減小攻擊面的兩個指導方針:① 減小外部可訪問資源的數(shù)量;② 減小利用一個資源而得到的收益.對于提出了量化方法的攻擊面模型,通過降低部分元素的貢獻值,或者減少關鍵元素的數(shù)量來減小攻擊面度量值;對于那些并沒有提出量化方法的攻擊面模型,往往關注的是減少攻擊面元素的數(shù)量.針對減小系統(tǒng)攻擊面,給出如下定義:

以Manadhata模型為例,首先需要減少攻擊面元素的數(shù)量,一是減少入口/出口點的數(shù)量,例如,將多余的入口/出口點訪問屬性從公共改為內(nèi)部[16]、合并多個入口/出口點到一個訪問點[25];二是減少不受信任數(shù)據(jù)項的數(shù)量,例如,將數(shù)據(jù)項移入系統(tǒng)內(nèi)部[25]、提供更安全的數(shù)據(jù)存儲[16].然后需要降低每一維的貢獻值,可以降低元素上的能夠獲得的特權,例如,使用清除機制降低數(shù)據(jù)特權[25]、限制運行程序的默認權限到一個最低可用層次[30];可以提高元素所需的訪問權限,例如,對通道進行限制[25].
其他模型中,有的通過減少元素類型或實例,或使用安全技術減少攻擊類型或數(shù)量[11],來減小系統(tǒng)攻擊面;有的通過減小元素關聯(lián)的參數(shù)取值來減小攻擊面[31].SQL Server專家Carter指出需要通過禁用不安全的默認特征來減小SQL Server的攻擊面[32].IBM研究院的模型在編譯時通過內(nèi)核配置裁剪來減小攻擊面[21],運行時通過限制應用程序訪問內(nèi)核代碼的數(shù)量來減小攻擊面[22].文獻[33]使用關鍵服務器在網(wǎng)絡中不可見的方法來減小攻擊面.
減小系統(tǒng)攻擊面的方法屬于第一代網(wǎng)絡安全技術[34].要么在設計、開發(fā)和測試階段從體系結構上減小攻擊面,來開發(fā)安全性高的系統(tǒng);要么在部署維護階段通過配置或打補丁減小攻擊面,進行被動的防御.目前的防御措施大多數(shù)是靜態(tài)和被動的,近年來的研究者開始研究各種方法,使得系統(tǒng)異構和不可預測,因此出現(xiàn)了適應型網(wǎng)絡防御(Adaptive Cyber Defense,ACD)[34]和主動防御(Active Defense)[35]的技術,這些技術通常以多樣性為基礎,給攻擊者呈現(xiàn)的是變化中的攻擊面和系統(tǒng)配置,迫使攻擊者不斷地重新評估和計劃他們的攻擊行為.現(xiàn)有的ACD和主動防御技術包括入侵容忍[35]、移動目標防御(Moving Target Defense,MTD)[36]、仿生防御[37]和擬態(tài)防御[38]等.
為了改進現(xiàn)有ACD技術,美國喬治梅森大學和意大利那不勒斯費得里科第二大學聯(lián)合提出一個基于圖的方法來操縱攻擊者看到的系統(tǒng)攻擊面視圖[39,40].作者形式化了系統(tǒng)視圖及視圖間距離的概念,并提出一個實用的方法來操縱攻擊者探測得到的響應,導出一個滿足某些期望性質(zhì)的外部視圖,從而迷惑攻擊者.根據(jù)作者的研究,給出如下定義:
定義4.對于定義1中的系統(tǒng)S,操縱攻擊面操作為Manipulate(AS),得到新攻擊面AS′=
文獻[39]采用協(xié)議和指紋清洗器來改變和過濾所有流出系統(tǒng)的通信,并通過反復地應用操縱原語,使用基于圖的策略來生成系統(tǒng)的不同視圖.定義4中將反復應用的多個操縱原語合并到一個Manipulate操作中,操縱后的攻擊面為攻擊者看到的外部視圖AS′,而系統(tǒng)實際上的視圖是防御者的內(nèi)部視圖AS.外部視圖與內(nèi)部視圖的差距越大,攻擊者利用攻擊面攻擊系統(tǒng)的可能性就越小.作者使用視圖間的距離來度量兩個視圖的差距,因為擴大距離會給防御者帶來一定的成本,所以作者提出了啟發(fā)式的算法,解決了距離和成本之間的折衷的兩個優(yōu)化問題.
作為主動防御的一種技術,移動目標防御MTD的核心是防御者持續(xù)地變換系統(tǒng)攻擊面,從而增加攻擊者利用系統(tǒng)漏洞的成本.綜合現(xiàn)有研究,給出如下定義:
定義5.給定一個系統(tǒng)S,它的攻擊面集合為ASS,初始攻擊面為AS0∈ASS,移動系統(tǒng)攻擊面為按照策略Strategy執(zhí)行的移動序列MS=(Move1,Move2,Move3,…),得到一個攻擊面序列(AS0,AS1,AS2,AS3,…).MS中的移動是一個函數(shù)Movei:ASS→ASS,將攻擊面ASi-1∈ASS轉換為攻擊面ASi∈ASS,滿足ASi=Movei(ASi-1)≠ASi-1.
從定義5中可以看到,MTD的一個關鍵問題是策略Strategy的研究.防御者移動系統(tǒng)的攻擊面,使得原有攻擊無法工作,這樣使得攻擊者需要花費更多的努力來改進原來的攻擊方法,或尋找新的攻擊方式.MTD采取一定的策略進行移動,目的是讓攻擊者攻擊的成本大量增加,甚至是讓攻擊者放棄攻擊.Strategy關注的是攻擊面移動的時機,不少文獻研究了各種時間策略,例如周期策略[41]、隨機策略(如指數(shù)策略)[41]、針對多資源問題的獨立和同步策略[42]等;也有的提出事件驅動策略,例如異常事件累積或完整性檢查失效時進行移動[43].
MTD的另一個關鍵研究是函數(shù)Movei:ASS→ASS的確定,即研究采取什么樣的技術方法來移動攻擊面.林肯實驗室的技術報告[44]描述了不同網(wǎng)絡移動目標技術的技術細節(jié),識別了這些技術相關的威脅模型,確定了它們的實現(xiàn)和操作成本,并且描述了這些技術的不足之處.
MTD目前需要研究的問題還有很多.持續(xù)的移動會影響系統(tǒng)正常工作,并且會帶來額外的成本,因此需要考慮系統(tǒng)可用性和移動成本的問題;ASS是一個有限集合,存在移動的可預測性問題和移動空間的窮舉問題.盡管MTD的技術各種各樣,但是它們都有著攻擊-防御交互的基本性質(zhì):攻擊者的目標是發(fā)現(xiàn)系統(tǒng)的可利用的元素,而防御者同時努力改變和模糊這些元素.可以在MTD中引入博弈論進行研究[45],將攻擊者和防御者作為博弈的參與者.博弈的目的是構建MTD場景的博弈模型,評估MTD技術,并且開發(fā)特定場景下的策略.
3http://whatis.techtarget.com/definition/network-attack-surface
4http://whatis.techtarget.com/definition/physical-attack-surface
5http://whatis.techtarget.com/definition/social-engineering-attack-surface
安全性度量研究的一個關鍵挑戰(zhàn)是驗證度量.驗證軟件某個屬性的度量十分困難,而安全性是軟件中一個更難測量和驗證的屬性.不少研究者使用非形式化的論證和專門的實驗來評估攻擊面度量的有效性,然而目前沒有研究嚴謹?shù)亻_發(fā)一個評估方法來形式化審查這些攻擊面度量.
一種普遍的觀點是,好的攻擊面度量在于它識別元素的準確性,使得減小攻擊面后確實能夠減少這些給系統(tǒng)帶來安全風險的元素.不少研究通過實驗驗證它們提出的攻擊面減小方法的有效性[8,21,31,46],并在此基礎上討論安全風險的減小.文獻[9]認為好的攻擊面度量應該識別那些禁用后最能夠清除漏洞的代碼段,通過這樣的攻擊面,部署者能夠禁用那些能夠大量增加攻擊面的特征,來提高安全性,軟件開發(fā)者能夠確定新增加特征帶來的安全性影響.Manadhata通過補丁分析表明大多數(shù)開源軟件補丁減小了攻擊面度量,并使用工業(yè)界證據(jù)表明減小攻擊面減輕了軟件的安全風險[12].
可以使用已發(fā)布漏洞或其他軟件度量來評估攻擊面度量.文獻[9]認為攻擊面度量的質(zhì)量是攻擊面度量與漏洞數(shù)量的皮爾遜相關系數(shù)r,r的值越高,表明攻擊面度量能夠更好地識別軟件中的漏洞.Manadhata通過微軟安全公告進行識別和分析,結果表明其攻擊面度量中資源的六個屬性是damage potential、effort和公告嚴重度評級的計算指標[12].文獻[15]使用非參數(shù)檢驗來關聯(lián)分析風險行走度量與歷史發(fā)布漏洞之間的關系,以此評估度量是否實用;使用交叉驗證和下一版本驗證兩種回歸分析模型,評估度量能否構建回歸模型來預測一個函數(shù)/文件未來需要加固的可能性.文獻[47]分析了兩個Apache HTTP服務器發(fā)布版本的源代碼和漏洞數(shù)據(jù),探究了Manadhata攻擊面度量與漏洞密度度量之間的關系,以此評估攻擊面度量量化安全性的適用性,結果表明兩個度量之間存在非線性相關關系.
本文以軟件系統(tǒng)攻擊面為研究目標,在攻擊面概念及其形式化定義的基礎上綜述了軟件系統(tǒng)攻擊面的主要研究工作:構建系統(tǒng)攻擊面模型、識別和測量攻擊面、攻擊面應用于增強系統(tǒng)安全性和評估攻擊面度量.本文綜述的相關研究不局限于軟件攻擊面,其不少思想可應用于其他攻擊面.對于攻擊面研究,還有很多挑戰(zhàn)性問題需要進一步研究:
1)其他攻擊面類型的研究
除了軟件攻擊面外,還可以研究網(wǎng)絡攻擊面3、物理攻擊面4、社會工程攻擊面5等.網(wǎng)絡攻擊面指的是連接的軟件和硬件系統(tǒng)中可被未授權用戶訪問的元素的總和;物理攻擊面指的是系統(tǒng)中可被那些與目標處以相同位置的攻擊者獲得的物理安全性漏洞的總和;社會工程攻擊面指的是一個個體或員工受欺騙的漏洞的總和,社會工程學攻擊通常利用的是人類心理學.許多攻擊利用的是這些攻擊面的組合來獲取資源的訪問權限,社會工程學通常用于獲取物理訪問,從而使得入侵者能夠進一步地去利用軟件漏洞.因此綜合各種攻擊面的研究十分有必要.
2)綜合安全度量研究
現(xiàn)有的安全性度量中,不存在一個單獨的度量能夠考慮安全性的所有方面.攻擊面度量也一樣,部分攻擊面模型關注的是系統(tǒng)的某種類型的元素,往往描述的是特定場景下的風險.因為許多攻擊方法利用了不同攻擊面的組合來獲取資源的訪問權限,所以綜合的攻擊面分析是至關重要的.綜合攻擊面度量研究可以綜合各種場景的攻擊面模型,分析攻擊面度量與其他度量之間的關系,開發(fā)一個框架來聯(lián)合不同的安全性度量,是測量系統(tǒng)安全性的一個重要步驟.
3)主動防御中的攻擊面研究
主動防御技術很多是基于軟硬件多樣性的,通過冗余設計、動態(tài)變遷、表決機制、重配置等技術的組合,達到增強安全性的目的[35].軟硬件多樣性往往使得攻擊面具備多樣性,除了移動目標防御追求攻擊面的動態(tài)變化外,基于多樣性的入侵容忍利用系統(tǒng)構架或組件特性最直接的多樣性來源,擬態(tài)防御技術也要求擴大異構性,在前端呈現(xiàn)出多樣性.在這些主動防御技術中結合攻擊面度量的研究,有助于度量系統(tǒng)的各種多樣性,評估各項技術應用的防御效果.