歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Unix知識 >> Unix教程

Unix高級安全設置(1)

第一部分 Unix歷史與發展

1.1 UNIX簡介
UNIX 已有數十年的歷史,在這期間,它的改變即使沒有上億次,也有數百萬次了,有成千上
萬的個人和公司實現了上千種不同的版本,有上百萬系統管理員在從微型嵌入式系統到超級
計算機上都安裝過它。無可爭論,沒有兩個實際的UNIX操作系統是完全相同的。
  UNIX”一詞是屬於Open Group的一個商標,該組織是一個要求符號得到正確歸屬的國際
協會。在這數十年當中,該標識已經被沖淡到沒有具體含義。雖然如此,Open Group仍發布
了“The Single UNIX Specification”,這可以在http://www.UNIX-systems.org/online.
html上看到。
  “Unix”是雙關語,表示名字Multics,它最初被寫作“Unics”,表示UNiplexed Info
rmation and Computing System。“Unix”和“UNIX”在如今都被廣泛使用。曾經有一段時
間,Dennis Ritchie試圖宣布用小寫版本,因為“UNIX”不是開頭字母組成。
  許多運行Linux等類似UNIX系統的人認為他們運行的是UNIX。正式UNIX系統和非正式UNI
X系統通常被認為屬於一類----不論是書中、媒介、網上還是社會公認。
  按照UNIX FAQ的定義,UNIX是“一個用C語言編寫的操作系統,它有層次文件系統並集成
了文件和設備I/O,其系統調用接口包括fork ( )和pipe ( )等服務,用戶界面包括cc、tro
ff、grep、awk等工具和一個被選擇的shell”。可以再加一些,UNIX為多任務提供一致的方
式,並內置有創建、同步和終止進程的操作,它可在不同種類計算機間進行移植。

1.2 UNIX發展與歷史
1969年,Ken Thompson、Dennis Ritchie和其他一些人在AT&T貝爾實驗室開始進行一個“li
ttle-used PDP-7 in a corner”的工作,它後來成為UNIX。10年裡,UNIX在AT&T的發展經歷
了數個版本。V4(1974)用C語言重寫,這成為系統間操作系統可移植性的一個裡程碑。V6(
1975)第一次在貝爾實驗室以外使用,成為加州大學伯克利分校開發的第一個UNIX版本的基
礎。
貝爾實驗室繼續在UNIX上工作到80年代,有1983年的System V(“五”,不是字母)版本和
1989年的System V,Release 4(縮寫為SVR4)版本。同時,加利福尼亞大學的程序員改動了
AT&T發布的源代碼,引發了許多主要論題。Berkeley Standard Distribution(BSD)成為第
2個主要“UNIX”版本。1984年的BSD 4.2版在大學和公司計算部門中得到廣泛應用,它的一
些特征被吸收到SVR4中。
從90年代開始,AT&T的源代碼許可證創造了市場的繁榮,不同開發者開發了數百種UNIX版本
。AT&T在1993年把UNIX產業賣給了Novell, Novell兩年後又把它賣給了Santa Cruz Operati
on。同時,UNIX商標被轉讓給X/Open協會,X/Open協會後來成為了Open Group。
當UNIX的經營從一個實體到另一個實體傳遞時,幾個長期的開發開始收獲果實。傳統上,要
得到一個運行的BSD系統,用戶需要從AT&T得到源代碼許可證。但到90年代早期,伯克利的開
發者在BSD上做了許多工作,使原始的AT&T源代碼大部分被改動了。後續的程序員,從Willi
am和Lynne Jolitz開始在網絡分布環境中開發BSD,後來在1992年成為386BSD 0.1版。這個最
初的“免費源代碼”BSD具有三個分支,即:Net BSD、Free BSD和Open BSD,都以BSD 4.4為
基礎。
1984年,程序員Richard Stallman開始開發來源於UNIX的免費GNU(GNU Not UNIX)。到90年
代早期,GNU項目出現了幾個編程裡程碑,包括GNU C庫和Bourne Again Shell (bash)的發行
。整個系統除了一個關鍵因素即工作內核外基本完成。
接下來是芬蘭赫爾辛基大學的學生Linus Torvalds。Linus看到了一個叫作Minix的小型UNIX
系統,覺得自己能做得更好。1991年秋天,他發行了一個叫“Linux”的免費軟件內核的源代
碼—是他的姓和Minux的組合。到1994年,Linus和一個內核開發小組發行了Linux 1.0版。L
inus和朋友們有一個免費內核,Stallman和朋友們擁有一個免費的UNIX克隆系統的其余部分
。人們把Linux內核和GNU合在一起組成一個完整的免費系統,該系統被稱為“Linux”,盡管
Stallman更願意取名為“GNU/Linux System”[6]。有幾種不同類別的GNU/Linux:一些可以
被公司用來支持商業使用,如Red Hat、Caldera Systems和S.U.S.E;其他如Debian GNU/Li
nux,更接近於最初的免費軟件概念。
Linux現已發展到內核2.2版。Linux能在幾種不同體系結構的芯片上運行,並已經被各界接納
或支持。其支持者有惠普、硅谷圖像和Sun等有較長歷史的UNIX供應商,還有康柏和Dell等P
C供應商以及Oracle和IBM等主要軟件供應商。或許最具諷刺的是,微軟承認無所不在的免費
軟件的競爭性威脅,但它不願或不能公開自己的軟件源代碼。
後來微軟開始推出Windows NT (Windows 2000)。到90年代末,許多供應商開始放棄UNIX服務
器平台而轉向Windows NT。例如Silicon Graphics 公司已決定把Intel硬件和NT作為未來的
圖形平台。

