[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 安全技術 > 系統 > 正文
SUN OS 安全淺談
本文出自: 作者: (2001-10-02 12:00:00)



美國SUN MICROSYSTEM公司的SUN OS操作系統是建立在貝爾實驗室的UNIX SYSTEM V
和加州大學伯克得分校的UNIX 4.3基礎上的UNIX操作系統.SUN OS 4.0 版提供了專
門的鑒別系統,該系統極大地提高了網絡環境的安全性.它也可用來 確保其它UNIX系
統或非UNIX系統的安全.它使用DES密碼機構和公共關鍵字密碼 機構來鑒別在網絡中
的用戶和機器.DES表示數據編碼標準,而公共數據編碼機構 是包含兩種密鑰的密碼
系統:一種是公用的,另一種是專用的.公用的密鑰是公開 的而專用密鑰是不公開的.
專用(秘密)的密鑰用來對數據進行編碼和解碼. 

SUN OS系統不同其它公共關鍵字編碼之系統在:SUN OS的公用和專用密 鑰都被用
來生成一個通用密鑰,該密鑰又用來產生DES密鑰.

(1)確保NFS的安全 
在網絡文件系統NFS上建立安全系統,首先文件系統必須開放並保証裝配 的安全. 
. 編輯/etc/exports文件,並將-Secure任選項加在要使用DES編碼機構的文 件系統上.
在屏幕上顯示服務器怎樣開放安全的/home目錄,如: home -Secure,access=engineering 
其中engineering是網絡中唯一能存取/home文件系統的用戶組.
. 對每台客戶機(CLIENT),編輯/etc/fastab文件時,Secure將作為一個裝 配任選項
出現在每個需要確保安全的文件系統中.
. SUN OS中包括有/etc/publickey數據庫,該庫對每個用戶均包含有三個域: 用戶的網
絡名,公用密鑰和編碼的密鑰.當正常安裝時X唯一的用戶是 nobody,這個用戶可以無
需管理員的幹預即可建立自己的專用密鑰(使用 chkey(1)).為了進一步確保安全,管理
員可為每個使用newkey(8)的用戶 建立一個公用密鑰.
. 確認keyserv(8c)進程由/etc/rc.local啟動,並且仍在運行.該進程執行 對公用密碼
的編碼,並將編碼的專用密鑰存入/etc/keystore中.
. 此時,所有的用戶(除超級用戶)都必須使用yppasswd來代替passwd,以使 得登錄的口
令與用戶的密鑰一致.其結果是在網絡中每台客戶機的 /etc/passwd文件中不能有每個
用戶的用戶名,因而應使用有缺省值的 /etc/passwd文件.


. 當安裝,移動或升級某台機器時,要將/etc/keystore和/etc/.rootkey兩 個文件保留
注意:當你使用login,rlogin或telnet命令到遠程機器時,你會被要求輸 入口令.一旦你
輸入正確的口令,你也就泄漏了你的帳號.因為此時你的密鑰是 存放在/etc/keystore中.
當然這是指用戶對遠程機器的安全不信任時.如果用 戶覺得遠程機器在安全保密方面不
可靠,那就不要登錄到遠程機器去,而可使 用NFS來裝配你所查找的文件. .


(2)NFS安全性方面的缺陷
SUN的遠程過程調用(RPC)機制已被証明可以用來建立有效的網絡服務,最 有名的服務是NFS,
它實現了不同機器,不同操作系統之間透明的文件共享.但 NFS並非毫無缺陷.通常NFS鑒別
一個寫文件的請求時是鑒別發出這個請求的機 器,而不是用戶.因而,在基NFS的文件系統
中,運行su命令而成為某個文件的 擁有者並不是一件困難的事情.同樣,rlogin命令使用的
是與NFS同樣的鑒別機 制,也存在與NFS一樣的在安全性方面的弱點. 

對網絡安全問題一個通常的辦法是針對每一個具體的應用來進行解決.而 更好的辦法是在
RPC層設置鑒別機構,使對所有的基RPC的應用都使用標準的 鑒別機構(比如NFS和Yellow pages).
是在SUN OS系統中就可以對用戶的機 器都進行鑒別.這樣做的優點是使計算機網絡系統
更像過去的分時系統.在每 台機器上的用戶都可登錄到任何一台機器;就象分時系統中任何
一個終端上的 用戶都可登錄到主機系統一樣,用戶的登錄口令就是網絡的安全保証.用戶不
 需要有任何有關鑒別系統的基礎.SUN系統的目標是讓網絡系統成為既安全又 方便的分時
 系統.

要注意以下幾點: 

任何人只要他擁有root存取權並具備較好的網絡程序設計知識,他就可 以向網絡中加入二
進制數據或從網絡中獲得數據. 
在採用以太網結構的局域網的工作中不可能發生信息包被竄改(即被傳 送的信息包在到達
目的站之前,被捕獲並將其修改按原路徑發出),因 為所有的信息包都將幾乎同時到達目
的站之前,被捕獲並將其修改按 原路徑發出),但在網關上發生包被竄改則是有可能的.因
而應確保網絡 中所有網關都是可靠的. 
對網絡系統最危險的攻擊是同向網絡中加入數據有關的事件,例如通過 生成一個合法的信
息包來冒充某個用戶;或記錄下用戶會話的內容,並 在晚一些時候再回答它們.這些都會嚴
重的影響數據的完整性. 
至偷看信息這類侵襲(僅僅是偷看網絡中傳送的內容而不冒充任何人) 將可能造成失密,
但並不十分危險,因為數據的完整性沒有被破壞,而且 用戶可通過對需要保密的數據進行編
碼來保護數據的專用. 
總之,在任何意義上要完全明白網絡傳送的各種問題並不是很容易的,需 不斷實踐分析.

