即使作業系統擁有再強壯的核心和再安全的使用者應用,如果一開始沒有把好關,那造成的損失要比一個不安全的核心更大,試想,國家安全局肯定是再安全不過了,但是如果一個反動組織控制了國家安全局,那麼國安局将變成一個十分危險的地方,它将會給人民帶來災難。
在作業系統的意義上就是要提供一條所謂安全的路徑,該路徑的一端是使用者,另一端是絕對可信的可信計算基(TCB),而安全原則促使這個可信路徑實作成為一個可以保證不會有任何實體監控和篡改資訊的機制。任何需要安全的機構都需要這麼做,作業系統當然需要安全,之是以提供一條安全路徑是因為核心不能保證每個使用者都是好人或者即使都是好人也不能保證使用者對安全很在意,這樣其實可以卸下使用者的很多負擔。作業系統原理上說隻有核心在系統中是可信軟體,對于在intel的保護模式上運作的系統來說就是在0環運作的程式是可信,其實就是核心,而所有的使用者空間的程式都是不能保證安全的,也就是不可信的,如此一來,即使經銷商宣稱再安全的使用者應用,作業系統也不會認為就是安全的,作業系統為了提供給使用者一個單點進入的鑰匙,就利用了可信路徑,注意單點進入很重要,這樣對于驗證更加有效,大廈是安全的,安保十分不錯,但是必須在嘉賓進入大廈的時候進行單點監測,但是必須保證執行監測的人員是可信的,這好像進入了一個無限死循環,但是事實上沒有多少次重要會議會死循環在那或者大廈爆炸,這就是可信路徑的約定。作業系統既然不能保證使用者程式安全,那就要對使用者程式進行檢測,但是又不能每個都檢測,于是在将權力轉交給一個計算機使用者的時候,必須保證轉交過程絕對安全,接下來轉交完畢以後使用者的安全政策就可以發揮效用了,轉交過程就是在可信路徑中進行的,轉交在可信路徑下執行可以給作業系統一個安全的單點驗證環境,保證執行單點驗證的執法程式是可信的而不是冒充的,這是進入一個系統最基本的。
各大作業系統都實作了可信路徑,比如windows的可信路徑實作為ctrl/alt/del三鍵組合,運作于可信的0環的驅動随後開啟一個專用的登入桌面,而隻有winlogon程式可以通路這個登入桌面,進而保證沒有别的惡意程式可以監控登入過程。windows啟動後有三個桌面,一個是我們使用的這個,一個是專用于登入的,一個是屏保的,windows靠桌面的隔離實作了可信路徑,其實是shell的隔離;linux的實作更加簡單易于了解,linux是基于統一的資源保護實作安全的,是以它沒有必要存在一些太過“政策”性的複雜的東西,感覺可能會遇到安全問題的地方直接将通路控制映射到經典的unix通路控制上就可以(想象一下,linux中就沒有全局鈎子),unix/linux的安全主要作用于被保護的對象而windows的安全主要作用于發起通路的對象,這個差別導緻了linux的可信路徑實作比windows簡單不少,由于linux啟動的時候就是root根使用者,是以它所啟動的getty程式是絕對可信的,再者,此時剛剛從核心過來,剛開始/sbin/init程序,隻要init程序可信那麼迄今為止一切就是可信的,而/sbin/init是否被替換掉就是另外一個問題了,既然init啟動的getty是可信的,那麼當你輸入使用者名後它啟動的login以及以後的登入過程也是可信的,但是僅僅保證這些程式本身是可信的還不夠,因為你不能保證沒有惡意的程式在探測我們的密碼輸入動作,比如在getty啟動之前可能啟動了一個木馬,這雖然不是安全本身的内容但是這裡有問題,是以還得防着一些,再者,getty本身如果被替換,那就真的不好辦了。要想做到登入時沒有别的惡意程序監聽,此時可信路徑派上了用場,當你的alt/sysrq/k組合鍵被按下時,可信路徑就被打通了,它的打通靠的是殺死一切此終端的别的程序來實作的,雖然linux的做法有點粗暴,但是十分安全,如果本終端有惡意程序,那麼這個組合鍵一下去,一切就都被殺死了,可是linux的可信路徑看起來沒有windows安全,因為你再殺程序也會有漏網之魚,比如守護程序就沒有在任何終端,而且運作在同一個使用者但是不同終端下的惡意程序仍然可以檢測登入,于是linux必須加大可信路徑中殺死程序的限制強度,比如隻要有程序打開了目前終端,那麼也一并殺死,如此一來就安全了,因為linux中,一切都是檔案,于是一個程序是否打開了目前終端隻需要檢測一下程序的打開檔案就可以了,一切都統一的進行,并且隻要要監控終端,必然要先打開這個終端,linux又沒有windows中的全局鈎子之類的東西(linux不是消息驅動的),是以就相應的少了很多事。
本文轉自 dog250 51CTO部落格,原文連結:http://blog.51cto.com/dog250/1274149