徐社會,張琳琳,趙 楷,王 杰,魏春霞
(新疆大學 信息科學與工程學院,新疆 烏魯木齊830046)
軟件體系結構是于系統開發的早期階段構建,其設計決策直接影響后續整個軟件開發過程中的各個階段[1,2]。軟件體系結構代表系統更高層次的抽象,反映了系統組成元素的交互關系,并且許多安全屬性的出現來源于系統組成元素的交互過程,因此在軟件體系結構設計階段處理系統的安全需求是一個理想點。同時,軟件架構師選擇設計決策的好壞決定了系統會如何實現安全相關的需求,不同的設計決策會出現不同的安全性問題,所以,設計策略的制定應該謹慎決定。為了消除設計決策引發的安全問題,需要一種在安全需求方面評估體系結構設計的方法。
Manadhata等將攻擊面作為評估指標對軟件的安全性實施度量[3,4],攻擊面是指攻擊者能夠進入系統產生破壞的方法集合。攻擊面度量值越大表明系統被攻擊的可能性越大,從而軟件不安全的可能性也越大。基于攻擊面度量指標的軟件安全度量比較的是具有相似功能的不同軟件或者同一軟件不同版本之間的安全性。攻擊面概念的提出得到了軟件產業界的積極響應,目前攻擊面度量方法已經應用在SAP 軟件系統的開發[5]和微軟的安全軟件開發過程[6]中。此外,文獻 [7]等將攻擊面、拒絕服務和攻擊圖作為安全度量指標,提出一種綜合評估方法比較同類軟件或某一軟件不同版本的安全性;文獻 [8]提出結合攻擊面和信息熵的軟件安全度量方法。然而,上述攻擊面度量方法主要側重于軟件的實現階段而不是軟件體系結構的設計階段。在軟件體系結構中評估攻擊面臨一系列挑戰:如何對軟件體系結構進行建模,如何將攻擊面的概念擴展到軟件體系結構的模型中以及如何通過軟件體系結構轉換減小軟件體系結構的攻擊面。針對上述問題,在擴展Manadhata等的方法的基礎上,將攻擊面的概念應用在軟件體系結構模型中,作為評估指標對軟件體系結構的安全性進行評估,并結合案例研究就如何減小系統的攻擊面進行了體系結構轉換。
軟件體系結構已經在軟件工程領域有著廣泛的應用,但迄今為止還沒有一個統一的定義[9]。它可以理解為軟件開發過程中早期的一項軟件制品,是一組使系統滿足涉眾(stakeholder)功能性和非功能性需求的設計決策,其中安全性是系統的非功能性需求[10]。軟件體系結構模型在評估設計決策對軟件預期質量屬性的影響方面是一個很有用的方法。例如:體系結構模型可以用于分析性能屬性方面的設計模型是否滿足軟件的性能需求。基于此,可以采用軟件體系結構模型評估早期設計決策的好壞。
軟件體系結構是一個多維的工件,通過采用不同的視角,可以顯示系統設計的不同方面。例如:一些特定類型的視圖側重于面向部署的架構,而另一些則關注于面向代碼的架構[11]。使用構件連接件類型的視圖 (componentand-connector,C&C)可以捕獲系統的動態方面。C&C 視圖顯示了系統運行時的屬性,通常包括構件、連接件、端口和角色等。構件代表了系統的計算元素,端口是構件與外部環境交互的組織接口,連接件表示了構件之間的交互路徑,角色是連接件的接口。攻擊面關注于系統和所在環境之間的交互。例如:發送或接受數據到 (來自于)環境。由于這些交互發生時,系統正在運行,本文中體系結構建模方法是從C&C視角考慮的。
關于攻擊面的概念,沒有一個統一的定義,不同的學者針對不同的研究領域提出相應的攻擊面概念。
文獻 [12]針對同一軟件的不同版本之間的安全性比較,提出了相對攻擊面的概念。通過采用狀態機建模系統,將攻擊面建模為一個抽象的三元組即攻擊目標和驅動 (targets and enablers)、通道和協議 (channels and protocol)、訪問權限 (access rights)。攻擊目標和驅動指的是攻擊者使用的資源,資源的類型有兩種:進程和數據;通道指的是從發送方到接收方的一種通信方式;訪問權限是指對系統資源訪問的約束集合。文中將攻擊面的評估方式建模為函數 f (target,enablers,channels,protocols,access rights)。由于定義一個通用的精確的函數f很困難,并且函數f的具體實現因軟件系統的不同而不同,文中沒有對函數f進行進一步細化。
根據以往攻擊者對系統實施的攻擊,許多攻擊的發生是由于發送來自系統操作環境的數據 (例如:利用緩沖區溢出)或者接受源于系統的數據 (例如:符號連接攻擊)。在上述兩種類型的攻擊中,攻擊者連接系統,使用系統的通道(如TCP協議)、調用系統的方法 (如API)和發送 (接受)數據項 (如:輸入字符串)到 (來自)系統。Manadhata等認為攻擊者通過使用系統的方法、通道和環境中的數據項攻擊系統。他們將系統的方法、通道和數據項統稱為系統的資源,依據系統的資源將攻擊面定義為一個三元組<MEs,CEs,IEs>,其中s代表一個給定的系統,E代表系統所在的環境,M 是系統的方法 (method),C 是系統與外界交互的通道 (channel),I 代表存儲與環境中的不可信數據項 (untrusted data item),MEs是系統s 的方法集,CEs是系統s的通道集,IEs是不可信數據項集。由于資源被攻擊者利用的可能性并不相等,導致資源在攻擊面評估中,所占的比值也不相等。Manadhata等使用潛在破壞與代價比值 (Damage Potential/Effort Spend Ratio,DER)量化系統攻擊面的大小。
文獻 [13]針對Web應用的攻擊面進行了評估。一個典型的Web應用攻擊面包含有以下3個部分:客戶端、服務端和后臺系統。客戶端構成Web應用的用戶界面,呈現了html代碼、圖片、處理用戶的輸入和向代碼提供運行時環境;Web服務端響應客戶端的請求。在響應客戶端請求過程中可能要訪問后臺系統,如數據庫。文中通過攻擊面向量對Web應用的攻擊面進行評估。攻擊面向量 (attack surface vector)是一個歐幾里德范數。攻擊面向量的組成包括:頁面創建方法、安全機制、cookie、用戶角色、訪問權限等22項。文中對提到的方法進行了實例化驗證。
Manadhata等的研究是從系統的角度考慮攻擊面,主要適用于系統的實現階段。本文在Manadhata等研究的基礎上,擴展了攻擊面的定義,對軟件體系結構的攻擊面進行建模。為了在體系結構層表示和估算系統的攻擊面,我們需要將攻擊面的概念在軟件體系結構中進行表示。目前許多常見的體系結構架構可以采用擴展方式建模與攻擊面相關的屬性和語義,本文是從C&C視角考慮的。
在軟件體系結構中:構件是系統功能的模塊單元,構件可以是一組代碼,也可以是一個獨立的程序,充當系統的訪問控制;端口是構件與操作環境交互的外部接口;連接件連接著系統外部的組件與系統內部組件之間的交互;數據庫 (或文件)可以看作是寄存在系統外部環境中被使用的數據源。
定義1 軟件體系結構攻擊面 (software architecture attack surface,SAAS)。給定軟件體系結構a,a與外界交互環境Ea,a的攻擊面是一個三元組,<CpEa,CoEa,DiEa>,其中CpEa是a中與Ea交互的構件,CoEa是a中構件與外部構件交互中使用的連接件,DiEa是Ea中被a使用的數據項。
對于已定義好的軟件體系結構攻擊面的評估,由于構件是系統的核心資源,構件與外界環境的交互主要通過構件的端口實現。同時一個構件可以有多個端口,構件的端口基于自身的特權 (privilege)訪問系統環境中的其它單元,因此構件的評估依據構件的端口特權;由于攻擊者使用連接件與系統外部構件進行通信,連接件上運行的通信協議 (protocol)能夠對數據的交換施加限制,因此連接件的評估使用連接件上運行的通信協議估算;攻擊者發送或者接受數據項時,不同的數據項類型 (dataType)對數據的交互進行約束,數據項的評估參照數據項的類型。
對于系統的軟件體系結構,構件、連接件、端口可以看作軟件體系結構的資源。攻擊者只有獲得資源的訪問權限才可以使用資源。攻擊者為了使用資源需要付出一定的代價。直觀上攻擊者使用資源的代價依據分配給資源的訪問權限。由于資源是軟件體系結構的一部分,資源的訪問權限可以看成是體系結構的訪問權限。
定義2 軟件體系結構攻擊面度量 (SAAS Metrics,簡稱SAASM)。給定軟件體系結構,a,a的攻擊面為<CpEa,CoEa,DiEa>,a的訪問權限是a.accessRight,a的攻擊面度量值是一個三元組