(3)遠程過程調用(RPC)鑒別
RPC是網絡安全的核心,要明白這一點就必須清楚在RPC中鑒別機制是怎樣 工作的.RPC的鑒
別機制是端口開放式的,即各種鑒別系統都可插入其中並與之 共存.當前SUN OS有兩個鑒別
系統:UNIX和DES,前者是老的,功能也弱.者是 在本節要介紹的新系統.對RPC鑒別機制有
兩個詞是很重要的:証書和核對器 (credentials和verify).這好比身份証一樣,証書是識別
一個人的姓名,地址, 出生日期等;而核對器就是身份証的照片,通過這張照片就能對持有者
進行核 對.在RPC機制中也是這樣:客戶進程在RPC請求時要發出証書和核對器信息.而 服務
器收到只返回核對器信息,因為客戶是已知道服務的証書的.

(4)UNIX鑒別機制
SUN早期的各種網絡服務都建立在UNIX鑒別機制之上,証書部分包含站名, 用戶號,組號和同
組存取序列,而核對器是空白.這個系統存在兩個問題:首先, 最突出的問題是核對器是空的,
這就使得偽造一份証書是非常容易的.如果網 絡中所有的系統管理員都是可以信賴的,那不
會有什問題.但是在許多網絡 (特別是在大學)中,這樣是不安全的.而NFS對通過查尋發出
mount請求的工作 站的INTERNET地址作為hostname域的核對器來彌補UNIX鑒別系統的不足,
並且 使它只按受來自特權INTERNET口的請求.但這樣來確保系統安全仍然是不夠的, 因為
NFS仍然無法識別用戶號ID.

另一個問題是UNIX鑒別系統只適用UNIX系統,但需要在一個網絡中所有 的站都使用UNIX系
統是不現實的.因為NFS可運行MS-DOS和VMS系統的機器上, 但在這些操作系統中UNIX鑒別系
統是不能運行的,例如:MS-DOS系統甚至就沒 有用戶號的概念.

由此可知,應該有這樣的鑒別系統:它具有獨立操作系統証書並使用核 對器.這就如像DES鑒
別系統.

(5)DES鑒別系統 
DES鑒別系統的安全性建立在發送者對當前時間的編碼能力上,它使接收 者能解碼並對照自己
的時鐘來進行檢驗.時鐘標記也使用DES編碼.這樣的機制 要工作有兩件事是必須的:
. 發送者和接收者雙方必須對什是當前時間進行約定.
. 發送者和接收者必須使用同樣的編碼關鍵字. 

