[安全公告]關(guān)于Intel處理器Meltdown和Spectre安全漏洞公告
尊敬的用戶:
北京時間2018年01月03日,Intel處理器芯片被爆出存在嚴(yán)重安全漏洞,該漏洞事件源于芯片硬件設(shè)計(jì)層面存在缺陷,可導(dǎo)致操作系統(tǒng)內(nèi)核信息泄露、應(yīng)用程序越權(quán)訪問系統(tǒng)內(nèi)核數(shù)據(jù)等問題。
漏洞背景:
現(xiàn)代處理器是通過在流水線各個階段同時執(zhí)行不同的任務(wù)來提高處理能力的。為了讓這個流水線機(jī)制更加高效,現(xiàn)代處理器又引入了分支預(yù)測和亂序執(zhí)行機(jī)制,從而更高效的進(jìn)行運(yùn)算。
其中,分支預(yù)測主要用于解決在跳轉(zhuǎn)分支完全確定前,通過預(yù)測執(zhí)行目標(biāo)地址的代碼來提高執(zhí)行效率。如果預(yù)測失敗,流水線會把預(yù)測錯誤的代碼放棄并回滾狀態(tài)。
而亂序執(zhí)行則通過將代碼的執(zhí)行順序打亂來提高平行執(zhí)行能力。
這些處理器優(yōu)化技術(shù)對于現(xiàn)代處理器的性能提升有很大的幫助。但是近期安全研究者發(fā)現(xiàn),現(xiàn)代處理器架構(gòu)的這些功能可能會導(dǎo)致安全風(fēng)險,可以被攻擊者利用在特定情況下進(jìn)行攻擊。產(chǎn)生這些的根本原因是流水線對無效執(zhí)行狀態(tài)的恢復(fù)不完整,以及亂序執(zhí)行時對權(quán)限檢查不完整。這里也充分體現(xiàn)了安全設(shè)計(jì)和性能設(shè)計(jì)的沖突。
漏洞編號:
bounds check bypass (CVE-2017-5753)
branch target injection (CVE-2017-5715)
rogue data cache load (CVE-2017-5754)
漏洞描述:
根據(jù)披露的攻擊細(xì)節(jié)及詳細(xì)介紹分析,本次針對英特爾處理器漏洞有兩種攻擊方法,分別為Meltdown和Spectre。
其中,Meltdown主要涉及CVE-2017-5754,Spectre主要涉及CVE-2017-5753和CVE-2017-5715。
Meltdown漏洞CVE-2017-5754
應(yīng)該說這三個漏洞中,Meltdown是最容易利用也是影響最大的。
本質(zhì)上這個漏洞是因?yàn)樘幚砥髟趤y序執(zhí)行時,沒有對跨特權(quán)的數(shù)據(jù)訪問進(jìn)行限制。比如當(dāng)一個用戶態(tài)的程序訪問內(nèi)核數(shù)據(jù)時,最終處理器是會觸發(fā)頁訪問異常的,但是問題出在,當(dāng)流水線上執(zhí)行時,對于觸發(fā)的頁異常進(jìn)行了抑制,在處理器真正觸發(fā)頁異常前,相應(yīng)的代碼還是會執(zhí)行,導(dǎo)致緩存依舊會發(fā)生變化。
Spectre漏洞CVE-2017-5753
該漏洞主要是通過低特權(quán)級別的代碼,調(diào)用高特權(quán)級別的代碼來實(shí)現(xiàn)攻擊。
由于為了性能加速,現(xiàn)代處理器會提前做分支預(yù)測,其后在流水線上誤判的預(yù)先執(zhí)行最終并不會實(shí)際執(zhí)行。但,也是由于性能的原因,流水線執(zhí)行結(jié)束后并沒有對所有預(yù)判執(zhí)行的現(xiàn)場做完全修復(fù),從而導(dǎo)致在緩存中會留下執(zhí)行的痕跡,進(jìn)一步會導(dǎo)致低特權(quán)惡意軟件可能通過分支預(yù)測在緩存中留下的痕跡,在特定代碼情況下猜測出高特權(quán)的數(shù)據(jù)。
這個漏洞需要特定的代碼模式才能夠觸發(fā),所以攻擊者必須要在高特權(quán)級別的代碼,比如操作系統(tǒng)內(nèi)核,虛擬化底層中找到特定模式的代碼用于利用,相對CVE-2017-5715而言,利用難度小。
Spectre漏洞CVE-2017-5715
對于漏洞CVE-2017-5753,攻擊者需要找到已經(jīng)存在的特定代碼模式來展開攻擊。如果沒有現(xiàn)成的攻擊者用于展開攻擊的代碼模式,攻擊者需要考慮如何制造出這些便于攻擊的代碼模式。漏洞CVE-2017-5715就是針對這個思路展開的。
這里的攻擊目標(biāo)是分支目標(biāo)緩存。這是一個處理器內(nèi)部用于加速分支跳轉(zhuǎn)的內(nèi)部數(shù)據(jù)結(jié)構(gòu),有特定的目標(biāo)預(yù)測算法。通過對這個算法的操縱可以讓攻擊者預(yù)填入惡意的跳轉(zhuǎn)地址,在流水線上,當(dāng)處理器到正確地址之前,讓處理器執(zhí)行特定的目標(biāo)代碼。當(dāng)然,隨著流水線的最后確認(rèn),這些執(zhí)行也都會被廢棄,但是對于緩存的影響依然保留。
Google在攻擊細(xì)節(jié)中給出了反推出KVM的模塊地址思路,但是這個攻擊對處理器的架構(gòu)以及內(nèi)部間接分支預(yù)測的算法有很強(qiáng)的依賴。相對而言,這個漏洞是最難利用的,需要一定的先決條件以及很多處理器內(nèi)部信息。
具體攻擊方式介紹如下:
Spectre:bounds check bypass (CVE-2017-5753)
Spectre:branch target injection (CVE-2017-5715)
Meltdown:rogue data cache load (CVE-2017-5754)
影響范圍:
該漏洞存在于Intel x86_64的硬件中,從1995年以后生產(chǎn)的Intel處理器芯片將都可能受到影響。同時AMD、ARM處理器也會受到影響。
漏洞風(fēng)險:
從目前公開的PoC測試程序來看,攻擊者需要獲取本地普通賬號權(quán)限后,再進(jìn)一步進(jìn)行提權(quán)操作,從而獲取更高權(quán)限越權(quán)獲取本地敏感信息,漏洞利用有一定的條件限制。
漏洞修復(fù)建議(或緩解措施):
1.建議您按照安全最佳實(shí)踐做好安全加固和防護(hù)措施,防止被攻擊者利用;
2.目前發(fā)現(xiàn)Linux系統(tǒng)執(zhí)行修補(bǔ)后可能造成一定程度的性能影響。該漏洞只能通過本地提權(quán)操作才能獲取敏感信息,為了確保業(yè)務(wù)的穩(wěn)定性,請用戶根據(jù)自身業(yè)務(wù)情況決定是否需要升級修復(fù)漏洞。修補(bǔ)前請做好業(yè)務(wù)驗(yàn)證及必要的數(shù)據(jù)備份(可以采取備份等功能用來保存數(shù)據(jù)及虛機(jī)狀態(tài));
3.本次漏洞建議用戶更新補(bǔ)丁以規(guī)避meltdown漏洞風(fēng)險;
以下為更新補(bǔ)丁參考方式:
Linux:
1)CentOS:
yum update kernel –y
reboot
2)Ubuntu:
12.04:
apt-get update && apt-get dist-upgrade
update-grub
reboot
備注:更新補(bǔ)丁時,openssh選擇NO
14.04/16.04:
apt-get update
apt-get install linux-image-4.4.0-112-generic linux-image-extra-4.4.0-112-generic
update-grub
reboot
3)Debian:
6.0.10:
apt-get update && apt-get dist-upgrade
update-grub
reboot
7.8:
apt-get install linux-image-3.2.0-5-amd64
update-grub
reboot
備注:重啟后,選擇Linux 3.2.0-5-amd64內(nèi)核啟動
7.8.10:
apt-get install linux-image-3.2.0-5-amd64
update-grub
reboot
Windows Server:
1)2008 R2:
https://www.catalog.update.microsoft.com/Search.aspx?q=KB4056897
適用于箭頭云的漏洞補(bǔ)丁如下:
2)2012 R2:
https://www.catalog.update.microsoft.com/Search.aspx?q=KB4056898
適用于箭頭云的漏洞補(bǔ)丁如下:
3)2016 R2:
https://www.catalog.update.microsoft.com/Search.aspx?q=KB4056890
適用于箭頭云的漏洞補(bǔ)丁如下:
備注:由于windows發(fā)布更新跟云主機(jī)中的反病毒軟件們兼容性并不是很好,所以在用戶的云主機(jī)中windows update功能打開的情況下,可能并不能自動獲取到針對Meltdown和Spectre的更新包。建議用戶自行下載后,再手工安裝更新。
以上linux系統(tǒng)更新方式采用新增內(nèi)核啟動方式,如出現(xiàn)意外情況,可以嘗試在開機(jī)過程中通過云主機(jī)vnc界面進(jìn)入grub,選用老版本內(nèi)核進(jìn)入系統(tǒng)。