為了對軟件體系結構的攻擊面進行建模,需要使用一種體系結構建模工具對攻擊面進行描述。Acme是由卡內基梅隆大學的軟件研究所開發的一種體系結構描述語言 (architecture description language,ADL),提供了基本體系結構元素和擴展機制描述系統的軟件體系結構。Acme定義了7種基本體系結構元素,本文主要使用了其中4種,見表1。

表1 Acme的體系結構元素
AcmeStudio是一個支持Acme的軟件體系結構設計開發環境,使用AcmeStudio可以方便快速地設計系統的體系結構,并且它也支持對所設計的軟件體系結構進行分析和逐步求精[14]。通過采用AcmeStudio,本文可以快速地進行體系結構的分析和設計,并根據估計面度量值,對體系結構進行轉換。
為了使Acme能夠描述本文的攻擊面,我們使用了Acme的擴展機制,為體系結構元素添加新的屬性,綁定攻擊面的概念和體系結構的架構,并允許為屬性分配數值,在Acme中稱作 “家族” (family)。本文創建了一個側重于安全方面的family建模攻擊面。具體情況本文將結合案例進行描述。
假設存在一名開發人員Lee有一個Java應用,通過socket連接主機和端口,它連接有兩個主機/端口対,從一個連接中接受查詢SQL數據庫的數據,從另一個連接中接受查詢LDAP數據庫的數據。該開發人員設計的程序專門用于其公司的員工即每一名用戶都是可信的,每一名用戶的訪問權限都相同。根據案例描述,我們在AcmeStudio中使用攻擊面family對案例體系結構的攻擊面進行建模,案例的體系結構階段的攻擊面如圖1所示。圖1中構件Java_Program 是案例中描述的Java應用,構件接受用戶的輸入,并且與SQL _DB 數據庫和LDAP 數據庫通信,圖中SQL_DB和LDAP 都代表存在于系統外部的不可信數據項,連接Java_Program 和不可信數據項的通道運行著TCP協議,通過Java_Program 的端口進行訪問。最后用戶通過第3個端口訪問Java_Program。圖2給出了Acme中Java應用的體系結構模型和代碼表示。