第二部分 Unix典型安全隱患
2.1 RPC守護進程程序的錯誤使入侵者可以直接獲得root權限
對Unix威脅最大可以說就是rpc上面的漏洞,遠程過程調用(Remote Procedure Call)允許
一台計算機上的程序去執行另一台計算機上的程序。它們廣泛的應用在各種網絡服務中,如
文件共享服務NFS。有很多漏洞是RPC本身的缺陷導致的,它們正不停的湧現出來。有很明顯
的證據表明,1999年末2000年初大規模的分布式拒絕服務攻擊中,很多被作為攻擊跳板的犧
牲品就是因為存在RPC漏洞。在Solar Sunrise事件期間,對美國陸軍廣為人知的成功攻擊就
是因為在數百台國防部的系統中找到了一個RPC漏洞。
2.2 一些應用的遠程漏洞
遠程漏洞可以使遠程攻擊者在只對開放了有漏洞服務的應用利用的情況下,就可以得到一些
權限或者root權限。
例如:BIND程序存在的問題,利用nxt,qinv,in.named可直接得到root權限
BIND(Berkeley Internet Name Domain)軟件包是域名服務(DNS)的一個應用最廣泛的實現
軟件--我們所有人都通過它來定位Internet上的系統,只需知道域名(如www.cnns.net
而不用知道IP地址,由此可體會它的重要性--這使它成為最受歡迎的攻擊目標。
2.3 本地漏洞
本地漏洞雖然沒有上面兩種漏洞那麼嚴重,但是他也是評估系統安全與否的一個重要因素,
它可以使權限地的系統用戶來提升自己的系統權限,或者使一個得到了一些權限的遠程攻擊
者,擴大自己的戰果,提升權限。
例如,ff.core緩沖區溢出漏洞,一個普通用戶只要執行一個簡單的腳本,就可以令緩沖區溢
出從而的到一個root shell。
2.4 暴露系統信息
嚴格的說這不是漏洞,但是他核你的系統安全相關。舉例子來說,finger暴露了系統合法用
戶名,默認shell等等信息,這就可以被攻擊者利用起來猜密碼。再如某個軟件的版本號暴露
,就會令攻擊者,針對此版本來進行攻擊,這就使攻擊者更容易的入侵的系統。

第三部分 常見Unix安全設置方案
3.1 Solaris 系列
3.1.1 PROM OpenBoot 和物理安全
3.1.1.1 OpenBoot安全級別
none :不需要任何口令。所有OpenBoot設置都可以修改,任何人只要物理接觸到主控台,就
可以完全控制。command:除了boot和go之外所有命令都需要口令。full:除了go命令之外所
有命令都需要口令。
3.1.1.2 改變OpenBoot安全級別
首先使用eeprom security-password 命令設置OpenBoot口令,然後在root登入狀態使用eep
rom security-mode=command命令改變安全級別為command或在OK狀態:ok setenv security
-mode=command的密碼保護來實現。
3.1.2 文件系統的安全
3.1.2.1 基礎知識
文件系統是unix系統安全的核心。在unix中,所有的事物都是文件。Unix中的基本文件類型
有正規文件、目錄、特殊文件、鏈接、Sockets等等。這些不同類型的文件以一個分層的樹結
構進行組織,以一個叫"root"的目錄為起始位置("/")。整個就是一個文件系統。每個文件對
應一個"i節點","i節點"包括UID(文件擁有者)、GID(文件所在組)、模式(文件的權限)、文
件大小、文件類型、ctime("i節點"上次修改時間)、mtime(文件上次修改時間)、atime(文件
上次訪問時間)、nlink(鏈接數)。它表示了文件的基本屬性。
大家注意到,"/"下有很多的目錄,那麼這些目錄是干什麼的呢?下面簡要介紹一下目錄結構
。如下:
/bin 用戶命令的可執行文件
/dev 特殊設備文件
/etc 系統執行文件、配置文件、管理文件,主要是配置文件
/home 用戶起始目錄
/lib 引導系統以及在root文件系統中運行命令所需的共享庫文件
/lost+found 與特定文件系統斷開連結的丟失文件
/mnt 臨時安裝的文件系統(如光驅、軟驅)
/proc 一個偽文件系統,用來作為到內核數據結構或正在運行的進程的接口(用於調試)
/sbin 只有root使用的可執行文件和只需要引導或安裝/usr的文件
/tmp 臨時文件
/usr 為用戶和系統命令使用的可執行文件、頭文件、共享庫、幫助文件、本地程序(在/usr
/local中)
/var 用於電子郵件、打印、cron等的文件,統計文件,日志文件
文件系統有多種類型,unix內核支持如下文件系統:
1) ext2 固定和可移動磁盤都支持的一種高性能文件系統,用於linux
2) msdos 由MS-DOS和Windows使用
3) umsdos Linux使用的一種擴充的DOS文件系統,支持長文件名、權限設置
4) iso9660 遵從ISO9660標准的CD-ROM文件系統
5) hpfs High Performance Filesystem,高性能文件系統,OS/2使用
6) minix 在Minux OS中使用,最早的Linux文件系統
7) nfs 用來訪問遠程計算機中磁盤的網絡文件系統
8) swap 用作交換的磁盤分區
3.1.2.2 文件權限
文件權限是unix文件系統安全的關鍵。Unix中的每個用戶有一個唯一的用戶名和UID(用戶ID
號),每個用戶屬於一個或多個組。基本分組成員在/etc/passwd中定義,附加的分組成員在
/etc/group中定義。例如,用戶tiger的UID為225,分組為11(students),此外,他還是分組
185(postgraduates)的成員。每個文件和目錄有三組權限,一組是文件的擁有者、一組是文
件所屬組的成員、一組是其他所有用戶。"r"表示可讀,"w"表示可寫,"x"表示可執行。一共
9位(每組3位),合起來稱為模式位(mode bits)。
模式位通常由一列10個字符來表示,每個字符表示一個模式設置,第一個指明文件類型,如
(d表示目錄,-表示普通文件,l表示鏈接文件等等)。例如,用ls -l 命令顯示如下:
drwxr-xr-x 2 root root 1024 Aug 13 09:22 backup/
-rw-r--r-- 1 root root 1824 Apr 21 18:45 client.c
-rw------- 1 root root 65536 Apr 22 17:56 core
-rw-r----- 1 root root 2351 Apr 22 14:01 cry1.bak
-rwxr-xr-x 1 root root 27492 Apr 21 18:47 crypt*
-rw-r----- 1 tiger tiger 2450 Apr 22 15:16 cryption_server.c
-rw-r----- 1 tiger tiger 1544 Apr 22 15:02 myinclude.h
-rwxr-xr-x 1 root root 8280 May 3 10:35 test*
例如最後一行以"-"開始,表示test使一個普通文件,文件擁有者可以讀寫執行、本組其他成
員可以讀執行、其他用戶可以讀執行。我們可以用chmod和umask命令來改變權限,這很簡單
,察看相應的幫助就知道怎麼修改權限。
3.1.2.3 SUID/SGID
為什麼要單獨把他們從文件權限中分出來講呢?因為,這是網絡入侵者非常愛用的入侵入口
。SUID表示"設置用戶ID",SGID表示"設置組ID"。當用戶執行一個SUID文件時,用戶ID在程
序運行過程中被置為文件擁有者的用戶ID。如果文件屬於root,那用戶就成為超級用戶。同
樣,當一個用戶執行SGID文件時,用戶的組被置為文件的組。例如,PS命令以SUID root運行
,他從系統內存中讀取,這是一般用戶不能做的。SUID程序代表了重要的安全漏洞,特別是
SUID設為root的程序。
Unix實際上有兩種類型的用戶ID。"real user ID"是在登錄過程中建立的用戶ID。 "effect
ive user ID"是在登錄後的會話過程中通過SUID和SGID位來修改。當一個用戶運行一條命令
時,進程繼承了用戶登錄Shell的權限,這時"real user ID"和"effective user ID"是相同
的。當SUID位被設置時,進程繼承了命令擁有者的權限。例如普通用戶運行passwd命令時,
他能夠修改/etc/passwd文件,盡管文件是屬於root的。這成為可能是因為passwd命令以roo
t的SUID權限運行。那麼如何識別SUID程序呢?我們檢查文件的權限模式,在它的第四位如果
不是"x",而是"s",就是一個SUID程序。例如,ls -l /bin/su命令顯示:
-rwsr-xr-x 1 root root 14888 Aug 15 1999 /bin/su*
表明su是一個SUID程序。
Unix系統安全的一種典型攻擊就是創建一個SUID是root的shell拷貝,然後把他隱藏。通過調
用後門,攻擊者就獲得了root的權利。例如,某個系統管理員忘了關閉某個root的Shell,一
個壞人經過運行如下命令:

