作者:林子南 / 臺灣大學計算機及資訊網路中心作業管理組幹事
旁通道攻擊是針對硬體或物理上的特性來達成滲透,其中Meltdown與Spectre是針對CPU的Cache Attack,分別利用Out-of-order Execution與Branch Prediction來讀取其他程式儲存在記憶體中的資料。 CPU除了用Virtual Address Space區隔每個程式的程式碼與資料,也使用了Address Space Layout Randomization(ASLR)、Kernel Address Space Layout Randomization(KALSR)等技術,來防止駭客從固定記憶體位置(分配給作業系統以外程式的記憶體)找出機敏資料(帳號、密碼等),而Meltdown與Spectre則可以透過針對Cache與記憶體的Flush+Reload攻擊來取得機敏資料。[1]
原理
現代的CPU會配合Pipeline的技術來提升單位時間內執行的CPU指令數量,因為不同指令所需的Execution Unit不一樣,讓連續數個CPU指令在執行完成前不佔用同一個Execution Unit,以此來提升單位時間CPU指令執行數量。
圖 1, Intel’s Skylake microarchitecture
圖片來源: https://www.securityinfo.it/2018/01/04/intel-spectre-meltdown/
配合圖1解釋以下Meltdown和Spectre的運作原理:
1. Out-of-order Execution
因為不同指令所需的執行時間長度不一樣,當前幾條CPU指令尚未執行完成以前,提前完成的CPU指令就稱為Out-of-order Execution。[2]
Meltdown透過在引起Exception Handker前,CPU先完成從其他程式的記憶體空間載入資料到Cache的Out-of-order Execution,當Out-of-order Execution因Exception Handker被中斷後,雖然Reorder Buffer會清空Out-of-order Execution所使用的Registers,但是載入的資料仍存在Cache中,再透過Flush+Reload就能從最後一層Cache中取得資料。
2. Speculative Execution
跟在CPU的Branch指令後面的數個指令,在Pipline中會因為Branch指令耗時較長,導致後續幾個指令會先執行後將結果存入Reorder Buffer,並等待Branch指令完成。
3. Branch Prediction
在圖1中的Branch predictor會依照之前執行Branch指令的結果,來預測界下來Branch指令的輸出,同時會依照預測的結果執行對應區塊的指令,也就是Speculative Execution,如果發生預測錯誤的情況時,則會由Reorder Buffer來清空Speculative Execution所使用到的Registers。
Spectre就是透過在Reorder Buffer清空Speculative Execution時,因為不會清空已經載入到Cache的值,用Flush+Reload的方式來取得最後一層Cache中的值。
4. Meltdown and Spectre
兩者都是透過Pipeline技術中同時執行多個CPU指令的特性,用不同的方式去阻止指令繼續執行,並改成用Flush+Reload等洩漏Cache值的方式來取得值。
Meltdown是因為作業系統或CPU沒有檢查Out-of-order Execution中是否包含了惡意指令的特性,使用這樣的攻擊手法必須從組合語言上嚴格限制執行順序,因此無法用做遠端攻擊。Spectre是透過Branch Prediction使惡意的Speculative Execution在預測結果以前先執行,因此可以透過高階程式語言來達成,利用高階程式語言(例如網頁前端程式語言)多次執行if-else、for、while等流程控制的程式碼,讓低階程式語言產生對應的Branch Prediction,以此達成從遠端攻擊。
表格 1, Meltdown與Spectre比較[2, 3]
|
|
|
透過什麼方式將實體記憶體位置注入Cache
|
Out-of-order execution
|
Speculative execution from branch prediction
|
CPU
|
大部分的Intel CPU
(AMD與ARM的CPU會因為從執行攻擊的速度不夠快而失敗[2])
|
Intel、AMD、ARM
|
KASLR是否能防止機敏資料洩漏
|
O
|
X
|
是否能遠端攻擊
|
X
|
O
(利用瀏覽器執行Javascript來達成攻擊[3])
|
應對措施
除了CPU廠商應該要發布相關韌體的更新之外,對應的作業系統也應該要更新,以常見的2大作業系統環境來看,Apple和Microsoft已經即時的發布了許多更新,而同樣作為廣泛使用2大Virtual Machine環境(VMware、Hyper V)也發布了相關更新:
1. Apple [4, 5]
Apple在Mac電腦、iPhone、iPad、Apple TV上各自發布了更新,iPhone、iPad 的iOS版本從11.2開始在安全性更新就包含了抵禦Meltdown與Spectre的更新。
Mac電腦在macOS High Sierra 10.13.2與補充更新(Supplemental Update)改善了作業系統、Safari、WebKit的安全性,能夠防止Meltdown與Spectre,而在macOS Sierra、OS X EI Capitan作業系統則提供了對應Meltdown的安全性更新與Spectre的Safari更新。
表格 2, Apple各平台的更新
2. Microsoft
Microsoft目前已經針對不同Windows發布了Meltdown與Spectre等Cache Attack的更新(表格 2),因為這樣的更新會對Cache存取記憶體的速度造成影響,Microsoft也推出了面向IT工程師的服務(Windows Analytics service,支援Windows 10、Windows 10 Mobile、Windows Server、Azure),用來評估更新對安全與效能的影響[6, 7]。
表格 3, Windows更新
3. Hyper-V[8]
Hyper-V Host也會因為Meltdown與Spectre攻擊而洩漏資料,對此Microsoft也提出了更新與解決方法,III的資訊仰賴於各家OEM,故在此不提及,在下文中將只提到I、II的資訊:
I. 在Hyper-V Host上佈署相關更新
II. 設定Registry來保護Hyper-V Host
III. 進行韌體更新
I. 在Hyper-V Host上佈署相關更新
因為Windows Server 2012、Windows Server 2008需要廣泛的架構變更,目前沒有提供關於Meltdown與Spectre攻擊的更新。
表格 4, Microsoft提供Hyper-V Host的相關更新
OS Version
|
Update KB (x64)
|
Windows Server, version 1709
(Server Core Installation)
|
4056892
|
Windows Server 2016
|
4056890
|
Windows Server 2012 R2
|
4056898
|
Windows Server 2012
|
目前沒有相關更新
|
Windows Server 2008 R2
|
4056897
|
Windows Server 2008
|
目前沒有相關更新
|
II. 設定Registry來保護Hyper-V Host
在Registry進行以下設定或將以下指令輸入CMD(或PowerShell),在重新開機以後就會生效,因為Microsoft還會更新相關文件,詳細說明請參考[8]:
To enable the fix
reg add
"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v
FeatureSettingsOverride /t REG_DWORD /d 0 /f
reg add
"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v
FeatureSettingsOverrideMask /t REG_DWORD /d 3 /f
reg add
"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization"
/v MinVmVersionForCpuBasedMitigations /t REG_SZ /d "1.0" /f
To disable this fix
reg add
"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v
FeatureSettingsOverride /t REG_DWORD /d 3 /f
reg add
"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v
FeatureSettingsOverrideMask /t REG_DWORD /d 3 /f
並用以下指令從PowerShell檢查是否啟用保護,或是從TechNet下載工具檢測:
PS> Install-Module SpeculationControl
PS> $SaveExecutionPolicy = Get-ExecutionPolicy
PS> Set-ExecutionPolicy RemoteSigned -Scope Currentuser
PS> Import-Module SpeculationControl
PS> Get-SpeculationControlSettings
PS> Set-ExecutionPolicy $SaveExecutionPolicy -Scope Currentuser
4. VMware[9]
VMware上的VM Guest會受到Meltdown與Spectre的影響而洩漏同一台Host上其他VM Guest上的資料,而VMware Hypervisor則會受到Spectre攻擊的影響,對於上述的問題VMware提出了以下的更新:
表格 5, Hypervisor的更新
產品
|
版本
|
更新文件
|
VMware vSphere ESXi
|
5.5
6.0
6.5
VMC
|
VMSA-2018-0002
|
VMware Workstation
|
12.x
14.x
|
VMware Fusion
|
8.x
10.x
|
VMware因為Intel與AMD提供了硬體方面的支援,進而提出VM Guest的更新,除了安裝VMSA-2018-0004之外,詳細操作步驟與指令請參考Hypervisor-Assisted Guest Mitigation for branch target injection (52085)[10]。
參考
[1]G. U. o. Technology. (2018). Meltdown and Spectre. Available: https://meltdownattack.com/
[2]M. Lipp et al., "Meltdown," ArXiv e-prints, January 2018.
[3]P. Kocher et al., "Spectre Attacks: Exploiting Speculative Execution," ArXiv e-prints, January 2018.
[4] (2018). Apple 安全性更新. Available: https://support.apple.com/zh-tw/HT201222
[5] (2018). About speculative execution vulnerabilities in ARM-based and Intel CPUs. Available: https://support.apple.com/en-us/HT208394
[6] T. Myerson. (2018). Windows Analytics now helps assess Meltdown and Spectre protections. Available: https://blogs.windows.com/business/2018/02/13/windows-analytics-now-helps-assess-meltdown-and-spectre-protections/#QehWisWZ5sbC6HZy.97
[7] J. D. Brian Lich. (2017). Configure Windows diagnostic data in your organization. Available: https://docs.microsoft.com/zh-tw/windows/configuration/configure-windows-diagnostic-data-in-your-organization
[8] (2018). Windows Server guidance to protect against speculative execution side-channel vulnerabilities. Available: https://support.microsoft.com/en-us/help/4072698/windows-server-guidance-to-protect-against-the-speculative-execution
[9] (2018). VMware Response to Speculative Execution security issues, CVE-2017-5753, CVE-2017-5715, CVE-2017-5754 (aka Spectre and Meltdown) (52245). Available: https://kb.vmware.com/s/article/52245
[10] (2018). Hypervisor-Assisted Guest Mitigation for branch target injection (52085). Available: https://kb.vmware.com/s/article/52085