圖1 AcmeStudio的案例體系結構模型
由于系統內只有一個構件Java_Program,Java_Program 分別與外部構件User,SQL_DB 和LDAP 交互,所有Java_Program 共有3 個端口。根據案例描述可知,與User交互的端口有authenticated 特權,與SQL_DB 和LDAP交互的端口需要對數據進行操作,擁有root特權。Java_Program 構件與環境中外部構件通信使用的連接件見表2。同時Java_Program 使用的外部數據項有兩項:SQL_DB和LDAP,數據項對應類型分別為SQL 和LDAP,在此不再以列表列出。此外,由于系統中每一名用戶都是可信的,Java_Program 的訪問權限是authenticated。

圖2 案例體系結構代碼表示

表2 Java_Program 構件使用的連接件
當估算攻擊面時,需要將攻擊面屬性與分配的數值進行映射。例如:對于構件來說,root級別的端口對系統產生的攻擊大于authenticated,而authenticated 大于anonymous,即構件端口特權分配的數值應滿足的關系是root>authenticated>anonymous。我們在AcmeStudio中建立的攻擊面family允許為攻擊面屬性分配數值。為了簡單起見,我們設定攻擊面相關屬性分配的數值范圍為1~10,每一個屬性最大和最小值對應10和1,中間值為5,因此端口特權root分配最大的數值10,authenticated分配的數值為5,anonymous分配數值是1。攻擊面相關屬性數值的分配是主觀的,基于我們設計階段的系統屬性。根據攻擊面屬性的理解,結合數學中參數靈敏性分析,我們將攻擊面各屬性值分配見表3。
根據以上設置條件和第2 節定義的攻擊面度量公式,經過計算,可知Java_Program 的攻擊面大小為<5.00,4.00,2.20>。為了減小軟件體系結構的攻擊面,我們需要進行軟件體系結構轉換。結合文獻 [15]提出的轉換思想,構件Java_Program 與SQL_DB和LDAP的交互可以通過一個端口執行,同時連接SQL_DB 和LDAP 連接件可以采用RPC協議而不是TCP 減小軟件體系結構的攻擊面,轉換后體系結構的攻擊面模型如圖3所示,轉換后的攻擊面大小為<3.00,2.40,2.20>,減小了系統的攻擊面。關于軟件體系結構的轉換有許多可行的方法,本文在此不再進行敘述。