如果網絡有時間同步機制,那客戶機服務器之間的時間同步將自己執行. 如果沒有這樣的機
制,時間標記將按服務器的時間來計算.為計算時間,客戶機 在開始RPC調用之前必須向服務器
詢問時間,然計算自己和服務器之間的時 間差,當計算時間標記時,這個差值將校正客戶方面
的時鐘.一旦客戶機和服務 器時鐘不同步,服務器就開始拒絕客戶機的請求,並且DES鑒別系統將
使它們的 時間同步.

客戶和服務器是怎樣來獲得相同的編碼關鍵字的呢?當客戶希望與服務器 交談時,它生成一個隨
機關鍵字來對時間標記進行編碼;這個關鍵字稱為會話 關鍵字CK,客戶對CK按公用關鍵字模式進
行編碼,並在第一次會話時發送給服 務器.這個CK是唯一使用公用關鍵字編碼的關鍵字.這時只
有這一客戶與服務 器兩者才知道它們的DES關鍵字,這個關鍵字稱為共有關鍵字.

第一次請求時,客戶的証書包括三項:名字,用共有關鍵字編碼的會話關鍵 字和用會話關鍵字編
碼的時窗,時窗告訴服務器:以即將給你發送許多証書; 也許會有人用偽造的時間標記冒充新
的會話向你發送証書.當你收到時間標志 時,請查看你的當前時間是否在時間標記和時間標記加
時窗之間,如果不對請 拒絕.

為創建安全的NFS文件,時窗缺省值為30分鐘.在發出首次請求時,客戶的 核對器中包含被編碼的
時間標記和特定時窗(WIN+1)的編碼核對器.這樣做的 原因是:如果某人想寫一個程序並且在証書
和核對器的編碼域中填充一些任意 的二進制值,服務器將CK解碼成DES關鍵字,並且用它來對時窗
和時間標記解碼, 最產生隨機值.在經過上千次的努力,這些隨機的時窗/時間標記對才有可 
能通過鑒別系統,因此時窗核對器將使要猜測出正確的証書變得更困難,以提 高安全性. 

在對客戶進行鑒別,服務器將在証書表中存放四項值:客戶名A,會話關 鍵字CK,時窗,時間標記.
在服務器中保留前三項的目的是以備將來使用.保留 時間標記的目的是為防止再次執行,服務器
只接收比以前的時間標記晚的時間 標記.服務器將向客戶返回的核對器包括一個序號ID和負的時
間標記(該標記 是被CK編碼的).客戶機知道,只有服務器能返送回這樣的核對器,因為只有 服務
器知道時間標記. 

第一次會話過程是很復雜的,以就容易多了,客戶每次向服務器發送它 的ID和編碼的時間標記,
而服務器則返送回編碼的時間標記.

(6)公共關鍵字的編碼
SUN OS使用Diffie-Hellman法進行公共關鍵字的編碼,該算法隨機產生一 個秘密關鍵字(SK),簡稱
密鑰.可用一個公式來計算出公共關鍵字(PK),公共關 鍵字存放在公共目錄中,而密鑰存放在專用的
目錄中.由PK和SK生成普通關鍵 字K,由計算K必須知道兩個密鑰中的一個,所以除了服務器和客戶
外沒有任 何人能計算K.計算將與另一個已知常數M求模.盡管某人的密鑰可能會被人採 用對公共關
鍵字求對數的方法來得到,但是由M的值很大,要計算出M來幾乎 是不可能的.為了確保安全,K必須
有較多位的二進制數來作DES密鑰,最多可從 K中取56位來形成DES密鑰.

PK和SK都是以在文件publickey,byname中的網絡名的順序存放,SK用登錄 號時的口令編碼存放.
當你登錄到一個站時,Login程序先取你的編碼關鍵字 再用你的口令對其進行編碼;並將解碼的
密鑰送給確保安全的本地密鑰服 務器,以備以進行RPC處理時使用.(注意:一般的應用是不需要
知道公共關鍵 字和密鑰的).除改變登錄口令外,yppasswd程序還將隨機地產生新的公共關鍵 字
和密鑰關鍵字對.

