趣話安全啟動:迷思與啟示
最近終於沉下心讀完了當年明月大作《明朝那些事》。說實話,當朋友推薦這本書時,我的內心是拒絕的,多麼低俗的筆名和書名!看過黃仁宇先生《萬曆十五年》等書和錢穆先生的大作的我,怎麼也要讀某些古籍書才更加合適吧?然而當我得知作者深厚的學術功底和上千萬的銷量時,還是以獵奇的心態開始了閱讀。誰知一旦開始就完全停不下來,如饑似渴的讀完全部七冊才感嘆歷史也可以寫得如此有趣。在這個快餐文化和娛樂文化盛行的年代,也許有趣和專業可以並行不悖,用詼諧的筆法寫出準確的知識才是普及知識的正確姿勢吧。
在前兩篇關於安全啟動和Bitlocker(Bitlocker、TPM和系統安全)的文章發布之後,不少讀者提出了一個十分有趣而富含思考的問題:既然安全啟動如此重要,那麼為什麼幾乎所有BIOS都包含關閉安全啟動的選項?如果能夠這麼做,安全啟動又有什麼意義?不得不說,這些讀者是善於思考,勇于思考和脫離了低級趣味的人。這個問題的答案既非常簡單,又非常複雜,我不得不從技術、歷史和市場策略以及現實考量等方面全方位講述,讀者還可以順便打包帶走一些實用技巧:
1. 安全啟動的優點和缺點。
2. 安全啟動推出的歷史背景與微軟的窘境。
3. 安全啟動是微軟為了幹掉Linux而搞的陰謀嗎?
4. Linux世界的證書問題。
5. 如何關閉安全啟動?
6. 結論和思考
7. 對先行者的致敬
當然如果你正在蹲坑,想要在一分鐘內了解答案的話,也可以直接跳到結論部分,別忘了點贊哦。
安全啟動的優缺點
在前文(UEFI安全啟動)我們詳細介紹了安全啟動固件中的所有知識點,也許比較晦澀(所以閱讀量較低,哭)。這裡我們來個一分鐘快速了解版。
安全啟動就是為了防止惡意軟體在操作系統啟動前得到執行,從而驗證所有啟動路徑上的節點的簽名的技術,如下圖:
圖片上半部分是原先的啟動流程,下半部分是開啟安全啟動的流程。可以理解為,在開啟安全啟動後,在信任的組件運行結束後(如燒錄在Flash上的UEFI固件PEI和DXE部分),固件接下來會要求所有運行應用和驅動都要有被認可的數字簽名,否則不予執行。這些應用和驅動包括:Shell、擴展驅動和OS Loader。最後OS Loader也就是操作系統引導程序,它的本質是一個UEFI應用程序,它由操作系統廠商提供並簽名。其後的操作系統的映像簽名則由OS Loader來驗證,由此構成一個信任鏈條,保證OS映像甚至內核驅動都是被簽名驗證過的。
安全啟動的最大好處自不待言,那就是安全。信任鏈條的建立,有效的防止了惡意驅動的入侵。由於UEFI的開放性,自己製作一個UEFI應用是個十分方便的事情。如果能夠在OS得到運行之前就插入啟動路徑,就可以監視OS,繞過了OS的重重防護,記錄鍵盤等的輸入也就是分分鐘的事情。這樣,微軟為了保護數據安全苦心經營的種種防護手段就有被釜底抽薪之虞,微軟的焦慮之情也就可想而知了。畢竟數據丟失了,用戶不會找到主板廠商討說法,微軟則是個方便的目標。
安全性和易用性、兼容性往往是矛盾的。安全啟動的缺點就緣於此。打開安全啟動後麻煩事情接踵而至:
1. 兼容性怎麼辦?老的操作系統,老的OS驅動程序怎麼辦?總不能說是「難言之隱,一洗了之」吧。
2. Linux世界怎麼辦?誰給他們簽名呢?就算有OS Loader有簽名,驅動程序的證書由誰頒發呢?
3. 多重啟動怎麼辦?
於是乎,在谷歌搜索安全啟動,排在前面的都是如何關掉安全啟動,英文網站也是如此。就連這個技術的推動者微軟,也在官網上介紹如何關掉這個功能(參考資料2)。這不得不說是對安全啟動的 一種諷刺。
那麼安全啟動是不是前途暗淡,是個失敗的技術呢?答案當然是否定的,所謂安全問題無小事,路途雖然艱險,但是前行的動力卻是巨大的。
安全啟動小史
微軟的Windows的安全性一直深受詬病。隨著操作系統層面的漏洞逐漸減少,黑客們盯上了BIOS固件。絕不能讓西風壓倒東風,微軟和英特爾的工程師臨危受命,日夜幹活,哇啦,UEFI安全啟動誕生了,從此世界和平,並永遠和平!脫離了黑客困擾的人們,在wonderland裡面幸福的生活了下去。
真希望現實世界如此簡單美好。安全啟動的生平卻是另一番景象,可以用命運多舛來形容。微軟在Windows 8推出的時候,順勢將開啟安全啟動列入了windows的logo驗證清單中,寄希望於強勢出擊,一舉蕩平安全隱患。
說到這個logo驗證,也許一般用戶不太清楚,但對於主板廠商卻是相當重要。通過了它,就可以在產品說明裡面寫上Design for Windows X,並可以在機器上傲嬌地貼上黑色的象徵榮譽出身的貼紙,格調立馬高了不少,好處那是大大的。
微軟希望強壓主板廠商開啟安全啟動,以正本清源。結果在IT界引來巨大騷動,主板廠商還未發聲,Linux世界卻沸騰了!問題在於微軟的windows只此一家,別無分號。OS loader簽名就一個,主板廠商BIOS直接將微軟CA加入固件中去就行了(通過PK)。但是Linux世界卻是分崩離析的,大兄弟們(各種大發行版,Ubuntu, Fedora等等)就有好幾個,小兄弟們更是數不勝數。加上還有不少home made私生子,就更複雜了。這些人誰也不服誰,叫他們公推個簽名管理機構,那是別想了。大家雖然平時吵吵嚷嚷,但卻公認最大而且最兇惡的 敵人只有一個,那就是微軟!這下可好了,微軟打上門來了,將來所有主板都不能刷Linux了,這是要我們的命啊!看來帝國主義忘我之心不死,於是大家平息爭端,矛頭一致對外,譴責強推安全啟動的行為!
一時間黑雲壓城(別打我,我改口重正盈朝還不行嗎),各種陰謀論此起彼伏。微軟無奈使出了最後的絕招:逃跑!它弄了個一百八十度大轉彎,修改了logo認證條款,不是要求必須開啟安全啟動,而是要求必須有「關閉安全啟動」選項才給認證。你沒有看錯,差點就說必須關閉安全啟動了(Windows RT除外,其還有必須有安全啟動且不能關閉)。這才平息了風波,直到Windows 10。
Windows 10誕生的時候,Linux的簽名問題已經得到緩解(後文介紹),於是,Logo條款變成「關閉安全啟動是optional的」,要看主板自己的 選擇。注意這裡optional我沒有翻譯,大家可以細細體會整句箇中滋味,不要被我個人思維所誤導。
這次Linux社區比較平靜,也許是簽名問題不再是個大問題的原因。什麼發生了變化呢?
Linux世界的簽名問題
這個問題說複雜很複雜,說簡單也很簡單。就如我前面說過的,是個信任問題。主板廠商有PK,是可以加入新的CA,但是你總不能讓他們加入幾十個亂七八糟的CA吧,這樣漏洞太多,還不如不加。要加加幾個是可以的,但加誰的呢?你加了Ubuntu的,red hat不樂意了,我混了這麼多年,怎麼成小弟了,每次要你給我簽名?弄個中立的機構,錢誰出?小兄弟這麼多,有窮的,有富的,誰都不想讓競爭對手搭便車。
微軟比較慷慨,說你們別吵了,看在我要推廣安全啟動的份上,我來給你們的證書籤名!錢也不要你們出,主板廠商只要我的CA就行了,當然也不能隨便簽名,還是要審查一下的。這下豈不兩全齊美?可惜Linux大多數兄弟可不這麼認為:這不是與虎謀皮嗎?除了個別屈服外,大家還在探索另外的途徑。
現在解決方案主要分為GRUB方案和Shim方案,為了不偏題,我們今後另開文介紹,敬請期待!(挖坑中。。。。)
不但有OS loader安全的問題,Linux中的驅動簽名也是個問題,有很多討論,可以參考後附的參考資料4和5。
如何關閉安全啟動
現在到了Bonus時間。我來介紹一下我最不願意介紹的關閉安全啟動部分。網上很多文章都有提及,為了避免有些讀者舟車勞頓,我這裡簡單介紹一下。
1. 如何進入BIOS?
也許你覺得這個問題很傻,其實你會很吃驚的發現,有許多老鳥也不知道。這也不能怪大家,進入BIOS的方式沒有定數,有些主板是F2,有些是F10,奇葩的選Esc等等。加上現在都是UEFI+固態硬碟,啟動飛快,誰看得到一閃而過的提示啊(有些主板根本不提示)!其實現在Windows8以上可以在操作系統裡面選擇進入BIOS設置界面。具體步驟是:
A. 在選擇reset時按住Shift
B. 你會重啟進入Advanced Options界面:
C. 選擇UEFI Firmware Settings,並確認重啟
D. 哇啦,BIOS設置界面開始了。
2. 如何關掉安全啟動。由於BIOS的設置不同的主板不同,沒有一定之規,但一般都在Boot選項卡裡面,如下:
關掉即可。
結論
現在我們回過頭來回答這個問題:既然安全啟動如此重要,那麼為什麼幾乎所有BIOS都包含關閉安全啟動的選項?如果能夠這麼做,安全啟動又有什麼意義?
在看了前面描述可以知道答案:非不為也,實不能也。關閉安全啟動可以規避兼容性問題和法律風險,是個不得不做的選擇。不等不承認,關閉安全啟動的選項存在,是有漏洞可以鑽的。在Windows 10大行其道的今天,關閉安全啟動變成可選項,也許假以時日,所有可以關閉安全啟動的選項都會消失。這個問題也會不再存在。
需要指出的是關閉安全啟動需要在BIOS中進行,而BIOS是有密碼保護的。安全啟動並不能解決機器脫離控制,譬如被盜後被清密碼的問題,畢竟把硬碟拿下了copy更加方便。它的目的是堵住固件和操作系統銜接階段的漏洞,至於固件本身的安全和操作系統啟動後的安全則由它們各自負責。
說句不負責任的話:安全責任靠大家。系統的整體安全,需要多種技術綜合作用:譬如Boot Guard、TXT、Secure Boot和Bitlocker等等。這需要硬體廠商、BIOS廠商、主板廠商和操作系統廠商一起通力合作,才能確保系統安全無虞。
題外話
本文和上文部分資料來自UEFI安全領域的先行者和專家:Vincent Zimmer。他的blog大家可以關注一下(參考資料6),裡面有不少安全領域的最新動向。另外有篇博文可以看到他的真容:
http://vzimmer.blogspot.com/2017/02/this-one-is-for-20-or-anniversarynext5.html
從一個帥小伙,變成比較蒼老。有道是:一入BIOS深似海,從此蕭郎是路人!
參考資料:
1. https://technet.microsoft.com/en-us/library/hh824987.aspx
2. https://technet.microsoft.com/en-us/library/dn481258.aspx
3. https://davescomputertips.com/the-truth-about-windows-10-uefi-and-secure-boot/
4. https://askubuntu.com/questions/843656/is-it-safe-to-disable-secure-boot
5. https://askubuntu.com/questions/755238/why-disabling-secure-boot-is-enforced-policy-when-installing-3rd-party-modules
6. http://vzimmer.blogspot.com/2017/
歡迎大家關注本專欄和用微信掃描下方二維碼加入微信公眾號"UEFIBlog",在那裡有最新的文章。同時歡迎大家給本專欄和公眾號投稿!
推薦閱讀:
※學python非常困難怎麼辦?
※<模型匯總-6>堆疊自動編碼器Stacked_AutoEncoder-SAE
※[PS-1] Python入門練習之提醒事項
※RSA系列——實踐測試
※開篇 自製8位計算機介紹