cp /bin/bash /home/badman/.bash; chmod 4777 /home/badman/.bash
badman現在就有了一個bash的SUID root拷貝任其處理。他就有完整的root權限了。因此,系
統管理員應該定期察看系統中有哪些SUID和SGID文件。用下面的命令可以實現:find / -ty
pe f \( -perm -4000 -o -perm -2000 \) -ls
當然,攻擊者可以通過修改find命令來逃避檢測,所以要運行專門的檢測軟件(如Tripwire)
來進行檢查。
3.1.2.4 加密與驗證
Tripwire工具提出了使用密碼校驗和來確定文件是否經過了未認證的修改,加密技術可以用
來保護機密文件甚至整個文件系統。加密是通過密鑰將明文轉化為一堆亂碼的密文,從而起
到保護文件內容的作用。Unix常用的加密算法有crypt(最早的加密工具)、DES(目前最常用的
)、IDEA(國際數據加密算法)、RC4、Blowfish(簡單高效的DES)、RSA等等。具體的加密算法
這裡不再闡明,需要了解請閱讀Bruce Schneier的《應用密碼學》一書。注意單向hash函數
,他處理任意長度的信息並返回一個固定長度的hash值(128位)。常用的有MD5、SHA、HAVAL
、Snefru等等。單向hash函數經常和公開密鑰算法一起來創建數字簽名,提供身份證明。與
傳統的簽名相比,數字簽名還可以指出文件是否被修改過。
PGP是unix下用來保護信息特別是電子郵件的工具。他使用IDEA算法為數據加密,使用RSA算
法來進行密鑰管理和數字簽名,使用MD5來作為一個單向hash函數。其特點在於安全:不僅內
容被偽裝,連發送者的簽名也加密。PGP還可以用來加密本地文件。現在常用的Linux下的PG
P工具為:pgpe(加密)、pgps(簽名)、pgpv(確認/解密)、pgpk(管理密鑰)。請參考相應的幫
助來使用。
"特洛伊木馬"的故事不知道大家聽說過沒有。古希臘人久攻特洛伊城不下,於是假裝求和,
送了一個巨大的木馬作為禮物,向城主Minerva表示和解。特洛伊人將木馬拉入城內,到了夜
晚,藏在木馬中的希臘士兵鑽出來,裡應外合,攻破特洛伊城。在計算機安全領域,這種欺
騙技巧成為攻擊計算機安全的一種標准方式。他藏在你的計算機裡,隨時可能爆發,如果攻
擊者需要的話。因此,一旦一個系統被裝了特洛伊木馬,他就不能在信任了,必須從新安裝
。怎麼避免呢,要養成良好的習慣,例如:限制下載,只從有聲望的站點下載東西;檢驗下
載的文件;避免運行已編譯好的二進制代碼,從源代碼開始編譯;不執行不信任的電子郵件
發送的程序;不執行從非信任的Web站點得到的Java applets和Java Script。
MD5校驗和有時與軟件一起發行,用戶可以用他來檢驗一個軟件包。用戶可以運行Red Hat L
inux中包含的md5sum工具,例如:md5sum cops.1.04.tar.gz
結果:lfa416872934e5bee99068f9989cb8b0 cops.1.04.tar.gz
和軟件包自帶的校驗和文件比較,如果不符,則說明文件在傳輸過程中出了問題,最好從新
下載,本文件不可靠。md5sum還可以用來檢驗系統文件,在第一次安裝系統之後對重要的li
lo系統二進制文件進行一下校驗:md5sum lilo,其結果應該一直保持不變,除非升級。
3.1.2.5 完整性檢查
完整性是安全系統的核心屬性。用戶需要知道昨天寫的文件和今天打開的文件沒有被改動。
攻擊者可以用很多方法破壞文件系統,從依靠錯誤配置的權限獲益到放置特洛伊木馬和病毒
。Linux中用cksum命令對一個特定文件執行16位校驗和的計算,上面的md5sum也是一個檢驗
的命令。
RPM(Red Hat Package manager)是由Red Hat Software開發並包含在其Linux產品之中的多功
能軟件安裝管理器。他可以用來建立、安裝、查詢、檢驗、升級和卸載獨立的軟件包。
3.1.2.6 加密文件系統
加密文件系統是文件系統安全的一個更引人注目的方法。他根據一個簡單的推斷:如果一個
系統保存機密數據,那麼就應該以加密形式保存。加密文件系統(CFS)的核心思想是: CFS為
目錄和文件提供一個透明的接口,並自動使用用戶的密鑰加密。一條單獨的命令把一個密鑰
和一個目錄關聯起來,從這時起,目錄的內容在寫時自動加密,在打開時自動解密。
一個由意大利人開發的透明加密文件系統(TCFS),用戶甚至不知道他們的文件倍加密了。從
下面的地址下載:http://tcfs.dia.unisa.it/
3.1.2.7 備份
備份的重要性我想不需要多說了,那麼備份有那些策略呢?常見的有:系統初裝時的備份、
定期備份、增量式備份(只備份改動的)、特別備份(為某些文件備份)等等。Linux系統提供了
以下備份工具:
1) cp:拷貝,例如把dir1中的所有內容拷貝到dir2:cp -R dir1 dir2
2) tar:可以創建、把文件添加到或從一個tar檔案中解開文件。檔案本身也是一個文件,它
包含其他的許多文件和有關信息。Tar最初用於磁帶機。
3) cpio:把文件拷貝進或拷貝出一個cpio檔案或tar檔案,與tar類似
4) dump:得到整個文件系統並把他拷貝到備份介質上,一個確保完整備份的正規方式是跟隨
定期增量備份運行一個0級或完全備份,dump支持10個級別並能把上次備份後改動的所有文件
以更低的級別備份。缺省情況dump將備份到磁盤介質。例如,把一個SCSI硬盤(/dev/rsd0a)
以0級備份到磁帶(/dev/rst0)。dump 0f0 /dev/rst0 1500 /dev/sd0a
5) restore:用來恢復整個文件系統或提取單個文件。與dump相對。注意,restore命令特別
冒險,因為他運行SUID root,像任何SUID root程序一樣,可以根據自己的風險來運行rest
ore。
3.1.2.8 其他常見系統安全工具導航
1)CRYPT BREAKERS WORKBENCH一個集成多種工具的平台,幫助一個加密人員讀取BSD4.2加密
的文件。
ftp://coast.cs.purdue.edu/pub/tools/unix/cbw
2)HOBGOBLIN
ftp://coast.cs.purdue.edu/pub/tools/unix/hobgoblin/
3)TRIPWIRE,強烈推薦,是一個文件系統完整性檢查工具。
http://www.tripwiresecurity.com/
4)TROJAN,一個可以被任何用戶運行來檢查特洛伊木馬的perl程序。
ftp://coast.cs.purdue.edu/pub/tools/unix/trojan/trojan.pl
5)PGP,流行的郵件和文件加密程序。
http://rufus.w3.org/linux/RPM/pgp.html
6)LIBDES,建立一個DES加密庫和一個DES加密程序的工具。包括一個crypt(3)的快速實現。

