劉荻
我們常說“HTTPS安全”或“HTTP不安全”,但實(shí)際上是指“HTTPS很難被窺視,很難受到中間人攻擊”或者“我的祖母輕而易舉就能窺視HTTP”。
在某些情況下,HTTP足夠安全。但是,如果有人在一種支持HTTPS的常見實(shí)現(xiàn)方法中發(fā)現(xiàn)了可以鉆空子的缺陷,HTTPS就會成為一種攻擊入口,直到這種實(shí)現(xiàn)方法得到了糾正。
HTTP和HTTPS是IETF RFC 7230-7237和2828中定義的協(xié)議。HTTPS被設(shè)計(jì)成一種安全的HTTP,但是僅簡單說HTTPS絕對安全或HTTP不安全,卻又隱藏了重要的例外情況。
虛擬機(jī)和容器的定義不太嚴(yán)格,兩者都不是有意被設(shè)計(jì)成比對方來得安全。因而,安全問題仍然比較模糊不清。
為何筆者認(rèn)為虛擬機(jī)比容器更加安全?
“分而治之”是戰(zhàn)爭和軟件領(lǐng)域的一種制勝策略。一種架構(gòu)將某個(gè)復(fù)雜、難以解決的安全問題分解成多個(gè)比較容易解決的問題后,在大多數(shù)情況下比應(yīng)對所有問題的單一解決方案來得安全。
容器就是“分而治之”橫向運(yùn)用于應(yīng)用程序的一個(gè)例子。由于將每個(gè)應(yīng)用程序鎖在各自的隔離區(qū)(jail)里面,一個(gè)應(yīng)用程序的弱點(diǎn)不會因此累及其他容器里面的應(yīng)用程序。虛擬機(jī)也是“分而治之”的一個(gè)例子,但是它在隔離方面更進(jìn)了一步。
放在隔離區(qū)的應(yīng)用程序中的漏洞不會直接影響其他應(yīng)用程序,但是這個(gè)隔離的應(yīng)用程序會危及與其他容器共享的單一操作系統(tǒng),因而影響所有容器。如果使用共享的操作系統(tǒng),應(yīng)用程序、容器和操作系統(tǒng)實(shí)現(xiàn)堆棧中任何環(huán)節(jié)的漏洞都會導(dǎo)致整個(gè)堆棧喪失安全,并危及物理機(jī)。
像虛擬機(jī)這樣的分層架構(gòu)將每個(gè)應(yīng)用程序的執(zhí)行堆棧,甚至包括硬件都隔離開,因而排除了由于共享操作系統(tǒng)而導(dǎo)致應(yīng)用程序彼此干擾的可能性。此外,每個(gè)應(yīng)用程序堆棧和硬件之間的接口都加了定義和限制,防止被濫用。這提供了另一道牢固的邊界,保護(hù)應(yīng)用程序,避免互相干擾。
虛擬機(jī)將控制用戶活動的操作系統(tǒng)與控制訪客活動的操作系統(tǒng)與硬件之間交互的虛擬機(jī)管理程序分離開來。虛擬機(jī)訪客操作系統(tǒng)控制用戶活動,但并不控制硬件交互。應(yīng)用程序或訪客操作系統(tǒng)中的漏洞不太可能影響物理硬件或其他虛擬機(jī)。如果虛擬機(jī)訪客操作系統(tǒng)和支持容器的操作系統(tǒng)一樣(通常是這樣的),危及在該操作系統(tǒng)上運(yùn)行的所有其他容器的同一個(gè)安全漏洞并不會危及其他虛擬機(jī)。因而,虛擬機(jī)將應(yīng)用程序橫向隔離開,并將操作系統(tǒng)與硬件縱向隔離開。
虛擬機(jī)帶來的開銷
虛擬機(jī)更高的安全性是要付出代價(jià)的。控制傳輸(control transfer)在計(jì)算系統(tǒng)中始終開銷很大,從處理器周期及其他資源方面來說都是如此。需要存儲和重置執(zhí)行堆棧,可能要暫?;蛟试S外部操作完成,諸如此類。
訪客操作系統(tǒng)和虛擬機(jī)管理程序之間的轉(zhuǎn)換需要很大的開銷,而且經(jīng)常出現(xiàn)。就算特殊的控制指令固化到處理器芯片中,控制傳輸方面的開銷也降低了虛擬機(jī)的總體效率。這個(gè)降幅大嗎?這個(gè)問題很難回答。可以對應(yīng)用程序進(jìn)行調(diào)優(yōu),以便通過管理控制傳輸來減小開銷。如今,大多數(shù)服務(wù)器、處理器被設(shè)計(jì)成了簡化控制傳輸。換句話說,這個(gè)降幅取決于具體的應(yīng)用程序和服務(wù)器,但是從來無法完全消除開銷,只能適當(dāng)減少。
虛擬機(jī)管理程序的安全漏洞
讓情況進(jìn)一步復(fù)雜化的是,將虛擬機(jī)架構(gòu)中的各層分離開帶來了另一個(gè)隱患:虛擬機(jī)管理程序的漏洞。虛擬機(jī)管理程序泄密是有可能造成嚴(yán)重破壞的單一故障點(diǎn),尤其在公共云中??梢韵胂螅瑔螁我粋€(gè)黑客就能在控制其他公共云用戶擁有的應(yīng)用程序的虛擬機(jī)中啟動代碼,只需通過一個(gè)漏洞,就能攻陷一大批公共云。
牢固的架構(gòu)仍可能存在實(shí)現(xiàn)方面的缺陷,從而導(dǎo)致系統(tǒng)安全性大大削弱。有人聲稱,虛擬機(jī)管理程序泄密根本不會發(fā)生,其依據(jù)是,虛擬機(jī)管理程序如此簡單,編寫得如此完善,并且經(jīng)過如此精心的審計(jì),因而根本不會出問題。虛擬機(jī)管理程序泄密的危害與WannaCry病毒一樣大,可是沒人為之擔(dān)心。而Heartbleed發(fā)生了。OpenSSL的代碼行比虛擬機(jī)管理程序要少得多。
迄今為止,筆者沒有聽說過任何重大的虛擬機(jī)管理程序泄密。不過看一眼通用漏洞披露(CVE)數(shù)據(jù)庫就會發(fā)現(xiàn),研究人員確實(shí)發(fā)現(xiàn)了虛擬機(jī)管理程序存在可以鉆空子的缺陷。虛擬機(jī)管理程序的開發(fā)人員和廠商一直在第一時(shí)間給出現(xiàn)的安全漏洞打補(bǔ)丁。2017年3月,微軟發(fā)布了安全公告“MS17-008”,記載了其Hyper-v虛擬機(jī)管理程序存在7個(gè)已經(jīng)打上補(bǔ)丁的安全漏洞,它們都被標(biāo)為嚴(yán)重漏洞或危急漏洞。
筆者仍認(rèn)為,虛擬機(jī)提供的安全性高過容器,不過我們得認(rèn)真地看一下虛擬機(jī)系統(tǒng)的安全性。