密鑰服務器是一個駐留本機的RPC服務器,它執行以下三種公共關鍵字 操作:
. setsecreykey(secretkey):告訴密鑰服務器將密鑰SK存貯起來,以備將來使用(通常是被login
程序採用). 
. encrytsessionkey(severname,des_key):使在第一次RPC處理中將會話 關鍵字傳送給服務器,
密鑰服務器查找severname中的公共關鍵字, 並將它和setsecretkey設置的client的密鑰組合,
以生成用 對des_key編碼的密鑰.
. decrytsessionkey(clientname,des_key):服務器又請求密鑰服務器通 過調用本操作來對會
話密鑰解碼. 


注意:隱含在這些調用中的使用者名必須鑒別,密鑰服務器中可能使用DES 鑒別系統的(因為會產
生死饋).密鑰服務器通過按uid存貯的密鑰來解決這個 問題,它只允許對本機的root所屬進程的
請求.然client進程又執行setuid 進程,該進程屬root,執行對client的請求,並將真正的
client的uid告訴密 鑰服務器. 以上三種操作都是系統調用,內核將與密鑰服務器直接通信,而
不是通過 執行setuid程序來通信. 

(7)網絡實體的命名 
對網絡實體的命名原有的UNIX鑒別系統存在一些問題,對UNIX鑒別系統最 基本的網絡實體uid,已
經陳述了這個系統的一個問題(太UNIX系統化了),而且 這個系統還有兩個問題:一個是當許多域聯
系起來時的uid沖突;另一個是超級 用戶不是以每個域為基礎賦值,而是以每台機器為基礎賦值.在
缺省情況下,NFS 以一種嚴密的方式解決這一問題:它不允許根通過網絡以uid0存取.

DES鑒別系統通過建立在新名字(網絡名)基礎上的命名機制糾正這些問題. 簡單地說,網絡名是一
串可打印字符,從根本上說,我們所要鑒別的正是這些網 絡名.公共關鍵字和密鑰按網絡名存貯而
不是按用戶名存貯.yellow page map netid.byname 將網絡名映射為本機器中的用戶名uid和同組
存取序列,而非 SUN環境會將網絡名映射為其它序列.

我們採用全局唯一的網絡名來解決網絡命名問題,這比選擇全局唯一的用 戶號要容易的多.在SUN環
境中,對每個YP域,用戶名是唯一的.如將操作系統名 在YP域中的用戶號和ARPA域名組合在一起就構
成了網絡名.在為一個域命名時 將ARPA域名加在本地域名之是一個好習慣.

象對用戶賦以網絡名一樣,對機器也賦以網絡名,這樣就可解決多個超級 用戶的問題.機器的網絡名
其形式與用戶的網絡名的形式相似,正確的機器鑒 別系統對網絡中的無盤工作站是非常重要的,它必
須保証無盤工作站能通過網 絡存取本機的home目錄.

非SUN環境中,網絡名的產生也許與前述有較大區別,但這並不妨礙它們通 過SUN的網絡安全系統合法
地存取信息,為鑒別一個來自另一個域的用戶,只需 在兩個YP數據庫是建立實體.一個實體是有關密
鑰和公開密鑰的,另一個是有 關uid和同組存取序列的.完成這項工作,在遠程域中的用戶就可利
用本域的 網絡服務. 

(8)DES鑒別系統的應用
第一個應用是廣義的YP更新服務,這個服務允許用戶更新YP數據庫中的專 用域.
另一個應用也是最重要的應用是:更安全的網絡文件系統NFS.使用UNIX鑒 別系統的NFS存在三個問題:

. 証書的檢驗僅僅在裝配時進行,這時client從服務器獲得一條信息,這 條信息是以請求的關鍵:
文件handle.如果有人不通過服務器就能通 過猜想或偷聽網絡傳輸內容而獲得文件handle,那他也
就能破壞UNIX 鑒別系統.因為在NFS文件裝配完畢,當發生文件請求時,不再進行証 書的檢驗.
. 假如一個文件系統已從一個為多個client服務的服務器中裝配到一台 client中;當一個具有超級
用戶特權的用戶使用su命令非法存取別人的 文件時,文件系統不能提供任何保護.NFS的第三個問
題是:由它不能 鑒別遠程client的超級用戶,它不得不採用一種嚴歷的方法:拒絕所有 的超組用
戶存取. 

新的鑒別系統解決了所有這些問題.某人相獲得非法存取權,他不得不猜 出正確的被編碼的時間
標記並放在証書中,而這幾乎是不可能的,這樣他就 不能猜出文件handle.由新的系統可鑒別機器,
上述第二,三問題也解決了. 但是在這點上,根文件系統不能使用安全的文件,而非文件系統的根用戶
由IP 地址識別. 

