文獻標識碼: A
文章編號: 0258-7998(2013)01-0132-04
云計算是一種新興的商業計算模式,它將計算任務分布在大量計算機構成的資源池上,使各種應用系統能夠根據需要獲取計算能力、存儲空間和各種軟件服務[1]。云計算代表了IT領域向集約化、規模化與專業化道路發展的趨勢,是IT領域正在發生的深刻變革,但它在提高使用效率的同時,為實現用戶信息資產安全與隱私保護帶來極大的沖擊與挑戰[2]。當前,安全問題已成為云計算推廣應用的最主要的制約因素,因此,云安全問題成為必須解決的問題之一[4]。
平臺即服務PaaS(Platform-as-a-Service)作為云計算的一種,是將基礎設施平臺作為一種服務呈現給用戶的商業模式,方案成本比較低。對那些資金有限、IT服務資源有限,并且急需擴展IT基礎支撐的企業有著巨大的吸引力[3]。同時,PaaS也是SaaS模式的一種應用,它降低了SaaS開發應用的門檻,提高了開發效率,充分體現了互聯網低成本、高效率、規模化應用的特性,是一場互聯網應用軟件開發的革命。
本文首先分析了現有PaaS平臺的特征及其面臨的安全問題,然后介紹了現有解決方案及其不足,最后提出了一種基于Java安全體系結構的托管PaaS平臺安全容器解決方案。
1 托管PaaS平臺及其安全問題
1.1 托管PaaS平臺
PaaS提供基于基礎設施(即IaaS)上的軟件、中間件和應用開發工具[8]。不同的PaaS提供不同組合的服務,綜合的PaaS是一個集開發、測試、部署、托管和應用維護為一體的集成運維環境,有的PaaS還提供源代碼和版本控制等應用軟件開發的過程管理[6]。從PaaS環境的應用支撐環境出發,典型的PaaS系統分為兩類:開放PaaS平臺和托管PaaS平臺。其中托管PaaS平臺只提供包含安全和可伸縮性等基本功能的托管服務,不提供開發和測試環境。
1.2 托管PaaS平臺的安全問題
托管PaaS平臺為了實現可擴展、可用性、管理以及運行效率等方面的“經濟性”,基本都采用多租戶模式。多租戶PaaS服務模式的應用面臨著一些安全隔離問題[9]。
(1)云計算應用所用的數據會和其他用戶的數據混合存儲,惡意的云服務提供商、惡意的鄰居“租戶”以及某些類型應用的濫用會造成用戶數據安全問題;
(2)不同用戶的應用共同運行在一個JVM之上,對JVM的非法操作會造成鄰居租戶的應用安全問題,例如惡意應用通過系統調用使JVM退出;
(3) 不同用戶的應用在運行過程中共享系統資源,如CPU、內存、網絡資源等。惡意應用對共享資源過多的非法占用將會造成鄰居租戶應用無法正常運行。
1.3 PaaS平臺安全問題一般解決方案
在多租戶PaaS模式中,最核心的安全原則就是多租戶應用隔離[7]。云用戶確保自己的數據只能被自己的企業用戶和應用程序訪問。為了實現多租戶應用隔離,云提供商必須提供“沙盒”架構,通過平臺的“沙盒”性實現集中維護客戶部署在PaaS平臺上應用的保密性和完整性。為了提供“沙盒”架構,現有云提供商通過為每一個用戶應用提供一個Servlet容器的方法來實現邏輯上的隔離,例如Google App Engine為每一個應用運行一個獨有的Jetty容器。
現有解決方案能有效提供平臺的“沙盒”架構,實現多租戶應用隔離,但是同時,多租戶模式下運行多個Servlet容器的模式會帶來較大的系統開銷。本文在現有解決方案的基礎上,提出了一種由一個Servlet容器承載不同應用的解決方案,在實現多租戶應用隔離的同時保證系統性能。
2 托管PaaS平臺安全容器設計
本研究中,基于Java實現托管PaaS平臺,采用Jetty作為Servlet容器,實現對Java Web應用的托管服務。
自Java技術出現以來,Java平臺的安全問題以及應用Java技術而產生的安全問題引起了廣泛的關注,并從JDK1.0以來,Java的安全體系結構不斷演變,安全也不斷得到加強,如今Java技術已能提供對安全的良好支持。本文提出的PaaS平臺安全容器,就是利用Java技術提供的安全性,并在此基礎上結合托管PaaS平臺特點進行定制而實現的。
2.1 Java安全體系結構
Java技術從多個方面提供了對安全性的支持:Java語言本身安全性;虛擬機的雙親委托類加載機制;安全管理器和Java API。這些共同構成了Java安全體系結構,即沙盒模型:一個支持靈活的細粒度訪問控制安全策略,并且具有可擴充性和伸縮性的安全體系結構。 Java沙盒采用了靈活的保護域安全模型, 由安全策略來決定代碼具有的訪問許可,對被保護資源的訪問會激發安全檢查,這些檢查會將授權的許可和其試圖訪問所需要的權限進行比較。這些激發安全檢查的訪問包括文件系統訪問、JNI訪問本地代碼和創建Socket連接等。
2.2 托管PaaS安全容器
利用Java沙盒模型提供的訪問控制功能,可以將同一JVM中運行的代碼從邏輯上分開:分別運行于不同的沙盒中。在本研究中,托管PaaS平臺安全容器,即基于Java沙盒模型實現應用隔離。
利用Java沙盒模型可以實現PaaS平臺應用的訪問控制功能,但同時也存在一些不足:
(1) Java安全策略文件實現代碼和權限映射,在托管PaaS平臺上,系統運行過程中,用戶不斷上傳新應用,這就使得安全策略文件需要不斷修改并生效。
(2) 用戶上傳Web應用多采用war包的形式,Jetty部署應用時會將其自動解壓至臨時文件夾,這為在安全策略文件中指定該應用的代碼位置帶來了困難。
(3) 在PaaS平臺中,多租戶應用共同運行在一個Jetty容器中。為避免相互影響,這些應用只能擁有有限并且相同的資源訪問權限,通過安全策略文件的形式存在很大的重復,并且JVM實現安全策略文件到應用權限的映射也會降低系統性能。
因此,本研究中,基于托管PaaS平臺及Jetty和用戶應用的特點,在Java沙盒模型的基礎上進行了擴展和定制。其體系結構如圖1所示。
在托管PaaS平臺運行環境中,安全容器提供應用運行受限的環境,即沙盒環境。沙盒環境實現應用運行時5個方面的訪問控制:文件訪問控制、網絡訪問控制、多線程控制、JNI訪問控制和System.exit()方法訪問控制。在托管PaaS平臺運行環境中,安全容器在Java安全體系結構基礎上進行擴展,實現了兩套邏輯沙盒模型,在邏輯上把系統代碼和應用代碼分開處理,實現簡化安全策略文件的配置,提高系統性能。
在托管PaaS平臺運行環境中,兩套邏輯沙盒模型(默認沙盒、應用沙盒)分別提供系統代碼和應用代碼的運行環境,并實現相應的訪問控制。托管PaaS平臺運行環境安全模型主要通過保護域模塊、類加載模塊、安全策略模塊、訪問控制模塊4個邏輯模塊來實現。
(1) 保護域模塊
在Java安全體系結構中,域在邏輯上封裝了一組類,并根據當前有效的安全策略,將這組類的實例賦予一組相同的許可權限。當類加載器將類型裝入Java虛擬機時,它們將為每個類型指派一個保護域, Java應用環境通過維持代碼到它們的保護域,再到它們的許可權限的映射來實現沙盒。
在PaaS系統中,定義了兩種安全域:系統保護域和應用保護域。系統保護域使用Java安全體系結構中默認的域模型,即通過代碼位置及簽名指定保護域,并通過安全策略文件為其指定權限。
類似地,應用保護域由每個應用的AppContext來指定,邏輯上與一個Web應用相對應。同時,由于安全容器中所有應用擁有特定的有限權限,可以通過應用類加載器直接為應用指定權限集,從而避免安全策略文件到權限的映射。
(2) 類加載模塊
在Java安全體系結構中,由類加載器根據所加載的所有類或接口的代碼庫和簽名,以及系統的安全策略創建保護域的實例,并為每個類型指派到相應的保護域。
PaaS平臺運行環境中實現了兩套保護域模型,相應地實現了兩套類加載策略:系統類(Jetty代碼和服務端代碼)和應用類分別由系統類加載器和WebApp類加載器加載。系統類加載器加載代碼時,使用Java安全體系結構默認的方式(即代碼位置)為每個類型指派保護域。WebApp類加載器加載應用類時,根據該應用的AppContext為其指派保護域,并為此保護域賦予默認應用權限集。
在Jetty中,應用類的加載利用ContextClssLoader的方法,為每一個應用起一個線程,通過該線程的ContextClassLoader屬性保存一個ClassLoader實例的引用,使得此線程的任何語句都可以得到此ClassLoader,然后用來加載類。即在Jetty中,每一個應用由一個WebAppClassLoader實例進行加載。
(3) 安全策略模塊
在Java安全體系結構中,沙盒模型中類和權限的映射由類加載器加載類時實現:類加載器創建一個保護域的實例,并根據當前安全策略為該保護域內代碼創建權限集。
默認沙盒采用Java安全體系結構默認的安全策略文件來實現安全策略,即JVM實現安全策略文件到保護域權限集的映射。應用沙盒采用PaaS系統默認應用安全策略,該策略指定了PaaS系統中應用的默認權限集,由WebAppClassLoader加載應用類型時直接指定。
(4) 訪問控制模塊
Java安全體系結構中,運行于沙盒中的代碼訪問被保護資源時,由安全管理器進行安全檢查,最終實現對沙盒中代碼的訪問控制。由PaaS平臺運行環境體系結構圖可知,在PaaS中,為了更好地進行應用的訪問控制,系統代碼和應用代碼分別運行于兩套沙盒模型中,并且這兩套沙盒分別采用各自的域模型和安全策略模型。因此,為了實現訪問控制,需要分別按照兩套邏輯分別進行權限檢查。同時,出于安全的考慮,Java安全體系結構中,JVM實例某一時刻最多只能指定一個安全管理器實例,因此在PaaS平臺運行托管環境中,安全管理器需要同時處理兩套訪問控制邏輯。其訪問控制流程如圖2所示。
PaaS云平臺中邏輯結點均為虛擬機,包括一個PaaS Manager、一個FTP服務器以及若干PaaS Container結點。測試中,所有虛擬機性能均相同,CPU個數為1,內存為1 024 MB。
3.2 安全容器系統開銷測試
在此測試階段,3臺Container結點分別使用以下方式托管應用:運行一個Servlet容器,托管一個用戶應用;運行一個Servlet容器,托管3個不同用戶應用;運行3個Servlet容器,分別托管一個用戶應用。系統啟動并運行穩定后,每5 s記錄一次Container占用CPU及內存的情況。測試結果分別如圖4、圖5所示。
由測試結果可知,運行Servlet容器將會帶來較大的系統開銷,而一個Servlet容器中托管應用數的增加并不會帶來較明顯的CPU及內存的消耗。因此,與現有PaaS使用一個容器托管一個應用的方式相比,本文中PaaS安全容器解決方案將會帶來明顯的系統性能提升。
3.3 沙箱模型性能測試
為了實現PaaS容器安全,通過Java沙箱機制實現應用隔離。本文的PaaS安全解決方案中,結合Jetty托管應用的特點,在Java沙箱模型基礎上實現定制。本測試階段,3臺Container結點分別作如下實現:無沙箱、默認沙箱和定制沙箱。3臺Container分別托管相同應用,該應用無文件訪問權限,系統啟動并運行穩定后,通過PC客戶端訪問應用,進行10次文件讀操作,記錄所需CPU時間。測試結果如圖6所示。
無沙箱限制時,應用讀文件成功,沙箱環境下,應用訪問失敗。同時,由上述測試結果可知,沒有沙箱限制時,應用讀文件所需CPU時間最短。通過定制沙箱,減少從安全策略文件到沙箱權限集的映射,一定程序上提高了應用運行速度,提高系統性能。
云計算是當前發展迅速的新興產業,其發展面臨著許多關鍵問題,其中安全問題成為制約其發展的最主要因素[7]。PaaS作為云計算的一種服務方式,具有廣闊的發展前景。本文研究了PaaS云平臺所面臨的一些安全問題,分析了現有解決方案及其存在的缺陷,并在此基礎上提出托管PaaS平臺安全容器解決方案。通過測試證明,本文所提出的解決方案在實現PaaS平臺應用隔離的前提下,降低了系統開銷,保證了系統性能。
參考文獻
[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.