ftp://ftp.psy.uq.oz.au/pub/Crypto/DES/
3.1.3 用戶賬號和環境的安全
3.1.3.1 口令管理增強方法
可以使用如下命令及其參數來增強對用戶密碼的管理:
1)passwd -n 30 user #強迫用戶每30天修改一次密碼;
2)passwd -f user #強迫用戶在下一次登錄時修改口令;
3)passwd -n 2 -x 1 user #禁止用戶修改口令;
4)passwd -l user #封鎖用戶賬號,禁止登錄。
3.1.3.2 CRACK
Crack可以找出/etc/shadow中那些容易猜測的口令,雖然運行crack將會使CPU的負載加重,
但它在第一次運行時就可以給出10%系統帳號的口令。
URL:ftp://sable.ox.ac.uk/pub/comp/security/software/crackers/
3.1.3.3 取消ROOT的遠程登陸
默認在/etc/default/login裡加上 "CONSOLE"行,在/etc/ftpusers裡加上root。
3.1.3.4 配置ROOT的環境
1)將umask設為077或者027.
2)查看你的環境中路徑設置情況,不要有./
3.1.3.5 刪除不必要的帳號
移去或者鎖定那些不是必須的帳號,比如sys\uucp\nuucp\listen等等,簡單的辦法是在/et
c/shadow的password域中放上NP字符。
3.1.3.6 NIS的安全問題
NIS從來就不是一個安全的服務,如果配置得當的話NIS+會更好些,就象暴力破解密碼一樣,
NIS域名如果被猜出來,就會給入侵者提供相當豐富的信息,要關閉這個漏洞,可以將信任主
機的地址放在/var/yp/securenets中。並且考慮使用NIS+或者secure RPC。
3.1.3.7 取消rlogin/rsh服務
移去/etc/hosts.equiv和/.rhosts以及各home目錄下的.rhosts,並且在/etc/inetd.conf中
把r系列服務都殺掉,然後找出inetd的進程號,重啟它。
3.1.3.8 限制通過網絡進入系統
Telnet和ftp守護進程是從inetd進程啟動的,inetd的配置文件是/etc/inetd.conf,還包含了
其它的各種服務,所以你可以干脆移去這個文件,新建一個只包括以下兩行的文件:
ftp stream tcp nowait root /usr/local/bin/tcpd /usr/local/bin/wu-ftpd
telnet stream tcp nowait root /usr/local/bin/tcpd /usr/sbin/in.telnetd
當然這是基於你需要telnet及ftp的基礎上的,如果你連這兩個服務都不用的話,你就可以將
它注釋掉或者刪除,這樣在系統啟動的時候inetd就不需要啟動了。
Tcpd的訪問控制是由/etc/hosts.allow和/etc/hosts.deny文件控制的,tcpd先查找/etc/ho
sts.allow,如果你在這裡面允許了某幾台主機的telnet或ftp訪問的話,那麼deny訪問就是
對其它所有機器的了。這是"默認拒絕"的訪問控制策略,下面是一個hosts.allow文件的樣本