實際上,與每個文件系統相聯系的安全級別可由系統管理員改變.文件 /etc/exports包含有文件和可
裝配它們的機器名,在缺省的情況下文件系統向 UNIX鑒別系統開放.但管理員在任意行加上一
secure就可改變為向DES鑒別 系統開放.與DES鑒別系統相應的是一個參數:服務器能接收的最大窗
口的大小. 

(9)遺留的安全問題 
盡管使用su不能破壞DES鑒別系統,但仍有幾種方法可做到這點.為了通過 鑒別,你的密鑰必須存放
在工作站中,這通常在登錄時發生,login程序用你的 口令對你的密鑰解碼,並存放起來以備使用,由
別人不能對你的密鑰解碼,因 而任何人用su命令冒充你都不可能.編輯/etc/passwd文件也不可能
對他有什 幫助,因為他必須修改存放在YP中的被編碼的密鑰.如果你用你的口令登 錄到別人的
工作站中,你的密鑰就會存放在該工作站中,他們就能用su命令冒 充你,由你不可能將你的口令泄
露給你不信任的機器,因而這是不可能發生 的.但在其它機器上的人可以修改login程序將所有口令
存放在他能看到的文 件中. 

由使用su命令不能破壞DES鑒別系統,也許最容易的方式就是猜出口令, 因此選擇安全的口令對用
戶是至關重要的. 另一個最方便的方法就是試圖重新執行.因此服務器的放置應在安全的地 方.

還有其他打破DES的方法,但都非常困難,需要花費巨型計算機幾個月的時 間來計算. 還存在有另一
個DES不曾考慮的安全問題,就是網絡偷聽,即使有了DES,也 不能阻止任何人偷聽網絡傳輸的內容.大
多數情況下這不是一個大的問題,因 為網絡中傳送的大多數內容雖不是不可讀的,但要搞清網絡中傳
送的二進制的 含義卻不是一件輕鬆的工作.對登錄來說,由你希望別人不能通過網絡獲得 你的口令,
故你傳送的是編碼的口令,正如前面所提到的一樣,鑒定系統是信 息交換的關鍵,網絡傳輸內容被偷
聽的問題可以在每個具體應用中獲得解決. 

(10)性能 
眾所周知公共關鍵字系統的速度是很慢的,但在SUN系統中公共關鍵字編 碼很少發生,它僅僅發生在每
個服務的第一次事務處理時,即使如此,還有緩沖 區加速編碼的進行.當client第一次與服務器接觸時,
client和服務器都必須 計算出普通密鑰,計算普通密鑰的時間主要是計算冪關M的模,在SUN3系統中
 使用192位模,這需花1秒鐘計算普通密鑰,也就是說總共需要2秒.因為client 和服務器都必須計算普
 通密鑰.因此,在client與服務器第一次接觸時,必須等 待這個時間,而且關鍵字服務器將保存計算的
 結果,以就用不著每次都計算 冪了. DES系統最重要的網絡服務就是快速安全的NFS,DES鑒別系統,
 相對UNIX 鑒別系統多花的時間就是編碼的時間.時間標記和DES塊都是64位,在一次RPC 中平均要
 進行四次編碼操作:client對請求時間標記編碼,服務器對它進行解 碼,服務器對時間標記編碼,client
 對它解碼.在SUN3系列中對一個塊進行編碼 的硬件執行需1毫秒,軟件執行需1.2毫秒.這樣進行一次
 RPC調用,若由硬件執 行需多花2毫秒,若由軟件執行需多花5毫秒.進行一次NFS請求大約需20秒,這 
 樣由DES鑒別會使NFS請求的性能降低10%(假如有編碼硬件),25%(假如沒有編 碼硬件).這就是DES對
 網絡性能的沖擊,事實上並不是所有的文件操作都需通 過網絡,因而DES對系統性能的影響要低得多.
 另外是否採用DES鑒別系統是任 選的,因此在需要高速的環境時可以不採用DES鑒別系統.

