為安全設置打好基礎
Mario Eberlein, IT 架構師, IBM Rene Auberger, 軟件 IT 架構師, IBM Wolfram Andreas Richter, IT 架構師, IBM
2004 年 11 月 11 日 惟
有謹小慎微者方可幸存,與其他領域一樣,在確保 Linux®
系統的安全時,這句話也同樣適用。幸運的是,有很多安全特性,或者已經編譯到內核中,或者已經加入到很多 Linux
發行版本中,或者可以以開放源代碼應用程序的形式單獨獲得。第 2 部分涵蓋了清單評估、風險分析、確定用戶類別和訪問特權,以及安全獲得 Linux
發行版本的更詳細行動計劃和步驟。
在此系列文章中,您將看到如何以一種安全的方法來計劃、設計、安裝、配置和維護運行 Linux 的系統。
除了安全概念的理論概述、安裝問題、潛在的威脅及其作用以外,您還將得到關于如何保護和加固基于 Linux
的系統的實用建議。我們將討論最小化安裝、加固 Linux 安裝、授權/認證、本地和網絡安全、攻擊和如何防御攻擊,
以及數據安全、病毒和惡意程序。
本系列的
第 1 部分
通過給出關于安全概念和潛在威脅的一般理解讓您開始上手。本文引導您進行到下一個階段,列出當計劃
一個安全安裝時需要謹記的事情。
安全計劃
第一步 —— 在插入發行版本 CD 并啟動安裝程序之前 —— 是制定一個安全計劃:確定系統將要提供什么服務,
要使用什么硬件,需要什么軟件,如何組織安裝。通過在實際安裝前認真地制定這樣一個計劃,在非常早
的階段就可以確定并排除很多可能的安全問題。這樣做是有益處的,因為它有助于最小化系統入侵或者斷電
的風險。而且,它為發生攻擊或者發布軟件漏洞和補丁時進行快速反應提供了一個堅實的基礎。
當考慮安全策略時,重要的是要注意計算機系統的安全性與可用性之間總是會有一個折衷。如果因為復雜的設置和
維護以及可用性的缺乏而無法使用,那么最完善的安全特性也沒有意義。另外,極度復雜的、極其耗費處理能力的
加密算法實際上會鎖住系統,幾乎不留下任何計算能力給真正的任務使用,那么它又有什么用呢?
要制定安全計劃,您應該執行下面的步驟,收集所有相關信息:
進行清單評估時要回答的問題
-
使用什么硬件?
指定硬件,它的位置,以及任何可能的特定安全特性(比如加鎖的而且防火的房間)。
列出網絡接口、協議、地址以及相關的名稱。
-
應該安裝什么軟件和操作系統?
指定應用程序及它們的數量,檢查每個軟件的許可證。
-
存儲什么類型的數據,它的危險程度如何?
確定數據的種類。對于每一個確定的種類,根據其機密性和穩私考慮數據的危險程度。
-
誰對系統負責?
為系統指定負責人(例如,一個單獨的系統管理員,一個專門的 IT 服務部門,或者一個支持提供商)。
|
完成清單評估
獲得安全計劃的第一個步驟是,評估清單以了解哪些是必須要保證安全的(參見右面的側欄)。
這樣的清單集中關注計算機的物理硬件、網絡連接、接口,并定義其職責。所有從清單評估得
到的信息都應記入文檔。記錄文檔的一個合適的方法可以是一個包含有每臺計算機所有相關信息的
電子數據表。
定義網絡服務和軟件
對于每一臺計算機,重要的是要定義它使用或者提供哪些網絡服務,以及使用或提供服務的軟件應用程序。網絡
服務(除了其他內容以外,可能包括 DNS、文件傳輸、打印機和文件共享、Web/Internet、電子郵件和數據庫)
應該記錄在部署計劃之中,這個計劃還包括所使用的軟件程序包以及此計算機是配置為客戶機、服務器還是同時
具備兩個角色。稍后,基于軟件和服務的列表,您應該安裝一個只包含必需軟件的絕對最小化的系統,這樣可以
使得具有隱藏安全漏洞的可能性最低。
除了定義軟件服務以外,您還需要確定用于通信的協議,這也會帶來一些安全問題。網絡傳輸是否需要通過基于 SSL 的
HTTP(https)進行加密,還是普通的 HTTP 就足夠了?文件傳輸協議是否強制用戶進行認證(比如使用 sftp),或者
對必需的安全層級來說匿名的、不加密的訪問是否合適?
通常,客戶機工作站被配置為使用多個網絡服務。不過,服務器應該專門提供一種單一的服務,因為這樣會
簡化配置并降低發生配置錯誤的可能性。應該由有限數目用戶使用的服務應該通過防火墻保護起來以防止
不必要的訪問。防火墻可以有效地實現管理兩個或多個網絡之間網絡傳輸的安全策略。
完成風險分析
要在系統的安全性與可用性之間找到適當的折衷,重要的是要針對存儲在計算上的數據的類型進行風險分析。
要弄清楚需要采取哪種類型的安全措施來保護資源的機密性、完整性和可用性,第一個步驟就是進行風險分析。
風險分析基于清單評估 —— 它聲明了存儲的是什么類型的數據 —— 集中關注系統受到安全威脅的可能性以及
相繼而來的后果。換句話說,對于清單評估中定義的每一類數據,您都需要對此數據受到非授權訪問的可能性
以及這種事件的影響進行評估。這種評估量化為三個級別:高、中、低。所必需的安全級別是事件的概率及其影響的平均水平。
確定用戶種類和訪問特權
您應該根據其特權和訪問權限列出計算機系統的主要用戶,或者用戶的種類。對于桌面計算機而言,這可能是
相當簡單的,因為用戶的數目通常較少。不過,基于類似的工作分工或對數據資源和應用程序的類似需要來
定義用戶分類是有意義的。
對服務器來說,確定用戶種類通常非常復雜。管理員通??梢栽L問服務和操作系統工具的配置。
除此以外,還有根據需要使用相應服務的不同用戶(本地的和遠程的用戶)。連接到因特網上的公共
服務器基本上是任何人都可以訪問的,而內部服務器的用戶可能會根據工作角色、部門或者辦公室
位置進行分類。所以,如果需要,您應該區分本地和遠程用戶以及臨時和來賓用戶。對于已經確認的用戶
種類,定義他們需要訪問和操作(例如,讀、創建、修改或刪除數據)哪些數據資源。
詳細行動計劃
既然安裝的總體環境和目標都已經完善地記入文檔,您現在可以深入細節了 —— 使用什么軟件,
如何安裝和配置它,等等。您編寫的計劃應該詳細到能回答出在安裝過程中出現的任何問題的程度。
檢查源代碼
Ken Thompson 是 UNIX 的創始人之一,他在
Relections on trusting trust 中
討論了為了設法使源代碼不能揭示安全問題而采取的很多步驟。
首先,他為 login 命令打上補丁,使其包含一個后門,這樣使他可以使用一個特定的密碼
登錄進入任何 UNIX 系統。
然后,他給 C 編譯器打上補丁,使其當編譯 login 命令時進行檢測。C 編譯器將自動把后門插入到
login 程序中,所以,不需要在 login 命令的源代碼中保留后門。
然后,他對 C 編譯器進行修改,使其在通過源代碼編譯 C 編譯器本身時進行檢測,并自動添加
login-detection-and-patching 代碼和 C-compiler-detection-and-patching 代碼。
結果得到一個源代碼中不包含任何后門痕跡的系統。
|
選擇 Linux 發行版本和服務器軟件程序包
這實際上是兩個單獨的步驟,不過先做什么要取決于您的情況。在很多情況下,由于組織的政策、
企業許可證協議或者可用的技術,要使用的發行版本已經確定。有時,您會先關注可以滿足安裝
用途的軟件程序包的選擇;然后,根據程序包的先決條件、哪個發行版本包含立即可用的程序包、或者
發行版本的價格,來選擇發行版本。不過,通常兩者是結合在一起的,您必須反復縮小選擇范圍。
不過,您永遠不應該僅僅因為您手邊有某個安裝媒體而選擇安裝那個發行版本。
對于每一種使用情形(郵件服務器、文件服務器、Web 服務器、字處理等等)都有多種軟件程序包可以
滿足其用途。尤其當用戶不直接與軟件程序包打交道時(比如由專門團隊管理的服務器軟件),您
選擇更為安全的軟件程序包時所受的限制就會更少。要對各種 Web 服務器、郵件傳輸代理、數據庫
管理系統等,或者甚至是整個發行版本的安全方面進行評價,最好首先搜索 BugTraq 或 Full Disclosure
等郵件列表(參見
參考資料 中關于這些的鏈接)。
基于軟件程序包的歷史問題來判斷其安全性,這實際上相當于看著后窗玻璃駕駛汽車 —— 您不知道將要遇到的是
什么,但是您可以得知您是在直路上還是在彎路上。另一個應該謹記的問題是,相對于很少用到的,
經常用的軟件程序包受到的檢查更多。僅僅因為“Tom's HyperWeb Server v0.0.2”在這些郵件列表上沒有
任何已知的 bug,并不意味著它就沒有 bug。
能在源代碼層次上對任何軟件程序包進行審計,經常被列舉為開放源代碼軟件的優勢之一。不過,
可用時間、技術和預算等現實的約束使得這種方法在幾乎所有情形下都是不切實際的,所以您不得
不依賴于程序員 和/或 程序包維護者和發行者的誠實。
您還應該將打算如何運行一個服務記入文檔。需要考慮的一些事情:
-
使用 xinetd 讓您可以調整哪個服務可以提供給誰,可以強制限制防止拒絕服務(denial-of-service)攻擊,
可以將服務調用日志記錄到一個集中的位置。
-
TCP 包裝器 提供了一種方法,以將服務限制在特定范圍的請求地址內,并將請求記錄到日志。
-
chroot jails 創建一個環境,這個環境是您實際安裝的一個子集。即使服務受到攻擊,
被影響的也只是這個子集環境。由于它基于目錄樹的隱藏部分,所以它最適用于那些操作在可以方便地包括到那個樹中的小的而且獨立的文件集上的服務器。
附加的軟件程序包
除了計劃的使用情形所需要的軟件之外,安裝過程很可能還會安裝其他軟件。您需要的軟件
(實際的操作系統:Linux 內核、共享庫、基本的實用程序等等),您想要的軟件(增強安全性
的軟件,比如配額、防火墻和審計),以及您不想要的軟件(不必需的程序包)。
為了方便,發行版本通常向默認安裝添加保持系統運行和滿足其用途所不必要的軟件程序包。在運行期沒有用戶
交互的系統中,圖形用戶界面、多媒體軟件和游戲都屬于這種不必要的軟件。
任何安裝到機器上的軟件都必然會占用資源并降低機器的安全性,引入可能被利用的潛在的 bug:
-
外部攻擊者可以利用不必要的服務在服務器上執行代碼,比如通過緩存溢出(參見
參考資料
中關于此漏洞討論的鏈接)。
-
管理員也是人,所以容易犯錯誤。沒有安裝的軟件不可能被錯誤地配置,這樣就封住了另外的潛在安全
漏洞。
-
即使軟件不是一直在運行,也沒有暴露在網絡上,也會增加管理員的負擔,因為在發現 bug 時管理員要
進行安全修訂。假定某個服務中的一個瑕疵被發現,而且發生了入侵。攻擊者現在可以在用戶的
安全上下文中在服務器上執行程序?,F在,機器上任何可用的程序都可能被攻擊者利用,或者是
提升他/她的特權,獲取安全相關的信息,或者攻擊可能深藏在組織的防火墻之后的其他系統。
-
社交工程技巧(social engineering techniques)經常欺騙合法用戶(乃至管理員)去運行最終
影響安全的程序,這是為什么要盡可能少地安裝程序的另一個原因。
關于增強安全性的程序包,您應該考慮安裝下面這些:
-
配額: 應該使用配額來限制用戶(包括 ftpd 或 httpd 等后臺進程的用戶)可用的資源。
這樣可以挫敗本地拒絕服務(DoS)攻擊,那種攻擊可能通過“fork bomb”用光所有可用的進程 ID,啟動
很多極其消耗內存的程序,或者消耗分區的全部空閑空間。大部分當前發行版本都包含配額,在大部分情況
下其程序包稱為“quota”。通過 PAM 可以實現除了磁盤配額以外的其他限制,它默認也會安裝。在本系列
的下一篇文章中將描述那些限制的配制。
-
防火墻: 通常,防火墻會根據定義的規則集合制止網絡通信。所以,它的基本任務是通過
阻塞不必要的傳輸來避免網絡入侵。網絡防火墻工作于 TCP/IP 棧層次之上,決定數據包是否可以通過
(取決于規則集合)。
-
入侵檢測: 入侵檢測系統(intrusion detection system,IDS)的主要任務是,
通過識別到來的 shellcode、病毒、惡意軟件(malware)或者特洛伊木馬等安全缺口,檢測
進入網絡或者計算機的攻擊或入侵。
-
審計: 審計指的是通過建立數據處于其期望狀態的基線來檢測敏感數據或配置文件
的改變。當發生意外改變時,對基線的改變會被報告,使得管理員可以快速反應并進行恢復。
常見工具的安全代替者
任務/使用情形
|
老的不安全的應用程序
|
推薦的安全代替者
| 遠程訪問命令行 |
|
| 圖形方式訪問遠程系統 |
|
- 基于 ssh 的 X Window
- 基于 ssh 的 VNC
- rdesktop
| 文件傳輸 |
|
| 鏡像/備份 |
|
|
|
使用安全的工具程序版本
當前仍然有很多早期 Internet 應用程序存在,并且在使用中。開發它們時,安全還不是個大問題,因為
那時 Internet 參與者很少。近些年,隨著因特網的發展和迅速成長,安全性的缺乏使得那些應用程序不
適于當前的應用。這就是開發它們的代替者的原因,這些代替者可以以安全的方式執行相同的任務 ——
現在的任務還是像在早期時一樣重要。在這里,“安全的方式”的基本意思是:
-
對傳輸的數據(包括用戶憑證和其他用戶相關數據)加密,防止第三方可以理解傳輸的信息。
-
使用用戶名和密碼或者數字簽名等憑證來識別用戶和系統。
盡管這些代替者通常被稱為“安全的標準的應用程序”,但是它們并不是絕對不會受攻擊。這表示,
雖然您經過深入考慮使用了安全的版本而不是不安全的版本,您仍需要建立另外的觀念和步驟來保護您
的系統。側欄
常見工具的安全代替者 中列出了適用于所選
常見任務的應用程序。這個列表不是(也不可能是)完全的,所以,即使是要完成那些沒有在側欄中
列出的任務,您也應該始終考慮使用安全的應用程序。
分區
選擇的應用程序以及安裝所使用的源代碼并不是安全性的惟一因素。要減少那種試圖填滿可用
磁盤空間的 DoS 攻擊帶來的影響,請確保您至少為下面這些目錄計劃專門的分區:
-
/home: 使用戶數據與系統無關。當您執行備份和恢復操作、升級或切換操作系統、或者在
系統中遷移用戶時,這非常有用。
-
/var: 保存服務器的日志和運行時數據。通過將其安放于一個單獨的文件系統,如果您成為某
個 DoS 攻擊的目標,則數據不會填滿您全部的空閑空間。
-
/tmp: 類似于 /var,這個目錄對用戶進程來說是可寫的,使得它成為 DoS 攻擊的一個目標。
比使用單獨的文件系統更好的辦法是使用 tmpfs,它加速了文件的訪問速度,并在重新引導時自動清空
文件系統的內容。
-
/boot: 容納有 Linux 內核、初始驅動程序以及引導加載器數據。不必為了引導過程而掛載
這個分區,因為引導加載器將內核加載為一系列扇區,以從硬盤讀取數據。如果在正常的操作中沒有掛載它,那
么您就不會意外地覆蓋這些文件。
獲取發行版本
可以通過很多不同的途徑獲得 Linux 發行版本:熱縮塑料包包裝的 CD/DVD 發行版本、從其他人那里拷貝、
下載,等等。如果系統在安裝的時候就已經被破壞,那么它根本是沒有價值的,因此您必須確?;凇案蓛簟钡?來源進行安裝 —— 確認代碼沒有后門。實際上,這一負擔轉嫁給了那些編制包含安裝文件的 CD/DVD 組的
發行者。雖然您可以信任發行者,不過,根據發行者公布的校驗和來校驗安裝媒體的校驗和以確定媒體是正品,
仍不失為一個良好的習慣做法。
如何校驗安裝媒體
要校驗 MD5 校驗和,您可以使用
$ md5sum /path/to/iso/image.iso
或
$ md5sum /dev/cdrom
來分別校驗 ISO 映象或者 CD。計算出的校驗和必須與發行者公開的相匹配。如果您通過 Web 得到發布的
校驗和,那么要確保使用 https,并查看連接中使用的憑證,以確保校驗和的發布者是真實的。
|
不推薦通過網絡或者因特網進行安裝 —— 盡管技術上可行。一個站點可能(比如,通過欺騙)將自己偽裝為一個
可信任的安裝源,并提供加入了后門的修改過的軟件程序包,使得在安裝后入侵者可以不費力地接管系統。當然,
可**以通過內部網絡服務器進行安裝,例如當來源已知而且合法時。
剛剛安裝的操作系統通常不能馬上使用,可能沒有安裝最新安全補丁。此時是最容易受到攻擊的
(參見
參考資料 中一篇關于未打補丁的系統預期生存期的文章的鏈接),
在從安裝過程直到完成配置步驟期間,應該從 Internet 上隔離出來,或者至少是在一個安全的網段。
在本系列的下一篇文章中將討論這些步驟。
安裝后,應該通過第二臺(有適當保護的)計算機從 Internet 上下載最新的安全補丁和更新。同樣,必須
選擇可信任的安裝來源來下載補丁??梢酝ㄟ^嚴肅的提供者所給出的校驗和或者散列來檢驗下載的安裝文件
的完整性。
參考資料
作者簡介
Mario
Eberlein 是一名致力于隨需應變商務應用程序的 IT 架構師。他于 1998 年 10 月加入 IBM,當前在 IBM Global
Services 從事客戶項目的工作。Mario 擁有科學學士學位,當前正在攻讀 Business Administration 的碩士學位,
并且具有 7 年的 Linux 經驗。他是位于 EMEA Central Region 的 IBM Linux Security
Workgroup 的領導。
您可以通過 m_eberlein@de.ibm.com 與 Mario 聯系。
|
Rene
Auberger 是 IBM Software Group 的一名軟件 IT 架構師。他主要與來自德國的公共部門(一個對 Linux
有濃厚興趣的客戶)的客戶一起工作。1996 年 Rene 開始從事 Linux 方面的工作,從那時起就以各種形式為了不同的目的而使用
Linux。他是
德國、奧地利和瑞典的 Software Group 的 Linux 專業領導,可以通過 rene.auberger@de.ibm.com 與他聯系。
|
Wolfram
Andreas Richter 是 IBM Software Group 的一名商務集成顧問和 IT 專家。自 1995 年加入 IBM
起,Wolfram 已經涉足了很多學科領域,范圍從應用程序開發到管理教育。他有八年的 Linux 經驗,擁有位于德國斯圖加特的
University of Cooperative Education 的科學學士學位,以及英國 Henley Management
College 的 Business Administration 碩士學位。
在業余時間,Wolfram 喜歡體育運動、騎摩托車和外出。您可以通過
|
|