仇曉銳
(中國民航大學(xué)信息網(wǎng)絡(luò)中心,天津 300300)
自2006年云計算提出以來,經(jīng)過十多年的發(fā)展,承載在云計算上的IT負(fù)載已由原來的2%增加到現(xiàn)在的27%。亞馬遜、谷歌、微軟、Rackspace等云服務(wù)的企業(yè)用戶數(shù)均已達(dá)到數(shù)十萬量級。同時,中國近幾年在云計算產(chǎn)業(yè)上的發(fā)展始終保持著30%以上的增長率。阿里云、騰訊云、華為云等企業(yè)所提供的應(yīng)用正在從互聯(lián)網(wǎng)行業(yè)轉(zhuǎn)向傳統(tǒng)行業(yè)[1]。
對于包含有限主機和漏洞的小型網(wǎng)絡(luò)系統(tǒng),安全評估可以由有經(jīng)驗的安全專家手動執(zhí)行。但當(dāng)主機和漏洞數(shù)量增加時,安全工作評估的復(fù)雜性會急劇增加,而云計算因其本身的復(fù)雜性和可擴展性,該問題表現(xiàn)更為突出。為了實現(xiàn)自動化的安全評估,需要選擇合理的攻擊表示模型、框架和工具。其中,比較著名的攻擊表示模型有基于圖和基于樹兩種類型?;趫D的攻擊表示模型能夠根據(jù)攻擊路徑生成一張完整圖,但當(dāng)漏洞數(shù)量及其可達(dá)性增多時,這些模型會出現(xiàn)嚴(yán)重的可擴展性問題。與Sheyner等[2]提出的生成工具相比,攻擊圖生成工具M(jìn)ulVAL[3-4]具有更高的可擴展性,但在邏輯攻擊圖的表示階段或攻擊場景生成中,MulVAL同樣可能會遇到指數(shù)爆炸問題。而Mjihil等[5]和Kaynar等[6]通過使用分布式系統(tǒng)來解決攻擊圖生成過程中遇到的狀態(tài)空間爆炸的問題。
針對云計算平臺安全評估中所遇到的問題,提出一種基于圖的安全框架,通過使用SDN的特性[6-8]、圖分解[9-10]及并行計算等方法來提高該安全框架的可擴展性。對于大型且稀疏網(wǎng)絡(luò)系統(tǒng)的安全框架,首先利用圖論的知識把網(wǎng)絡(luò)抽象成一個有向圖,然后使用強連通分量分解的圖論技術(shù)對其網(wǎng)絡(luò)拓?fù)溥M(jìn)行分解,將該有向圖轉(zhuǎn)化為更小的子圖,即強連通分量(SCC)。在此基礎(chǔ)上,對每個分量執(zhí)行并行的安全性分析,最后對分析結(jié)果進(jìn)行匹配并最終生成攻擊圖。
與傳統(tǒng)基于模型的安全分析系統(tǒng)相比,提出的解決思路對可擴展云平臺的可視化和評估有明顯的改進(jìn),主要優(yōu)點如下:①使用圖劃分解決了云中的安全性分析可擴展性問題;②其分布式特性能夠有效減少各階段(再處理、構(gòu)建、評估、對策選擇和應(yīng)用)的安全性分析時間;③能夠適應(yīng)在使用SDN的云架構(gòu)中發(fā)生的任意結(jié)構(gòu)變換。
安全評估的主要任務(wù)是評估網(wǎng)絡(luò)系統(tǒng)的弱點及可能受到的攻擊。但如果無法獲得關(guān)于網(wǎng)絡(luò)拓?fù)浜蛙浖墑e漏洞的詳細(xì)信息,就無法獲得準(zhǔn)確地評估結(jié)果。通過使用網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)描述虛擬機間的2、3、4層之間的組合連接,并使用機器配置表示在每個虛擬機上應(yīng)用的安全策略集及其承載的服務(wù)和應(yīng)用程序列表。僅根據(jù)OSI模型中2、3層之間的連接信息來評估網(wǎng)絡(luò)系統(tǒng)的安全性是遠(yuǎn)遠(yuǎn)不夠的。由源地址、目的地址和一個端口號確定的第4層連接可提供更多關(guān)于在兩個通信主機之間的開放端口、當(dāng)前允許/阻塞的協(xié)議或服務(wù)的附加信息。因此構(gòu)建在前文提及的安全框架通常需要補充兩類信息:①可達(dá)性信息,即網(wǎng)絡(luò)拓?fù)洌虎诼┒葱畔?,即對所有虛擬機和目標(biāo)網(wǎng)絡(luò)主機的完整分析結(jié)果。
為了獲取更加精確的評估結(jié)果,提出的框架使用SDN控制器對網(wǎng)絡(luò)系統(tǒng)實行集中管理和呈現(xiàn)。這些信息以流量規(guī)則的形式存儲在網(wǎng)絡(luò)控制器中,而這些規(guī)則是通過網(wǎng)絡(luò)的開放流量開關(guān)來發(fā)送和保存的。流量規(guī)則可達(dá)到高粒度的級別,并可針對特定的端口進(jìn)行適當(dāng)?shù)恼{(diào)整。同時開放流量協(xié)議還可提供一些額外的如流量的源地址和目的地址、流量規(guī)則優(yōu)先級及有效時間等信息,其中流量規(guī)則是構(gòu)建網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)的關(guān)鍵元素。
可達(dá)性圖是一種有向圖,構(gòu)建可達(dá)性圖需要獲取關(guān)于每個主機的網(wǎng)絡(luò)連接、應(yīng)用程序、運行服務(wù)及允許流量的方向等精確信息。該框架使用機器配置信息和安全策略來更加精確地構(gòu)建可達(dá)性圖,同時還能夠獲取到當(dāng)前在每個虛擬機上安裝部署的應(yīng)用程序,然后將這些知識應(yīng)用在可達(dá)性圖的構(gòu)建、入侵防護(hù)或?qū)Σ邞?yīng)用上,從而有效避免因信息缺乏導(dǎo)致無法確定服務(wù)部署位置等問題。圖1列出了框架中最重要的組件。
圖1 安全評估模型Fig.1 Security assessment model
安全評估是一系列連續(xù)步驟,每步都需要輸入一些特定信息并產(chǎn)生一個結(jié)果,而該結(jié)果將被用作下一個階段的輸入信息。圖2為實施安全性評估時操作的執(zhí)行流程圖。
在網(wǎng)絡(luò)系統(tǒng)中,虛擬機和他們之間的連接信息可用一個有向圖 G=(V,E)來表示。其中:V(或 V(G))是一組頂點,用來表示虛擬機;E(或E(G))是一組有向邊,用來表示虛擬機之間的連接。在不破壞強連接頂點之間連接的前提下,將主有向圖分解成一組子圖。在圖論中,一個有向圖的SCC是包含相互可達(dá)的頂點的子圖C。從安全的角度來看,如果每兩個相鄰的分量之間的連接都是單向的,那么相鄰的兩個攻擊圖之間的影響和可達(dá)性也是單向的。在完成分解之后,分解得到的分量在所有安全評估階段中將會執(zhí)行并行處理。而攻擊圖的匹配過程將依賴于連接兩個相鄰SCC的邊數(shù)和在有向邊上存在的可達(dá)漏洞。
文獻(xiàn)[9]中提出的算法來源于Kasaraju-Sharir算法,該算法通過執(zhí)行兩個深度優(yōu)先搜索來獲取數(shù)據(jù)。其中第一個深度優(yōu)先搜索的目標(biāo)是獲得頂點的拓?fù)漤樞颍诙€深度優(yōu)先搜索則是針對其轉(zhuǎn)置圖進(jìn)行的,從而發(fā)現(xiàn)有向圖中的SCC。該算法能夠?qū)τ邢驁D執(zhí)行檢測并返回SCC,其中有向圖中的每個頂點能夠正確地在其中一個SCC中出現(xiàn),其時間復(fù)雜度為O(|V|+|E|)。由于需要將一個表示定點間的鄰接關(guān)系列表作為輸入?yún)?shù),其空間復(fù)雜度為O(|V|+|E|)。獲取SCC的算法描述如下:
圖2 安全評估流程圖Fig.2 Security assessment flow chart
圖3為租戶虛擬網(wǎng)絡(luò)系統(tǒng)的可達(dá)性圖,而圖4則為使用上述算法所獲得的所有SCC,其中每個橢圓內(nèi)所包含的就是一個SCC。
圖3 租戶虛擬網(wǎng)絡(luò)系統(tǒng)Fig.3 Tenant virtual network system
圖4 租戶虛擬網(wǎng)絡(luò)的強連通分量Fig.4 Strongly connected component of tenant virtual network
為了保證在執(zhí)行分解后不會丟失任何信息,該框架會生成如下兩種類型的攻擊圖:
1)為每個SCC生成一個名為Sub_AG的攻擊圖,Sub_AG中只表示SCC內(nèi)存在的漏洞間的內(nèi)部交互;
2)定義一個名為Match_AG的攻擊圖用來表示連接鄰接SCC的外部邊。
每個SCC生成的Sub_AG,可以用來完成安全評估的可視化、本地攻擊路徑生成和對策選擇等目標(biāo)。但為了構(gòu)建關(guān)于整個網(wǎng)絡(luò)系統(tǒng)的攻擊圖,需要將Sub_AG和Match_AG作為合并算法的輸入信息來生成攻擊圖。第一步找到鄰接的兩個SCC,如果兩個SCC鄰接,則其中一個SCC中至少存在一個主機與另一個SCC中的主機相連。根據(jù)上文提到的算法可知,連接兩個SCC的所有邊都有相同的方向。第二步訪問所有的鄰接SCC,并使用從Match_AG獲取的相應(yīng)信息來匹配這些強聯(lián)通分量的Sub_AG。此外根據(jù)Match_AG中的漏洞信息,能夠?qū)ub_AG中有向邊上的漏洞列表進(jìn)行擴展。
由于每個主機只能屬于一個SCC,所以計算成本是由主機的數(shù)量和邊的數(shù)量決定的。因此,時間復(fù)雜度與鄰接表中的邊數(shù)正相關(guān)。即該算法的第一步和第二步的時間復(fù)雜度均為O(|V|+|E|)。
實驗環(huán)境采用一臺HP DL380 Gen9機架服務(wù)器,其關(guān)鍵配置為英特爾Xeon(至強)E5-2650 v3@2.30 GHz(X2)、128 GB DDR4 2 133 MHz 和 3 TB 7 200 SAS。前期已建立圖3所示的網(wǎng)絡(luò)系統(tǒng)并使用OpenVSwitch、OpenDayLight控制器和OpenFlow協(xié)議自動管理網(wǎng)絡(luò)配置。為了安全實現(xiàn)與SDN控制器的交互,使用的是RESTful Northbound應(yīng)用程序,該應(yīng)用程序從控制器獲取活動流量規(guī)則用來構(gòu)建可達(dá)性圖,并向控制器發(fā)送新的流量規(guī)則(如阻塞IP地址)作為對策應(yīng)用程序。
在實驗中,設(shè)計考慮了4種不同類型的虛擬機。
1)客戶機 在該類虛擬機上托管一些客戶機應(yīng)用程序,如 Microsoft Office 2016、Microsoft Visio 2013、MyEclipse 10、Wireshark等,用于瀏覽、編程和其他服務(wù)。同時在這些虛擬機上還安裝了Safari、SSH Tectia客戶端服務(wù)器連接器和GNU C庫的脆弱版本。
2)文件服務(wù)器 在該類虛擬機上承載了Wing FTP Server、Microsoft FTP和其他版本的FTP服務(wù)器。
3)Web服務(wù)器 在該類虛擬機上安裝了Microsoft IIS、Tomcat、Apache HTTP服務(wù)器和其他相關(guān)服務(wù)的脆弱版本。
4)數(shù)據(jù)庫服務(wù)器 在該類主機上安裝了Oracle、MySQL、SQL Server 2016等數(shù)據(jù)庫服務(wù)器。
構(gòu)建攻擊表示模型,首先需要使用如Nessus的漏洞掃描器來收集網(wǎng)絡(luò)系統(tǒng)中虛擬機存在的漏洞,如表1所示。在掃描結(jié)果中可獲取到每個主機上存在的漏洞列表和一些關(guān)于漏洞的附加信息。在執(zhí)行完分解和漏洞掃描之后,通過分配給系統(tǒng)的8個虛擬內(nèi)核,使用GNU Parallel[11]來對Sub_AGs和Match_AG執(zhí)行并行操作。
表1 部分漏洞列表Tab.1 Partial vulnerability list
通過兩種互補實驗,分別測量執(zhí)行分解前后及在主機數(shù)量和漏洞數(shù)量增加時對攻擊圖生成和可視化性能的影響,進(jìn)而驗證了分解和并行處理在攻擊圖生成和分析中具有一定的有效性。
在對實驗網(wǎng)絡(luò)系統(tǒng)進(jìn)行全面掃描后,獲得Nessus漏洞掃描器報告。在實驗中,通過測量在整個網(wǎng)絡(luò)中使用MulVAL構(gòu)建和可視化一個攻擊圖所需的時間,然后與執(zhí)行分解操作之后生成和可視化攻擊圖所需的時間進(jìn)行比較。兩次實驗均采用圖3所示的網(wǎng)絡(luò)架構(gòu)。一旦網(wǎng)絡(luò)結(jié)構(gòu)發(fā)生變化將會影響主機數(shù)量的變化,從而影響SCC的數(shù)量。所以此評估過程中需要使用前面所提到的匹配技術(shù)來將連接相鄰SCC的外部邊緣考慮在內(nèi)。評估結(jié)果如圖5和圖6所示,分解和并行處理改善了在攻擊圖生成和可視化的執(zhí)行時間。網(wǎng)絡(luò)越稀疏和平衡,安全性評估耗時就越少。
圖5 主機數(shù)量對評估耗時的影響Fig.5 Impact of host number on evaluation time consumption
圖6 漏洞數(shù)量對評估耗時的影響Fig.6 Impact of vulnerability number on evaluation time consumption
圖6 顯示分解后將減少漏洞對攻擊圖生成和可視化的影響。在這種情況下,保持相同數(shù)量的主機和SCC,只改變漏洞的數(shù)量,當(dāng)在不同的SCC中不同的主機上注入漏洞時,時間差異開始明顯增加。
通過綜合利用基于SDN的技術(shù)、分解和并行計算的方法來改進(jìn)基于圖形的安全性評估的可擴展性。與MulVAL當(dāng)前所使用的攻擊圖生成和可視化技術(shù)相比,提出的框架能夠大大改進(jìn)攻擊圖的生成和可視化時間。實驗結(jié)果表明,提出的安全框架對于云計算的安全性評價是非常有效的。而網(wǎng)絡(luò)拓?fù)浒l(fā)生更新時,需要對更新進(jìn)一步區(qū)分,當(dāng)更新發(fā)生在SCC內(nèi)部時,只需要更新SCC的安全狀態(tài)而不需要更新整個系統(tǒng),當(dāng)更新發(fā)生在SCC之間時如何能夠高效地更新系統(tǒng)的安全狀態(tài)是下一步的研究方向。