(11)啟動和setuid程序引起的問題
考慮這樣的情況:計算機因發生某種事件重新啟動.這時機內保存的所 有密鑰都被清除,如果採用的
是DES鑒別系統,那所有的進程都不能再利用網 絡服務.這時起關鍵作用的是根進程.如果根的密鑰保
存在機內同時沒有人輸 入口令,對該密鑰進行編碼,那根進程就將能夠利用網絡服務.對以上問題的 
答案就是將根的密鑰存放在關鍵字服務器可讀的某個文件中.這樣的方式對有 盤工作站來說是很好的,
但對無盤工作站來說,即存在一個致命的問題:它的密 鑰必須通過網絡存取.這樣在無盤工作站啟動時,
如有人竊聽網絡傳送內容,他 就能發現編碼的密鑰,盡管完成,但這一工作並不容易. 眾所周知有一種
啟動方式叫單用戶啟動,啟動根的登錄shell出現在主 終端上,這兒出現的問題是,如果安裝了C2安全
系統,從單用戶啟動仍需口令; 當沒有安裝C2安全系統時,只要/etc/ttytab文件中的console項標記為
secure, 機器的啟動就不需口令. 另一個問題是無盤工作站啟動不安全,因為有人可以冒充啟動服務器,
啟 動一個不正當的內核記錄遠程無盤工作站的密鑰,因為僅僅在內核和關鍵字服 務器運行之,SUN系
統才能對這一問題提供保護.在此以前沒有任何方式可以 鑒別回答是否來自正確的啟動服務器.但我們不
考慮這種情況,因為一個不知 道源碼的人,要想寫這樣的內核幾乎是不可能的.另外犯罪者也極易留下証
據, 只要你對網絡中的啟動服務器進行檢測,就能發現誰是服務器. 並不是所有的setuid程序都會按我們
希望的那樣運行,比如一個由用戶 dave擁有的setuid程序,只要在機器啟動,dave沒有進行登錄,那
程序 setuid就不能存取安全的網絡服務(即採用DES鑒別系統的網絡服務),好在絕 大多數setuid程序都
為root所擁有,而且根的密鑰在系統忘卻總是存放在系 統中,因而程序setuid在採用了DES系統之,
仍能象原來那樣運行.

(12)總結
SUN的目標是要讓網絡系統象分時系統一樣安全,這個目標已經達到.在分 時系統中,用戶被口令鑒別,
有個DES鑒別系統,網絡中的用戶也由口令鑒別.在分時系統中,用戶信任系統管理員,他的職業道德不允
許他改變用戶的口令以 冒充該用戶.在SUN系統中用戶信息網絡管理員,他不會改變用戶在公共密鑰數
 據庫中的實體.很,SUN的系統從某種意義上說比系統更安全,因為在SUN的系統 中旋轉"竊聽"裝置來
 "竊聽"網絡中傳送的口令和編碼用的密鑰是無用的(因為這些口令和密鑰都已被編碼).而大多數分時
 系統對來自終端的數據並不進行 編碼,用戶必須相信,沒有人在終端與主機的傳送線上安裝"竊聽"裝置. 
 DES鑒別系統也許不是最終完善的鑒別系統,在將來,很可能有更好的算法 和硬件來証明DES鑒別系統無
 用並放棄它.但至少可以說DES為將來的發展指出了一個方向.從理論上講,協議從來規定會話密鑰甚至公
 共密鑰的編碼要採用 Diff3-Hellman方法.為了使DES鑒別系統更有力,我們要做的僅僅是使會話密 鑰的
 編碼更有力,從理論上說這樣會形成另一個協議,但是RPC的優點在它可 以採用任何鑒別系統而本身不
 會受到影響.至少在目前我們可以說DES鑒別系統滿足了我們對網絡服務的安全要求, 在一個不友好的網
 絡系統中建立起了一個足夠安全的系統,而所付出的代價也 不高.用戶不需使用磁卡或記住上百位的數字,
 用戶像往常一樣使用口令鑒別自己,只是系統的性能略有降低.但是如果用戶認為性能降低不可並且他的
 網 絡系統非常友好的話,他可以不採用DES鑒別系統. 

(http://www.fanqiang.com)
    進入【UNIX論壇

相關文章
solaris安全手冊 (2001-05-10 21:00:23)
 

★  樊強制作 歡迎分享  ★