功能越偉大漏洞越多 解密虛擬機安全
原創(chuàng)【51CTO.com獨家特稿】一、虛擬機簡介
虛擬化指的是講一個物理計算機劃分為一個或多個完全孤立的“虛擬機”,俗稱VMs。對于操作系統(tǒng)而言,實際上把他們看作是在自己身上運行的一個程序,但他們實際上會共享機器的物理硬件,比如CPU、內(nèi)存、磁盤和網(wǎng)絡(luò)設(shè)備。虛擬機的使用提供了兩個主要的好處:資源共享和隔離。在非虛擬環(huán)境中,所有的資源在物理計算機上專用。如果系統(tǒng)有2GB的內(nèi)存,運行任務(wù)使用了其中1GB,那么其余的就會被閑置,不能充分利用。
在虛擬機的狀態(tài)下,各種資源可以根據(jù)需要分配,在有的情況下甚至可以不用重啟虛擬機即可分配硬件資源,虛擬機環(huán)境還提供了隔離。但是在非虛擬的狀態(tài)下,所有運行的程序可以彼此看到對方,如果有足夠的權(quán)限,他們可以相互進行通信。
虛擬機提供的環(huán)境,看起來就像是獨立并存的數(shù)個計算機,而實際上他們都是在一個物理主機上模擬運行的。雖然虛擬機的隔離程度依賴于底層的虛擬化技術(shù),但是在沒有進行特殊配置的情況下,虛擬機之間并不允許互相交流。另外,這種環(huán)境的隔離還包括了另外一層意思,即使某個虛擬機崩潰了,也不應(yīng)當(dāng)影響其他的虛擬機運行。
二、虛擬機的安全威脅
虛擬化技術(shù)現(xiàn)在仍在發(fā)展,并且功能越來越強大。但是歷史證明:功能越偉大,安全漏洞也越多,我們現(xiàn)在還不能完全知曉虛擬化技術(shù)的安全弱點,但問題是肯定存在的,本文意在透過已知的安全問題,提醒大家注意虛擬化帶來的安全問題。
1、虛擬機之間的通信
虛擬機一般實現(xiàn)這四個功能:
多個組織共享一個物理機。
在一臺計算機上,有高保密要求和低保密要求的應(yīng)用。
合并一些服務(wù)到少數(shù)物理機上
提供一個通用硬件平臺,承載多個操作系統(tǒng)
前三種情況都有隔離的需要,第一種情況下,其他組織是無法訪問他們的。第二和第三種情況下,這些虛擬機不應(yīng)該被不相關(guān)的人訪問,第四種情況,虛擬化的目標(biāo)一般是為了實現(xiàn)系統(tǒng)之間的交互。相對于物理機,虛擬機的安全問題是比較獨特的。
比如剪貼板技術(shù)允許數(shù)據(jù)在虛擬機和主機之間傳輸,這個功能很方便,但也很容易被利用,惡意程序可以很方便的在系統(tǒng)之間傳輸。再比如,某虛擬技術(shù)在操作系統(tǒng)內(nèi)核,提供了虛擬層的按鍵和屏幕記錄,甚至可以監(jiān)控虛擬機內(nèi)的加密連接。還有,有的虛擬機根本沒有進行隔離,可以讓虛擬機無障礙的進入宿主機,在側(cè)重運行的應(yīng)用設(shè)計里比較常見,避免了信息孤島,這也是很多虛擬機用戶的要求,所以這也存在較大的安全隱患,應(yīng)該討論一個適當(dāng)?shù)姆椒ㄟM行隔離。
2、虛擬機逃逸技術(shù)
虛擬機讓我們能夠分享主機的資源并提供隔離。在理想的世界中,一個程序運行在虛擬機里,他應(yīng)該無法影響其他虛擬機。不幸的是,由于技術(shù)的限制和虛擬化軟件的一些bug,這種理想世界并不存在。在某些情況下,在虛擬機里運行的程序會繞過底層,從而利用宿主機,這種技術(shù)叫做虛擬機逃逸技術(shù),由于宿主機的特權(quán)地位,其結(jié)果是整個安全模型完全崩潰。這也就是說,你在虛擬機上測試病毒、惡意軟件,這些東西如果設(shè)計好的話,就會通過虛擬機進入你的系統(tǒng)。
3、宿主機對虛擬機的控制
對于虛擬機來說,宿主機是一個控制者,對虛擬機的檢測、改變、通信都在宿主機上完成,所以宿主機的安全要更嚴(yán)格管理。根據(jù)不同的虛擬機技術(shù),宿主機可在這幾個方面影響虛擬機:
啟動、停止、暫停、重啟虛擬機;
監(jiān)控和配置虛擬機資源,包括:CPU、內(nèi)存、磁盤、虛擬機的網(wǎng)絡(luò);
調(diào)整CPU數(shù)量、內(nèi)存大小、磁盤數(shù)量、虛擬網(wǎng)絡(luò)的接口數(shù)量;
監(jiān)控虛擬機內(nèi)運行的應(yīng)用程序;
查看、復(fù)制、修改數(shù)據(jù)在虛擬機的磁盤存儲。
由于所有的網(wǎng)絡(luò)數(shù)據(jù)都會通過宿主機發(fā)往虛擬機,那么宿主機就能夠監(jiān)控所有虛擬機的網(wǎng)絡(luò)數(shù)據(jù)。
4、虛擬機對虛擬機的控制
隔離是虛擬機技術(shù)的主要特點,但是如果你從A虛擬機去控制B虛擬機,那么安全漏洞就出現(xiàn)了。現(xiàn)代的CPU可以通過強制執(zhí)行管理程序,來實現(xiàn)內(nèi)存保護,內(nèi)存的管理程序應(yīng)該是獨立的,在正確的規(guī)則里,應(yīng)該禁止正在使用的內(nèi)存看到另外一個虛擬機。換句話說,即使B虛擬機上有內(nèi)存未被使用,A虛擬機也不能去使用這些閑置內(nèi)存。
那么對于網(wǎng)絡(luò)流量來說也一樣,每個虛擬機的連接都應(yīng)該有專用的通道,虛擬機之間不能嗅探對方的數(shù)據(jù)包。但是,如果虛擬機平臺使用了“虛擬hub”或者“虛擬交換”來連接所有虛擬機,那么虛擬機就可以進行嗅探,或者使用ARP中毒來重新定向數(shù)據(jù)包。
5、拒絕服務(wù) 由于虛擬機和宿主機共享資源,虛擬機會強制占用一些資源,從而使得其他虛擬機拒絕服務(wù)?,F(xiàn)在通常的做法是:限制虛擬機可用資源。虛擬化技術(shù)提供了很多機制來保證這一點,把資源單獨分配給一個虛擬機。正確的配置可以防止虛擬機無節(jié)制的濫用資源,從而避免拒絕服務(wù)攻擊。
6、外部修改虛擬機
信任關(guān)系對虛擬機來說是個很重要的基礎(chǔ)。例如,我們定義一個虛擬機的賬戶a,可以通過受保護的應(yīng)用程序來訪問數(shù)據(jù)庫。賬戶a被鎖定在這個應(yīng)用程序里,也就是說賬戶a不能夠訪問數(shù)據(jù)庫以外的應(yīng)用。但是如果虛擬機可以被修改,那么賬戶a就有可能訪問宿主機,這種信任模式就被打破了。對信任關(guān)系的保護可以通過數(shù)字簽名和驗證,簽名的密鑰應(yīng)該放在安全的位置。
7、外部管理程序修改
雖然虛擬機一般都能夠自我保護,但是惡意程序仍然能夠影響虛擬機的管理程序。在去年加拿大舉辦的CanSecWest會議有一個來自VMware的研究員做了一個關(guān)于VMsafe的演講,他利用Vmsafe API實現(xiàn)了一個小工具,這個工具是在VM外面運行,VM里面運行Filemon時會去修改SSDT表來監(jiān)控文件的操作,在外面運行的小工具就會知道里面發(fā)生的一切,而且可以進行干預(yù)。比如說我想讓VM中的系統(tǒng)在某些內(nèi)存訪問的時候產(chǎn)生一個斷點,然后外面就可以知道里面運行的程序在做什么。因此還應(yīng)該防止未授權(quán)的虛擬機管理程序,或者使用能夠驗證的管理程序。#p#
三、硬件安全
1、硬件環(huán)境
在物理機上需要有足夠的處理能力、內(nèi)存、硬盤容量和帶寬,以滿足虛擬機的運行要求,一般建議計劃一些額外的處理能力和內(nèi)存。
但是在資源有限的環(huán)境里,有時候會分配超出處理能力的資源給虛擬機,因為虛擬機群不會在同一時間內(nèi)達到峰值。比如有3個虛擬機,每個虛擬機申請峰值不超過500MHz的處理器時間,但是物理機實際上只是1GHz的CPU,由于他們滿負載的時間不一致,因此可充分利用CPU資源,這種方法叫做資源饑餓。但這種方法可能會導(dǎo)致拒絕服務(wù),你如何確保所有虛擬機不會在同一時間達到峰值?而且虛擬機資源共享機制比較粗糙,被餓死的可能不僅是CPU,內(nèi)存、磁盤、帶寬都有可能。
虛擬機的資源計算,是一個存在不可預(yù)知的數(shù)學(xué)題,下面這個公式是一個通用的計算方法:
圖1
在這個公式里,H=物理機操作系統(tǒng)+虛擬機軟件,G=虛擬機操作系統(tǒng)+應(yīng)用程序,O=額外開銷。
雖然虛擬機軟件不盡相同,但是應(yīng)該對物理機的硬件做如下考量:
CPU--CPU數(shù)量、內(nèi)核、緩存大小、速度
內(nèi)存--需要的內(nèi)存量,取決于物理機的需求+虛擬機的需求+額外開銷
硬盤--容量、轉(zhuǎn)速、存取時間、緩沖區(qū)大小
網(wǎng)絡(luò)接口--單個或者多個網(wǎng)絡(luò)接口
2、啟動時的磁盤帶寬
正常運行期間磁盤一般都能夠提供足夠的帶寬,即使有多個虛擬機。但虛擬機在啟動時會比較占用磁盤帶寬,會同時加載一些庫、守護進程及其他文件。有幾種方法來解決:
A:開機時間錯開,最關(guān)鍵的虛擬機首先啟動,然后5分鐘或者更長時間再啟動另外一個虛擬機。
B:給每個虛擬機一個專用物理磁盤。
C:以上兩種都沒條件的話,你只好忍受漫長的啟動。這是沒有辦法的辦法。
3、限制對虛擬機的訪問
宿主機對虛擬機的攻擊有著得天獨厚的條件,類似與貼身肉搏這種攻擊,包括:
A:不需要賬戶和密碼,即可使用操作系統(tǒng)特定的熱鍵來殺死進程,監(jiān)控資源的使用或者關(guān)閉機器。
B:重啟機器,引導(dǎo)到外部媒體從而破解密碼。
C: 竊取文件,比如利用軟驅(qū)、光驅(qū)、USB等。
D: 捕獲進出的網(wǎng)絡(luò)流量。
E: 刪除一個或多個磁盤,把它們掛載到已知管理員密碼的機器上,可以進入虛擬機,從而看到全部內(nèi)容。
F: 刪除整個虛擬機。
宿主機的環(huán)境不同,造成的風(fēng)險也不同,所以要對宿主機的安全提供細致的安全措施:
A: 宿主機的物理環(huán)境安全,包括對進入機房的身份卡驗證,對機器進行加鎖(避免被人竊走硬盤)。
B:在安裝完畢后拆除軟驅(qū)、光驅(qū)。
C:在BIOS里,禁止從其它設(shè)備引導(dǎo),只允許從主硬盤引導(dǎo)。另外對BIOS設(shè)置密碼,避免被人修改啟動選項。
D:控制所有的外部接口。
4、加固操作系統(tǒng)
宿主機的操作系統(tǒng)相對于虛擬機,需要更加審慎的安全策略,因為宿主機管理著所有的虛擬機,一旦宿主機被突破,攻擊者就有可能完全訪問所有的虛擬機。并且宿主機還應(yīng)提供一些額外的安全措施,比如防火墻、入侵檢測系統(tǒng):
A:宿主機應(yīng)該只有一個賬戶能管理虛擬機。密碼應(yīng)該強壯,難以猜測,經(jīng)常更換,只提供給必要的管理人員。
B:最安全當(dāng)然是不接入任何網(wǎng)絡(luò)。如果需要接入網(wǎng)絡(luò),在開啟服務(wù)之前,要使用防火墻限制,只允許必要的人訪問。
C:不需要的程序和服務(wù)不要開啟,這樣不僅可以保證安全,還可以節(jié)省資源。
D:應(yīng)及時升級補丁。給宿主機打補丁要在其他機器上進行測試,因為一旦宿主機升級失敗,會影響到所有的虛擬機運行。#p#
四、網(wǎng)絡(luò)安全
1、虛擬機層端口的防火墻
除了宿主機上開放的端口,虛擬機層也會使用宿主機的IP開放一些端口,這些端口可以允許其他人遠程連接到虛擬機層,以查看或配置虛擬機、磁盤,或者執(zhí)行其他任務(wù)。對這些端口的訪問應(yīng)該受到嚴(yán)格的控制,至少需要一個宿主機的防火墻,只允許授權(quán)者對這些端口的訪問。在理想的安全環(huán)境下,應(yīng)該不允許任何遠程訪問,這樣核心進程可以絕緣于外部環(huán)境。但在企業(yè)級的應(yīng)用上這不現(xiàn)實,可以考慮設(shè)置一臺單獨的管理機進行管理。
2、使用加密通信
盡可能的使用通信加密手段,可以用HTTPS、TLS、SSH或者加密VPN來管理。僅有加密機制還是不夠的,還應(yīng)有身份鑒別和認證,以防止偽造源IP攻擊、連接劫持、中間人攻擊。
3、虛擬機身份驗證
虛擬機和宿主機一樣,也需要配置驗證方式。比如密碼的加密,登陸次數(shù)的鎖定或延時等。
五、服務(wù)和配置
1、禁用部分功能
對于單一操作系統(tǒng)的虛擬機來說,總會有一些不需要的服務(wù)在啟用,這些都是不必要的,而且他們占用了資源,可以關(guān)閉:屏幕保護、磁盤碎片整理、搜索工具(比如搜索磁盤內(nèi)的文件)、病毒和惡意軟件掃描、文件完整性檢查、日志和日志分析工具、系統(tǒng)更新。這些功能的關(guān)閉都不會影響虛擬機運行。
比如空閑檢測,系統(tǒng)會監(jiān)視鍵盤活動、網(wǎng)絡(luò)活動、磁盤負載、CPU利用率,來判斷系統(tǒng)是不是空閑,如果是空閑的話,他可能會運行屏保或者其他程序。但由于虛擬機只了解自己的情況,別的虛擬機是不是更需要資源它不知道,它認定自己已經(jīng)空閑下來了,于是開始運行程序,那么他就占據(jù)了相關(guān)的資源.在時間上,很多操作系統(tǒng)和應(yīng)用程序會把低級別的工作安排在周末的一個固定時間。問題是,所有的虛擬機都這么做的話,就拉開了搶奪資源的大戰(zhàn),甚至這個時候,你的系統(tǒng)負載會超過業(yè)務(wù)繁忙時段。
這個問題有兩個方法:
A:當(dāng)然是關(guān)閉那些不需要的功能
B:錯開低優(yōu)先級應(yīng)用的時間,例如在linux下,輸入sleep $[ $RANDOM / 32 ],這個命令會在一個隨機的秒數(shù)內(nèi)暫停運行程序,這個隨機的秒數(shù)在0-1023秒之內(nèi)。如果系統(tǒng)沒有提供隨機休眠的話,可以手工設(shè)置虛擬機的任務(wù)開始時間。
2、文件共享
很多虛擬機軟件支持在宿主機和虛擬機之間的無縫文件共享,這樣帶來了極大的方便,也引入了安全風(fēng)險。這樣虛擬機就有機會訪問宿主機,甚至對共享的文件進行操作。即使沒有共享目錄,被激活的文件也有機會跑到虛擬機的環(huán)境之外,這個方便的口子可以被利用來攻擊。除非有業(yè)務(wù)需要,明確要求文件共享,否則禁用文件共享功能。
3、時間同步
計算機的系統(tǒng)時鐘是出了名的不準(zhǔn)確,這還是在正常的情況下,如果BIOS或者電源出了問題,那計算機的時間就更不靠譜了。在虛擬機環(huán)境下,這個問題更嚴(yán)重,因為他們?nèi)笔《际且蕾囉谒拗鳈C的時鐘,時鐘的不準(zhǔn)確性會導(dǎo)致任務(wù)的提前或滯后,比如我們限制周六到周日這兩天,某服務(wù)關(guān)閉,由于時間的重大差異,可能會造成業(yè)務(wù)中斷。同時日志也充滿了未知的不確定,你根本無法從日志上得出事件的真實事件。解決他們的辦法是配置同步時間服務(wù)器,這個服務(wù)器應(yīng)該離你的網(wǎng)絡(luò)很近。
4、操作系統(tǒng)安全加固
對操作系統(tǒng)進行各項安全的加固,就像它是一個物理機一樣。這不是本文討論的重點,網(wǎng)上有很多checklist可供參考。
5、斷開不使用的設(shè)備
虛擬技術(shù)允許虛擬機直接、間接的控制物理設(shè)備,比如軟驅(qū)、光驅(qū)、USB接口、打印機等。在虛擬機啟動的時候,他們會檢測這些硬件設(shè)備,如果多個虛擬機同時啟動,則第一個啟動的虛擬機優(yōu)先使用,其他虛擬機的檢測會被鎖定,這會造成不必要的啟動延遲。另外,如果在驅(qū)動器里有惡意代碼,虛擬機可能會自動裝入并執(zhí)行,類似與自動運行的功能。建議關(guān)閉所有可控制的物理設(shè)備,或者只在需要的時候才允許連接。#p#
六、管理
1、遠程管理方法
指定管理機的IP地址。設(shè)置強壯的用戶名、密碼,如果對安全有更高要求的話,可以使用雙因素認證,PKI機制或一次性密碼。通信管理也需要加密和認證,比如VPN或SSH。
2、SSH
SSH是個跨平臺的終端管理程序,可以運行基于文本、圖形的遠程連接。SSH的客戶端和服務(wù)端可以適用于不同的操作系統(tǒng),靈活且安全。但要注意在使用SSH的時候,包括scp, sftp或者任何加強版本,都要禁用版本1協(xié)議。還要禁止管理員直接登錄,用普通賬戶登錄然后切換到管理員。安全要求較高,應(yīng)選用DSA/RSA機制以防止中間人攻擊。
3、VNC
VNC的英文名叫Virtual Network Computing,虛擬網(wǎng)絡(luò)計算機,這個名字和虛擬機沒有任何關(guān)系,它是一種軟件方法,可以提供遠程桌面功能,程序運行一個虛擬機,把屏幕推送到VNC桌面上。你可以連到一個VNC桌面運行程序,就像在本地一樣。斷開之后,你安排的工作仍然會在后臺繼續(xù)運行。
類似于SSH,VNC提供了一個跨平臺的工具,但是和SSH不同的是,VNC很難進行加密。所以VNC連接不能暴露在互聯(lián)網(wǎng)上,如果需要從互聯(lián)網(wǎng)連接的話,使用VPN或SSH隧道。
4、WEB管理
有些管理工具還提供了HTTP的管理界面,像前面一樣,也應(yīng)使用加密手段HTTPS。
七、審計
建議給虛擬機們提供一個集中的日志服務(wù)器,這個日志服務(wù)器也可以以虛擬機的狀態(tài)來運行。好的虛擬機審計要包括:電源狀態(tài)(開啟、關(guān)閉、暫停、恢復(fù)),對硬件配置的更改,登錄嘗試、提升權(quán)限的賬戶。此外還應(yīng)對文件的復(fù)制、移動、刪除做審計。
【51CTO.COM 獨家特稿,轉(zhuǎn)載請注明出處及作者!】
【編輯推薦】