ME是什麼?為啥要有ME?
最近ME(Management Engine)鬧出了不少波瀾。各種陰謀論甚囂塵上,什麼「你的電腦裡面還有個小電腦!」、「ME控制CPU,是ring -3!」等等,各種標題黨。很多不了解情況的人對ME是什麼很感興趣。作為BIOS工程師,經常和ME打交道,事實上ME的固件就是放在BIOS固件之中的,BIOS和ME也要進行一些協同工作,所以我想我對ME的理解還是十分權威的。我認為ME被嚴重妖魔化了,充滿了各種臆測和誤解。事實的情況是問題遠遠沒有爆出的那麼嚴重,ME也沒有那麼神奇,幹不了很多神奇的事情。
為什麼要有ME?
這個世界並不是充滿了計算機專家,事實上大多數人連簡單的安裝操作系統都完成不了,術業有專攻,這很正常。電腦愛好者們可以應付一般的電腦問題,但是處理複雜的證書問題和有上千種原因的死機問題往往無能為力。如果能夠遠程由IT專業人士協助解決問題就好了!遠程管理成為了解決問題的良方。
遠程管理分為帶外和帶內管理兩種:
- 帶外管理(Out-of-band management,OOB):使用獨立管理通道進行設備維護。無論被管理設備是否處於開機狀態,只要已經通電並聯網,就可以遠程監控和管理設備,包括遠程關機、遠程開機、遠程重啟、遠程更改BIOS設置、遠程安裝操作系統等。
- 帶內管理(In-Band Network Access,IBN):是指使用常規數據通道來管理設備。這種管理要求被管理設備不僅要通電、聯網,而且必須已經開機、運行了客戶端程序等。
我們經常使用的Windows遠程桌面、VNC、SNMP和Telnet等等都屬於帶內管理。而各種KVM(注意這個不是虛擬機世界的KVM),BMC和AMT就屬於帶外管理。
帶內管理的優點是便宜,不要增加什麼硬體,安裝個軟體就可以了。缺點也很明顯,OS死掉了就無解了,所以大部分安裝、死機問題並不能靠帶內管理解決。
KVM是一種帶外管理解決方式。這裡舉個KVM設備的例子(見參考資料1)
從圖上可以看到它有VGA和USB的輸入,同時還有VGA和USB輸出,並可以連接網路。它的工作原理大致是把目標計算機的部分輸入和顯示輸出重定向到管理機器上或者網路中,管理員可以登錄這個KVM設備,就可以看到目標機器的顯示結果和用虛擬USB設備輸入內容。真是十分方便,我們BIOS工程師在調試目標伺服器機器時,經常藉助KVM,避免做到大型伺服器旁邊(十分吵,像飛機場)。KVM可以解決部分問題,例如安裝操作系統等等,但是更新BIOS等就無能為力了。
伺服器領域很早就引入BMC(Baseboard ManagementController),它藉助IPMI(Intelligent Platform Management Interface)來進行帶外管理。這裡不打算展開講,爭取今後在專欄裡面另寫文章專門介紹。我只是簡單說一下它的原理。它是一個單獨在伺服器主板上的晶元:
它有自己的處理器(一般是ARM),有自己的固件,並且如同KVM一樣,Hook了部分USB、顯示和部分IDE/SATA等等。在上電後它會獨自運行,通過各種匯流排控制風扇,監控溫度、和BIOS固件等通訊,共同管理主板。現在每個伺服器主板預設都帶著BMC,它為伺服器管理、部署和監控帶來了極大方便。
終於該我們的正主出場了。大家都知道,大型公司都有IT部門,專門負責維護電腦,幫助安裝操作系統、處理各種千奇百怪的死機和不工作的問題。據統計有80%以上的問題都十分愚蠢,譬如沒有插電源、不知道CD ROM是啥等等(有人問客服是不是那個放咖啡的槽子,大家可以看看The Old New Thing, 微軟的Blog上面有不少吐槽)。這也很好理解,畢竟還有很多不是IT產業的大公司,IT公司裡面也不是各個都是高手。大型公司每年都耗費巨資用於IT服務,譬如重裝電腦、安裝Patch等等。而中小型公司更加頭疼,他們臨著類似於大型企業所面臨的複雜 IT 挑戰,但是中小型企業往往沒有較大的預算或 IT 專家員工。怎麼辦呢?
作為PC界的老大,有感於PC領域的現實需求,於是Intel在PC中引入了類似BMC的概念:有一個專門的處理器,帶外進行計算機管理。開始是引入AMT技術(Intel Active Management Technology,英特爾主動管理技術,參考資料2),後來又整合其它技術,推出vPro(博銳,參考資料3)。
看到帶有vPro的徽標,就表示可以使用vPro的AMT遠程管理技術。它的框架圖如下:
後來ME加入了更多安全、校驗、防盜和電平信號管理等等新功能。
ME在哪裡?
與網上大多數瞎說的不同,ME並不在CPU內核中。它最早在北橋里:
北橋消失後,它被放到了南橋PCH中:
為什麼有的人會認為它在CPU中呢?
- 部分SOC的酷睿產品,南橋被放入CPU Package中。因此ME也隨著被放入CPU的Package中,這並不意味著ME是CPU內核的一部分,這種做法和單獨的PCH並沒有本質區別,PCH和CPU還是兩個Die。這種設計簡化了主板,節約了成本,但是誤導了部分IT愛好者。CPU Package設計是一個很有趣的方向,改天寫一篇文章介紹一下,這裡按下不表。
- 部分ATOM產品中,ME的部分功能被真正植入CPU Die中。但它也並不在CPU core和uncore中,而是在類似南橋的south cluster中。這個ME閹割版也並不含現在被廣泛討論的AMT功能。
ME幹了哪些事
ME有自己的處理器,它是一款32位的ARC MCU。也有部分片上RAM,但是主要RAM是BIOS在啟動時在住內存上挖下來專門給它的。這種方式叫做UMA:
BIOS不僅僅為ME分配內存,也為內置GPU用同樣的方法分配內存。
和BMC一樣,它脫離於CPU獨自運行,有自己的操作系統(具體不詳,BMC一般是Linux)。由於電源部分被它管理,在主板有電,但CPU尚未上電的時候,它可以開啟電腦。在開機後它和BIOS協同工作,並在OS啟動後和ME的操作系統驅動程序一起工作,完成AMT、KVM、電源管理、電平管理等等功能。
AMT典型應用是,當大家晚上關閉電腦回家後,IT人員在晚上Push最新的Windows patch到電腦上,利用晚上的時間安裝完畢,大家第二天早上來時就可以直接工作省時省力,完全不耽誤工作。或者需要重裝電腦,告訴IT你的工位,IT就可以遠程幫你重裝操作系統,不用抱著沉重的電腦跑來跑去,豈不美哉?
ME後來又加入了更多的功能,包括安全管理(fTPM等)、電平管理、電源管理等等高級功能。
ME是不是唯一的法外之地?
大家都默認主板上有BIOS固件這個事情,如果我說一般的電腦裡面單獨的固件可以有近十個到幾十個,是不是很多人都要驚掉了下巴?好吧,我就舉幾個例子:
- 網卡。網卡有單獨的固件,有自己的控制器,控制器有些還是ARM。Intel南橋的網卡固件甚至和ME的固件一起被包含在BIOS固件中。
- 顯卡。這個應該是常識了。實際上幾乎所有PCIe設備都有自己的固件和處理器,處理器有的是ARM,有的是MCU,還有用FPGA做的。
- 硬碟。高級硬碟甚至用了Intel的Atom處理器。
- 感測器。很多感測器有固件,並有MCU控制。
- Sensor Hub。SH最早普遍應用在手機上,慢慢地也被平板電腦、筆記本電腦甚至PC上採用。它的固件設計還較感測器複雜一點。
還有很多,包括PMIC、PMC等等都含有固件。事實上,讓各個部分自我管理是計算機設計的發展趨勢,CPU把任務off load出去,讓設備自己完成好再通知自己,有利於CPU集中注意力干大事,同時節省用電。
一些謠言
- ME是Intel不可告人的後門。實際上AMT曾經被Intel廣泛宣傳過,並被作為一個很有價值的技術被推廣到很多計算機廠家,並受到廣泛歡迎,尤其是中小企業。Intel官網上有很多介紹。AMD在晶元中也有單獨的固件。
- ME可以干任何事情。實際上它有很多限制,並不能隨便訪問主存。BIOS為它單獨分配了內存,這些內存被保留,OS並不知情。ME通過一般辦法並不能訪問被分配空間之外的其他內存(當然也有例外)。我們可以認為它的內存訪問和內置GPU內存訪問沒有本質區別,GPU也有自己的運行單元,為什麼沒有被詰難?它的USB、IDE/SATA重定向、網口控制也並不是對所有都有效。事實上,和它對應的BMC在伺服器領域已經應用更長時間,而伺服器對安全更加在乎,為什麼沒有這麼大反對聲呢?
- ME可以控制CPU,是ring -3。實際並不行,兩者是互相獨立工作的。這個說法是純粹的吸引眼球的標題黨乾的,ring的概念只在X86上有,ARC並不會存在。
- ME控制網口為了留後門。ME中的AMT既然作為帶外管理,必須聯網,這是理所應當的。
- ME很容易被篡改。ME受數字簽名保護,實際上它是fTPM等等安全手段的提供者。
- ME可以訪問硬碟數據。部分有問題,ME固件並不能在操作系統環境下獨自訪問硬碟,否則會有衝突。可以訪問硬碟的是ME的操作系統驅動。事實上硬體驅動大部分都是ring 0的,可以訪問任何東西。ME的驅動也不例外,如果不信任驅動,那也不要安裝主板驅動了。
- Intel強制安裝ME。ME有好幾個版本,主板包含哪種ME,這是OEM的選擇。
- ME不能關閉。實際上很多主板BIOS中都有ME關閉的功能:
關閉後ME會進入一個低功耗狀態。
結論
我們可以把ME想像成Intel在PC上推出的免費BMC。它方便了中小企業做帶外計算機管理。它有自己的處理器和操作系統(固件)。任何操作系統都有Bug,ME的操作系統應該是個RTOS,必然也有Bug和漏洞,這個沒有什麼奇怪之處。對ME最不爽的人是操作系統提供商,他們希望一切都在掌握之中。人們總是恐懼不了解的東西,也許ME開源會讓大家放心,但有時候貿然的開源會讓部分黑客有機可乘。到底開源有利於安全還是不利於安全,這個問題有很多討論,也不在本文的範圍內。如果大家感興趣,改天寫一篇個人如何開啟和使用AMT的文章,其實KVM功能對個人用戶還是十分有用的。
歡迎大家關注本專欄和用微信掃描下方二維碼加入微信公眾號"UEFIBlog",在那裡有最新的文章。同時歡迎大家給本專欄和公眾號投稿!
參考資料:
[1]: Spider Network KVM over IP Switch
[2]: https://zh.wikipedia.org/wiki/Intel%E4%B8%BB%E5%8A%A8%E7%AE%A1%E7%90%86%E6%8A%80%E6%9C%AF
[3]: https://zh.wikipedia.org/wiki/%E5%8D%9A%E9%94%90
推薦閱讀:
※稀疏矩陣(sparse matrix)的基本數據結構實現
※深度學習加速策略BN、WN和LN的聯繫與區別,各自的優缺點和適用的場景?
※[5] Python注釋
※這段MIPS程序的CPI如何計算?
※帶你了解機器學習(一): 機器學習中的「哲學」