本文首先介紹Solaris的基本安全設置。
1.物理安全
首先要進行Solaris的OpenBoot安全設置。
通過OpenBoot,幾乎可以從任何連接SCSI設備上引導。也可以修改OpenBoot變量,而這些影響到整個Unix的引導。
OpenBoot的三種安全級別如下:
(1)None:可以執行任何命令。
(2)Command:除boot和go之外的命令執行需要口令,可以從默認設備上引導。
(3)Full:除go之外的命令執行需要口令。
注意在full模式下,如果遺忘了OpenBoot口令,只有用root登錄后用eeprom才能修改口令。
如果root口令也遺忘了,只能更換EPROM了。
推薦至少將OpenBoot設為Command模式。在嚴格限制安全條件時規定Full模式,但在這時需要牢記OpenBoot口令,否則會造成很大的麻煩。
2.文件系統安全
(1)文件和目錄的權限。
UNIX系統中的文件權限,是指對文件(或者目錄)的訪問權限,包括對文件和目錄的讀、寫和執行。我們要注意這三種權限在文件與目錄上的不同作用。
請檢查自己的Solads服務器的下列文件權限是否正確:
●/etc下的所有文件:/etc中的文件不需要可寫,應設為只讀,chmodg-w/etc/*。
●/etc/inetd.conf:所有者為root,訪問權限是可讀寫。其他用戶無任何權限。
●/etc/services:確保文件所有者是root,可讀寫。其他人可讀。
對于root用戶新創建的文件與目錄,注意在沒有必要的情況下,一定要使任何一個用戶沒有訪問的權限。超級用戶的權限最好設置為077。如果某些文件或者目錄需要被別人訪問,生成后再修改權限就行了。麻煩一點總比被攻擊好。
(2)SetUID與SetGID權限。
在Solaris中,文件除了讀、寫和執行權限外,還有一些特殊權限,SetUID和SetGID是其中的一類。它與Solaris系統的安全關系緊密。SetUID是指設置程序的有效的執行用戶身份(UID)為該文件的主人,而不是調用該程序的進程的uid。SetGID與之類似。SetUID和 SetGID存在于主人和屬組的執行權限的位置上。
這種權限怎么用?舉個例子來說,假如某一命令(程序)的主人是root用戶,并且該文件有SetUID屬性,但是該文件的讀、寫、執行權限的屬性表明普通用戶userl可以執行該命令,那么就表示:當userl執行該命令時,他具有root的執行身份,并獲得相應的權限。一旦該命令執行完成,root身份也隨之消失。
有些文件是不能有SetUID權限的,比如cat、mole、vi、tail等可以起顯示和編輯作用的命令。如果有的話會產生什么效果?就會讓普通用戶看到他本不應該看到的文件,如/etc/shadow,這里存放著所有用戶加密后的口令,一旦黑客得到root的口令加密串,然后利用一臺性能好的計算機可以在幾天時間內就把root口令算出來,從而非法提升權限。
如果/Bin/ksh這樣的外殼程序有SetUID權限就更不得了,普通用戶執行后就馬上成為超級用戶了。
(3)查找特定權限的文件。
在黑客攻擊了系統之后,往往會修改一些文件與目錄的屬性,來達到留后門和其他的目的,我們可以通過下列的手段來找出這些文件,消除隱患。
在當前目錄及其子目錄查找所有的SetUID文件:
#find/ -perm -4000 -prin
在當前目錄及其子目錄查找SetGID的文件:
#find/ -perm -2000 -print
在當前目錄及其子目錄查找所有用戶都可寫的文件:
#find/ -perm -O+W -print
查找屬于某個用戶的文件,這在確定一個賬戶被非法使用后是很有用的:
#find/ -user xyd -print
使用這個命令可以列出系統中所有屬主是用戶xyd的文件。
(4)賬號與密碼。
黑客要非法地訪問一臺計算機,最簡單的辦法是盜取一個合法的賬號,這樣就可以令人不易察覺地使用系統。在Solaris系統中默認有不少賬號安裝,也會建立新的個人用戶賬號,系統管理員應對所有的賬號進行安全保護,而不能只防護那些重要的賬號,如root。
無用和長期不用的賬號對系統來說是一種負擔,也容易為黑客提供入侵的途徑。為了整體的安全,應關閉這些賬號,直接在/etc/passwd和/etc/group中把相應的行注釋掉就可以了。在默認設置下,系統中有這些用戶與組需要關閉:
需要關閉的用戶:
daemon、bin、sys、adm、lp、uucp、nuucp、listen、nobody、nobody4、noaccess。
需要關閉的組:
sysadmin(14)、sys(3)。
在Solaris中可以使用/etc/default/passwd文件來保護賬號的安全,下面給出了一些推薦值:
●MINWEEKS=1 #最短改變口令時間為1周之后;
●MAXWEEKS=4 #最長改變口令時間為4周之內;
●WARNWEEKS=3 #3周的時間給出密碼過時警告:
●PASSLENGTH=6 #最短口令長度為6。
密碼的設置應按照一定的規則。在Solaris系統中,為了強制用戶使用合格的口令,用戶修改口令時默認要求必須最少有6個字符,而且至少包括一個數字或者特殊字符。不過要注意在以root的身份進行密碼修改時是不受這個限制的。
下面是在進行密碼設置時推薦的一些注意事項:
●密碼至少應有6個字符(在/etc/default/passwd中定義);
●密碼至少應該包含2個英文字母及一個數字或特殊符號;
●密碼應與用戶名完全不同,且不能使用原有名稱的變化(如反序、位移等,因為系統在做比較時忽略大小寫);
●新舊密碼至少有3個字符不相同(因為系統在做比較時忽略大小寫)。
(5)用passwd命令設置賬號。
利用passwd命令,除了可以修改口令外,還可以進行一些口令方面的參數設置:
●-s:列出口令的參數;
●-1:root鎖定一個用戶;
●-d:root刪除一個用戶的口令;
●-n:root設置一個用戶的最短修改密碼時間;
●-x:root設置一個用戶的最長修改密碼時間;
●-w:root設置一個用戶的修改密碼警告時間。
(6)設置賬號組信息。
在Solaris中,用戶在/etc,passwd文件中規定的組是主組,他還可以同時屬于其他組。這個屬性在/etc/group中可以查到。下面是有關用戶組的一些命令:
●newgrp:切換成新的用戶組;
●groups:顯示所屬的用戶組;
●id:顯示用戶的身份,包括UID、GID、用戶組等信息。
(7)su命令。
切換用戶的命令su可以使一個用戶切換為另一個用戶而不必退出。在使用時,系統會提示輸入將要切換為的用戶密碼。按“Ctrl”+D或exit返回。
可以使用/etc/default/su文件管理su的參數:
●SULOG=/var/adm/sulog#10g文件記錄:
●PATH=/usr/bin:#新用戶默認PATH:
●SUPATH=/usr/sbin:/usr/bin;
●SYSLOG=YES#記錄log。
如果可能的話,使用sudo代替su命令,這樣可以減少特權命令被濫用的情況。
3.root賬號的安全
root賬號是黑客攻擊的最終目標,有了root賬號,黑客可以不受限制地訪問系統中的所有文件和資源,也可以成為任何一個用戶。
在/etc/default/login中添加Console=/dev/console即可限制root只能在控制臺上直接登錄。
4.cron安全
系統中,在很多時候都需要不斷重復一些命令,例如某公司每周一自動向員工報告上一周公司的活動情況,這時就需要使用cron命令來完成任務。cron常有的安全問題有:
(1)沒有充分屏蔽cron運行的程序。root用戶的cron中運行的腳本和程序不應被其他用戶讀到,更不能被修改。
(2)cron的PATH不安全。存在不安全和不確定的PATH。在/etc/default/cron中和程序本身的PATH都不應該有不安全的PATH,這會導致黑客在這些PATH中添加自己的程序,與cron所要執行的命令名稱相同;同樣地,如果cron的PATH中存在著”~”、“.”等不確定的PATH,也可以為類似的攻擊手段留下可能。要檢查crontab,不使其中留下這樣的路徑。
(3)用戶的crontab放在其他用戶可以看到的目錄。這會使其他用戶查看并分析這些 cron的條目,進行對相應漏洞的攻擊。
(4)cron.allow與cron.deny。在進行cron設置的時候,應該使用root權限對/etc/cr- on.d/cron.allow/etc/cron.d/cron.deny進行限制,允許和禁止相應的用戶使用crontab命令。
5.文件與進程檢查工具fuser與lsof
fuser是系統中自帶的命令,它可以查找出哪個進程在使用文件。它可以用來在刪除或者重命名文件之前檢查是否有某個進程打開了這個文件,并且在不能卸載一個文件系統的時候,作為查找故障的工具查看是哪些進程打開了這個文件。
fuser的模式:
進程的當前工作目錄;
進程的根目錄(裝入點目錄);
打開的普通文件;
內存映射文件;
程序的代碼;
程序的控制終端;
lsof列出系統中所有打開的文件及其被哪些進程所打開,由此查出被可疑進程打開的文件。
lsof可以列出UNIX系統中的所有打開的文件,并且顯示它們是被哪些進程打開的。這個工具可以用來幫助確定黑客或者他們的進程是否在讀寫他們本不應該訪問的文件。使用“lsof”命令管理員可以查看進程、進程UID(包括sniffer、IRC、login shell)、網絡連接和所有當前被打開的文件(如顯示sniffer的log文件、工作目錄等信息)。
6.安全檢查工具COPS
COPS是一個安全性的軟件包,它可以在系統上檢查一些已知的缺陷,并且向系統管理員報告這些缺陷。COPS包含如下這樣一些在系統中檢查已知缺陷的工具包:
●dir.chk、file.chk:掃描所有用戶可寫的系統文件和目錄;
●dev.chk:掃描系統設備目錄;
●home.chk、user.chk:檢查所有用戶可寫的用戶主目錄;
●root.chk:掃描所有用戶可寫的root的登錄文件、路徑、umask和hosts.equiv;
●suid.chk:掃描系統中的新的SetUID程序;
在使用COPS時,最好是定期運行它。至少一周運行一次,在重要的服務器和經常改變配置的服務器上最好每天都運行它,甚至每天運行兩次。COPS可以檢查到兩次運行之間文件和目錄權限發生的變化。了解到這些變化以后,系統管理員就可以有的放矢地找出漏洞。
7.安全檢查工具,Tiger
類似于COPS,Tiger也是一個系統安全性的檢查工具。它可以檢查系統內一些已經存在的漏洞并向系統管理員報告。它使用時比較簡單,只要解壓縮包后運行就可以了。
下面介紹Solaris的網絡安全設置。
UNIX系統的網絡服務和網絡接口是用來與其他計算機進行通信,訪問網絡的途徑。如果對網絡服務與接口的配置不當,會造成系統的安全性受到損害。
UNIX系統在安裝時會激活所有的網絡服務(如Telnet、FTP、rlogin等),并處在隨時可以運行的狀態。每一個開放的網絡服務就像一扇開著的門,為黑客提供了攻擊的可能。在進行網絡安全設置的時候,有一個原則就是禁用不需要的服務。在系統不需要Telnet時(可以用ssh來進行遠程管理)禁止它,如果不需要其他rlogin或rsh等服務,也禁止它。
8.停止/etc中不必要的服務
系統在啟動時會在/etc/rc2.d和/etc/rc3.d目錄下尋找以“S”開頭的文件并執行,在關閉時會查找“K”開頭的文件關閉相應進程。如果需要停止某些程序在啟動時運行,只要把開頭的“S”改為其他字母即可,如“s”,也要把相應的“K”改為“k”。下面推薦關閉的一些程序和它們所對應的啟動文件。
(1)使電源管理無效:/etc/rc2.d/S85power。
(2)停止DMI Service./etc/rc2.d/K77dmi:/etc/rc3.d/S77dmi;
(3)使Asynchronous PPP無效:/etc/rc2.d/S47asppp。
(4)停止BD Stream配置:/etc/rc2.d/S89bdconfig。
(5)使UUCP臨時文件清除無效:/etc/rc2.d/S70uucp。
(6)停止AutoFS/MountD:/etc/rc2.d/S74autofs。
(7)停止系統重配置:/etc/rc2.d/S30sysid。Net及/etc/rc2.d/S71sysid。Sys。
8)停止JumpStart/AutInstaU。/etc/rc2.d/S72autoinstall。
(9)使Cache File System無效:/etc/rc2.d/S93cacheos。Finish及/etc/rc2.d/S73cachefs。 Daemon。
(10)使Preserve Service無效:/etc/rc2.d/S80PRESERVE。
(11)使Network Time Protocol無效:/etc/rc2.d/S74xntpd。
(12)使CDE程序無效(除非要使用圖形控制臺):/etc/rc2.d/S99dtlogin。(恢復時使用命令“/usr/dt/bin/dtconfig-e”)
(13)停止名字服務緩沖守護程序服務:/etc/rc2.d/S76nscd。
(14)使打印服務無效(除非有本地打印機):/etc/rc2.d/S80lp及/etc/rc2.d/S80spc。
(15)使SNMP無效(不使用網管時):/etc/rc2.d/K76snmpdx及/etc/rc3.d/S76snmodx。
(16)停止NFS服務:/etc/rc2.d/S73nfs,Client:/etc/rc2.d/K60nfs,server;/etc/rc3.d/S15nfs, server。
(17)使Sendmail守護程序無效(非E-mail服務器):/etc/rc2.d/S88sendmail。
(18)停止其他不必要的服務:在root的crontab中加入,用以處理系統郵件隊列:
0****/usr/lib/sendmail-q
只保留/etc/inetd.conf中需要服務,只須把不需要的服務前加“#”號注釋即可。
9.網絡監聽與snoop
網絡監聽是黑客們常用的一種方法。當成功地登錄進一臺網絡上的主機,并取得了這臺主機的超級用戶的權限之后,往往要擴大戰果,嘗試登錄或者奪取網絡中其他主機的控制權。而網絡監聽則是一種最簡單,而且最有效的方法,它常常能輕易地獲得用其他方法很難獲得的信息。
在網絡上,監聽效果最好的地方是在網關、路由器、防火墻一類的設備處,通常由網管員來操作。使用最方便的是在一個以太網中的任何一臺上網的主機上,這是大多數黑客的做法。snoop是Solaris中特有的程序,可以實現監聽的功能。它是一個很有用的診斷工具,只有root才能使用它。下面是snoop使用時的一些參數:
*snoop直接監聽所有的數據包;
#snoop host bjserver捕獲所有與bjserver計算機有關的數據包;
#snoop-v host bjserver port 23捕獲所有與bjserver有關的Telnet包。
r*命令存在一些安全問題。我們常說的r水命令包括rlogin,rsh,rcp和rdist,以r開頭表示遠程。這幾個命令都必須在遠程系統上運行shell。r命令是為了方便運行和使用遠程系統而創建的。通過使用rhost文件,用戶就可以在遠程系統上登錄或者運行命令,而不用提供口令。
r*命令的弱點如下:
(1)使用.rhosts文件易造成對不合適計算機的錯誤信任,導致被黑客利用。
(2)在沒有.rhosts文件的情況下,用戶通過r*命令來訪問遠程系統時會需要輸入口令,整個過程沒有加密,在網絡上會被監聽而泄露密碼。
3)所有的r*命令的全部會話過程都是加密的,同樣面臨被監聽的問題。
強烈建議不使用r*命令,它們的功能可以由ssh等程序替代。
10.Telnet命令的安全問題
Telnet雖然不像r*命令采用信任模式,但是它傳遞信息采用明文方式容易造成信息泄漏。同樣建議采用ssh來替代Telnet。
11.Ndd
ndd系列命令是Solaris系統中獨有的,可以檢測或者設置網絡設備驅動程序的特性。在這些可以更改的設置中有不少是與安全性有關的,管理員可以通過ndd設置IP和TCP,以及其他網絡設備的特性來提高系統安全性和性能。
(1)ndd:禁止IP轉發。#ndd-set/dev/ip ip_forwarding 0。
對于多宿主主機,存在可能的安全問題是,攻擊者可能通過II)轉發的方式訪問到私有網絡。在Solaisr系統中,也可以簡單地生成一個文件/etc/notrouter,就能在下次啟動的時候關閉IP轉發。
(2)ndd:不轉發定向廣播。#ndd -set/dev/ip ip_forward_directed_broadcasts 0。
由于在轉發狀態下默認是允許的,為了防止被用來實施smurf攻擊,關閉這一特性。一個簡單的smurf攻擊通過使用將回復地址設置成受害網絡的廣播地址的ICMP應答請求(ping)數據包來淹沒受害主機的方式進行,最終導致該網絡的所有主機都對此ICMP應答請求做出答復,導致網絡阻塞,比ping of death洪水的流量高出一或兩個數量級。更加復雜的smurf將源地址改為第三方的受害者,最終導致第三方雪崩。防御方法:為了防止黑客利用用戶的網絡攻擊他人,關閉外部路由器或防火墻的廣播地址特性。為防止被攻擊,在防火墻上設置規則,丟棄掉ICMP包。
(3)ndd:限定多宿主機。#ndd-set/dev/ip ip_strict_dst_multihoming 1。
如果是多宿主主機,為了防止IP spoof的攻擊,關閉這一特性。
(4)ndd:忽略重定向包。#ndd -set/dev/ip ip_ignore_redirect 1。
一個攻擊者能偽造重定向錯誤的報文從而給目標主機裝載一個新的路由,而這個路由也許根本就是錯誤的,這樣主機就不會和一些特定的主機或網絡通信,這是一種DDoS攻擊(Solairs默認是不忽略的)。雖然重定向報文本身有一些校驗規則,但是這些規則能很容易地被欺騙,而且目前存在大量的工具來達到這個目的。大多數只有一條默認路由的主機系統是不需要理會這種報文的。
(5)ndd:不發送重定向包。#ndd -set/dev/ip ip_send_redirects 0。
只有路由器才需要重定向錯誤,任何主機即使是多宿主主機也不需要發送這種報文。
(6)ndd.關閉時間戳響應。#ndd -set/dev/ip ip_respond to_timestamp 0。
時間戳廣播報文在大多數環境下是不需要的。關閉這個特性以后,有些使用rdate系統命令的UNIX主機將不能再同步時鐘。但是Solaris 2.6和7使用更好的時鐘同步方式:NTP(網絡時間協議)。
(7)ndd:不響應Echo廣播。#ndd -set/dev/ip ip_respond_to_echo_boadcast 0。
echo廣播通常用來診斷網絡主機的存活情況,一旦主機收到一個對廣播地址的echo請求,默認情況下所有系統會回復這個廣播要求。當有人惡意定制過量的echo包,系統中的流量將大為增加。
(8)ndd:不響應地址掩碼廣播。#ndd -set/dev/ip ip_respond_to_address_mask_br- oadcast 0。
地址掩碼請求被用來確定本地掩碼,通常是網絡中無盤工作站在啟動的時候發送。
(9)ndd:不轉發設置源路由包。#ndd -set/dev/ipip_forward src routed 0。
源路由包中包含了指定數據如何路由的信息。因此攻擊者可能使用源路由包繞過某些特定的路由器和防火墻設備,也可能用來避開一個已知的IDS系統的監控范圍。Solairs在打開IP轉發以后默認支持源路由轉發,在大多數Solairs的應用系統上,是不需要這個特性的。
(10)ndd:加快ARP表過期時間。#ndd -set/dev/ip_ip_ire_flush_interval 60000;#n-ddset/dev/arp arp_cleanup_interval 60000。
加快過期時間,并不能避免攻擊,但是使得攻擊更加困難,帶來的影響是在網絡中會大量出現ARP請求和回復,請不要在繁忙的網絡上使用。或者使用靜態ARP表,禁止ARP。
(11)ndd:提高未連接隊列的大小。#ndd -set/dev/tcp tcp_conn_req_max_q0 4096。
TCP-SYN flood又稱半開式連接攻擊,提高這個隊列的大小可以減輕TCP-SYN flood的攻擊。
對于繁忙的服務器也應該提高這個隊列。
(12)ndd:提高已連接隊列的大小。#ndd -set/dev/tcp tcp_conn_req_max_q 1024。
提高隊列的大小和減短連接時間可以減緩連接耗盡攻擊。連接耗盡攻擊和SYN flood攻擊不同,連接耗盡攻擊不太常見。因為這種攻擊必須使用真實IP,攻擊的目標是已連接隊列。許多系統有一個同時連接的上限,取決于核心參數和系統內存情況。
我們可以通過優化系統核心和增加內存來緩解,但這些不是根本的方法。因為攻擊者可能同時調動多臺機器發起攻擊。當然,我們可以在發現攻擊后,在防火墻或路由器上拒絕這些IP來源的連接。
如果不通過網絡設備,僅僅通過調節系統參數來緩解攻擊,一方面,可以調節Web
Server,如apache的timeout參數,減短連接保持時間,另一方面,我們可以將核心以連接隊列參數增大(默認是128)。作為通常的Web服務器,這個上限值很難達到,因為http的連接是典型的短時連接。但是一個攻擊者可能快速發送大量的連接請求,同時保持連接,這樣正常訪問者的連接就可能被服務器拒絕。
以上的方法能阻止大多數連接耗盡的攻擊企圖,除非攻擊者調動更多的資源,發動大規模的DDoS,但這樣會使攻擊者更容易暴露。