ALL: 172.16.3.0/255.255.255.0
這將允許172.16.3.0網絡的主機上任何用戶訪問你的telnet及ftp服務,記住在這裡要放置I
P地址,因為域名比較容易受到欺騙攻擊……
現在我們准備拒絕其余所有人的連接了,將下面的語句放在/etc/hosts.deny中:
ALL: /usr/bin/mailx -s "%d: connection attempt from %c" [email protected]
這條指令不僅拒絕了其它所有的連接,而且能夠讓tcpd發送email給root--一旦有不允許的連
接嘗試發生時。
現在你可能希望用syslog記錄下所有的訪問記錄,那麼在/etc/syslog.conf放進如下語句:
auth.auth.notice;auth.info /var/log/authlog
注意兩段語句間的空白是tab鍵,否則syslog可能會不能正常工作。
3.1.3.9 配置S/Key
S/Key是一個用於實現安全的一次性口令方案的軟件,它根據一系列信息(包括一個秘密口令
)通過MD5處理而形成的初始鑰匙,該初始鑰匙再交給MD4進行處理,資助將128位的數字簽名
縮成64位,該64位信息再次傳給MD5函數,這個過程一直持續直到達到期望值……
開始使用S/Key時,要建立一個以/usr/local/bin/keysh為shell的帳號:
在/etc/passwd中加入
access:x:100:100:Access Account:/tmp:/usr/local/bin/keysh
並且在/etc/shadow中加入
access:NP:6445::::::
然後使用passwd access命令來設定用戶的訪問密碼。
由於/usr/local/bin/keysh不是一個標准的shell,所以你的/etc/shells文件中內容如下:
/sbin/sh
/usr/local/bin/keysh
只有使用這兩種login shell的用戶才允許接入。
然後建立一個文件/etc/skeykeys並賦予一定的許可權限:
touch /etc/skeykeys
chmod 600 /etc/skeykeys
chown root /etc/skeykeys
chgrp root /etc/skeykeys
使用keyinit access命令來初始化S/Key秘密口令。
現在你可以配置允許用戶通過keysu命令來成為超級用戶,首先改變/etc/group:
root::0:root,access
只有在這裡列出來的用戶才允許通過keysu成為超級用戶。現在可以使用不著keyinit root命
令來初始化超級用戶的S/Key秘密口令,建議該口令要與user的有所區別。
本來你可以將/bin/su刪掉以確定用戶只能使用keysu……,但不幸的是,許多腳本使用/bin
/su來開啟進程,所以只需用chmod 500 /bin/su來改變它的權限就行了。
3.1.3.10 X的安全配置
使用SUN-DES-1選項來調用Secure RPC來通過X鑒別,可以使用xhost +user@host來通過訪問
請求。
3.1.3.11 開啟SUN-DES-1鑒別機制
set DisplayManager*authorize: true
set DisplayManager._0.authName: SUN-DES-1
rm ~/.Xauthority
增加對localhost的許可權限,通過
xauth local/unix:0 SUN-DES-1 unix.local@nisdomain
xauth local:0 SUN-DES-1 unix.local@nisdomain
Start X via xinit -- -auth ~/.Xauthority
把你自己加入,並移去其他所有人:
xhost +user@ +unix.local@nisdomain -local -localhost
賦予用戶foo進入主機"node"的權限:
允許foo進入node: xhost +foo@
建立適當的foo的xauthority: xauth add node:0 SUN-DES-1 unix.node@nisdomain
foo現在就能連上"node"了: xload -display node:0
3.1.4 系統的啟動和關閉
3.1.4.1 更改不必要的啟動文件
通常情況下,你要檢查所有在/etc/rc2.d和/etc/rc3.d以S開頭的文件,所有並非必要的設備
或者服務都可以重命名(不要再以S開頭),然後你可以重新啟動,從/var/adm/messages中來
觀察自啟動的情況,並且從ps -elf的輸出中加以檢查。
3.1.4.2 系統裡的Strip
在Solaris下,你可以通過對/etc/rc[S0-3].d文件來修改啟動時自引導的動作。考慮移去/e
tc/rc2.d中在你系統中用不到的服務,我還建議你移除/etc/init.d裡除下以下列表中文件外
的所有東西:
K15rrcd S05RMTMPFILES K15solved S20sysetup
S72inetsvc S99audit S21perf
S99dtlogin K25snmpd S30sysid.net S99netconfig
K50pop3 S74syslog S75cron S92rtvc-config
K60nfs.server K65nfs.client S69inet
K92volmgt README S95SUNWmd.sync
S01MOUNTFSYS S71sysid.sys S88utmpd S95rrcd
這些文件可能會與你的不同--這取決於你機器裡的圖形卡/是否使用Solaris DiskSuits等等
。移除/etc/rc3.d裡的文件........。
3.1.4.3 取消NFS服務
NFS的共享輸出是由/etc/dfs/dfstab文件管理的.可以刪除它。要將NFS服務器的守護進程關
閉則可以重命名/etc/rc3.d/S15nfs.server。要防止一台機器成為NFS客戶機,可以重命名文
件/etc/rc2.d/S73nfs.client--當重命名這些自啟動文件時,要注意不要將文件的首字母設
為"S"。
3.1.4.4 rpcbind中的安全問題
Rpcbind是允許rpc請求和rpc服務之間相互連接的程序,但標准的rpc是不安全的:(,它使用的
是"AUTH_UNIX"驗證, 也就是說它依靠的是遠程系統的IP地址和遠程用戶的UID來驗證。一般
的系統可能需要某些rpc存在,但對各種服務器如Web servers, ftp servers, mail server
s, etc)最好將rpc服務關閉,你也可以通過一些安全工具來確定rpc服務是否會影響到你系統
的安全性。可以通過將/etc/rc2.d/S71RPC改名來禁止rpc。
3.1.4.5 in.finger的安全問題
in.fingerd在過去有一些安全問題,如果你想提供finger工具,用nobody來運行它。
3.1.4.6 sendmail的設置
/usr/lib/sendmail守護程序並沒有打開,因為你不必總在25端口監聽mail的列表請求,你可
以在root的crontab文件中增加:
0 * * * * /usr/lib/sendmail -q > /var/adm/sendmail.log 2>&1
這條命令要以每小時調用sendmail進程處理排隊中的郵件。
3.1.5 cron 和 at
3.1.5.1 cron任務的注意事項
1) 查看所有的cron任務--在/var/spool/cron/crontabs文件中可以找到它們。
2) 必須在/etc/default/cron裡設置了"CRONLOG=yes" 來記錄corn的動作。
3.1.5.2 cron用戶配置
/etc/cron.d/cron.allow和/etc/cron.d/cron.deny兩個文件決定了一個特定用戶是否可以運
行crontab命令。daemon、bin、smtp、nuucp、listen、nobody、noaccess這些用戶不應該有
執行crontab權限。
3.1.5.3 at 用戶配置
/etc/cron.d/at.allow和/etc/cron.d/at.deny兩個文件決定了一個特定用戶是否可以運行a
t命令。daemon、bin、smtp、nuucp、listen、nobody、noaccess這些用戶不應該有執行at權
限。
3.1.5.4 cron和Tripwire
Tripwire應該配置成定期檢查下面文件和目錄:/etc/cron.d、/etc/default、/var/cron、
/var/spool/cron、/etc/cron.d/cron.allow、/etc/cron.d/at.allow、/etc/cron.d/at.de
ny
3.1.6 系統日志
創建所有重要的日志文件的硬拷貝
保證在“/var/log”目錄下的不同日志文件的完整性是保證系統安全所要考慮的非常重要的
一個方面。如果我們在服務器上已經加上了很多安全措施,黑客還是能夠成功入侵,那麼日
志文件就是我們最後的防范措施。因此,很有必要考慮一下用什麼方法才能保證日志文件的
完整性。如果服務器上或網絡中的其它服務器上已經安裝了打印機,就可以把重要的日志文
件打印出來。這要求有一個可以連續打印的打印機,並用syslog把所有重要的日志文件傳到
“/dev/lp0”(打印設備)。黑客可以改變服務器上的文件、程序,等等,但是,把重要的日
志文件打印出來之後,他就無能為力了。
例如,記錄下服務器上所有的telnet、mail、引導信息和ssh連接,並打印到連接在這台服務
器上的打印機。需要在“/etc/syslog.conf”文件中加入一行。編輯syslog.conf文件(vi /
etc/syslog.conf),在文件末尾加入下面這一行:
authpriv.*;mail.*;local7.*;auth.*;daemon.info /dev/lp0
“mail”是接收日志文件的計算機主機名。如果有人試圖黑你的計算機並且威脅把所有重要
的系統日志文件都刪掉,你就不用怕了,因為你已經打印出來或者在別的地方還有一個拷貝
。這樣就可以根據這些日志文件分析出黑客在什麼地方,然後出理這次入侵事件。
authpriv.*;mail.*;local7.*;auth.*;daemon.info@mail
3.1.7 Solaris ndd命令
ndd命令能容易的在不重新配置系統內核和重起系統的情況下,修改核心和TCP/IP的設備的一
些參數。使用如下命令可看到相應的幫助。
[root@ /]> ndd /dev/arp \?
? (read only)
arp_cache_report (read only)
arp_debug (read and write)
arp_cleanup_interval (read and write)
[root@ /]> ndd /dev/icmp \?
? (read only)
icmp_wroff_extra (read and write)
icmp_def_ttl (read and write)
icmp_bsd_compat (read and write)
icmp_xmit_hiwat (read and write)
icmp_xmit_lowat (read and write)
icmp_recv_hiwat (read and write)
icmp_max_buf (read and write)
icmp_status (read only)
[root@ /]> ndd /dev/ip \?
? (read only)
ip_forwarding (read and write)
ip_respond_to_address_mask_broadcast(read and write)
ip_respond_to_echo_broadcast (read and write)
ip_respond_to_timestamp (read and write)
ip_respond_to_timestamp_broadcast(read and write)
ip_send_redirects (read and write)
ip_forward_directed_broadcasts(read and write)
ip_debug (read and write)
ip_mrtdebug (read and write)
ip_ire_cleanup_interval (read and write)
ip_ire_flush_interval (read and write)
ip_ire_redirect_interval (read and write)
ip_def_ttl (read and write)
ip_forward_src_routed (read and write)
ip_wroff_extra (read and write)
ip_ire_pathmtu_interval (read and write)
ip_icmp_return_data_bytes (read and write)
ip_send_source_quench (read and write)
ip_path_mtu_discovery (read and write)
ip_ignore_delete_time (read and write)
ip_ignore_redirect (read and write)
ip_output_queue (read and write)
ip_broadcast_ttl (read and write)
ip_icmp_err_interval (read and write)
ip_reass_queue_bytes (read and write)
ip_strict_dst_multihoming (read and write)
ip_addrs_per_if (read and write)
ip_ill_status (read only)
ip_ipif_status (read only)
ip_ire_status (read only)
ip_ipc_status (read only)
ip_rput_pullups (read and write)
ip_enable_group_ifs (read and write)
[root@ /]> ndd /dev/tcp \?
? (read only)
tcp_close_wait_interval (read and write)
tcp_conn_req_max_q (read and write)
tcp_conn_req_max_q0 (read and write)
tcp_conn_req_min (read and write)
tcp_conn_grace_period (read and write)
tcp_cwnd_max (read and write)
tcp_debug (read and write)
tcp_smallest_nonpriv_port (read and write)
tcp_ip_abort_cinterval (read and write)
tcp_ip_abort_linterval (read and write)
tcp_ip_abort_interval (read and write)
tcp_ip_notify_cinterval (read and write)
tcp_ip_notify_interval (read and write)
tcp_ip_ttl (read and write)
tcp_keepalive_interval (read and write)
tcp_maxpsz_multiplier (read and write)
tcp_mss_def (read and write)
tcp_mss_max (read and write)
tcp_mss_min (read and write)
tcp_naglim_def (read and write)
tcp_rexmit_interval_initial (read and write)
tcp_rexmit_interval_max (read and write)
tcp_rexmit_interval_min (read and write)
tcp_wroff_xtra (read and write)
tcp_deferred_ack_interval (read and write)
tcp_snd_lowat_fraction (read and write)
tcp_sth_rcv_hiwat (read and write)
tcp_sth_rcv_lowat (read and write)
tcp_dupack_fast_retransmit (read and write)
tcp_ignore_path_mtu (read and write)
tcp_rcv_push_wait (read and write)
tcp_smallest_anon_port (read and write)
tcp_largest_anon_port (read and write)
tcp_xmit_hiwat (read and write)
tcp_xmit_lowat (read and write)
tcp_recv_hiwat (read and write)
tcp_recv_hiwat_minmss (read and write)
tcp_fin_wait_2_flush_interval (read and write)
tcp_co_min (read and write)
tcp_max_buf (read and write)
tcp_zero_win_probesize (read and write)
tcp_strong_iss (read and write)
tcp_rtt_updates (read and write)
tcp_wscale_always (read and write)
tcp_tstamp_always (read and write)
tcp_tstamp_if_wscale (read and write)
tcp_rexmit_interval_extra (read and write)
tcp_deferred_acks_max (read and write)
tcp_slow_start_after_idle (read and write)
tcp_slow_start_initial (read and write)
tcp_co_timer_interval (read and write)
tcp_extra_priv_ports (read only)
tcp_extra_priv_ports_add (write only)
tcp_extra_priv_ports_del (write only)
tcp_status (read only)
tcp_bind_hash (read only)
tcp_listen_hash (read only)
tcp_conn_hash (read only)
tcp_queue_hash (read only)
tcp_host_param (read and write)
tcp_1948_phrase (write only)
顯示當前值
#ndd /dev/arp arp_debug 0
0: 代表特性禁止
ndd -set /dev/arp arp_debug 1
1: 代表特性允許
由於這些參數一般是經過優化過的,而且一旦改變失誤,可能導致系統的不正常工作。所以
sun不提供文檔供人隨意調節。
3.1.8 系統補丁
跟所有的復雜系統一樣,SUN有它的漏洞,其中的一些從性質上來說是相當嚴重的。SUN公司
有向它的客戶甚至是沒有技術支持的客戶提供補丁的優良傳統。這些補丁或者以集合包或者
以單個補丁的形式存在的。不幸的是,要完全修補你的系統,既需要大的補丁集合包,又需
要單個的補丁。然而我們將介紹一種把補丁包和單個補丁結合起來使用的方法。
用patchadd -p 或 showrev -p命令來察看補丁在系統裡的安裝情況,在你想保護的主機以及
大眾都可以訪問的主機上,你應該到SUN公司的主頁上去查找相關的補丁包來安裝,並且應該
常常查看最新的補丁發布情況。
補丁步驟:
1) 變成 root
2) 鍵入 umask 022來設置你的許可模式--給系統打補丁不僅要求所有的補丁被"nobody"用
戶可讀,而且包括補丁之前的所有目錄(不要問為什麼,反正是一般這麼干的)。
3) 創建一個叫“patch“的目錄,並進入它,我一般是這樣做的:
mkdir /var/tmp/patch
cd /var/tmp/patch
在你建“patch“目錄的文件系統中要保證有足夠的磁盤空間(提示:你可以試著鍵入:df
-k來看看文件系統上可用的磁盤空間,不要用/tmp!
4) 用ftp連接sunsolve站ftp sunsolve.sun.com
你的登錄用戶名是“anonymous“,口令是你的電子郵件地址。
5) 轉到二進制模式,鍵入: bin
關閉提示,鍵入: prompt
你不需要為下載每個補丁回答是,我需要下那個補丁。
6) 補丁位於sunsolve站的/pub/patches目錄,所以鍵入: cd /pub/patches
7) 得到對應於你操作系統版本的PatchReport文件,你可以用以下命令列出那些文:
ls *.PatchReport
例如:
-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-
ftp> ls *.PatchReport
200 PORT command successful.
150 Opening ASCII mode data connection for file list.
Solaris1.1.1.PatchReport
Solaris1.1.2.PatchReport
Solaris1.1.PatchReport
Solaris2.3.PatchReport
Solaris2.4.PatchReport
Solaris2.4_x86.PatchReport
Solaris2.5.1.PatchReport
Solaris2.5.1_x86.PatchReport
Solaris2.5.PatchReport
Solaris2.5_x86.PatchReport
Solaris2.6.PatchReport
Solaris2.6_x86.PatchReport
Solaris7.PatchReport
Solaris7_x86.PatchReport
226 Transfer complete.
remote: *.PatchReport
360 bytes received in 0.0044 seconds (79.16 Kbytes/s)
-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-
對x86和sparc文件有不同的補丁報告文件,sparc版本的是那些沒有“x86“字樣的。
8) 得到一份補丁報告文件,比如:get Solaris2.6.PatchReport
9) 得到一份對應於你系統版本的推薦補丁集合包和它的README文件,可以用如下命令列出推
薦的文件:ls *Recommended*
輸出可能是這樣的:
-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-
ftp> ls *Recommended*
200 PORT command successful.
150 Opening ASCII mode data connection for file list.
2.3_Recommended.README
2.3_Recommended.tar.Z
2.4_Recommended.README
2.4_Recommended.tar.Z
2.4_x86_Recommended.README
2.4_x86_Recommended.tar.Z
2.5.1_Recommended.README
2.5.1_Recommended.tar.Z
2.5.1_x86_Recommended.README
2.5.1_x86_Recommended.tar.Z
2.5_Recommended.README
2.5_Recommended.tar.Z
2.5_x86_Recommended.README
2.5_x86_Recommended.tar.Z
2.6_Recommended.README
2.6_Recommended.tar.Z
2.6_x86_Recommended.README
2.6_x86_Recommended.tar.Z
7_Recommended.README
7_Recommended.zip
7_x86_Recommended.README
7_x86_Recommended.zip
-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-
你可以用mget命令把推薦文件和readme都拿下來,比如:
mget 7_x86_Recommended*
這可能要等上一會兒。
10) 在下載推薦文件的時候,你可以打開補丁報告文件看看,裡面會有關於安全修補的一節
可能是這樣的:
-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-

