吳革 李健 賴英旭
北京工業(yè)大學計算機學院 北京 100124
隨著互聯(lián)網(wǎng)的發(fā)展,軟件網(wǎng)絡化、云計算等技術越來越普及。越來越多的私有軟件被放在公共計算平臺上運行,軟件之間的行為變得十分復雜,系統(tǒng)安全面臨前所未有的挑戰(zhàn)。
JBS模型是基于容器虛擬化技術(Container-based Operating System Virtualization),而不是完全虛擬化技術,不需要轉(zhuǎn)換敏感指令,提供接近本地操作系統(tǒng)的效率。Linux版本 JBS模型實現(xiàn)主要是基于 Linux內(nèi)核 2.6.22.19和Linux-VServer2.2.0.7。
JBS模型資源劃分:CPU調(diào)度資源劃分是通過復寫標記桶(Token Bucket, TB)數(shù)據(jù)結(jié)構(gòu),提供硬件級別的CPU調(diào)度控制。在操作系統(tǒng)中,每更新一次時間票據(jù)(timer tick),都會減少進程所在的虛擬容器的TB的容量。I/O的資源共享通過使用分級標記桶(Hierarchical Token Bucket, HTB),每個HTB都有對應預定概率(reserved rate)和共享屬性(share)。每個數(shù)據(jù)包發(fā)送出去都有自己的內(nèi)核上下文Id屬性,JBS模型通過計算包上的預定概率和共享屬性,可以確定每個虛擬容器發(fā)送數(shù)據(jù)的次序和發(fā)送的數(shù)量,從而提供有效共享服務和預定服務。存儲限制功能,分為磁盤存儲限制和內(nèi)存存儲限制。對于內(nèi)存存儲限制,應用的技術如下:①最大可用的常駐內(nèi)存(maximum resident set size,RSS);②可用內(nèi)存頁(number of anonymous memory have, ANON);③已經(jīng)被應用的內(nèi)存頁,通過使用mlock方法和mlockall方法進行標記。對于磁盤存儲限制,通過使用虛擬容器標識(XID)對文件系統(tǒng)進行標識,讓運行于不同虛擬容器中的進程可以訪問同一個宿主系統(tǒng)分區(qū),而不能訪問不同容器中的文件。
JBS模型安全隔離:JBS模型中的進程隔離主要是對宿主操作系統(tǒng)中的進程標識虛擬容器標識(XID),使每個進程的PID不再是全局名字空間,而是虛擬容器名字空間。JBS模型中的網(wǎng)絡隔離主要是根據(jù)虛擬容器動態(tài)創(chuàng)建出的 IP地址進行隔離的。chroot命令在Linux系統(tǒng)中,被用于改變系統(tǒng)根目錄位置,這會導致虛擬容器的根目錄的變動。在JBS系統(tǒng)中,引用了虛擬容器根目錄屏蔽技術(Chroot Barrier),使用一個特殊的文件屬性(special file attribute),阻止退出虛擬容器根目錄和修改它。現(xiàn)在的Linux兼容性系統(tǒng)中,并沒有完全實現(xiàn) POSIX兼容性標準。為了提供更安全的進程保護,JBS增強了Linux兼容性,通過使用虛擬容器上下文的掩碼(mask)技術,來限制進程執(zhí)行權(quán)限。
近來的大量研究主要貢獻是通過檢測虛擬環(huán)境中應用程序行為,來保護虛擬環(huán)境。相反,JBS模型更關注于虛擬容器間的交互,或者虛擬容器與遠程主機之間交互。每初始化一個虛擬容器,就需要創(chuàng)建所對應的虛擬容器的根目錄(root file system),每個虛擬容器都會被分配在某個統(tǒng)一分支文件名稱空間下。
基于對已有的 UnionFS文件系統(tǒng)的研究,改進了現(xiàn)有Linux-VServer虛擬容器創(chuàng)建方法,應用統(tǒng)一名稱空間的文件系統(tǒng)。例如,修改后的JBS模型內(nèi)核的Debian操作系統(tǒng)中安裝通用應用程序/bin/Apache和/bin/Firefox,這兩個可執(zhí)行文件和配置文件直接保存在宿主操作系統(tǒng)中。通過使用JBS遠程虛擬容器管理工具,創(chuàng)建兩個虛擬容器/JBS/vs1和/JBS/vs2,分別用來承載/bin/Apache和/bin/Firefox。Apache和Firefox應用程序在運行時都會產(chǎn)生臨時文件(例如歷史記錄),并需要將臨時文件或者程序結(jié)束產(chǎn)生的持久數(shù)據(jù),保存在文件系統(tǒng)中。因此應用程序在虛擬容器環(huán)境下,會把數(shù)據(jù)分別保存到自己新創(chuàng)建出的文件夾下/JBS/vs1/.apache,/JBS/vs2/.Mozilla,/JBS/vs2/download中。Firefox臨時文(例如密碼,瀏覽歷史)都保存在/JBS/vs2/.Mozilla文件夾中,下載的文件保存到/JBS/vs2/download文件夾中。Apache的logging日志保存在/JBS/vs1/.apache文件夾下。
從圖1可以看出,F(xiàn)irefox和Apache應用程序都是保存在宿主主機中。當Firefox運行時,它會根據(jù)配置策略運行在虛擬容器 VS2中,容器中的虛擬操作系統(tǒng)的根節(jié)點是/JBS/VS2,/bin/Firefox是只讀應用程序,不可以被修改,而根目錄/JBS/VS2是可讀可寫的,因此Firefox應用程序會動態(tài)的創(chuàng)建兩個文件夾JBS/VS2/.mozilla和/JBS/VS2/download),用來保存臨時數(shù)據(jù)和持久數(shù)據(jù)。但是在虛擬容器 VS2中的Firefox并不能訪問虛擬容器VS1中的數(shù)據(jù),也就是不能訪問/JBS/VS2文件夾。
圖1 名字空間
如果運行Firefox時,因為程序中的bug,導致下載了木馬程序(Trojan horse)kill,將被保存到/JBS/VS2/bin文件夾下。當Apache運行時,運行在/JBS/VS1虛擬容器中,并不會觸發(fā)/JBS/VS2/bin目錄下的kill木馬程序。當應用程序運行完成之后,JBS模型會應用文件對比技術,發(fā)現(xiàn)/JBS/VS2/bin的文件變動,從而檢測出木馬入侵。
JBS模型不僅僅提供入侵檢測,木馬查殺,系統(tǒng)安全等功能,而且為操作系統(tǒng)更新程序也提高很大便利。通過使用Linux系統(tǒng)的自動更新程序(例如:Debian操作系統(tǒng)的apt-get和Red hat的yum),更新宿主操作系統(tǒng)的應用程序。當虛擬容器運行時,會調(diào)用宿主操作系統(tǒng)最新版本的應用程序程序。
本文為了測試JBS模型的性能,選擇4個比較常用應用軟件進行測試:HTTP服務器Apache,桌面文本編輯器gedit,瀏覽器Firefox,還有版本管理工具SVN。通過測量系統(tǒng)調(diào)用的數(shù)量,來分析JBS模型對性能的改進。
本文選擇使用Kprobes作為內(nèi)核檢測工具,用于檢測和記錄系統(tǒng)調(diào)用。對比宿主操作系統(tǒng),虛擬容器中的應用程序,所做操作相同。測試包括四個環(huán)節(jié):①使用 gedit編輯一個文件,讀取500個字節(jié),寫入600個字節(jié),將一文章拷貝粘貼到另一篇文章中,總共操作花費了1分鐘。②使用Firefox去訪問北京工業(yè)大學網(wǎng)站(http://www.bjut.edu.cn),點擊所有導航,最后回到首頁。③使用 Apache服務,提供靜態(tài)網(wǎng)站服務,將 bjut.edu.cn網(wǎng)站抓取下來,放在本地,使用 wget請求頁面,5秒鐘一次,一共1分鐘;④最后測試SVN版本管理工具,使用SVN客戶端應用程序,上傳總共20個文件,總共10Mbit。每個應用程序都是單獨運行在虛擬容器中或者主機中的,所有其他非必要服務和程序,在測試的時候都是關閉的。測試結(jié)果如圖2所示,從圖2中可以明顯看出虛擬容器需要記錄的系統(tǒng)調(diào)用的數(shù)量有了明顯的下降。這是因為虛擬容器可以看成一個特殊的應用程序,它包括所有屬于它的進程和線程。而實際操作系統(tǒng),它在同一個時間會處理多個系統(tǒng)事件,遠遠超過了虛擬容器需要處理的事件。
測試應用程序啟動時需要記錄的系統(tǒng)調(diào)用和必須記錄的系統(tǒng)調(diào)用。當應用程序啟動時,會加載必須的他所需的靜態(tài)庫和其他資源文件。為了提高測試的真實性,在運行這些測試程序之前,修改它們的默認配置:Firefox默認首頁為空白頁,gedit直接打開,Apache和SVN的配置最小化啟動。測試結(jié)果如圖3所示。
從圖3可以看出,Apache和SVN必須記錄的系統(tǒng)事件很少,接近于零。通過使用只讀應用程序運行方式,減少系統(tǒng)調(diào)用的記錄數(shù)量。
圖3與圖2是不能相互比較的,圖2是多個軟件交互之后得出的測量結(jié)果。如果打開Firefox 10次的話,JBS模型需要記錄系統(tǒng)調(diào)用是 5000次,而本地操作系統(tǒng)需要記錄的次數(shù)就是44000次,比例超過1比8。
本文提出一個通用的軟件交互檢測模型 JBS,基于Linux-VServer]進行擴展,增加對統(tǒng)一名字空間文件系統(tǒng)的支持,實現(xiàn)了操作系統(tǒng)容器虛擬監(jiān)測環(huán)境COSVME。解決虛擬容器中的軟件交互檢測和系統(tǒng)資源隔離的問題。
通過應用JBS模型,讓系統(tǒng)調(diào)用記錄降低到原來的1/8。對比通用系統(tǒng)調(diào)用記錄系統(tǒng),證明本文提出的通用JBS模型,明顯減少了記錄應用程序的系統(tǒng)調(diào)用的數(shù)量,并提高了監(jiān)測性能。因為基于Linux操作系統(tǒng),JBS模型也具有了支持不同硬件平臺的特性。
JBS模型作為一種通用性軟件交互檢測模型,可以被應用于多種硬件平臺,檢測不同類型的應用程序。它可以被應用于軟件審查,入侵檢測,系統(tǒng)分析和系統(tǒng)恢復等系統(tǒng)安全方面研究。
[1] Linux-VServer: http://linux-vserver.org/Paper.
[2] Soltesz,S., P?tzl, H.,Fiuczynski,M. E.,Bavier,A.,and Peterson,L.Container-based operating system virtualization: a scalable,high-performance alternative to hypervisors[C]. In Proceedings of the ACM Sigops/Eurosys European Conference on Computer Systems (EuroSys '07),Lisbon, Portugal,March 2007.