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