楊莎莎,楊放春,王 蔚
(1.北京郵電大學 網(wǎng)絡與交換技術國家重點實驗室,北京 100876;2.中興通訊股份有限公司,江蘇 南京 210000)
云計算是一種新興的商業(yè)計算模式,它將計算任務分布在大量計算機構成的資源池上,使各種應用系統(tǒng)能夠根據(jù)需要獲取計算能力、存儲空間和各種軟件服務[1]。云計算代表了IT領域向集約化、規(guī)?;c專業(yè)化道路發(fā)展的趨勢,是IT領域正在發(fā)生的深刻變革,但它在提高使用效率的同時,為實現(xiàn)用戶信息資產(chǎn)安全與隱私保護帶來極大的沖擊與挑戰(zhàn)[2]。當前,安全問題已成為云計算推廣應用的最主要的制約因素,因此,云安全問題成為必須解決的問題之一[4]。
平臺即服務PaaS(Platform-as-a-Service)作為云計算的一種,是將基礎設施平臺作為一種服務呈現(xiàn)給用戶的商業(yè)模式,方案成本比較低。對那些資金有限、IT服務資源有限,并且急需擴展IT基礎支撐的企業(yè)有著巨大的吸引力[3]。同時,PaaS也是SaaS模式的一種應用,它降低了SaaS開發(fā)應用的門檻,提高了開發(fā)效率,充分體現(xiàn)了互聯(lián)網(wǎng)低成本、高效率、規(guī)模化應用的特性,是一場互聯(lián)網(wǎng)應用軟件開發(fā)的革命。
本文首先分析了現(xiàn)有PaaS平臺的特征及其面臨的安全問題,然后介紹了現(xiàn)有解決方案及其不足,最后提出了一種基于Java安全體系結構的托管PaaS平臺安全容器解決方案。
PaaS提供基于基礎設施(即 IaaS)上的軟件、中間件和應用開發(fā)工具[8]。不同的PaaS提供不同組合的服務,綜合的PaaS是一個集開發(fā)、測試、部署、托管和應用維護為一體的集成運維環(huán)境,有的PaaS還提供源代碼和版本控制等應用軟件開發(fā)的過程管理[6]。從PaaS環(huán)境的應用支撐環(huán)境出發(fā),典型的PaaS系統(tǒng)分為兩類:開放PaaS平臺和托管PaaS平臺。其中托管PaaS平臺只提供包含安全和可伸縮性等基本功能的托管服務,不提供開發(fā)和測試環(huán)境。
托管PaaS平臺為了實現(xiàn)可擴展、可用性、管理以及運行效率等方面的“經(jīng)濟性”,基本都采用多租戶模式。多租戶PaaS服務模式的應用面臨著一些安全隔離問題[9]。
(1)云計算應用所用的數(shù)據(jù)會和其他用戶的數(shù)據(jù)混合存儲,惡意的云服務提供商、惡意的鄰居“租戶”以及某些類型應用的濫用會造成用戶數(shù)據(jù)安全問題;
(2)不同用戶的應用共同運行在一個JVM之上,對JVM的非法操作會造成鄰居租戶的應用安全問題,例如惡意應用通過系統(tǒng)調(diào)用使JVM退出;
(3)不同用戶的應用在運行過程中共享系統(tǒng)資源,如CPU、內(nèi)存、網(wǎng)絡資源等。惡意應用對共享資源過多的非法占用將會造成鄰居租戶應用無法正常運行。
在多租戶PaaS模式中,最核心的安全原則就是多租戶應用隔離[7]。云用戶確保自己的數(shù)據(jù)只能被自己的企業(yè)用戶和應用程序訪問。為了實現(xiàn)多租戶應用隔離,云提供商必須提供“沙盒”架構,通過平臺的“沙盒”性實現(xiàn)集中維護客戶部署在PaaS平臺上應用的保密性和完整性。為了提供“沙盒”架構,現(xiàn)有云提供商通過為每一個用戶應用提供一個Servlet容器的方法來實現(xiàn)邏輯上的隔離,例如Google App Engine為每一個應用運行一個獨有的Jetty容器。
現(xiàn)有解決方案能有效提供平臺的“沙盒”架構,實現(xiàn)多租戶應用隔離,但是同時,多租戶模式下運行多個Servlet容器的模式會帶來較大的系統(tǒng)開銷。本文在現(xiàn)有解決方案的基礎上,提出了一種由一個Servlet容器承載不同應用的解決方案,在實現(xiàn)多租戶應用隔離的同時保證系統(tǒng)性能。
本研究中,基于Java實現(xiàn)托管PaaS平臺,采用Jetty作為Servlet容器,實現(xiàn)對Java Web應用的托管服務。
自Java技術出現(xiàn)以來,Java平臺的安全問題以及應用Java技術而產(chǎn)生的安全問題引起了廣泛的關注,并從JDK1.0以來,Java的安全體系結構不斷演變,安全也不斷得到加強,如今Java技術已能提供對安全的良好支持。本文提出的PaaS平臺安全容器,就是利用Java技術提供的安全性,并在此基礎上結合托管PaaS平臺特點進行定制而實現(xiàn)的。
Java技術從多個方面提供了對安全性的支持:Java語言本身安全性;虛擬機的雙親委托類加載機制;安全管理器和Java API。這些共同構成了Java安全體系結構,即沙盒模型:一個支持靈活的細粒度訪問控制安全策略,并且具有可擴充性和伸縮性的安全體系結構。
Java沙盒采用了靈活的保護域安全模型,由安全策略來決定代碼具有的訪問許可,對被保護資源的訪問會激發(fā)安全檢查,這些檢查會將授權的許可和其試圖訪問所需要的權限進行比較。這些激發(fā)安全檢查的訪問包括文件系統(tǒng)訪問、JNI訪問本地代碼和創(chuàng)建Socket連接等。
利用Java沙盒模型提供的訪問控制功能,可以將同一JVM中運行的代碼從邏輯上分開:分別運行于不同的沙盒中。在本研究中,托管PaaS平臺安全容器,即基于Java沙盒模型實現(xiàn)應用隔離。
利用Java沙盒模型可以實現(xiàn)PaaS平臺應用的訪問控制功能,但同時也存在一些不足:
(1)Java安全策略文件實現(xiàn)代碼和權限映射,在托管PaaS平臺上,系統(tǒng)運行過程中,用戶不斷上傳新應用,這就使得安全策略文件需要不斷修改并生效。
(2)用戶上傳Web應用多采用 war包的形式,Jetty部署應用時會將其自動解壓至臨時文件夾,這為在安全策略文件中指定該應用的代碼位置帶來了困難。
(3)在PaaS平臺中,多租戶應用共同運行在一個Jetty容器中。為避免相互影響,這些應用只能擁有有限并且相同的資源訪問權限,通過安全策略文件的形式存在很大的重復,并且JVM實現(xiàn)安全策略文件到應用權限的映射也會降低系統(tǒng)性能。
因此,本研究中,基于托管PaaS平臺及Jetty和用戶應用的特點,在Java沙盒模型的基礎上進行了擴展和定制。其體系結構如圖1所示。
在托管PaaS平臺運行環(huán)境中,安全容器提供應用運行受限的環(huán)境,即沙盒環(huán)境。沙盒環(huán)境實現(xiàn)應用運行時5個方面的訪問控制:文件訪問控制、網(wǎng)絡訪問控制、多線程控制、JNI訪問控制和 System.exit()方法訪問控制。在托管PaaS平臺運行環(huán)境中,安全容器在Java安全體系結構基礎上進行擴展,實現(xiàn)了兩套邏輯沙盒模型,在邏輯上把系統(tǒng)代碼和應用代碼分開處理,實現(xiàn)簡化安全策略文件的配置,提高系統(tǒng)性能。
在托管PaaS平臺運行環(huán)境中,兩套邏輯沙盒模型(默認沙盒、應用沙盒)分別提供系統(tǒng)代碼和應用代碼的運行環(huán)境,并實現(xiàn)相應的訪問控制。托管PaaS平臺運行環(huán)境安全模型主要通過保護域模塊、類加載模塊、安全策略模塊、訪問控制模塊4個邏輯模塊來實現(xiàn)。
(1)保護域模塊
在Java安全體系結構中,域在邏輯上封裝了一組類,并根據(jù)當前有效的安全策略,將這組類的實例賦予一組相同的許可權限。當類加載器將類型裝入Java虛擬機時,它們將為每個類型指派一個保護域,Java應用環(huán)境通過維持代碼到它們的保護域,再到它們的許可權限的映射來實現(xiàn)沙盒。
在PaaS系統(tǒng)中,定義了兩種安全域:系統(tǒng)保護域和應用保護域。系統(tǒng)保護域使用Java安全體系結構中默認的域模型,即通過代碼位置及簽名指定保護域,并通過安全策略文件為其指定權限。
類似地,應用保護域由每個應用的AppContext來指定,邏輯上與一個Web應用相對應。同時,由于安全容器中所有應用擁有特定的有限權限,可以通過應用類加載器直接為應用指定權限集,從而避免安全策略文件到權限的映射。
(2)類加載模塊
在Java安全體系結構中,由類加載器根據(jù)所加載的所有類或接口的代碼庫和簽名,以及系統(tǒng)的安全策略創(chuàng)建保護域的實例,并為每個類型指派到相應的保護域。
PaaS平臺運行環(huán)境中實現(xiàn)了兩套保護域模型,相應地實現(xiàn)了兩套類加載策略:系統(tǒng)類(Jetty代碼和服務端代碼)和應用類分別由系統(tǒng)類加載器和WebApp類加載器加載。系統(tǒng)類加載器加載代碼時,使用Java安全體系結構默認的方式(即代碼位置)為每個類型指派保護域。WebApp類加載器加載應用類時,根據(jù)該應用的AppContext為其指派保護域,并為此保護域賦予默認應用權限集。
在Jetty中,應用類的加載利用ContextClssLoader的方法,為每一個應用起一個線程,通過該線程的ContextClassLoader屬性保存一個ClassLoader實例的引用,使得此線程的任何語句都可以得到此ClassLoader,然后用來加載類。即在Jetty中,每一個應用由一個WebApp-ClassLoader實例進行加載。
(3)安全策略模塊
在Java安全體系結構中,沙盒模型中類和權限的映射由類加載器加載類時實現(xiàn):類加載器創(chuàng)建一個保護域的實例,并根據(jù)當前安全策略為該保護域內(nèi)代碼創(chuàng)建權限集。
默認沙盒采用Java安全體系結構默認的安全策略文件來實現(xiàn)安全策略,即JVM實現(xiàn)安全策略文件到保護域權限集的映射。應用沙盒采用PaaS系統(tǒng)默認應用安全策略,該策略指定了PaaS系統(tǒng)中應用的默認權限集,由WebAppClassLoader加載應用類型時直接指定。
(4)訪問控制模塊
Java安全體系結構中,運行于沙盒中的代碼訪問被保護資源時,由安全管理器進行安全檢查,最終實現(xiàn)對沙盒中代碼的訪問控制。由PaaS平臺運行環(huán)境體系結構圖可知,在PaaS中,為了更好地進行應用的訪問控制,系統(tǒng)代碼和應用代碼分別運行于兩套沙盒模型中,并且這兩套沙盒分別采用各自的域模型和安全策略模型。因此,為了實現(xiàn)訪問控制,需要分別按照兩套邏輯分別進行權限檢查。同時,出于安全的考慮,Java安全體系結構中,JVM實例某一時刻最多只能指定一個安全管理器實例,因此在PaaS平臺運行托管環(huán)境中,安全管理器需要同時處理兩套訪問控制邏輯。其訪問控制流程如圖2所示。
圖2 Java體系結構
訪問被保護資源時,安全管理器將進行訪問控制:首先判斷當前訪問請求來自應用沙盒還是系統(tǒng)沙盒;其次根據(jù)沙盒的保護域模型進行相應的訪問控制。
測試環(huán)境如圖3所示。
PaaS云平臺中邏輯結點均為虛擬機,包括一個PaaS Manager、一個FTP服務器以及若干 PaaS Container結點。測試中,所有虛擬機性能均相同,CPU個數(shù)為1,內(nèi)存為1 024 MB。
在此測試階段,3臺Container結點分別使用以下方式托管應用:運行一個Servlet容器,托管一個用戶應用;運行一個Servlet容器,托管 3個不同用戶應用;運行 3個Servlet容器,分別托管一個用戶應用。系統(tǒng)啟動并運行穩(wěn)定后,每5 s記錄一次Container占用CPU及內(nèi)存的情況。測試結果分別如圖4、圖5所示。
由測試結果可知,運行Servlet容器將會帶來較大的系統(tǒng)開銷,而一個Servlet容器中托管應用數(shù)的增加并不會帶來較明顯的CPU及內(nèi)存的消耗。因此,與現(xiàn)有PaaS使用一個容器托管一個應用的方式相比,本文中PaaS安全容器解決方案將會帶來明顯的系統(tǒng)性能提升。
為了實現(xiàn)PaaS容器安全,通過Java沙箱機制實現(xiàn)應用隔離。本文的PaaS安全解決方案中,結合Jetty托管應用的特點,在Java沙箱模型基礎上實現(xiàn)定制。本測試階段,3臺Container結點分別作如下實現(xiàn):無沙箱、默認沙箱和定制沙箱。3臺Container分別托管相同應用,該應用無文件訪問權限,系統(tǒng)啟動并運行穩(wěn)定后,通過PC客戶端訪問應用,進行10次文件讀操作,記錄所需CPU時間。測試結果如圖6所示。
無沙箱限制時,應用讀文件成功,沙箱環(huán)境下,應用訪問失敗。同時,由上述測試結果可知,沒有沙箱限制時,應用讀文件所需CPU時間最短。通過定制沙箱,減少從安全策略文件到沙箱權限集的映射,一定程序上提高了應用運行速度,提高系統(tǒng)性能。
云計算是當前發(fā)展迅速的新興產(chǎn)業(yè),其發(fā)展面臨著許多關鍵問題,其中安全問題成為制約其發(fā)展的最主要因素[7]。PaaS作為云計算的一種服務方式,具有廣闊的發(fā)展前景。本文研究了PaaS云平臺所面臨的一些安全問題,分析了現(xiàn)有解決方案及其存在的缺陷,并在此基礎上提出托管PaaS平臺安全容器解決方案。通過測試證明,本文所提出的解決方案在實現(xiàn)PaaS平臺應用隔離的前提下,降低了系統(tǒng)開銷,保證了系統(tǒng)性能。
[1]劉鵬.云計算的定義和特點[OL].(2009-02-05).http://www.chinaclold.cnlshow.aspx?id=741&eid=17.
[2]CSA,Cloud Security Alliance[EB/OL].http://clandsecuring aliance.org.
[3]LUIS M V,LUIS R M,JUAN C,et al.A break in the clouds:towards a cloud definition[J].ACM SIGCOMM Computer Communication Review,2009,39(1):50-55.
[4]BALACHANDRA R K,RAMAKRISHNA P V,ATANU R.Cloud security issues[C].Proceedings of the 2009 IEEE International Conference on Services Computing.2009:517-520.
[5]張云勇,陳清金,潘松柏,等.云計算安全關鍵技術分析[J].電信科學,2010,26(9):64-69.
[6]RAJU B P R,SWARNA P R,RAO M S.Privacy and security issues of Cloud Computing[J].IJART,2011,1(2):128-136.
[7]馮登國,張敏,張妍,等.云計算安全研究[J].軟件學報,2011,22(1):71-83.
[8]KUYORA S O,LBIKUNLE F,AWODELE O.Cloud computing security issues and challenges[J].IJCN,2011,3(5):344-349.
[9]林兆驥,付雄,王汝傳,等.云計算安全關鍵問題研究[J].信息化研究,2011,37(2):1-4.