Solaris 2.5.1 Patches Containing Security Fixes:
------------------------------------------------

103594-19 SunOS 5.5.1: sendmail fixes
103603-10 SunOS 5.5.1: ftp, in.ftpd, in.rexecd and in.rshd patch
103627-11 SunOS 5.5.1: Linker patch
103630-14 SunOS 5.5.1: ip ifconfig arp udp icmp patch
106689-01 * SunOS 5.5.1: /usr/sbin/in.uucpd patch
106905-01 * SunOS 5.5.1: apropos/catman/man/whatis patch
103566-43 OpenWindows 3.5.1: Xsun patch
106411-06 * OpenWindows 3.5.1: xdm patch
(& c.)
-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-
“*“標記的補丁沒有包括在推薦補丁集合包裡,我們要把它們包括進來。
11) 當推薦補丁集合包下載完後,你需要下載補丁報告中所標記的單個補丁,最快的方法是
用mget,這樣用: mget 106689* 106905* 106411*
重要:你可能想用一個mget命令得到所有的補丁,但mget的參數的個數是有限制的!而且,
我並沒有指定版本號,這不僅僅是為了少輸入字符和得到相關的README文件,也是因為在補
丁報告發布過程中,版本號可能是會變化的。
12) 下載完所有的東西後,鍵入:quit來結束ftp會話。
13) 到現在,你已經下載了補丁集合包和單個補丁,因為繼續下去打單個的補丁包太費體力
,我們將先把補丁包和單個補丁合並起來。
首先解壓補丁包:
如果你用的是Solaris 2.6或更早的,
uncompress 2*Recommended.tar.Z
tar -xvf 2*Recommended.tar
如果用的是Solaris 7,
unzip 7*Recommended.zip
其次,把所有的單個補丁移到你的建立的Recommended目錄:
mv 1* *Recommende d
然後,進到保存有全部補丁的Recommended目錄:
cd *Recommended
14) 現在我們可以把所有單個的補丁加到patch_order文件中,在這個文件中列出了所有將被
install_cluster腳本安裝的補丁,你可以手工把它們加進去(提示:這是錯誤的選擇)或者
用UNIX的命令工具來幫你做這件事。
如果你是Solaris 7,用下面的命令:
ls *.zip | cut -d"." -f1 >> patch_order
如果是Solaris 2.6或以前的:
ls *.tar.Z | cut -d"." -f1 >> patch_order
15) 現在是解壓所有單個補丁包的時候了,因為它們還是壓縮格式的。
如果你用Solaris 7,你可以用unzip一次解壓一個文件:
unzip 108723.zip
討厭的是,你不能用“unzip *.zip“,因為unzip不能這樣工作,為了避免多次地輸入unzi
p,你可以用下面的UNIX命令讓unzip為你解壓所有的東西:
ls *.zip | xargs -n1 unzip
如果用的是Solaris 2.6或更低的,鍵入:
uncompress *.tar.Z
現在你必須用tar分離出單個的補丁,你可以用以下命令一次處理一個文件:
tar -xvf 108723.tar
討厭的是,你不能用“tar -xvf *.tar“,因為tar不能這樣工作,為了避免多次地
輸入tar,你可以用下面的UNIX命令讓tar為你分離所有的東西:
ls *.zip | xargs -n1 tar -xvf
16) 到現在所有的補丁都准備好了,關閉計算機:
/usr/sbin/shutdown -y -g0 -i0
啟到到單用戶模式,對sparc: boot -s
對x86, 啟動時, 鍵入:b -s
系統引導後,在提示符後輸入root口令後,鍵入:mountall
來mount所有的文件系統。
然後輸入:
cd /var/tmp/patch/*Recommended
進到保存所有補丁的目錄,現在你可以鍵入以下命令來安裝“所有”的補丁了:
./install_cluster
跟著提示做就行了。如果這是個Solaris 2.5.1或是個Solaris 2.6的系統,可以走
開搞杯咖啡喝喝,因為要花點時間的。不要太擔心補丁安裝過程中的錯誤,很多時候出現錯
誤是因為你沒有安裝一個特定的軟件或已經打了某個補丁。
打完補丁後,關機重啟,輸入:
/usr/sbin/shutdown -y -g0 -i6
3.1.9 高級指南
3.1.9.1如何防止在堆棧中執行代碼?
入侵者常常使用的一種利用系統漏洞的方式是堆棧溢出,他們在堆棧裡巧妙地插入一段代碼
,利用它們的溢出來執行,以獲得對系統的某種權限。
要讓你的系統在堆棧緩沖溢出攻擊中更不易受侵害,你可以在/etc/system裡加上如下語句:
set noexec_user_stack=1
set noexec_user_stack_log =1
第一句可以防止在堆棧中執行插入的代碼,第二句則是在入侵者想運行exploit的時候會做記
錄,一旦重啟機器,這些改變就會生效。如果這不是一個你可以關閉的系統,那麼你用adb來
改變一個運行中的系統的參數也是可能的。
當然會有些合法使用可執行堆棧的程序在你做出如上改變後而不能正常運行。所幸的是這樣
的程序的並不多,我們所知的就只有GNU ada 編譯器。
3.1.9.2 ARP
有關ARP協議的細節,在這裡我們就不再詳細介紹了。對於sun的系統,核心默認的ARP表過期
的時間是5分鐘,並且可以調節.另外一張表是ip層的路由表,它和arp表配合記錄動態路由信
息,20分鐘過期,最後一個特性是”無償ARP” ,即系統廣播自己的硬件地址。這個特性用來
診斷是否存在相同的硬件地址,另外也用來生成硬件地址的變動通知。
1)ARP攻擊
針對ARP的攻擊主要有兩種,一種是DOS,一種是Spoof。ARP欺騙往往應用於一個內部網絡,我
們可以用它來擴大一個已經存在的網絡安全漏洞。
如果你可以入侵一個子網內的機器,其它的機器安全也將受到ARP欺騙的威脅。同樣,利用A
PR的DOS甚至能使整個子網癱瘓。
2)對ARP攻擊的防護
防止ARP攻擊是比較困難的,修改協議也是不大可能。但是有一些工作是可以提高本地網絡的
安全性。
首先,你要知道,如果一個錯誤的記錄被插入ARP或者IP route表,可以用兩種方式來刪除:
a. 使用arp -d host_entry
b. 自動過期,由系統刪除
這樣,可以采用以下的一些方法:
1). 減少過期時間
#ndd -set /dev/arp arp_cleanup_interval 60000
#ndd -set /dev/ip ip_ire_flush_interval 60000
60000=60000毫秒 默認是300000
加快過期時間,並不能避免攻擊,但是使得攻擊更加困難,帶來的影響是在網絡中會大量的
出現ARP請求和回復,請不要在繁忙的網絡上使用。
2). 建立靜態ARP表
這是一種很有效的方法,而且對系統影響不大。缺點是破壞了動態ARP協議。可以建立如下的
文件:
test.cnns.net 08:00:20:ba:a1:f2
user. cnns.net 08:00:20:ee:de:1f
使用arp -f filename加載進去,這樣的ARP映射將不會過期和被新的ARP數據刷新,除非使用
arp -d才能刪除。但是一旦合法主機的網卡硬件地址改變,就必須手工刷新這個arp文件。這
個方法,不適合於經常變動的網絡環境。
3).禁止ARP
可以通過ifconfig interface -arp 完全禁止ARP,這樣,網卡不會發送ARP和接受ARP包。但
是使用前提是使用靜態的ARP表,如果不在apr表中的計算機 ,將不能通信。這個方法不適用
與大多數網絡環境,因為這增加了網絡管理的成本。但是對小規模的安全網絡來說,還是有
效和可行的。
3)IP Forwarding (IP轉發)
IP是用來傳輸數據的底層協議。IP 轉發是在不同網卡之間路由包數據的過程。一般是用路由
器來實現,但是擁有多網絡接口的主機也可以實現。當有兩個網絡接口的時候,Solairs系統
默認打開ip轉發。
1) 關閉IP轉發
對於多宿主主機,存在可能的安全問題是,攻擊者可能通過ip轉發的方式訪問到私有網絡。
在solaisr系統中,包轉發能很的容易關閉。簡單的生成一個文件 /etc/notrouter,就能在
下次啟動的時候關閉ip轉發。另外通過ndd命令也能在系統運行的時候關閉ip轉發:
#ndd -set /dev/ip ip_forwarding 0
2) 嚴格限定多主宿主機
如果是多宿主機,還可以加上更嚴格的限定防止ip spoof的攻擊
#ndd -set /dev/ip ip_strict_dst_multihoning 1
默認是關閉的(值為0)
3) 轉發包廣播
由於在轉發狀態下默認是允許的,為了防止被用來實施smurf攻擊,關閉這一特性。 (參見c
ert-98.01)
#ndd -set /dev/ip ip-forward_directed_broadcasts 0
4)路由
路由的過程就是檢查路由信息,從而決定如何從哪個接口傳輸數據包的過程。即使一個桌面
系統,也要有路由設置。路由表需要實時的升級。現在有多種路由協議可以用來路由數據。
Solaris系統使用in.routed守護程序支持RIP version 1,使用in.rdisc守護進程支持ICMP路
由更新。當solairs系統配置成為一個路由設備來轉發數據包的時候,它通過上面的兩種方式
動態更新路由信息。
5)攻擊
有多種方法能威脅動態路由協議。攻擊者能偽造虛假的路由更新信息發送過來,從而達到DO
S的效果;同樣的方法,還能使數據報文轉發到其他的網絡上,使攻擊者能監聽數據。
默認的solairs系統使用系統守護程序動態管理路由信息。靜態路由很好的防止路由信息被遠
程動態改變。使用/etc/defaultrouter來設置本地子網的路由。使用route命令來設置其他路
由信息。
但是對於一個簡單網絡來說,使用靜態路由是合適的,一旦網絡中有較多的路由設備,必須
使用動態路由。Solairs系統將來也會繼續支持動態路由協議。
l 轉發源路由包
源路由包中包含了了指定數據如何路由的信息。因此攻擊者可能使用源路由包繞過某些特定
的路由器和防火牆設備,也可能用來避開一個已知的IDS系統的監控范圍。在大多數solairs
的應用系統上,是不需要這個特性的。由於solairs在打開ip轉發以後默認支持源路由轉發,
所以我們必須手動關閉它:
#ndd -set /dev/ip ip_forward_src_routed 0
6)ICMP
ICMP:網絡控制信息協議。下面討論在IP驅動上配置solaris的ICMP特性。
1) 廣播:
ICMP廣播經常會帶來麻煩,這裡有一條原則來防止廣播風暴-控制ICMP的錯誤信息不被生成
。為來防止攻擊者利用ICMP實施DOS攻擊,最好禁止本地網絡對ICMP廣播的響應。Solairs系
統能調節三種ICMP廣播的參數。
2)響應Echo廣播:
Echo廣播通常用來診斷網絡主機的存活情況,一旦主機收到一個對廣播地址的echo請求,默
認情況下所有系統會回復這個廣播要求。當有人惡意定制過量的echo包,系統中的流量將大
為增加。因此我們可以關閉對echo廣播的響應
#ndd -set /dev/ip ip_respond_to_echo_boadcast 0
3)響應時間戳廣播
時間戳通常用來同步兩個不同系統的時鐘,但是系統沒有必要回復對廣播地址發送的時間戳
請求,所以我們可以關閉這種回應。
#ndd -set /dev/ip ip_respond_to_timestamp_broadcast 0
4)地址掩碼廣播
地址掩碼請求被用來確定本地掩碼,通常是網絡中無盤工作站在啟動的時候發送。用下面的
命令能禁止對這樣請求的應答
#ndd -set /dev/ip ip_respind_to_address_mask_broadcast 0
7)重定向錯誤
1)重定向錯誤
通常是路由器用來通知主機使用另一個路由器來傳輸數據的指示報文。報文重指定的路由器
必須和發送路由器一樣連接同一個子網,而收到報文的主機必須在自己的路由表裡新增一條
到那個子網的路由。不像ARP的包,這個路由不會過期也不會自動刪除。很多系統檢測這樣的
報文用來發現錯誤和潛在的問題,從而優先更改自己的路由表。
2)接受重定向錯誤
一個攻擊者能偽造重定向錯誤的報文從而給目標主機裝載一個新的路由,而這個路由也許更
本就是錯誤的,這樣主機就不會和一些特定的主機或網絡通信,這是一種DOS攻擊。雖然重定
向報文本身有一些校驗規則,但是這些規則能很容易的被欺騙。而且目前存在大量的工具來
達到這個目的。大多數只有一條默認路由主機系統是不需要理會這種報文的,因此我們可以
使用ndd命令忽略ICMP重定向錯誤報文。(solairs默認是不忽略的)
#ndd -set /dev/ip ip_ignore_redirect 1
3)發送重定向錯誤報文
只有路由器才需要重定向錯誤,任何主機即使是多宿主主機也不需要發送這種報文,因此我
們可以使用ndd來禁止本機發送錯誤重定向報文。
#ndd -set /dev/ip ip_send_redirects 0
4)時間戳響應
就像前面提到的,時間戳廣播報文在大多數環境下是不需要的。而solaris系統還能夠完全不
接受這種報文。
#ndd -set /dev/ip ip_respond_to_timestamp 0
關閉這個特性以後,有些使用rdate系統命令的unix主機將不能再同步時鐘。但是solaris 2
.6和7使用更好的時鐘同步方式-NTP(網絡時間協議),請參見xntpd的幫助。
8)SYN_flood攻擊
TCP-SYN flood又稱半開式連接攻擊,每當我們進行一次標准的TCP連接(如WWW浏覽,下載文
件等)會有一個一個三次握手的過程,首先是請求方向服務方發送一個SYN消息,服務方收到
SYN後,會向請求方回送一個SYN-ACK表示確認,當請求方收到SYN-ACK後則再次向服務方發送
一個ACK消息,一次成功的TCP連接由此就建立,可以進行後續工作了,如圖所示:
請求方 服務方
---------------------> SYN
SYN-ACK <----------------
----------------------> ACK
而TCP-SYN flood在它的實現過程中只有前兩個步驟,當服務方收到請求方的SYN並回送SYN-
ACK確認消息後, 請求方由於采用源地址欺騙等手段,致使服務方得不到ACK回應,這樣,服
務方會在一定時間處於等待接收請求方ACK消息的狀態,一台服務
Copyright © Linux教程網 All Rights Reserved