表3 攻擊面屬性分配值

圖3 轉換后的軟件體系結構模型
軟件體系結構的安全性研究對于開發安全的軟件起著至關重要的作用。本文研究了如何在軟件體系結構設計階段采用攻擊面對系統的安全性進行評估。通過將攻擊面的概念映射到體系結構的組成元素,采用Acme對體系結構設計階段的攻擊面進行建模,對攻擊面的形式化模型進行評估,然后對軟件體系結構進行轉換,重新進行評估,最終減小系統的攻擊面。
在下一步的工作中,本文將對體系結構階段攻擊面評估的參數進行靈敏度分析,并探索如何在一個實際系統的開發中,基于攻擊面指標對軟件體系結構的安全性進行研究。
[1]Almorsy Y M,Grundy J,Ibrahim A S.Automated software architecture security risk analysis using formalized signatures[C]//Proceedings of the International Conference on Software Engineering.IEEE Press,2013:662-671.
[2]CHEN Jiali,ZHANG Linlin,ZHANG Yahong,et al.Aspect-oriented software architecture metrics based on scenes[J].Computer Applications Research,2013,30 (2):483-486 (in Chinese).[陳佳麗,張琳琳,張亞紅,等.基于場景的面向方面軟件體系結構度量方法 [J].計算機應用研究,2013,30 (2):483-486.]
[3]Manadhata P K,Wing J M.An attack surface metric [J].IEEE Transactions on Software Engineering,2011,37 (3):371-386.
[4]Manadhata PK,Wing J,Maxion RA,et al.An attack surface metric[R].CMU-CS-08-152.Pittsburgh:Carnegie Mellon University,2008.
[5]Manadhata P K,Karabulut Y.Report:Measuring the attack surface of enterprise software [M].Engineering Secure Software and Systems.Springer Berlin Heidelberg,2009:91-100.
[6]Howard M,Lipener S.The security development lifecycle[M].O’Reily Media,Incorporated,2009:75-90.
[7]ZHANG Xin,GU Qing,CHEN Daoxu.Software systems for security metrics research based on comparative assessment[J].Computer Science,2009,36 (9):122-126 (in Chinese).[張鑫,顧慶,陳道蓄.面向對比評估的軟件系統安全度量研究 [J].計算機科學,2009,36 (9):122-126.]
[8]ZHANG Xuan,LIAO Hongzhi,LI Tong,et al.Software security measure based on software entropy and attack surface[J].Computer Applications,2013,33 (1):19-22 (in Chinese).[張璇,廖鴻志,李彤,等.基于信息熵和攻擊面的軟件安全度量 [J].計算機應用,2013,33 (1):19-22.]
[9]WANG Dan,ZHANG Fan,ZHANG Zhihong.Research and application of multi-tier architecture based on component[J].Journal of Computer Engineering and Design,2010,31 (6):1255-1263 (in Chinese).[王丹,張帆,張志鴻.基于構件的多層體系結構的研究與應用 [J].計算機工程與設計,2010,31 (6):1255-1263.]
[10]ZHANG Li,GAO Hui,WANG Shouxin.Software architecture evaluation techniques [J].Journal of Software,2008,19 (6):1328-1339 (in Chinese).[張莉,高輝,王守信.軟件體系結構評估技術[J].軟件學報,2008,19 (6):1328-1339.]
[11]Gennari J,Garlan D.Measuring attack surface in software architecture[R].CMU-ISR-11-121,Carnegie Mellon University,2012.
[12]Howard M,Pincus J,Wing J M.Measuring relative attack surfaces[M].Springer US,2005:109-124.
[13]Heumann T,Türpe S,Keller J.Quantifying the attack surface of a web application [C]//Sicherheit,2010:305-316.
[14]LIU Changlin,ZHANG Guangquan,HUANG Jing.An aspect-oriented software architecture design methods based on ACME [J].Suzhou University (Engineering Science Edition),2011,31 (2):6-13 (in Chinese). [劉長林,張廣泉,黃靜.一種基于ACME的面向方面軟件體系結構設計方法 [J].蘇州大學學報 (工科版),2011,31 (2):6-13.]
[15]Hafiz M,Johnson R.Improving perimeter security with securityoriented program transformation [C]//Proceedings of Software Engineering for Secure System.IEEE,2009:61-67.